diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Transforms/Inline/inline_returns_twice.ll | 71 |
1 files changed, 57 insertions, 14 deletions
diff --git a/test/Transforms/Inline/inline_returns_twice.ll b/test/Transforms/Inline/inline_returns_twice.ll index f316c91..678ee82 100644 --- a/test/Transforms/Inline/inline_returns_twice.ll +++ b/test/Transforms/Inline/inline_returns_twice.ll @@ -4,38 +4,81 @@ ; if they are themselve marked as such. declare i32 @a() returns_twice -declare i32 @b() returns_twice -define i32 @f() { +define i32 @inner1() { entry: %call = call i32 @a() returns_twice %add = add nsw i32 1, %call ret i32 %add } -define i32 @g() { +define i32 @outer1() { entry: -; CHECK-LABEL: define i32 @g( -; CHECK: call i32 @f() -; CHECK-NOT: call i32 @a() - %call = call i32 @f() +; CHECK-LABEL: define i32 @outer1( +; CHECK: call i32 @inner1() + %call = call i32 @inner1() %add = add nsw i32 1, %call ret i32 %add } -define i32 @h() returns_twice { +define i32 @inner2() returns_twice { entry: - %call = call i32 @b() returns_twice + %call = call i32 @a() returns_twice + %add = add nsw i32 1, %call + ret i32 %add +} + +define i32 @outer2() { +entry: +; CHECK-LABEL: define i32 @outer2( +; CHECK: call i32 @a() + %call = call i32 @inner2() returns_twice %add = add nsw i32 1, %call ret i32 %add } -define i32 @i() { +define i32 @inner3() { +entry: + %invoke = invoke i32 @a() returns_twice + to label %cont unwind label %lpad + +cont: + %add = add nsw i32 1, %invoke + ret i32 %add + +lpad: + %lp = landingpad i32 personality i8* null cleanup + resume i32 %lp +} + +define i32 @outer3() { +entry: +; CHECK-LABEL: define i32 @outer3( +; CHECK: call i32 @inner3() + %call = call i32 @inner3() + %add = add nsw i32 1, %call + ret i32 %add +} + +define i32 @inner4() returns_twice { +entry: + %invoke = invoke i32 @a() returns_twice + to label %cont unwind label %lpad + +cont: + %add = add nsw i32 1, %invoke + ret i32 %add + +lpad: + %lp = landingpad i32 personality i8* null cleanup + resume i32 %lp +} + +define i32 @outer4() { entry: -; CHECK-LABEL: define i32 @i( -; CHECK: call i32 @b() -; CHECK-NOT: call i32 @h() - %call = call i32 @h() returns_twice +; CHECK-LABEL: define i32 @outer4( +; CHECK: invoke i32 @a() + %call = call i32 @inner4() returns_twice %add = add nsw i32 1, %call ret i32 %add } |