diff options
Diffstat (limited to 'llvm/test/Transforms/ArgumentPromotion/control-flow.ll')
-rw-r--r-- | llvm/test/Transforms/ArgumentPromotion/control-flow.ll | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/test/Transforms/ArgumentPromotion/control-flow.ll b/llvm/test/Transforms/ArgumentPromotion/control-flow.ll new file mode 100644 index 00000000000..c3fe0c00e87 --- /dev/null +++ b/llvm/test/Transforms/ArgumentPromotion/control-flow.ll @@ -0,0 +1,27 @@ +; RUN: opt < %s -argpromotion -S | FileCheck %s +; RUN: opt < %s -passes=argpromotion -S | FileCheck %s + +; Don't promote around control flow. +define internal i32 @callee(i1 %C, i32* %P) { +; CHECK-LABEL: define internal i32 @callee( +; CHECK: i1 %C, i32* %P) +entry: + br i1 %C, label %T, label %F + +T: + ret i32 17 + +F: + %X = load i32, i32* %P + ret i32 %X +} + +define i32 @foo() { +; CHECK-LABEL: define i32 @foo( +entry: +; CHECK-NOT: load i32, i32* null + %X = call i32 @callee(i1 true, i32* null) +; CHECK: call i32 @callee(i1 true, i32* null) + ret i32 %X +} + |