Skip to content

Commit 32cbe24

Browse files
fhahntru
authored andcommitted
[MachineLICM] Add test case showing load hoisted across memory barrier.
(cherry picked from commit a9b3ec1)
1 parent 7e2da7d commit 32cbe24

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

llvm/test/CodeGen/AArch64/machine-licm-hoist-load.ll

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
500529
declare i32 @bcmp(ptr, ptr, i64)
501530
declare i32 @memcmp(ptr, ptr, i64)
502531
declare void @func()

0 commit comments

Comments
 (0)