Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-108.ll
blob567cd24d475839b1b670692dae78d5d6b3108db0
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-108.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-108.s > vect-108.ll
6 ; ModuleID = 'vect-108.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 @ic = global [16 x i32] [i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45], align 16
11 @ib = global [16 x i32] [i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45], align 16
12 @ia = common global [16 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   %indvar1 = phi i64 [ %indvar.next2, %for.inc ], [ 0, %entry ]
20   %arrayidx9 = getelementptr [16 x i32]* @ia, i64 0, i64 %indvar1
21   %arrayidx5 = getelementptr [16 x i32]* @ic, i64 0, i64 %indvar1
22   %arrayidx = getelementptr [16 x i32]* @ib, i64 0, i64 %indvar1
23   %exitcond = icmp ne i64 %indvar1, 16
24   br i1 %exitcond, label %for.body, label %for.end
26 for.body:                                         ; preds = %for.cond
27   %tmp2 = load i32* %arrayidx, align 4
28   %tmp6 = load i32* %arrayidx5, align 4
29   %mul = mul nsw i32 %tmp2, %tmp6
30   store i32 %mul, i32* %arrayidx9, align 4
31   br label %for.inc
33 for.inc:                                          ; preds = %for.body
34   %indvar.next2 = add i64 %indvar1, 1
35   br label %for.cond
37 for.end:                                          ; preds = %for.cond
38   br label %for.cond11
40 for.cond11:                                       ; preds = %for.inc29, %for.end
41   %indvar = phi i64 [ %indvar.next, %for.inc29 ], [ 0, %for.end ]
42   %arrayidx25 = getelementptr [16 x i32]* @ic, i64 0, i64 %indvar
43   %arrayidx21 = getelementptr [16 x i32]* @ib, i64 0, i64 %indvar
44   %arrayidx17 = getelementptr [16 x i32]* @ia, i64 0, i64 %indvar
45   %i.1 = trunc i64 %indvar to i32
46   %cmp13 = icmp slt i32 %i.1, 16
47   br i1 %cmp13, label %for.body14, label %for.end32
49 for.body14:                                       ; preds = %for.cond11
50   %tmp18 = load i32* %arrayidx17, align 4
51   %tmp22 = load i32* %arrayidx21, align 4
52   %tmp26 = load i32* %arrayidx25, align 4
53   %mul27 = mul nsw i32 %tmp22, %tmp26
54   %cmp28 = icmp eq i32 %tmp18, %mul27
55   br i1 %cmp28, label %if.end, label %if.then
57 if.then:                                          ; preds = %for.body14
58   call void @abort() noreturn nounwind
59   unreachable
61 if.end:                                           ; preds = %for.body14
62   br label %for.inc29
64 for.inc29:                                        ; preds = %if.end
65   %indvar.next = add i64 %indvar, 1
66   br label %for.cond11
68 for.end32:                                        ; preds = %for.cond11
69   ret i32 0
72 declare void @abort() noreturn
74 define i32 @main() nounwind uwtable {
75 entry:
76   call void @check_vect()
77   %call = call i32 @main1()
78   ret i32 %call
81 define internal void @check_vect() nounwind uwtable noinline {
82 entry:
83   %a = alloca i32, align 4
84   %b = alloca i32, align 4
85   %c = alloca i32, align 4
86   %d = alloca i32, align 4
87   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
88   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
89   %tobool = icmp eq i32 %call1, 0
90   br i1 %tobool, label %if.then, label %lor.lhs.false
92 lor.lhs.false:                                    ; preds = %entry
93   %tmp4 = load i32* %d, align 4
94   %and6 = and i32 %tmp4, 67108864
95   %cmp = icmp eq i32 %and6, 0
96   br i1 %cmp, label %if.then, label %if.end
98 if.then:                                          ; preds = %entry, %lor.lhs.false
99   call void @exit(i32 0) noreturn nounwind
100   unreachable
102 if.end:                                           ; preds = %lor.lhs.false
103   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
104   ret void
107 declare void (i32)* @signal(i32, void (i32)*) nounwind
109 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
110 entry:
111   call void @exit(i32 0) noreturn nounwind
112   unreachable
114 return:                                           ; No predecessors!
115   ret void
118 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
119 entry:
120   %and = and i32 %__level, -2147483648
121   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
122   %cmp = icmp ult i32 %call, %__level
123   br i1 %cmp, label %if.then, label %if.end
125 if.then:                                          ; preds = %entry
126   br label %return
128 if.end:                                           ; preds = %entry
129   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
130   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
131   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
132   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
133   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
134   store i32 %asmresult, i32* %__eax, align 4
135   store i32 %asmresult8, i32* %__ebx, align 4
136   store i32 %asmresult9, i32* %__ecx, align 4
137   store i32 %asmresult10, i32* %__edx, align 4
138   br label %return
140 return:                                           ; preds = %if.end, %if.then
141   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
142   ret i32 %retval.0
145 declare void @exit(i32) noreturn
147 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
148 entry:
149   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
150   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
151   %tobool = icmp eq i32* %__sig, null
152   br i1 %tobool, label %if.end, label %if.then
154 if.then:                                          ; preds = %entry
155   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
156   store i32 %asmresult1, i32* %__sig, align 4
157   br label %if.end
159 if.end:                                           ; preds = %entry, %if.then
160   ret i32 %asmresult
163 !0 = metadata !{i32 -2147343580, i32 -2147343572} 
164 !1 = metadata !{i32 -2147343703, i32 -2147343695} 
165 ; CHECK: define