Fix a bunch of issues found in a testcase from 400.perlbench.
[oota-llvm.git] / test / Transforms / LoopStrengthReduce / var_stride_used_by_compare.ll
1 ; Base should not be i*3, it should be i*2.
2 ; RUN: llvm-upgrade < %s | llvm-as | opt -loop-reduce | llvm-dis | \
3 ; RUN:   not grep {mul.*%i, 3} 
4
5 ; Indvar should not start at zero:
6 ; RUN: llvm-upgrade < %s | llvm-as | opt -loop-reduce | llvm-dis | \
7 ; RUN:   not grep {phi uint .* 0}
8 ; END.
9
10 ; mul uint %i, 3
11
12 ; ModuleID = 't.bc'
13 target datalayout = "e-p:32:32"
14 target endian = little
15 target pointersize = 32
16 target triple = "i686-apple-darwin8"
17 %flags2 = external global [8193 x sbyte], align 32              ; <[8193 x sbyte]*> [#uses=1]
18
19 implementation   ; Functions:
20
21 void %foo(int %k, int %i.s) {
22 entry:
23         %i = cast int %i.s to uint              ; <uint> [#uses=2]
24         %k_addr.012 = shl int %i.s, ubyte 1             ; <int> [#uses=1]
25         %tmp14 = setgt int %k_addr.012, 8192            ; <bool> [#uses=1]
26         br bool %tmp14, label %return, label %bb.preheader
27
28 bb.preheader:           ; preds = %entry
29         %tmp. = shl uint %i, ubyte 1            ; <uint> [#uses=1]
30         br label %bb
31
32 bb:             ; preds = %bb, %bb.preheader
33         %indvar = phi uint [ %indvar.next, %bb ], [ 0, %bb.preheader ]          ; <uint> [#uses=2]
34         %tmp.15 = mul uint %indvar, %i          ; <uint> [#uses=1]
35         %tmp.16 = add uint %tmp.15, %tmp.               ; <uint> [#uses=2]
36         %k_addr.0.0 = cast uint %tmp.16 to int          ; <int> [#uses=1]
37         %tmp = getelementptr [8193 x sbyte]* %flags2, int 0, uint %tmp.16               ; <sbyte*> [#uses=1]
38         store sbyte 0, sbyte* %tmp
39         %k_addr.0 = add int %k_addr.0.0, %i.s           ; <int> [#uses=1]
40         %tmp = setgt int %k_addr.0, 8192                ; <bool> [#uses=1]
41         %indvar.next = add uint %indvar, 1              ; <uint> [#uses=1]
42         br bool %tmp, label %return.loopexit, label %bb
43
44 return.loopexit:                ; preds = %bb
45         br label %return
46
47 return:         ; preds = %return.loopexit, %entry
48         ret void
49 }