Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-ifcvt-4.ll
blob2dc755b5812c5ba9c026b5e21ea2d019d5e53904
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-ifcvt-4.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-ifcvt-4.s > vect-ifcvt-4.ll
6 ; ModuleID = 'vect-ifcvt-4.s'
7 ; XFAIL: *
8 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"
9 target triple = "x86_64-unknown-linux-gnu"
11 @A = global [16 x i32] [i32 36, i32 39, i32 42, i32 45, i32 43, i32 32, i32 21, i32 12, i32 23, i32 34, i32 45, i32 56, i32 67, i32 78, i32 89, i32 11], align 16
12 @B = global [16 x i32] [i32 42, i32 42, i32 42, i32 0, i32 0, i32 42, i32 42, i32 42, i32 42, i32 42, i32 0, i32 0, i32 0, i32 0, i32 0, i32 42], align 16
14 define i32 @main() nounwind uwtable {
15 entry:
16   call void @check_vect()
17   br label %for.cond
19 for.cond:                                         ; preds = %for.inc, %entry
20   %indvar1 = phi i64 [ %indvar.next2, %for.inc ], [ 0, %entry ]
21   %arrayidx = getelementptr [16 x i32]* @A, 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   %cmp3 = icmp slt i32 %tmp2, 43
28   %cond = select i1 %cmp3, i32 42, i32 0
29   store i32 %cond, i32* %arrayidx, align 4
30   br label %for.inc
32 for.inc:                                          ; preds = %for.body
33   %indvar.next2 = add i64 %indvar1, 1
34   br label %for.cond
36 for.end:                                          ; preds = %for.cond
37   br label %for.cond8
39 for.cond8:                                        ; preds = %for.inc21, %for.end
40   %indvar = phi i64 [ %indvar.next, %for.inc21 ], [ 0, %for.end ]
41   %arrayidx18 = getelementptr [16 x i32]* @B, i64 0, i64 %indvar
42   %arrayidx14 = getelementptr [16 x i32]* @A, i64 0, i64 %indvar
43   %i.1 = trunc i64 %indvar to i32
44   %cmp10 = icmp slt i32 %i.1, 16
45   br i1 %cmp10, label %for.body11, label %for.end24
47 for.body11:                                       ; preds = %for.cond8
48   %tmp15 = load i32* %arrayidx14, align 4
49   %tmp19 = load i32* %arrayidx18, align 4
50   %cmp20 = icmp eq i32 %tmp15, %tmp19
51   br i1 %cmp20, label %if.end, label %if.then
53 if.then:                                          ; preds = %for.body11
54   call void @abort() noreturn nounwind
55   unreachable
57 if.end:                                           ; preds = %for.body11
58   br label %for.inc21
60 for.inc21:                                        ; preds = %if.end
61   %indvar.next = add i64 %indvar, 1
62   br label %for.cond8
64 for.end24:                                        ; preds = %for.cond8
65   ret i32 0
68 define internal void @check_vect() nounwind uwtable noinline {
69 entry:
70   %a = alloca i32, align 4
71   %b = alloca i32, align 4
72   %c = alloca i32, align 4
73   %d = alloca i32, align 4
74   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
75   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
76   %tobool = icmp eq i32 %call1, 0
77   br i1 %tobool, label %if.then, label %lor.lhs.false
79 lor.lhs.false:                                    ; preds = %entry
80   %tmp4 = load i32* %d, align 4
81   %and6 = and i32 %tmp4, 67108864
82   %cmp = icmp eq i32 %and6, 0
83   br i1 %cmp, label %if.then, label %if.end
85 if.then:                                          ; preds = %entry, %lor.lhs.false
86   call void @exit(i32 0) noreturn nounwind
87   unreachable
89 if.end:                                           ; preds = %lor.lhs.false
90   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
91   ret void
94 declare void @abort() noreturn
96 declare void (i32)* @signal(i32, void (i32)*) nounwind
98 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
99 entry:
100   call void @exit(i32 0) noreturn nounwind
101   unreachable
103 return:                                           ; No predecessors!
104   ret void
107 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
108 entry:
109   %and = and i32 %__level, -2147483648
110   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
111   %cmp = icmp ult i32 %call, %__level
112   br i1 %cmp, label %if.then, label %if.end
114 if.then:                                          ; preds = %entry
115   br label %return
117 if.end:                                           ; preds = %entry
118   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
119   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
120   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
121   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
122   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
123   store i32 %asmresult, i32* %__eax, align 4
124   store i32 %asmresult8, i32* %__ebx, align 4
125   store i32 %asmresult9, i32* %__ecx, align 4
126   store i32 %asmresult10, i32* %__edx, align 4
127   br label %return
129 return:                                           ; preds = %if.end, %if.then
130   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
131   ret i32 %retval.0
134 declare void @exit(i32) noreturn
136 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
137 entry:
138   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
139   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
140   %tobool = icmp eq i32* %__sig, null
141   br i1 %tobool, label %if.end, label %if.then
143 if.then:                                          ; preds = %entry
144   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
145   store i32 %asmresult1, i32* %__sig, align 4
146   br label %if.end
148 if.end:                                           ; preds = %entry, %if.then
149   ret i32 %asmresult
152 !0 = metadata !{i32 -2147343642, i32 -2147343634} 
153 !1 = metadata !{i32 -2147343765, i32 -2147343757} 
154 ; CHECK: define