[clang] [llvm] Add AMO load with Compare and Swap Not Equal (PR #178061)
Maryam Moghadas via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 6 10:26:28 PST 2026
================
@@ -112,9 +112,99 @@ entry:
ret void
}
+define void @test_lwat_csne(ptr noundef %ptr, i32 noundef %value1, i32 noundef %value2, ptr nocapture %resp) {
+; CHECK-LABEL: test_lwat_csne:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: mflr r0
+; CHECK-NEXT: .cfi_def_cfa_offset 48
+; CHECK-NEXT: .cfi_offset lr, 16
+; CHECK-NEXT: .cfi_offset r30, -16
+; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill
+; CHECK-NEXT: stdu r1, -48(r1)
+; CHECK-NEXT: mr r30, r6
+; CHECK-NEXT: mr r6, r3
+; CHECK-NEXT: clrldi r4, r4, 32
+; CHECK-NEXT: clrldi r5, r5, 32
+; CHECK-NEXT: li r3, 0
----------------
maryammo wrote:
clrldi r4/r5, r4/r5, 32
Zero extends i32 args since lwat reads r4/r5 as full 64 bit.
li r3, 0
Based on the isel debug output, i32 UNDEF legalized to Constant:i64<0>, i64 UNDEF stays undef. It seems to be because i32 UNDEF must be zero extended to fit 64 bit register.
https://github.com/llvm/llvm-project/pull/178061
More information about the cfe-commits
mailing list