Add compile command to each testcase
[gcc-vect-testsuite.git] / pr43430-1.ll
bloba1a13e3ccf91f62ea44ae9b426247683e512c75a
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 pr43430-1.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer pr43430-1.s > pr43430-1.ll
6 ; ModuleID = 'pr43430-1.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 @data_ch1 = global [17 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, i32 0], align 16
11 @data_ch2 = global [17 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, i32 0], align 16
13 define i32 @foo(i32* %s1, i32* %s2, i32 %stride) nounwind uwtable noinline {
14 entry:
15   %tmp = zext i32 %stride to i64
16   br label %for.cond
18 for.cond:                                         ; preds = %for.inc, %entry
19   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
20   %score.0 = phi i32 [ 0, %entry ], [ %add40, %for.inc ]
21   %tmp1 = add i64 %tmp, %indvar
22   %add = trunc i64 %tmp1 to i32
23   %arrayidx = getelementptr i32* %s1, i64 %indvar
24   %exitcond = icmp ne i64 %indvar, 16
25   br i1 %exitcond, label %for.body, label %for.end
27 for.body:                                         ; preds = %for.cond
28   %tmp3 = load i32* %arrayidx, align 4
29   %idxprom6 = sext i32 %add to i64
30   %arrayidx8 = getelementptr inbounds i32* %s1, i64 %idxprom6
31   %tmp9 = load i32* %arrayidx8, align 4
32   %sub = sub nsw i32 %tmp3, %tmp9
33   %idxprom13 = sext i32 %add to i64
34   %arrayidx15 = getelementptr inbounds i32* %s2, i64 %idxprom13
35   %tmp16 = load i32* %arrayidx15, align 4
36   %add17 = add nsw i32 %sub, %tmp16
37   %cmp18 = icmp sgt i32 %add17, -1
38   br i1 %cmp18, label %cond.true, label %cond.false
40 cond.true:                                        ; preds = %for.body
41   %tmp23 = load i32* %arrayidx, align 4
42   %idxprom27 = sext i32 %add to i64
43   %arrayidx29 = getelementptr inbounds i32* %s2, i64 %idxprom27
44   %tmp30 = load i32* %arrayidx29, align 4
45   %add31 = add nsw i32 %tmp23, %tmp30
46   br label %cond.end
48 cond.false:                                       ; preds = %for.body
49   %idxprom35 = sext i32 %add to i64
50   %arrayidx37 = getelementptr inbounds i32* %s2, i64 %idxprom35
51   %tmp38 = load i32* %arrayidx37, align 4
52   br label %cond.end
54 cond.end:                                         ; preds = %cond.false, %cond.true
55   %cond = phi i32 [ %add31, %cond.true ], [ %tmp38, %cond.false ]
56   br label %for.inc
58 for.inc:                                          ; preds = %cond.end
59   %add40 = add nsw i32 %score.0, %cond
60   %indvar.next = add i64 %indvar, 1
61   br label %for.cond
63 for.end:                                          ; preds = %for.cond
64   %score.0.lcssa = phi i32 [ %score.0, %for.cond ]
65   %cmp43 = icmp eq i32 %score.0.lcssa, 480
66   br i1 %cmp43, label %if.end, label %if.then
68 if.then:                                          ; preds = %for.end
69   call void @abort() noreturn nounwind
70   unreachable
72 if.end:                                           ; preds = %for.end
73   ret i32 0
76 declare void @abort() noreturn
78 define i32 @main() nounwind uwtable {
79 entry:
80   call void @check_vect()
81   %call = call i32 @foo(i32* getelementptr inbounds ([17 x i32]* @data_ch1, i64 0, i64 0), i32* getelementptr inbounds ([17 x i32]* @data_ch2, i64 0, i64 0), i32 1)
82   ret i32 %call
85 define internal void @check_vect() nounwind uwtable noinline {
86 entry:
87   %a = alloca i32, align 4
88   %b = alloca i32, align 4
89   %c = alloca i32, align 4
90   %d = alloca i32, align 4
91   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
92   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
93   %tobool = icmp eq i32 %call1, 0
94   br i1 %tobool, label %if.then, label %lor.lhs.false
96 lor.lhs.false:                                    ; preds = %entry
97   %tmp4 = load i32* %d, align 4
98   %and6 = and i32 %tmp4, 67108864
99   %cmp = icmp eq i32 %and6, 0
100   br i1 %cmp, label %if.then, label %if.end
102 if.then:                                          ; preds = %entry, %lor.lhs.false
103   call void @exit(i32 0) noreturn nounwind
104   unreachable
106 if.end:                                           ; preds = %lor.lhs.false
107   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
108   ret void
111 declare void (i32)* @signal(i32, void (i32)*) nounwind
113 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
114 entry:
115   call void @exit(i32 0) noreturn nounwind
116   unreachable
118 return:                                           ; No predecessors!
119   ret void
122 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
123 entry:
124   %and = and i32 %__level, -2147483648
125   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
126   %cmp = icmp ult i32 %call, %__level
127   br i1 %cmp, label %if.then, label %if.end
129 if.then:                                          ; preds = %entry
130   br label %return
132 if.end:                                           ; preds = %entry
133   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
134   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
135   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
136   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
137   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
138   store i32 %asmresult, i32* %__eax, align 4
139   store i32 %asmresult8, i32* %__ebx, align 4
140   store i32 %asmresult9, i32* %__ecx, align 4
141   store i32 %asmresult10, i32* %__edx, align 4
142   br label %return
144 return:                                           ; preds = %if.end, %if.then
145   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
146   ret i32 %retval.0
149 declare void @exit(i32) noreturn
151 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
152 entry:
153   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
154   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
155   %tobool = icmp eq i32* %__sig, null
156   br i1 %tobool, label %if.end, label %if.then
158 if.then:                                          ; preds = %entry
159   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
160   store i32 %asmresult1, i32* %__sig, align 4
161   br label %if.end
163 if.end:                                           ; preds = %entry, %if.then
164   ret i32 %asmresult
167 !0 = metadata !{i32 -2147343482, i32 -2147343474} 
168 !1 = metadata !{i32 -2147343605, i32 -2147343597} 
169 ; CHECK: define