| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -indvars -S < %s | FileCheck %s |
| target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" |
| target triple = "x86_64-pc-windows-msvc18.0.0" |
| |
| define i32 @fn2() personality i32 (...)* @__CxxFrameHandler3 { |
| ; CHECK-LABEL: @fn2( |
| ; CHECK-NEXT: entry: |
| ; CHECK-NEXT: br label [[FOR_COND:%.*]] |
| ; CHECK: for.cond: |
| ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[ENTRY:%.*]] ] |
| ; CHECK-NEXT: [[INDVARS1:%.*]] = trunc i64 [[INDVARS_IV]] to i32 |
| ; CHECK-NEXT: invoke void @fn1(i64 [[INDVARS_IV]]) |
| ; CHECK-NEXT: to label [[FOR_INC]] unwind label [[CATCH_DISPATCH:%.*]] |
| ; CHECK: catch.dispatch: |
| ; CHECK-NEXT: [[C_0_LCSSA:%.*]] = phi i32 [ [[INDVARS1]], [[FOR_COND]] ] |
| ; CHECK-NEXT: [[TMP0:%.*]] = catchswitch within none [label %catch] unwind to caller |
| ; CHECK: catch: |
| ; CHECK-NEXT: [[TMP1:%.*]] = catchpad within [[TMP0]] [i8* null, i32 64, i8* null] |
| ; CHECK-NEXT: catchret from [[TMP1]] to label [[EXIT:%.*]] |
| ; CHECK: exit: |
| ; CHECK-NEXT: ret i32 [[C_0_LCSSA]] |
| ; CHECK: for.inc: |
| ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw i64 [[INDVARS_IV]], 1 |
| ; CHECK-NEXT: br label [[FOR_COND]] |
| ; |
| entry: |
| br label %for.cond |
| |
| for.cond: ; preds = %for.inc, %entry |
| %c.0 = phi i32 [ %inc, %for.inc ], [ 0, %entry ] |
| %idxprom = sext i32 %c.0 to i64 |
| invoke void @fn1(i64 %idxprom) |
| to label %for.inc unwind label %catch.dispatch |
| |
| catch.dispatch: ; preds = %for.cond |
| %c.0.lcssa = phi i32 [ %c.0, %for.cond ] |
| %0 = catchswitch within none [label %catch] unwind to caller |
| |
| catch: ; preds = %catch.dispatch |
| %1 = catchpad within %0 [i8* null, i32 64, i8* null] |
| catchret from %1 to label %exit |
| |
| exit: |
| ret i32 %c.0.lcssa |
| |
| for.inc: ; preds = %for.cond |
| %inc = add nsw nuw i32 %c.0, 1 |
| br label %for.cond |
| } |
| |
| declare void @fn1(i64 %idxprom) |
| |
| declare i32 @__CxxFrameHandler3(...) |