Add compile command to each testcase
[gcc-vect-testsuite.git] / bb-slp-8.ll
blobfe4722074202266b93d6f231f28de5b96d77959e
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 bb-slp-8.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer bb-slp-8.s > bb-slp-8.ll
6 ; ModuleID = 'bb-slp-8.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 @in = global [16 x i32] [i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15], align 16
11 @out = common global [16 x i32] zeroinitializer, align 16
13 define i32 @main1(i32 %x, i32 %y, i32* %pin, i32* %pout) nounwind uwtable noinline {
14 entry:
15   %incdec.ptr = getelementptr inbounds i32* %pin, i64 1
16   %tmp1 = load i32* %pin, align 4
17   %add = add i32 %tmp1, 23
18   %incdec.ptr3 = getelementptr inbounds i32* %pin, i64 2
19   %tmp4 = load i32* %incdec.ptr, align 4
20   %add5 = add i32 %tmp4, 142
21   %incdec.ptr7 = getelementptr inbounds i32* %pin, i64 3
22   %tmp8 = load i32* %incdec.ptr3, align 4
23   %add9 = add i32 %tmp8, 2
24   %tmp12 = load i32* %incdec.ptr7, align 4
25   %add13 = add i32 %tmp12, 31
26   %mul = mul i32 %add, %x
27   %incdec.ptr17 = getelementptr inbounds i32* %pout, i64 1
28   store i32 %mul, i32* %pout, align 4
29   %mul20 = mul i32 %add5, %y
30   %incdec.ptr22 = getelementptr inbounds i32* %pout, i64 2
31   store i32 %mul20, i32* %incdec.ptr17, align 4
32   %mul25 = mul i32 %add9, %x
33   %incdec.ptr27 = getelementptr inbounds i32* %pout, i64 3
34   store i32 %mul25, i32* %incdec.ptr22, align 4
35   %mul30 = mul i32 %add13, %y
36   store i32 %mul30, i32* %incdec.ptr27, align 4
37   br i1 undef, label %if.then, label %if.end
39 if.then:                                          ; preds = %entry
40   call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() nounwind, !srcloc !0
41   br label %if.end
43 if.end:                                           ; preds = %if.then, %entry
44   %tmp34 = load i32* getelementptr inbounds ([16 x i32]* @out, i64 0, i64 0), align 16
45   %tmp35 = load i32* getelementptr inbounds ([16 x i32]* @in, i64 0, i64 0), align 16
46   %add36 = add i32 %tmp35, 23
47   %mul38 = mul i32 %add36, %x
48   %cmp = icmp eq i32 %tmp34, %mul38
49   br i1 %cmp, label %lor.lhs.false, label %if.then59
51 lor.lhs.false:                                    ; preds = %if.end
52   %tmp39 = load i32* getelementptr inbounds ([16 x i32]* @out, i64 0, i64 1), align 4
53   %tmp40 = load i32* getelementptr inbounds ([16 x i32]* @in, i64 0, i64 1), align 4
54   %add41 = add i32 %tmp40, 142
55   %mul43 = mul i32 %add41, %y
56   %cmp44 = icmp eq i32 %tmp39, %mul43
57   br i1 %cmp44, label %lor.lhs.false45, label %if.then59
59 lor.lhs.false45:                                  ; preds = %lor.lhs.false
60   %tmp46 = load i32* getelementptr inbounds ([16 x i32]* @out, i64 0, i64 2), align 8
61   %tmp47 = load i32* getelementptr inbounds ([16 x i32]* @in, i64 0, i64 2), align 8
62   %add48 = add i32 %tmp47, 2
63   %mul50 = mul i32 %add48, %x
64   %cmp51 = icmp eq i32 %tmp46, %mul50
65   br i1 %cmp51, label %lor.lhs.false52, label %if.then59
67 lor.lhs.false52:                                  ; preds = %lor.lhs.false45
68   %tmp53 = load i32* getelementptr inbounds ([16 x i32]* @out, i64 0, i64 3), align 4
69   %tmp54 = load i32* getelementptr inbounds ([16 x i32]* @in, i64 0, i64 3), align 4
70   %add55 = add i32 %tmp54, 31
71   %mul57 = mul i32 %add55, %y
72   %cmp58 = icmp eq i32 %tmp53, %mul57
73   br i1 %cmp58, label %if.end60, label %if.then59
75 if.then59:                                        ; preds = %lor.lhs.false52, %lor.lhs.false45, %lor.lhs.false, %if.end
76   call void @abort() noreturn nounwind
77   unreachable
79 if.end60:                                         ; preds = %lor.lhs.false52
80   ret i32 0
83 declare void @abort() noreturn
85 define i32 @main() nounwind uwtable {
86 entry:
87   call void @check_vect()
88   %call = call i32 @main1(i32 2, i32 3, i32* getelementptr inbounds ([16 x i32]* @in, i64 0, i64 0), i32* getelementptr inbounds ([16 x i32]* @out, i64 0, i64 0))
89   ret i32 0
92 define internal void @check_vect() nounwind uwtable noinline {
93 entry:
94   %a = alloca i32, align 4
95   %b = alloca i32, align 4
96   %c = alloca i32, align 4
97   %d = alloca i32, align 4
98   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
99   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
100   %tobool = icmp eq i32 %call1, 0
101   br i1 %tobool, label %if.then, label %lor.lhs.false
103 lor.lhs.false:                                    ; preds = %entry
104   %tmp4 = load i32* %d, align 4
105   %and6 = and i32 %tmp4, 67108864
106   %cmp = icmp eq i32 %and6, 0
107   br i1 %cmp, label %if.then, label %if.end
109 if.then:                                          ; preds = %entry, %lor.lhs.false
110   call void @exit(i32 0) noreturn nounwind
111   unreachable
113 if.end:                                           ; preds = %lor.lhs.false
114   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
115   ret void
118 declare void (i32)* @signal(i32, void (i32)*) nounwind
120 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
121 entry:
122   call void @exit(i32 0) noreturn nounwind
123   unreachable
125 return:                                           ; No predecessors!
126   ret void
129 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
130 entry:
131   %and = and i32 %__level, -2147483648
132   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
133   %cmp = icmp ult i32 %call, %__level
134   br i1 %cmp, label %if.then, label %if.end
136 if.then:                                          ; preds = %entry
137   br label %return
139 if.end:                                           ; preds = %entry
140   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !1
141   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
142   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
143   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
144   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
145   store i32 %asmresult, i32* %__eax, align 4
146   store i32 %asmresult8, i32* %__ebx, align 4
147   store i32 %asmresult9, i32* %__ecx, align 4
148   store i32 %asmresult10, i32* %__edx, align 4
149   br label %return
151 return:                                           ; preds = %if.end, %if.then
152   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
153   ret i32 %retval.0
156 declare void @exit(i32) noreturn
158 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
159 entry:
160   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !2
161   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
162   %tobool = icmp eq i32* %__sig, null
163   br i1 %tobool, label %if.end, label %if.then
165 if.then:                                          ; preds = %entry
166   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
167   store i32 %asmresult1, i32* %__sig, align 4
168   br label %if.end
170 if.end:                                           ; preds = %entry, %if.then
171   ret i32 %asmresult
174 !0 = metadata !{i32 664}
175 !1 = metadata !{i32 -2147343192, i32 -2147343184} 
176 !2 = metadata !{i32 -2147343315, i32 -2147343307} 
177 ; CHECK: define