1; RUN: opt < %s -loop-reduce -S -mtriple=x86_64-unknown-unknown | FileCheck %s 2; 3; Test LSR's OptimizeShadowIV. Handle a floating-point IV with a 4; nonzero initial value. 5; rdar://9786536 6 7; Provide legal integer types. 8target datalayout = "n8:16:32:64" 9 10 11; First, make sure LSR doesn't crash on an empty IVUsers list. 12; CHECK-LABEL: @dummyIV( 13; CHECK-NOT: phi 14; CHECK-NOT: sitofp 15; CHECK: br 16define void @dummyIV() nounwind { 17entry: 18 br label %loop 19 20loop: 21 %i.01 = phi i32 [ -39, %entry ], [ %inc, %loop ] 22 %conv = sitofp i32 %i.01 to double 23 %inc = add nsw i32 %i.01, 1 24 br i1 undef, label %loop, label %for.end 25 26for.end: 27 unreachable 28} 29 30; Now check that the computed double constant is correct. 31; CHECK-LABEL: @doubleIV( 32; CHECK: phi double [ -3.900000e+01, %entry ] 33; CHECK: br 34define void @doubleIV() nounwind { 35entry: 36 br label %loop 37 38loop: 39 %i.01 = phi i32 [ -39, %entry ], [ %inc, %loop ] 40 %conv = sitofp i32 %i.01 to double 41 %div = fdiv double %conv, 4.000000e+01 42 %inc = add nsw i32 %i.01, 1 43 br i1 undef, label %loop, label %for.end 44 45for.end: 46 unreachable 47} 48