1 ; RUN: opt %loadPolly %defaultOpts -polly-codegen -enable-polly-vector -dce -S %s | FileCheck %s
2 ; Obtained from C source as:
3 ; clang -S -emit-llvm -O0 slp-36.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer slp-36.s > slp-36.ll
6 ; ModuleID = 'slp-36.s'
7 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
8 target triple = "x86_64-unknown-linux-gnu"
10 @test_1.bm = internal global [32 x i32] zeroinitializer, align 16
11 @test_1.cm = internal global [32 x i32] zeroinitializer, align 16
12 @test_2.bm = internal global [32 x i32] zeroinitializer, align 16
13 @test_2.cm = internal global [32 x i32] zeroinitializer, align 16
14 @test_3.bm = internal global [32 x i32] zeroinitializer, align 16
16 define void @test_1() nounwind uwtable {
20 for.cond: ; preds = %for.inc, %entry
21 %indvar5 = phi i64 [ %indvar.next6, %for.inc ], [ 0, %entry ]
22 %tmp8 = mul i64 %indvar5, 2
23 %tmp9 = add i64 %tmp8, 1
24 %arrayidx6 = getelementptr [32 x i32]* @test_1.bm, i64 0, i64 %tmp9
25 %arrayidx = getelementptr [32 x i32]* @test_1.bm, i64 0, i64 %tmp8
26 %exitcond7 = icmp ne i64 %indvar5, 16
27 br i1 %exitcond7, label %for.body, label %for.end
29 for.body: ; preds = %for.cond
30 %tmp2 = load i32* %arrayidx, align 8
31 %shl = shl i32 %tmp2, 8
32 store i32 %shl, i32* %arrayidx, align 8
33 %tmp7 = load i32* %arrayidx6, align 4
34 %shl8 = shl i32 %tmp7, 8
35 store i32 %shl8, i32* %arrayidx6, align 4
38 for.inc: ; preds = %for.body
39 %indvar.next6 = add i64 %indvar5, 1
42 for.end: ; preds = %for.cond
45 for.cond10: ; preds = %for.inc27, %for.end
46 %indvar = phi i64 [ %indvar.next, %for.inc27 ], [ 0, %for.end ]
47 %tmp = mul i64 %indvar, 2
48 %tmp3 = add i64 %tmp, 1
49 %arrayidx24 = getelementptr [32 x i32]* @test_1.cm, i64 0, i64 %tmp3
50 %arrayidx17 = getelementptr [32 x i32]* @test_1.cm, i64 0, i64 %tmp
51 %exitcond = icmp ne i64 %indvar, 16
52 br i1 %exitcond, label %for.body13, label %for.end30
54 for.body13: ; preds = %for.cond10
55 %tmp18 = load i32* %arrayidx17, align 8
56 %shl19 = shl i32 %tmp18, 8
57 store i32 %shl19, i32* %arrayidx17, align 8
58 %tmp25 = load i32* %arrayidx24, align 4
59 %shl26 = shl i32 %tmp25, 7
60 store i32 %shl26, i32* %arrayidx24, align 4
63 for.inc27: ; preds = %for.body13
64 %indvar.next = add i64 %indvar, 1
67 for.end30: ; preds = %for.cond10
71 define void @test_2(i32 %a, i32 %b) nounwind uwtable {
75 for.cond: ; preds = %for.inc, %entry
76 %indvar6 = phi i64 [ %indvar.next7, %for.inc ], [ 0, %entry ]
77 %tmp10 = mul i64 %indvar6, 2
78 %tmp11 = add i64 %tmp10, 1
79 %arrayidx8 = getelementptr [32 x i32]* @test_2.bm, i64 0, i64 %tmp11
80 %arrayidx = getelementptr [32 x i32]* @test_2.bm, i64 0, i64 %tmp10
81 %exitcond8 = icmp ne i64 %indvar6, 16
82 br i1 %exitcond8, label %for.body, label %for.end
84 for.body: ; preds = %for.cond
85 %tmp3 = load i32* %arrayidx, align 8
86 %shl = shl i32 %tmp3, %a
87 store i32 %shl, i32* %arrayidx, align 8
88 %tmp9 = load i32* %arrayidx8, align 4
89 %shl10 = shl i32 %tmp9, %a
90 store i32 %shl10, i32* %arrayidx8, align 4
93 for.inc: ; preds = %for.body
94 %indvar.next7 = add i64 %indvar6, 1
97 for.end: ; preds = %for.cond
100 for.cond12: ; preds = %for.inc31, %for.end
101 %indvar = phi i64 [ %indvar.next, %for.inc31 ], [ 0, %for.end ]
102 %tmp = mul i64 %indvar, 2
103 %tmp4 = add i64 %tmp, 1
104 %arrayidx28 = getelementptr [32 x i32]* @test_2.cm, i64 0, i64 %tmp4
105 %arrayidx20 = getelementptr [32 x i32]* @test_2.cm, i64 0, i64 %tmp
106 %exitcond = icmp ne i64 %indvar, 16
107 br i1 %exitcond, label %for.body15, label %for.end34
109 for.body15: ; preds = %for.cond12
110 %tmp21 = load i32* %arrayidx20, align 8
111 %shl22 = shl i32 %tmp21, %a
112 store i32 %shl22, i32* %arrayidx20, align 8
113 %tmp29 = load i32* %arrayidx28, align 4
114 %shl30 = shl i32 %tmp29, %b
115 store i32 %shl30, i32* %arrayidx28, align 4
118 for.inc31: ; preds = %for.body15
119 %indvar.next = add i64 %indvar, 1
122 for.end34: ; preds = %for.cond12
126 define void @test_3() nounwind uwtable {
128 %am = alloca [32 x i32], align 16
131 for.cond: ; preds = %for.inc, %entry
132 %indvar6 = phi i64 [ %indvar.next7, %for.inc ], [ 0, %entry ]
133 %tmp9 = mul i64 %indvar6, 2
134 %tmp11 = add i64 %tmp9, 1
135 %arrayidx14 = getelementptr [32 x i32]* @test_3.bm, i64 0, i64 %tmp11
136 %arrayidx5 = getelementptr [32 x i32]* @test_3.bm, i64 0, i64 %tmp9
137 %arrayidx = getelementptr [32 x i32]* %am, i64 0, i64 %indvar6
138 %exitcond8 = icmp ne i64 %indvar6, 16
139 br i1 %exitcond8, label %for.body, label %for.end
141 for.body: ; preds = %for.cond
142 %tmp2 = load i32* %arrayidx, align 4
143 %tmp6 = load i32* %arrayidx5, align 8
144 %shl = shl i32 %tmp6, %tmp2
145 store i32 %shl, i32* %arrayidx5, align 8
146 %tmp10 = load i32* %arrayidx, align 4
147 %tmp15 = load i32* %arrayidx14, align 4
148 %shl16 = shl i32 %tmp15, %tmp10
149 store i32 %shl16, i32* %arrayidx14, align 4
152 for.inc: ; preds = %for.body
153 %indvar.next7 = add i64 %indvar6, 1
156 for.end: ; preds = %for.cond
159 for.cond18: ; preds = %for.inc46, %for.end
160 %indvar = phi i64 [ %indvar.next, %for.inc46 ], [ 0, %for.end ]
161 %tmp = mul i64 %indvar, 2
162 %tmp4 = add i64 %tmp, 1
163 %arrayidx43 = getelementptr [32 x i32]* @test_3.bm, i64 0, i64 %tmp4
164 %arrayidx37 = getelementptr [32 x i32]* %am, i64 0, i64 %tmp4
165 %arrayidx30 = getelementptr [32 x i32]* @test_3.bm, i64 0, i64 %tmp
166 %arrayidx25 = getelementptr [32 x i32]* %am, i64 0, i64 %tmp
167 %exitcond = icmp ne i64 %indvar, 16
168 br i1 %exitcond, label %for.body21, label %for.end49
170 for.body21: ; preds = %for.cond18
171 %tmp26 = load i32* %arrayidx25, align 8
172 %tmp31 = load i32* %arrayidx30, align 8
173 %shl32 = shl i32 %tmp31, %tmp26
174 store i32 %shl32, i32* %arrayidx30, align 8
175 %tmp38 = load i32* %arrayidx37, align 4
176 %tmp44 = load i32* %arrayidx43, align 4
177 %shl45 = shl i32 %tmp44, %tmp38
178 store i32 %shl45, i32* %arrayidx43, align 4
181 for.inc46: ; preds = %for.body21
182 %indvar.next = add i64 %indvar, 1
185 for.end49: ; preds = %for.cond18