diff options
author | Andrew Kaylor <andrew.kaylor@intel.com> | 2017-06-22 23:27:16 +0000 |
---|---|---|
committer | Andrew Kaylor <andrew.kaylor@intel.com> | 2017-06-22 23:27:16 +0000 |
commit | d49711996f94cc73908d03d51938ffaaa40c3da9 (patch) | |
tree | 746c8477aa8c0030daf60acf094072faa3ba77d7 /llvm/test/Transforms/LoopRotate/catchret.ll | |
parent | 08b20356c3f3aa3a7442bd4c2a0d7f3bd294ad8f (diff) | |
download | bcm5719-llvm-d49711996f94cc73908d03d51938ffaaa40c3da9.tar.gz bcm5719-llvm-d49711996f94cc73908d03d51938ffaaa40c3da9.zip |
Restrict the definition of loop preheader to avoid EH blocks
Differential Revision: https://reviews.llvm.org/D34487
llvm-svn: 306070
Diffstat (limited to 'llvm/test/Transforms/LoopRotate/catchret.ll')
-rwxr-xr-x | llvm/test/Transforms/LoopRotate/catchret.ll | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopRotate/catchret.ll b/llvm/test/Transforms/LoopRotate/catchret.ll new file mode 100755 index 00000000000..c035e49d79c --- /dev/null +++ b/llvm/test/Transforms/LoopRotate/catchret.ll @@ -0,0 +1,41 @@ +; RUN: opt < %s -loop-rotate -S | FileCheck %s + +target triple = "x86_64-pc-windows-msvc" + +declare void @always_throws() + +define i32 @test() personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) { +entry: + invoke void @always_throws() + to label %continue unwind label %catch.dispatch + +continue: + unreachable + +catch.dispatch: + %t0 = catchswitch within none [label %catch] unwind to caller + +catch: + %t1 = catchpad within %t0 [i8* null, i32 64, i8* null] + catchret from %t1 to label %for.cond + +for.cond: + %sum = phi i32 [ %add, %for.body ], [ 0, %catch ] + %i = phi i32 [ %inc, %for.body ], [ 0, %catch ] + %cmp = icmp slt i32 %i, 1 + br i1 %cmp, label %for.body, label %return + +for.body: + %add = add nsw i32 1, %sum + %inc = add nsw i32 %i, 1 + br label %for.cond + +return: + ret i32 0 +} + +; CHECK: catch: +; CHECK-NEXT: catchpad +; CHECK-NEXT: catchret + +declare i32 @__CxxFrameHandler3(...) |