[Mesa-dev] [PATCH 020/140] amdgpu/addrlib: add ADDR_ANALYSIS_ASSUME

Marek Olšák maraeo at gmail.com
Mon Mar 20 22:42:30 UTC 2017


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

It helps fix analysis warnings in MSC.
---
 src/amd/addrlib/core/addrcommon.h   | 26 ++++++++++++++++++--------
 src/amd/addrlib/r800/egbaddrlib.cpp |  2 +-
 src/amd/addrlib/r800/siaddrlib.cpp  |  2 +-
 3 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/src/amd/addrlib/core/addrcommon.h b/src/amd/addrlib/core/addrcommon.h
index 60b3d81..019ebd0 100644
--- a/src/amd/addrlib/core/addrcommon.h
+++ b/src/amd/addrlib/core/addrcommon.h
@@ -152,30 +152,40 @@ union ADDR_CONFIG_FLAGS
         #define ADDR_DBG_BREAK()    { __debugbreak(); }
     #endif
 #else
     #define ADDR_DBG_BREAK()
 #endif
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // Debug assertions used in AddrLib
 ///////////////////////////////////////////////////////////////////////////////////////////////////
+#if defined(_WIN32) && (_MSC_VER >= 1400)
+    #define ADDR_ANALYSIS_ASSUME(expr) __analysis_assume(expr)
+#else
+    #define ADDR_ANALYSIS_ASSUME(expr) do { } while (0)
+#endif
+
 #if DEBUG
-#define ADDR_ASSERT(__e) if ( !((__e) ? TRUE : FALSE)) { ADDR_DBG_BREAK(); }
-#define ADDR_ASSERT_ALWAYS() ADDR_DBG_BREAK()
-#define ADDR_UNHANDLED_CASE() ADDR_ASSERT(!"Unhandled case")
-#define ADDR_NOT_IMPLEMENTED() ADDR_ASSERT(!"Not implemented");
+    #define ADDR_ASSERT(__e)                                \
+        do {                                                    \
+            ADDR_ANALYSIS_ASSUME(__e);                          \
+            if ( !((__e) ? TRUE : FALSE)) { ADDR_DBG_BREAK(); } \
+        } while (0)
+    #define ADDR_ASSERT_ALWAYS() ADDR_DBG_BREAK()
+    #define ADDR_UNHANDLED_CASE() ADDR_ASSERT(!"Unhandled case")
+    #define ADDR_NOT_IMPLEMENTED() ADDR_ASSERT(!"Not implemented");
 #else //DEBUG
-#define ADDR_ASSERT(__e)
-#define ADDR_ASSERT_ALWAYS()
-#define ADDR_UNHANDLED_CASE()
-#define ADDR_NOT_IMPLEMENTED()
+    #define ADDR_ASSERT(__e) ADDR_ANALYSIS_ASSUME(__e)
+    #define ADDR_ASSERT_ALWAYS()
+    #define ADDR_UNHANDLED_CASE()
+    #define ADDR_NOT_IMPLEMENTED()
 #endif //DEBUG
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // Debug print macro from legacy address library
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 #if DEBUG
 
 #define ADDR_PRNT(a)    AddrObject::DebugPrint a
 
diff --git a/src/amd/addrlib/r800/egbaddrlib.cpp b/src/amd/addrlib/r800/egbaddrlib.cpp
index 03ae41f..64c0c62 100644
--- a/src/amd/addrlib/r800/egbaddrlib.cpp
+++ b/src/amd/addrlib/r800/egbaddrlib.cpp
@@ -4570,21 +4570,21 @@ UINT_64 EgBasedAddrLib::HwlGetSizeAdjustmentMicroTiled(
 
     // Logical slice: pitch * height * bpp * numSamples (no 1D MSAA so actually numSamples == 1)
     logicalSliceSize = BITS_TO_BYTES(static_cast<UINT_64>(pitch) * height * bpp * numSamples);
 
     // Physical slice: multiplied by thickness
     physicalSliceSize =  logicalSliceSize * thickness;
 
     //
     // R800 will always pad physical slice size to baseAlign which is pipe_interleave_bytes
     //
-    ADDR_ASSERT((physicalSliceSize % baseAlign) == 0)
+    ADDR_ASSERT((physicalSliceSize % baseAlign) == 0);
 
     return logicalSliceSize;
 }
 
 /**
 ***************************************************************************************************
 *   EgBasedAddrLib::HwlStereoCheckRightOffsetPadding
 *
 *   @brief
 *       check if the height needs extra padding for stereo right eye offset, to avoid swizzling
diff --git a/src/amd/addrlib/r800/siaddrlib.cpp b/src/amd/addrlib/r800/siaddrlib.cpp
index 296391a..5d725e6 100644
--- a/src/amd/addrlib/r800/siaddrlib.cpp
+++ b/src/amd/addrlib/r800/siaddrlib.cpp
@@ -2144,21 +2144,21 @@ UINT_32 SiAddrLib::HwlPreAdjustBank(
     if (((pTileInfo->pipeConfig == ADDR_PIPECFG_P4_32x32) ||
         (pTileInfo->pipeConfig == ADDR_PIPECFG_P8_32x64_32x32)) && (pTileInfo->bankWidth == 1))
     {
         UINT_32 bankBit0 = _BIT(bank, 0);
         UINT_32 x4 = _BIT(tileX, 1);
         UINT_32 x5 = _BIT(tileX, 2);
 
         bankBit0 = bankBit0 ^ x4 ^ x5;
         bank |= bankBit0;
 
-        ADDR_ASSERT(pTileInfo->macroAspectRatio > 1)
+        ADDR_ASSERT(pTileInfo->macroAspectRatio > 1);
     }
 
     return bank;
 }
 
 /**
 ***************************************************************************************************
 *   SiAddrLib::HwlComputeSurfaceInfo
 *
 *   @brief
-- 
2.7.4



More information about the mesa-dev mailing list