diff options
Diffstat (limited to 'test/CodeGen/Thumb2/constant-islands-new-island.ll')
-rw-r--r-- | test/CodeGen/Thumb2/constant-islands-new-island.ll | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/CodeGen/Thumb2/constant-islands-new-island.ll b/test/CodeGen/Thumb2/constant-islands-new-island.ll new file mode 100644 index 0000000..8ed657e --- /dev/null +++ b/test/CodeGen/Thumb2/constant-islands-new-island.ll @@ -0,0 +1,31 @@ +; RUN: llc < %s -mtriple=thumbv7-linux-gnueabihf %s -o - | FileCheck %s + +; Check that new water is created by splitting the basic block right after the +; load instruction. Previously, new water was created before the load +; instruction, which caused the pass to fail to converge. + +define void @test(i1 %tst) { +; CHECK-LABEL: test: +; CHECK: vldr {{s[0-9]+}}, [[CONST:\.LCPI[0-9]+_[0-9]+]] +; CHECK-NEXT: b.w [[CONTINUE:\.LBB[0-9]+_[0-9]+]] + +; CHECK: [[CONST]]: +; CHECK-NEXT: .long + +; CHECK: [[CONTINUE]]: + +entry: + call i32 @llvm.arm.space(i32 2000, i32 undef) + br i1 %tst, label %true, label %false + +true: + %val = phi float [12345.0, %entry], [undef, %false] + call void @bar(float %val) + ret void + +false: + br label %true +} + +declare void @bar(float) +declare i32 @llvm.arm.space(i32, i32) |