Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-iv-7.ll
blob400808c887a635e4e173abd02d5bf848e868a12e
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-iv-7.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-iv-7.s > vect-iv-7.ll
6 ; ModuleID = 'vect-iv-7.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 @result = global [16 x i32] [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 32, i32 34, i32 36, i32 38], align 16
12 define i32 @main1(i32 %X) nounwind uwtable noinline {
13 entry:
14   %arr = alloca [16 x i32], align 16
15   %tmp = zext i32 %X to i64
16   br label %do.body
18 do.body:                                          ; preds = %do.cond, %entry
19   %indvar1 = phi i64 [ %indvar.next2, %do.cond ], [ 0, %entry ]
20   %tmp3 = mul i64 %tmp, %indvar1
21   %tmp4 = add i64 %tmp3, 8
22   %add = trunc i64 %tmp4 to i32
23   %arrayidx = getelementptr [16 x i32]* %arr, i64 0, i64 %indvar1
24   store i32 %add, i32* %arrayidx, align 4
25   br label %do.cond
27 do.cond:                                          ; preds = %do.body
28   %indvar.next2 = add i64 %indvar1, 1
29   %exitcond = icmp ne i64 %indvar.next2, 16
30   br i1 %exitcond, label %do.body, label %do.end
32 do.end:                                           ; preds = %do.cond
33   br label %for.cond
35 for.cond:                                         ; preds = %for.inc, %do.end
36   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %do.end ]
37   %arrayidx16 = getelementptr [16 x i32]* @result, i64 0, i64 %indvar
38   %arrayidx12 = getelementptr [16 x i32]* %arr, i64 0, i64 %indvar
39   %i.1 = trunc i64 %indvar to i32
40   %cmp9 = icmp slt i32 %i.1, 16
41   br i1 %cmp9, label %for.body, label %for.end
43 for.body:                                         ; preds = %for.cond
44   %tmp13 = load i32* %arrayidx12, align 4
45   %tmp17 = load i32* %arrayidx16, align 4
46   %cmp18 = icmp eq i32 %tmp13, %tmp17
47   br i1 %cmp18, label %if.end, label %if.then
49 if.then:                                          ; preds = %for.body
50   call void @abort() noreturn nounwind
51   unreachable
53 if.end:                                           ; preds = %for.body
54   br label %for.inc
56 for.inc:                                          ; preds = %if.end
57   %indvar.next = add i64 %indvar, 1
58   br label %for.cond
60 for.end:                                          ; preds = %for.cond
61   ret i32 0
64 declare void @abort() noreturn
66 define i32 @main() nounwind uwtable {
67 entry:
68   call void @check_vect()
69   %call = call i32 @main1(i32 2)
70   ret i32 %call
73 define internal void @check_vect() nounwind uwtable noinline {
74 entry:
75   %a = alloca i32, align 4
76   %b = alloca i32, align 4
77   %c = alloca i32, align 4
78   %d = alloca i32, align 4
79   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
80   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
81   %tobool = icmp eq i32 %call1, 0
82   br i1 %tobool, label %if.then, label %lor.lhs.false
84 lor.lhs.false:                                    ; preds = %entry
85   %tmp4 = load i32* %d, align 4
86   %and6 = and i32 %tmp4, 67108864
87   %cmp = icmp eq i32 %and6, 0
88   br i1 %cmp, label %if.then, label %if.end
90 if.then:                                          ; preds = %entry, %lor.lhs.false
91   call void @exit(i32 0) noreturn nounwind
92   unreachable
94 if.end:                                           ; preds = %lor.lhs.false
95   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
96   ret void
99 declare void (i32)* @signal(i32, void (i32)*) nounwind
101 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
102 entry:
103   call void @exit(i32 0) noreturn nounwind
104   unreachable
106 return:                                           ; No predecessors!
107   ret void
110 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
111 entry:
112   %and = and i32 %__level, -2147483648
113   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
114   %cmp = icmp ult i32 %call, %__level
115   br i1 %cmp, label %if.then, label %if.end
117 if.then:                                          ; preds = %entry
118   br label %return
120 if.end:                                           ; preds = %entry
121   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
122   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
123   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
124   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
125   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
126   store i32 %asmresult, i32* %__eax, align 4
127   store i32 %asmresult8, i32* %__ebx, align 4
128   store i32 %asmresult9, i32* %__ecx, align 4
129   store i32 %asmresult10, i32* %__edx, align 4
130   br label %return
132 return:                                           ; preds = %if.end, %if.then
133   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
134   ret i32 %retval.0
137 declare void @exit(i32) noreturn
139 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
140 entry:
141   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
142   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
143   %tobool = icmp eq i32* %__sig, null
144   br i1 %tobool, label %if.end, label %if.then
146 if.then:                                          ; preds = %entry
147   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
148   store i32 %asmresult1, i32* %__sig, align 4
149   br label %if.end
151 if.end:                                           ; preds = %entry, %if.then
152   ret i32 %asmresult
155 !0 = metadata !{i32 -2147343562, i32 -2147343554} 
156 !1 = metadata !{i32 -2147343685, i32 -2147343677} 
157 ; CHECK: define