Handle overflow of 64-bit loop conditions.
[oota-llvm.git] / test / Transforms / LoopStrengthReduce / 2009-05-04-Overflow.ll
1 ; Check that we do not strength reduce to an overflowiong loop condition
2 ; RUN: llvm-as < %s | opt -loop-reduce | llvm-dis | not grep 4755160694556239428
3
4 target datalayout = "e-p:64:64"
5 target triple = "x86_64-unknown-linux-gnu"
6 @"initialized$$$CFE_id_3d9e38d5_main" = linkonce global [3 x i64] [i64 6729544817907097974, i64 754394135718280480, i64 0]              
7 @"initialized$main$$CFE_id_3d9e38d5_main" = linkonce global [512 x i64] zeroinitializer         
8
9 define i32 @main() {
10 "file loop.c, line 10, bb14":
11         %vals = alloca [512 x i64], align 16            
12         br label %"file loop.c, line 10, bb101"
13
14 "file loop.c, line 10, bb101":          
15         br label %"file loop.c, line 10, in inner vector loop at depth 0, bb62"
16
17 "file loop.c, line 10, in inner vector loop at depth 0, bb62":          
18         %"$SI_S13.0" = phi i64 [ 0, %"file loop.c, line 10, bb101" ], [ %r35, %"file loop.c, line 13, in inner vector loop at depth 0, bb63" ]          
19         %"$LC_S14.0" = phi i64 [ -256, %"file loop.c, line 10, bb101" ], [ %r37, %"file loop.c, line 13, in inner vector loop at depth 0, bb63" ]               
20         br label %"file loop.c, line 13, in inner vector loop at depth 0, bb63"
21
22 "file loop.c, line 13, in inner vector loop at depth 0, bb63":          
23         %r3 = add i64 %"$SI_S13.0", ptrtoint ([512 x i64]* @"initialized$main$$CFE_id_3d9e38d5_main" to i64)            
24         %vals18 = bitcast [512 x i64]* %vals to i8*             
25         %ctg2 = getelementptr i8* %vals18, i64 %"$SI_S13.0"             
26         %r9 = inttoptr i64 %r3 to <2 x i64>*            
27         %r10 = load <2 x i64>* %r9, align 8             
28         %r12 = bitcast i8* %ctg2 to <2 x i64>*          
29         store <2 x i64> %r10, <2 x i64>* %r12, align 16
30         %tmp17 = inttoptr i64 %r3 to <2 x i64>*         
31         %r15 = getelementptr <2 x i64>* %tmp17, i64 1           
32         %r16 = load <2 x i64>* %r15, align 8            
33         %ctg2.sum19 = or i64 %"$SI_S13.0", 16           
34         %r19 = getelementptr i8* %vals18, i64 %ctg2.sum19               
35         %0 = bitcast i8* %r19 to <2 x i64>*             
36         store <2 x i64> %r16, <2 x i64>* %0, align 16
37         %tmp15 = inttoptr i64 %r3 to <2 x i64>*         
38         %r22 = getelementptr <2 x i64>* %tmp15, i64 2           
39         %r23 = load <2 x i64>* %r22, align 8            
40         %ctg2.sum20 = or i64 %"$SI_S13.0", 32           
41         %r26 = getelementptr i8* %vals18, i64 %ctg2.sum20               
42         %1 = bitcast i8* %r26 to <2 x i64>*             
43         store <2 x i64> %r23, <2 x i64>* %1, align 16
44         %tmp13 = inttoptr i64 %r3 to <2 x i64>*         
45         %r29 = getelementptr <2 x i64>* %tmp13, i64 3           
46         %r30 = load <2 x i64>* %r29, align 8            
47         %ctg2.sum21 = or i64 %"$SI_S13.0", 48           
48         %r33 = getelementptr i8* %vals18, i64 %ctg2.sum21               
49         %2 = bitcast i8* %r33 to <2 x i64>*             
50         store <2 x i64> %r30, <2 x i64>* %2, align 16
51         %r35 = add i64 %"$SI_S13.0", 64         
52         %r37 = add i64 %"$LC_S14.0", 4          
53         %r39 = icmp slt i64 %r37, 0             
54         br i1 %r39, label %"file loop.c, line 10, in inner vector loop at depth 0, bb62", label %"file loop.c, line 15, bb51"
55
56 "file loop.c, line 15, bb51":           
57         %3 = getelementptr [512 x i64]* %vals, i64 0, i64 0             
58         store i64 0, i64* %3, align 16
59         br label %"file loop.c, line 10, in inner loop at depth 0, bb65"
60
61 "file loop.c, line 10, in inner loop at depth 0, bb65":         
62         %"$vals_WR0_S15.0" = phi i64 [ 0, %"file loop.c, line 15, bb51" ], [ %r70, %"file loop.c, line 16, in inner loop at depth 0, bb67" ]            
63         %"$i_S16.0" = phi i64 [ 0, %"file loop.c, line 15, bb51" ], [ %r78, %"file loop.c, line 16, in inner loop at depth 0, bb67" ]           
64         br label %"file loop.c, line 16, in inner loop at depth 0, bb67"
65
66 "file loop.c, line 16, in inner loop at depth 0, bb67":         
67         %r45 = add i64 %"$vals_WR0_S15.0", 81985529216486895            
68         %r5111 = or i64 %"$i_S16.0", 1          
69         %r5212 = getelementptr [512 x i64]* %vals, i64 0, i64 %r5111            
70         store i64 %r45, i64* %r5212, align 8
71         %r54 = add i64 %"$vals_WR0_S15.0", 163971058432973790           
72         %r599 = or i64 %"$i_S16.0", 2           
73         %r6010 = getelementptr [512 x i64]* %vals, i64 0, i64 %r599             
74         store i64 %r54, i64* %r6010, align 16
75         %r62 = add i64 %"$vals_WR0_S15.0", 245956587649460685           
76         %r677 = or i64 %"$i_S16.0", 3           
77         %r688 = getelementptr [512 x i64]* %vals, i64 0, i64 %r677              
78         store i64 %r62, i64* %r688, align 8
79         %r70 = add i64 %"$vals_WR0_S15.0", 327942116865947580           
80         %r75 = add i64 %"$i_S16.0", 4           
81         %r766 = getelementptr [512 x i64]* %vals, i64 0, i64 %r75               
82         store i64 %r70, i64* %r766, align 16
83         %r78 = add i64 %"$i_S16.0", 4           
84         %r80 = icmp slt i64 %r78, 508           
85         br i1 %r80, label %"file loop.c, line 10, in inner loop at depth 0, bb65", label %"file loop.c, line 16, bb39"
86
87 "file loop.c, line 16, bb39":           
88         %r84 = add i64 %"$vals_WR0_S15.0", 409927646082434475           
89         %r885 = getelementptr [512 x i64]* %vals, i64 0, i64 509                
90         store i64 %r84, i64* %r885, align 8
91         %r90 = add i64 %"$vals_WR0_S15.0", 491913175298921370           
92         %r944 = getelementptr [512 x i64]* %vals, i64 0, i64 510                
93         store i64 %r90, i64* %r944, align 16
94         %r1003 = getelementptr [512 x i64]* %vals, i64 0, i64 511               
95         %r96.c = add i64 %"$vals_WR0_S15.0", 573898704515408265         
96         store i64 %r96.c, i64* %r1003, align 8
97         br label %"file loop.c, line 10, in inner loop at depth 0, bb13"
98
99 "file loop.c, line 10, in inner loop at depth 0, bb13":         
100         %"$i_S17.0" = phi i64 [ 0, %"file loop.c, line 16, bb39" ], [ %r111, %"file loop.c, line 19, in inner loop at depth 0, bb25" ]          
101         br label %"file loop.c, line 19, in inner loop at depth 0, bb6"
102
103 "file loop.c, line 19, in inner loop at depth 0, bb6":          
104         %r102 = add i64 %"$i_S17.0", 1          
105         %r106 = add i64 %"$i_S17.0", 1          
106         %r1071 = getelementptr [512 x i64]* %vals, i64 0, i64 %r106             
107         %r1072 = load i64* %r1071, align 8              
108         %r109 = call i32 (...)* @printf([17 x i8]* bitcast ([3 x i64]* @"initialized$$$CFE_id_3d9e38d5_main" to [17 x i8]*), i64 %r102, i64 %r1072)             
109         br label %"file loop.c, line 19, in inner loop at depth 0, bb25"
110
111 "file loop.c, line 19, in inner loop at depth 0, bb25":         
112         %r111 = add i64 %"$i_S17.0", 1          
113         %r113 = icmp slt i64 %r111, 511         
114         br i1 %r113, label %"file loop.c, line 10, in inner loop at depth 0, bb13", label %"file loop.c, line 19, bb10"
115
116 "file loop.c, line 19, bb10":
117         ret i32 0
118 }
119
120 declare i8* @llvm.returnaddress(i32) nounwind readnone
121
122 declare i32 @printf(...)