[llvm] [SPIR-V] Refactor buildMemSemanticsReg to ensure type compatibility (PR #123676)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 20 15:45:23 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-spir-v

Author: Michal Paszkowski (michalpaszkowski)

<details>
<summary>Changes</summary>

Fixed a type mismatch issue in the comparison of std::memory_order with unsigned.

This fixes an issue reported by clang-debian-cpp20 buildbot for https://github.com/llvm/llvm-project/pull/123654

---
Full diff: https://github.com/llvm/llvm-project/pull/123676.diff


1 Files Affected:

- (modified) llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp (+6-6) 


``````````diff
diff --git a/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp b/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp
index 784bbe8e662c20..d3976f645e6832 100644
--- a/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp
@@ -606,13 +606,13 @@ static Register buildMemSemanticsReg(Register SemanticsRegister,
                                      SPIRVGlobalRegistry *GR) {
   if (SemanticsRegister.isValid()) {
     MachineRegisterInfo *MRI = MIRBuilder.getMRI();
-    std::memory_order Order =
-        static_cast<std::memory_order>(getIConstVal(SemanticsRegister, MRI));
-    Semantics =
-        getSPIRVMemSemantics(Order) |
+    int MemoryOrderValue = getIConstVal(SemanticsRegister, MRI);
+    std::memory_order Order = static_cast<std::memory_order>(MemoryOrderValue);
+    unsigned OrderSemantics = getSPIRVMemSemantics(Order);
+    unsigned StorageClassSemantics =
         getMemSemanticsForStorageClass(GR->getPointerStorageClass(PtrRegister));
-
-    if (Order == Semantics) {
+    Semantics = OrderSemantics | StorageClassSemantics;
+    if (OrderSemantics == Semantics) {
       MRI->setRegClass(SemanticsRegister, &SPIRV::iIDRegClass);
       return SemanticsRegister;
     }

``````````

</details>


https://github.com/llvm/llvm-project/pull/123676


More information about the llvm-commits mailing list