; 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(...)