Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-align-1.ll
blob17f13e2ce237e820bd68d046f2bc928599ce8e2c
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-align-1.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-align-1.s > vect-align-1.ll
6 ; ModuleID = 'vect-align-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 %struct.foo = type <{ i8, [16 x i32] }>
12 @x = 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
14 define i32 @main1(%struct.foo* noalias %p) 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   %arrayidx6 = getelementptr %struct.foo* %p, i64 0, i32 1, i64 %indvar1
21   %arrayidx = getelementptr [16 x i32]* @x, i64 0, i64 %indvar1
22   %exitcond = icmp ne i64 %indvar1, 16
23   br i1 %exitcond, label %for.body, label %for.end
25 for.body:                                         ; preds = %for.cond
26   %tmp2 = load i32* %arrayidx, align 4
27   store i32 %tmp2, i32* %arrayidx6, align 1
28   br label %for.inc
30 for.inc:                                          ; preds = %for.body
31   %indvar.next2 = add i64 %indvar1, 1
32   br label %for.cond
34 for.end:                                          ; preds = %for.cond
35   br label %for.cond8
37 for.cond8:                                        ; preds = %for.inc23, %for.end
38   %indvar = phi i64 [ %indvar.next, %for.inc23 ], [ 0, %for.end ]
39   %arrayidx20 = getelementptr [16 x i32]* @x, i64 0, i64 %indvar
40   %arrayidx16 = getelementptr %struct.foo* %p, i64 0, i32 1, i64 %indvar
41   %i.1 = trunc i64 %indvar to i32
42   %cmp10 = icmp slt i32 %i.1, 16
43   br i1 %cmp10, label %for.body11, label %for.end26
45 for.body11:                                       ; preds = %for.cond8
46   %tmp17 = load i32* %arrayidx16, align 1
47   %tmp21 = load i32* %arrayidx20, align 4
48   %cmp22 = icmp eq i32 %tmp17, %tmp21
49   br i1 %cmp22, label %if.end, label %if.then
51 if.then:                                          ; preds = %for.body11
52   call void @abort() noreturn nounwind
53   unreachable
55 if.end:                                           ; preds = %for.body11
56   br label %for.inc23
58 for.inc23:                                        ; preds = %if.end
59   %indvar.next = add i64 %indvar, 1
60   br label %for.cond8
62 for.end26:                                        ; preds = %for.cond8
63   ret i32 0
66 declare void @abort() noreturn nounwind
68 define i32 @main() nounwind uwtable {
69 entry:
70   %call = call noalias i8* @malloc(i64 130) nounwind
71   %tmp = bitcast i8* %call to %struct.foo*
72   call void @check_vect()
73   %call1 = call i32 @main1(%struct.foo* %tmp)
74   ret i32 0
77 declare noalias i8* @malloc(i64) nounwind
79 define internal void @check_vect() nounwind uwtable noinline {
80 entry:
81   %a = alloca i32, align 4
82   %b = alloca i32, align 4
83   %c = alloca i32, align 4
84   %d = alloca i32, align 4
85   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
86   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
87   %tobool = icmp eq i32 %call1, 0
88   br i1 %tobool, label %if.then, label %lor.lhs.false
90 lor.lhs.false:                                    ; preds = %entry
91   %tmp4 = load i32* %d, align 4
92   %and6 = and i32 %tmp4, 67108864
93   %cmp = icmp eq i32 %and6, 0
94   br i1 %cmp, label %if.then, label %if.end
96 if.then:                                          ; preds = %entry, %lor.lhs.false
97   call void @exit(i32 0) noreturn nounwind
98   unreachable
100 if.end:                                           ; preds = %lor.lhs.false
101   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
102   ret void
105 declare void (i32)* @signal(i32, void (i32)*) nounwind
107 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
108 entry:
109   call void @exit(i32 0) noreturn nounwind
110   unreachable
112 return:                                           ; No predecessors!
113   ret void
116 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
117 entry:
118   %and = and i32 %__level, -2147483648
119   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
120   %cmp = icmp ult i32 %call, %__level
121   br i1 %cmp, label %if.then, label %if.end
123 if.then:                                          ; preds = %entry
124   br label %return
126 if.end:                                           ; preds = %entry
127   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
128   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
129   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
130   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
131   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
132   store i32 %asmresult, i32* %__eax, align 4
133   store i32 %asmresult8, i32* %__ebx, align 4
134   store i32 %asmresult9, i32* %__ecx, align 4
135   store i32 %asmresult10, i32* %__edx, align 4
136   br label %return
138 return:                                           ; preds = %if.end, %if.then
139   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
140   ret i32 %retval.0
143 declare void @exit(i32) noreturn nounwind
145 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
146 entry:
147   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
148   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
149   %tobool = icmp eq i32* %__sig, null
150   br i1 %tobool, label %if.end, label %if.then
152 if.then:                                          ; preds = %entry
153   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
154   store i32 %asmresult1, i32* %__sig, align 4
155   br label %if.end
157 if.end:                                           ; preds = %entry, %if.then
158   ret i32 %asmresult
161 !0 = metadata !{i32 -2147226073, i32 -2147226065} 
162 !1 = metadata !{i32 -2147226196, i32 -2147226188} 
163 ; CHECK: define