Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / LoopStrengthReduce / X86 / 2011-07-20-DoubleIV.ll
blob0fc928ca9b288330abc942528d38a0bc98fcf75d
1 ; RUN: opt < %s -loop-reduce -S -mtriple=x86_64-unknown-unknown | FileCheck %s
3 ; Test LSR's OptimizeShadowIV. Handle a floating-point IV with a
4 ; nonzero initial value.
5 ; rdar://9786536
7 ; Provide legal integer types.
8 target datalayout = "n8:16:32:64"
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
16 define void @dummyIV() nounwind {
17 entry:
18   br label %loop
20 loop:
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
26 for.end:
27   unreachable
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
34 define void @doubleIV() nounwind {
35 entry:
36   br label %loop
38 loop:
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
45 for.end:
46   unreachable