[llvm] [AArch64][GlobalISel] Preserve scalar type when widening atomic G_STORE (PR #216162)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 17 06:17:11 PDT 2026


================
@@ -173,3 +173,28 @@ body:             |
     %val:_(i142) = G_IMPLICIT_DEF
     G_STORE %val(i142), %ptr(p0) :: (store (i142), align 8)
     RET_ReallyLR
+
+...
+---
+name:            store_i1_zext_i8
+alignment:       4
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    liveins: $x0
+    ; CHECK-LABEL: name: store_i1_zext_i8
+    ; CHECK: liveins: $x0
+    ; CHECK-NEXT: {{  $}}
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
+    ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(i8) = G_LOAD [[COPY]](p0) :: (load (i8))
+    ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(i8) = G_ASSERT_ZEXT [[LOAD]], 1
+    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(i32) = G_ANYEXT [[ASSERT_ZEXT]](i8)
+    ; CHECK-NEXT: [[C:%[0-9]+]]:_(i32) = G_CONSTANT i32 1
+    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(i32) = G_AND [[ANYEXT]], [[C]]
+    ; CHECK-NEXT: G_STORE [[AND]](i32), [[COPY]](p0) :: (store seq_cst (i8))
+    ; CHECK-NEXT: RET_ReallyLR
+    %0:_(p0) = COPY $x0
+    %1:_(i1) = G_LOAD %0(p0) :: (load (i1))
+    %2:_(i8) = G_ZEXT %1(i1)
+    G_STORE %2(i8), %0(p0) :: (store seq_cst (i8))
+    RET_ReallyLR
----------------
arsenm wrote:

It should always be there, and I don't know why the parser is so permissive. Something breaks if it's missing, I think update_mir_test_checks does something bad if it's missing 

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


More information about the llvm-commits mailing list