Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-strided-store-u32-i2.ll
blob659af25c7111ef3b764755e5d5188d3179d18d2e
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 vect-strided-store-u32-i2.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-strided-store-u32-i2.s > vect-strided-store-u32-i2.ll
6 ; ModuleID = 'vect-strided-store-u32-i2.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 @b = global [16 x i32] [i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30], align 16
11 @c = global [16 x i32] [i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31], align 16
12 @a = common global [32 x i32] zeroinitializer, align 16
14 define i32 @main1() nounwind uwtable noinline {
15 entry:
16   br label %for.cond
18 for.cond:                                         ; preds = %for.inc, %entry
19   %indvar5 = phi i64 [ %indvar.next6, %for.inc ], [ 0, %entry ]
20   %tmp7 = mul i64 %indvar5, 2
21   %tmp8 = add i64 %tmp7, 1
22   %arrayidx23 = getelementptr [32 x i32]* @a, i64 0, i64 %tmp8
23   %arrayidx9 = getelementptr [32 x i32]* @a, i64 0, i64 %tmp7
24   %arrayidx5 = getelementptr [16 x i32]* @c, i64 0, i64 %indvar5
25   %arrayidx = getelementptr [16 x i32]* @b, i64 0, i64 %indvar5
26   %exitcond = icmp ne i64 %indvar5, 8
27   br i1 %exitcond, label %for.body, label %for.end
29 for.body:                                         ; preds = %for.cond
30   %tmp2 = load i32* %arrayidx, align 4
31   %tmp6 = load i32* %arrayidx5, align 4
32   %add = add nsw i32 %tmp2, %tmp6
33   store i32 %add, i32* %arrayidx9, align 8
34   %tmp13 = load i32* %arrayidx, align 4
35   %tmp17 = load i32* %arrayidx5, align 4
36   %mul18 = mul nsw i32 %tmp13, %tmp17
37   store i32 %mul18, i32* %arrayidx23, align 4
38   br label %for.inc
40 for.inc:                                          ; preds = %for.body
41   %indvar.next6 = add i64 %indvar5, 1
42   br label %for.cond
44 for.end:                                          ; preds = %for.cond
45   br label %for.cond25
47 for.cond25:                                       ; preds = %for.inc60, %for.end
48   %indvar = phi i64 [ %indvar.next, %for.inc60 ], [ 0, %for.end ]
49   %tmp = mul i64 %indvar, 2
50   %tmp3 = add i64 %tmp, 1
51   %arrayidx48 = getelementptr [32 x i32]* @a, i64 0, i64 %tmp3
52   %arrayidx32 = getelementptr [32 x i32]* @a, i64 0, i64 %tmp
53   %arrayidx40 = getelementptr [16 x i32]* @c, i64 0, i64 %indvar
54   %arrayidx36 = getelementptr [16 x i32]* @b, i64 0, i64 %indvar
55   %i.1 = trunc i64 %indvar to i32
56   %cmp27 = icmp slt i32 %i.1, 8
57   br i1 %cmp27, label %for.body28, label %for.end63
59 for.body28:                                       ; preds = %for.cond25
60   %tmp33 = load i32* %arrayidx32, align 8
61   %tmp37 = load i32* %arrayidx36, align 4
62   %tmp41 = load i32* %arrayidx40, align 4
63   %add42 = add nsw i32 %tmp37, %tmp41
64   %cmp43 = icmp eq i32 %tmp33, %add42
65   br i1 %cmp43, label %lor.lhs.false, label %if.then
67 lor.lhs.false:                                    ; preds = %for.body28
68   %tmp49 = load i32* %arrayidx48, align 4
69   %tmp53 = load i32* %arrayidx36, align 4
70   %tmp57 = load i32* %arrayidx40, align 4
71   %mul58 = mul nsw i32 %tmp53, %tmp57
72   %cmp59 = icmp eq i32 %tmp49, %mul58
73   br i1 %cmp59, label %if.end, label %if.then
75 if.then:                                          ; preds = %lor.lhs.false, %for.body28
76   call void @abort() noreturn nounwind
77   unreachable
79 if.end:                                           ; preds = %lor.lhs.false
80   br label %for.inc60
82 for.inc60:                                        ; preds = %if.end
83   %indvar.next = add i64 %indvar, 1
84   br label %for.cond25
86 for.end63:                                        ; preds = %for.cond25
87   ret i32 0
90 declare void @abort() noreturn
92 define i32 @main() nounwind uwtable {
93 entry:
94   call void @check_vect()
95   %call = call i32 @main1()
96   ret i32 %call
99 define internal void @check_vect() nounwind uwtable noinline {
100 entry:
101   %a = alloca i32, align 4
102   %b = alloca i32, align 4
103   %c = alloca i32, align 4
104   %d = alloca i32, align 4
105   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
106   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
107   %tobool = icmp eq i32 %call1, 0
108   br i1 %tobool, label %if.then, label %lor.lhs.false
110 lor.lhs.false:                                    ; preds = %entry
111   %tmp4 = load i32* %d, align 4
112   %and6 = and i32 %tmp4, 67108864
113   %cmp = icmp eq i32 %and6, 0
114   br i1 %cmp, label %if.then, label %if.end
116 if.then:                                          ; preds = %entry, %lor.lhs.false
117   call void @exit(i32 0) noreturn nounwind
118   unreachable
120 if.end:                                           ; preds = %lor.lhs.false
121   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
122   ret void
125 declare void (i32)* @signal(i32, void (i32)*) nounwind
127 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
128 entry:
129   call void @exit(i32 0) noreturn nounwind
130   unreachable
132 return:                                           ; No predecessors!
133   ret void
136 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
137 entry:
138   %and = and i32 %__level, -2147483648
139   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
140   %cmp = icmp ult i32 %call, %__level
141   br i1 %cmp, label %if.then, label %if.end
143 if.then:                                          ; preds = %entry
144   br label %return
146 if.end:                                           ; preds = %entry
147   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
148   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
149   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
150   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
151   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
152   store i32 %asmresult, i32* %__eax, align 4
153   store i32 %asmresult8, i32* %__ebx, align 4
154   store i32 %asmresult9, i32* %__ecx, align 4
155   store i32 %asmresult10, i32* %__edx, align 4
156   br label %return
158 return:                                           ; preds = %if.end, %if.then
159   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
160   ret i32 %retval.0
163 declare void @exit(i32) noreturn
165 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
166 entry:
167   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
168   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
169   %tobool = icmp eq i32* %__sig, null
170   br i1 %tobool, label %if.end, label %if.then
172 if.then:                                          ; preds = %entry
173   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
174   store i32 %asmresult1, i32* %__sig, align 4
175   br label %if.end
177 if.end:                                           ; preds = %entry, %if.then
178   ret i32 %asmresult
181 !0 = metadata !{i32 -2147343350, i32 -2147343342} 
182 !1 = metadata !{i32 -2147343473, i32 -2147343465} 
183 ; CHECK: define