@@ -497,6 +497,35 @@ for.exit: ; preds = %for.body
497497 ret i64 %spec.select
498498}
499499
500+ @a = external local_unnamed_addr global i32 , align 4
501+
502+ ; FIXME: Load hoisted out of the loop across memory barriers.
503+ define i32 @load_between_memory_barriers () {
504+ ; CHECK-LABEL: load_between_memory_barriers:
505+ ; CHECK: // %bb.0:
506+ ; CHECK-NEXT: adrp x8, :got:a
507+ ; CHECK-NEXT: ldr x8, [x8, :got_lo12:a]
508+ ; CHECK-NEXT: ldr w0, [x8]
509+ ; CHECK-NEXT: .LBB8_1: // %loop
510+ ; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
511+ ; CHECK-NEXT: //MEMBARRIER
512+ ; CHECK-NEXT: //MEMBARRIER
513+ ; CHECK-NEXT: cbz w0, .LBB8_1
514+ ; CHECK-NEXT: // %bb.2: // %exit
515+ ; CHECK-NEXT: ret
516+ br label %loop
517+
518+ loop:
519+ fence syncscope("singlethread" ) acq_rel
520+ %l = load i32 , ptr @a , align 4
521+ fence syncscope("singlethread" ) acq_rel
522+ %c = icmp eq i32 %l , 0
523+ br i1 %c , label %loop , label %exit
524+
525+ exit:
526+ ret i32 %l
527+ }
528+
500529declare i32 @bcmp (ptr , ptr , i64 )
501530declare i32 @memcmp (ptr , ptr , i64 )
502531declare void @func ()
0 commit comments