Home | History | Annotate | Download | only in X86
      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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: test5:
     47 ; CHECK: pcmpeqd
     48 ; CHECK: pshufd $177
     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-LABEL: test6:
     58 ; CHECK: pcmpeqd
     59 ; CHECK: pshufd $177
     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 }
     68 
     69 define <2 x i64> @test7(<2 x i64> %A, <2 x i64> %B) nounwind {
     70 ; CHECK: [[CONSTSEG:[A-Z0-9_]*]]:
     71 ; CHECK:      .long	2147483648
     72 ; CHECK-NEXT: .long	0
     73 ; CHECK-NEXT: .long	2147483648
     74 ; CHECK-NEXT: .long	0
     75 ; CHECK-LABEL: test7:
     76 ; CHECK: movdqa [[CONSTSEG]], [[CONSTREG:%xmm[0-9]*]]
     77 ; CHECK: pxor [[CONSTREG]]
     78 ; CHECK: pxor [[CONSTREG]]
     79 ; CHECK: pcmpgtd %xmm1
     80 ; CHECK: pshufd $160
     81 ; CHECK: pcmpeqd
     82 ; CHECK: pshufd $245
     83 ; CHECK: pand
     84 ; CHECK: pshufd $245
     85 ; CHECK: por
     86 ; CHECK: ret
     87 	%C = icmp sgt <2 x i64> %A, %B
     88 	%D = sext <2 x i1> %C to <2 x i64>
     89 	ret <2 x i64> %D
     90 }
     91 
     92 define <2 x i64> @test8(<2 x i64> %A, <2 x i64> %B) nounwind {
     93 ; CHECK-LABEL: test8:
     94 ; CHECK: pxor
     95 ; CHECK: pxor
     96 ; CHECK: pcmpgtd %xmm0
     97 ; CHECK: pshufd $160
     98 ; CHECK: pcmpeqd
     99 ; CHECK: pshufd $245
    100 ; CHECK: pand
    101 ; CHECK: pshufd $245
    102 ; CHECK: por
    103 ; CHECK: ret
    104 	%C = icmp slt <2 x i64> %A, %B
    105 	%D = sext <2 x i1> %C to <2 x i64>
    106 	ret <2 x i64> %D
    107 }
    108 
    109 define <2 x i64> @test9(<2 x i64> %A, <2 x i64> %B) nounwind {
    110 ; CHECK-LABEL: test9:
    111 ; CHECK: pxor
    112 ; CHECK: pxor
    113 ; CHECK: pcmpgtd %xmm0
    114 ; CHECK: pshufd $160
    115 ; CHECK: pcmpeqd
    116 ; CHECK: pshufd $245
    117 ; CHECK: pand
    118 ; CHECK: pshufd $245
    119 ; CHECK: por
    120 ; CHECK: pcmpeqd
    121 ; CHECK: pxor
    122 ; CHECK: ret
    123 	%C = icmp sge <2 x i64> %A, %B
    124 	%D = sext <2 x i1> %C to <2 x i64>
    125 	ret <2 x i64> %D
    126 }
    127 
    128 define <2 x i64> @test10(<2 x i64> %A, <2 x i64> %B) nounwind {
    129 ; CHECK-LABEL: test10:
    130 ; CHECK: pxor
    131 ; CHECK: pxor
    132 ; CHECK: pcmpgtd %xmm1
    133 ; CHECK: pshufd $160
    134 ; CHECK: pcmpeqd
    135 ; CHECK: pshufd $245
    136 ; CHECK: pand
    137 ; CHECK: pshufd $245
    138 ; CHECK: por
    139 ; CHECK: pcmpeqd
    140 ; CHECK: pxor
    141 ; CHECK: ret
    142 	%C = icmp sle <2 x i64> %A, %B
    143 	%D = sext <2 x i1> %C to <2 x i64>
    144 	ret <2 x i64> %D
    145 }
    146 
    147 define <2 x i64> @test11(<2 x i64> %A, <2 x i64> %B) nounwind {
    148 ; CHECK: [[CONSTSEG:[A-Z0-9_]*]]:
    149 ; CHECK:      .long	2147483648
    150 ; CHECK-NEXT: .long	2147483648
    151 ; CHECK-NEXT: .long	2147483648
    152 ; CHECK-NEXT: .long	2147483648
    153 ; CHECK-LABEL: test11:
    154 ; CHECK: movdqa [[CONSTSEG]], [[CONSTREG:%xmm[0-9]*]]
    155 ; CHECK: pxor [[CONSTREG]]
    156 ; CHECK: pxor [[CONSTREG]]
    157 ; CHECK: pcmpgtd %xmm1
    158 ; CHECK: pshufd $160
    159 ; CHECK: pcmpeqd
    160 ; CHECK: pshufd $245
    161 ; CHECK: pand
    162 ; CHECK: pshufd $245
    163 ; CHECK: por
    164 ; CHECK: ret
    165 	%C = icmp ugt <2 x i64> %A, %B
    166 	%D = sext <2 x i1> %C to <2 x i64>
    167 	ret <2 x i64> %D
    168 }
    169 
    170 define <2 x i64> @test12(<2 x i64> %A, <2 x i64> %B) nounwind {
    171 ; CHECK-LABEL: test12:
    172 ; CHECK: pxor
    173 ; CHECK: pxor
    174 ; CHECK: pcmpgtd %xmm0
    175 ; CHECK: pshufd $160
    176 ; CHECK: pcmpeqd
    177 ; CHECK: pshufd $245
    178 ; CHECK: pand
    179 ; CHECK: pshufd $245
    180 ; CHECK: por
    181 ; CHECK: ret
    182 	%C = icmp ult <2 x i64> %A, %B
    183 	%D = sext <2 x i1> %C to <2 x i64>
    184 	ret <2 x i64> %D
    185 }
    186 
    187 define <2 x i64> @test13(<2 x i64> %A, <2 x i64> %B) nounwind {
    188 ; CHECK-LABEL: test13:
    189 ; CHECK: pxor
    190 ; CHECK: pxor
    191 ; CHECK: pcmpgtd %xmm0
    192 ; CHECK: pshufd $160
    193 ; CHECK: pcmpeqd
    194 ; CHECK: pshufd $245
    195 ; CHECK: pand
    196 ; CHECK: pshufd $245
    197 ; CHECK: por
    198 ; CHECK: pcmpeqd
    199 ; CHECK: pxor
    200 ; CHECK: ret
    201 	%C = icmp uge <2 x i64> %A, %B
    202 	%D = sext <2 x i1> %C to <2 x i64>
    203 	ret <2 x i64> %D
    204 }
    205 
    206 define <2 x i64> @test14(<2 x i64> %A, <2 x i64> %B) nounwind {
    207 ; CHECK-LABEL: test14:
    208 ; CHECK: pxor
    209 ; CHECK: pxor
    210 ; CHECK: pcmpgtd %xmm1
    211 ; CHECK: pshufd $160
    212 ; CHECK: pcmpeqd
    213 ; CHECK: pshufd $245
    214 ; CHECK: pand
    215 ; CHECK: pshufd $245
    216 ; CHECK: por
    217 ; CHECK: pcmpeqd
    218 ; CHECK: pxor
    219 ; CHECK: ret
    220 	%C = icmp ule <2 x i64> %A, %B
    221 	%D = sext <2 x i1> %C to <2 x i64>
    222 	ret <2 x i64> %D
    223 }
    224