@@ -497,6 +497,35 @@ for.exit: ; preds = %for.body
497
497
ret i64 %spec.select
498
498
}
499
499
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
+
500
529
declare i32 @bcmp (ptr , ptr , i64 )
501
530
declare i32 @memcmp (ptr , ptr , i64 )
502
531
declare void @func ()
0 commit comments