amdgpu/addrlib: add ADDR_ANALYSIS_ASSUME
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 27 Jul 2016 17:13:57 +0000 (19:13 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 30 Mar 2017 12:44:33 +0000 (14:44 +0200)
It helps fix analysis warnings in MSC.

src/amd/addrlib/core/addrcommon.h
src/amd/addrlib/r800/egbaddrlib.cpp
src/amd/addrlib/r800/siaddrlib.cpp

index 60b3d818f72da1177d3aac16d9b5159163ed8b3b..019ebd07a2984df39ae7ed4c43fd249a0b85ef3e 100644 (file)
@@ -159,16 +159,26 @@ union ADDR_CONFIG_FLAGS
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // 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
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
index 03ae41f067794d78197109e49abceab0386f341d..64c0c6225f5e5dbfe37ccac915537a2ed8d884c2 100644 (file)
@@ -4577,7 +4577,7 @@ UINT_64 EgBasedAddrLib::HwlGetSizeAdjustmentMicroTiled(
     //
     // 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;
 }
index 296391ab46ff5b7fb985dd46deeccf1ecba2f1c9..5d725e66e1fcae37fca1055b9d4819bd81d43221 100644 (file)
@@ -2151,7 +2151,7 @@ UINT_32 SiAddrLib::HwlPreAdjustBank(
         bankBit0 = bankBit0 ^ x4 ^ x5;
         bank |= bankBit0;
 
-        ADDR_ASSERT(pTileInfo->macroAspectRatio > 1)
+        ADDR_ASSERT(pTileInfo->macroAspectRatio > 1);
     }
 
     return bank;