xref: /llvm-project/llvm/test/Transforms/ArgumentPromotion/control-flow.ll (revision bcbc6151640f53e9d78392c66de9760c664d8b1d)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
2; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
3
4; Don't promote around control flow.
5define internal i32 @callee(i1 %C, ptr %P) {
6; CHECK-LABEL: define {{[^@]+}}@callee
7; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]]) {
8; CHECK-NEXT:  entry:
9; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
10; CHECK:       T:
11; CHECK-NEXT:    ret i32 17
12; CHECK:       F:
13; CHECK-NEXT:    [[X:%.*]] = load i32, ptr [[P]], align 4
14; CHECK-NEXT:    ret i32 [[X]]
15;
16entry:
17  br i1 %C, label %T, label %F
18
19T:
20  ret i32 17
21
22F:
23  %X = load i32, ptr %P
24  ret i32 %X
25}
26
27define i32 @foo() {
28; CHECK-LABEL: define {{[^@]+}}@foo() {
29; CHECK-NEXT:  entry:
30; CHECK-NEXT:    [[X:%.*]] = call i32 @callee(i1 true, ptr null)
31; CHECK-NEXT:    ret i32 [[X]]
32;
33entry:
34  %X = call i32 @callee(i1 true, ptr null)
35  ret i32 %X
36}
37
38