X86: Disable generation of rep;movsl when %esi is used as a base pointer.
[oota-llvm.git] / test / CodeGen / X86 / vec_compare.ll
1 ; RUN: llc < %s -march=x86 -mcpu=yonah -mtriple=i386-apple-darwin | FileCheck %s
2
3
4 define <4 x i32> @test1(<4 x i32> %A, <4 x i32> %B) nounwind {
5 ; CHECK: test1:
6 ; CHECK: pcmpgtd
7 ; CHECK: ret
8
9         %C = icmp sgt <4 x i32> %A, %B
10         %D = sext <4 x i1> %C to <4 x i32>
11         ret <4 x i32> %D
12 }
13
14 define <4 x i32> @test2(<4 x i32> %A, <4 x i32> %B) nounwind {
15 ; CHECK: test2:
16 ; CHECK: pcmp
17 ; CHECK: pcmp
18 ; CHECK: pxor
19 ; CHECK: ret
20         %C = icmp sge <4 x i32> %A, %B
21         %D = sext <4 x i1> %C to <4 x i32>
22         ret <4 x i32> %D
23 }
24
25 define <4 x i32> @test3(<4 x i32> %A, <4 x i32> %B) nounwind {
26 ; CHECK: test3:
27 ; CHECK: pcmpgtd
28 ; CHECK: movdqa
29 ; CHECK: ret
30         %C = icmp slt <4 x i32> %A, %B
31         %D = sext <4 x i1> %C to <4 x i32>
32         ret <4 x i32> %D
33 }
34
35 define <4 x i32> @test4(<4 x i32> %A, <4 x i32> %B) nounwind {
36 ; CHECK: test4:
37 ; CHECK: movdqa
38 ; CHECK: pcmpgtd
39 ; CHECK: ret
40         %C = icmp ugt <4 x i32> %A, %B
41         %D = sext <4 x i1> %C to <4 x i32>
42         ret <4 x i32> %D
43 }
44
45 define <2 x i64> @test5(<2 x i64> %A, <2 x i64> %B) nounwind {
46 ; CHECK: test5:
47 ; CHECK: pcmpeqd
48 ; CHECK: pshufd $-79
49 ; CHECK: pand
50 ; CHECK: ret
51         %C = icmp eq <2 x i64> %A, %B
52         %D = sext <2 x i1> %C to <2 x i64>
53         ret <2 x i64> %D
54 }
55
56 define <2 x i64> @test6(<2 x i64> %A, <2 x i64> %B) nounwind {
57 ; CHECK: test6:
58 ; CHECK: pcmpeqd
59 ; CHECK: pshufd $-79
60 ; CHECK: pand
61 ; CHECK: pcmpeqd
62 ; CHECK: pxor
63 ; CHECK: ret
64         %C = icmp ne <2 x i64> %A, %B
65         %D = sext <2 x i1> %C to <2 x i64>
66         ret <2 x i64> %D
67 }