[llvm] 5051582 - [AsmWriter] Fix printing of atomicrmw xchg with pointer op

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 13 03:49:44 PST 2022


Author: Nikita Popov
Date: 2022-12-13T12:49:36+01:00
New Revision: 50515824c84dbc0194264791e7d802b61d57b81a

URL: https://github.com/llvm/llvm-project/commit/50515824c84dbc0194264791e7d802b61d57b81a
DIFF: https://github.com/llvm/llvm-project/commit/50515824c84dbc0194264791e7d802b61d57b81a.diff

LOG: [AsmWriter] Fix printing of atomicrmw xchg with pointer op

atomicrmw always needs to print all types, even if the xchg value
type happens to be the same as the pointer operand type. This
couldn't occur prior to opaque pointers.

Added: 
    

Modified: 
    llvm/lib/IR/AsmWriter.cpp
    llvm/test/Assembler/opaque-ptr.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp
index c2ad095a7f387..1b555f056d24d 100644
--- a/llvm/lib/IR/AsmWriter.cpp
+++ b/llvm/lib/IR/AsmWriter.cpp
@@ -4383,9 +4383,11 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
     bool PrintAllTypes = false;
     Type *TheType = Operand->getType();
 
-    // Select, Store, ShuffleVector and CmpXchg always print all types.
+    // Select, Store, ShuffleVector, CmpXchg and AtomicRMW always print all
+    // types.
     if (isa<SelectInst>(I) || isa<StoreInst>(I) || isa<ShuffleVectorInst>(I) ||
-        isa<ReturnInst>(I) || isa<AtomicCmpXchgInst>(I)) {
+        isa<ReturnInst>(I) || isa<AtomicCmpXchgInst>(I) ||
+        isa<AtomicRMWInst>(I)) {
       PrintAllTypes = true;
     } else {
       for (unsigned i = 1, E = I.getNumOperands(); i != E; ++i) {

diff  --git a/llvm/test/Assembler/opaque-ptr.ll b/llvm/test/Assembler/opaque-ptr.ll
index 7b0273380720d..dd22d541f43b4 100644
--- a/llvm/test/Assembler/opaque-ptr.ll
+++ b/llvm/test/Assembler/opaque-ptr.ll
@@ -123,6 +123,14 @@ define void @atomicrmw(ptr %a, i32 %i) {
     ret void
 }
 
+; CHECK: define void @atomicrmw_ptr(ptr %a, ptr %b)
+; CHECK:     %c = atomicrmw xchg ptr %a, ptr %b acquire
+; CHECK:     ret void
+define void @atomicrmw_ptr(ptr %a, ptr %b) {
+    %c = atomicrmw xchg ptr %a, ptr %b acquire
+    ret void
+}
+
 ; CHECK: define void @call(ptr %p)
 ; CHECK:     call void %p()
 ; CHECK:     ret void


        


More information about the llvm-commits mailing list