Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-77-alignchecks.ll
blob083191844e38b421024f52237d07684daffa5eda
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-77-alignchecks.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-77-alignchecks.s > vect-77-alignchecks.ll
6 ; ModuleID = 'vect-77-alignchecks.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 @ib = global [16 x i32] [i32 0, i32 1, i32 3, i32 5, i32 7, i32 11, i32 13, i32 17, i32 0, i32 2, i32 6, i32 10, i32 14, i32 22, i32 26, i32 34], align 16
12 define i32 @main1(i32* %ib, i32 %off) nounwind uwtable noinline {
13 entry:
14   %ia = alloca [8 x i32], align 16
15   %tmp6 = zext i32 %off to i64
16   br label %for.cond
18 for.cond:                                         ; preds = %for.inc, %entry
19   %indvar4 = phi i64 [ %indvar.next5, %for.inc ], [ 0, %entry ]
20   %arrayidx7 = getelementptr [8 x i32]* %ia, i64 0, i64 %indvar4
21   %tmp7 = add i64 %tmp6, %indvar4
22   %add = trunc i64 %tmp7 to i32
23   %exitcond = icmp ne i64 %indvar4, 8
24   br i1 %exitcond, label %for.body, label %for.end
26 for.body:                                         ; preds = %for.cond
27   %idxprom = sext i32 %add to i64
28   %arrayidx = getelementptr inbounds i32* %ib, i64 %idxprom
29   %tmp4 = load i32* %arrayidx, align 4
30   store i32 %tmp4, i32* %arrayidx7, align 4
31   br label %for.inc
33 for.inc:                                          ; preds = %for.body
34   %indvar.next5 = add i64 %indvar4, 1
35   br label %for.cond
37 for.end:                                          ; preds = %for.cond
38   %tmp = zext i32 %off to i64
39   br label %for.cond9
41 for.cond9:                                        ; preds = %for.inc25, %for.end
42   %indvar = phi i64 [ %indvar.next, %for.inc25 ], [ 0, %for.end ]
43   %tmp1 = add i64 %tmp, %indvar
44   %add19 = trunc i64 %tmp1 to i32
45   %arrayidx15 = getelementptr [8 x i32]* %ia, i64 0, i64 %indvar
46   %i.1 = trunc i64 %indvar to i32
47   %cmp11 = icmp slt i32 %i.1, 8
48   br i1 %cmp11, label %for.body12, label %for.end28
50 for.body12:                                       ; preds = %for.cond9
51   %tmp16 = load i32* %arrayidx15, align 4
52   %idxprom20 = sext i32 %add19 to i64
53   %arrayidx22 = getelementptr inbounds i32* %ib, i64 %idxprom20
54   %tmp23 = load i32* %arrayidx22, align 4
55   %cmp24 = icmp eq i32 %tmp16, %tmp23
56   br i1 %cmp24, label %if.end, label %if.then
58 if.then:                                          ; preds = %for.body12
59   call void @abort() noreturn nounwind
60   unreachable
62 if.end:                                           ; preds = %for.body12
63   br label %for.inc25
65 for.inc25:                                        ; preds = %if.end
66   %indvar.next = add i64 %indvar, 1
67   br label %for.cond9
69 for.end28:                                        ; preds = %for.cond9
70   ret i32 0
73 declare void @abort() noreturn
75 define i32 @main() nounwind uwtable {
76 entry:
77   call void @check_vect()
78   %call = call i32 @main1(i32* getelementptr inbounds ([16 x i32]* @ib, i64 0, i64 0), i32 8)
79   ret i32 0
82 define internal void @check_vect() nounwind uwtable noinline {
83 entry:
84   %a = alloca i32, align 4
85   %b = alloca i32, align 4
86   %c = alloca i32, align 4
87   %d = alloca i32, align 4
88   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
89   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
90   %tobool = icmp eq i32 %call1, 0
91   br i1 %tobool, label %if.then, label %lor.lhs.false
93 lor.lhs.false:                                    ; preds = %entry
94   %tmp4 = load i32* %d, align 4
95   %and6 = and i32 %tmp4, 67108864
96   %cmp = icmp eq i32 %and6, 0
97   br i1 %cmp, label %if.then, label %if.end
99 if.then:                                          ; preds = %entry, %lor.lhs.false
100   call void @exit(i32 0) noreturn nounwind
101   unreachable
103 if.end:                                           ; preds = %lor.lhs.false
104   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
105   ret void
108 declare void (i32)* @signal(i32, void (i32)*) nounwind
110 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
111 entry:
112   call void @exit(i32 0) noreturn nounwind
113   unreachable
115 return:                                           ; No predecessors!
116   ret void
119 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
120 entry:
121   %and = and i32 %__level, -2147483648
122   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
123   %cmp = icmp ult i32 %call, %__level
124   br i1 %cmp, label %if.then, label %if.end
126 if.then:                                          ; preds = %entry
127   br label %return
129 if.end:                                           ; preds = %entry
130   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
131   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
132   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
133   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
134   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
135   store i32 %asmresult, i32* %__eax, align 4
136   store i32 %asmresult8, i32* %__ebx, align 4
137   store i32 %asmresult9, i32* %__ecx, align 4
138   store i32 %asmresult10, i32* %__edx, align 4
139   br label %return
141 return:                                           ; preds = %if.end, %if.then
142   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
143   ret i32 %retval.0
146 declare void @exit(i32) noreturn
148 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
149 entry:
150   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
151   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
152   %tobool = icmp eq i32* %__sig, null
153   br i1 %tobool, label %if.end, label %if.then
155 if.then:                                          ; preds = %entry
156   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
157   store i32 %asmresult1, i32* %__sig, align 4
158   br label %if.end
160 if.end:                                           ; preds = %entry, %if.then
161   ret i32 %asmresult
164 !0 = metadata !{i32 -2147342265, i32 -2147342257} 
165 !1 = metadata !{i32 -2147342388, i32 -2147342380} 
166 ; CHECK: define