Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=-avx,+sse4.2 | FileCheck %s
      3 
      4 define i32 @test_x86_sse42_pcmpestri128(<16 x i8> %a0, <16 x i8> %a2) {
      5 ; CHECK-LABEL: test_x86_sse42_pcmpestri128:
      6 ; CHECK:       ## BB#0:
      7 ; CHECK-NEXT:    movl $7, %eax
      8 ; CHECK-NEXT:    movl $7, %edx
      9 ; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
     10 ; CHECK-NEXT:    movl %ecx, %eax
     11 ; CHECK-NEXT:    retl
     12   %res = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
     13   ret i32 %res
     14 }
     15 declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
     16 
     17 
     18 define i32 @test_x86_sse42_pcmpestri128_load(<16 x i8>* %a0, <16 x i8>* %a2) {
     19 ; CHECK-LABEL: test_x86_sse42_pcmpestri128_load:
     20 ; CHECK:       ## BB#0:
     21 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx
     22 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
     23 ; CHECK-NEXT:    movdqa (%eax), %xmm0
     24 ; CHECK-NEXT:    movl $7, %eax
     25 ; CHECK-NEXT:    movl $7, %edx
     26 ; CHECK-NEXT:    pcmpestri $7, (%ecx), %xmm0
     27 ; CHECK-NEXT:    movl %ecx, %eax
     28 ; CHECK-NEXT:    retl
     29   %1 = load <16 x i8>, <16 x i8>* %a0
     30   %2 = load <16 x i8>, <16 x i8>* %a2
     31   %res = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %1, i32 7, <16 x i8> %2, i32 7, i8 7) ; <i32> [#uses=1]
     32   ret i32 %res
     33 }
     34 
     35 
     36 define i32 @test_x86_sse42_pcmpestria128(<16 x i8> %a0, <16 x i8> %a2) nounwind {
     37 ; CHECK-LABEL: test_x86_sse42_pcmpestria128:
     38 ; CHECK:       ## BB#0:
     39 ; CHECK-NEXT:    pushl %ebx
     40 ; CHECK-NEXT:    movl $7, %eax
     41 ; CHECK-NEXT:    movl $7, %edx
     42 ; CHECK-NEXT:    xorl %ebx, %ebx
     43 ; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
     44 ; CHECK-NEXT:    seta %bl
     45 ; CHECK-NEXT:    movl %ebx, %eax
     46 ; CHECK-NEXT:    popl %ebx
     47 ; CHECK-NEXT:    retl
     48   %res = call i32 @llvm.x86.sse42.pcmpestria128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
     49   ret i32 %res
     50 }
     51 declare i32 @llvm.x86.sse42.pcmpestria128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
     52 
     53 
     54 define i32 @test_x86_sse42_pcmpestric128(<16 x i8> %a0, <16 x i8> %a2) {
     55 ; CHECK-LABEL: test_x86_sse42_pcmpestric128:
     56 ; CHECK:       ## BB#0:
     57 ; CHECK-NEXT:    movl $7, %eax
     58 ; CHECK-NEXT:    movl $7, %edx
     59 ; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
     60 ; CHECK-NEXT:    sbbl %eax, %eax
     61 ; CHECK-NEXT:    andl $1, %eax
     62 ; CHECK-NEXT:    retl
     63   %res = call i32 @llvm.x86.sse42.pcmpestric128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
     64   ret i32 %res
     65 }
     66 declare i32 @llvm.x86.sse42.pcmpestric128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
     67 
     68 
     69 define i32 @test_x86_sse42_pcmpestrio128(<16 x i8> %a0, <16 x i8> %a2) nounwind {
     70 ; CHECK-LABEL: test_x86_sse42_pcmpestrio128:
     71 ; CHECK:       ## BB#0:
     72 ; CHECK-NEXT:    pushl %ebx
     73 ; CHECK-NEXT:    movl $7, %eax
     74 ; CHECK-NEXT:    movl $7, %edx
     75 ; CHECK-NEXT:    xorl %ebx, %ebx
     76 ; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
     77 ; CHECK-NEXT:    seto %bl
     78 ; CHECK-NEXT:    movl %ebx, %eax
     79 ; CHECK-NEXT:    popl %ebx
     80 ; CHECK-NEXT:    retl
     81   %res = call i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
     82   ret i32 %res
     83 }
     84 declare i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
     85 
     86 
     87 define i32 @test_x86_sse42_pcmpestris128(<16 x i8> %a0, <16 x i8> %a2) nounwind {
     88 ; CHECK-LABEL: test_x86_sse42_pcmpestris128:
     89 ; CHECK:       ## BB#0:
     90 ; CHECK-NEXT:    pushl %ebx
     91 ; CHECK-NEXT:    movl $7, %eax
     92 ; CHECK-NEXT:    movl $7, %edx
     93 ; CHECK-NEXT:    xorl %ebx, %ebx
     94 ; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
     95 ; CHECK-NEXT:    sets %bl
     96 ; CHECK-NEXT:    movl %ebx, %eax
     97 ; CHECK-NEXT:    popl %ebx
     98 ; CHECK-NEXT:    retl
     99   %res = call i32 @llvm.x86.sse42.pcmpestris128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
    100   ret i32 %res
    101 }
    102 declare i32 @llvm.x86.sse42.pcmpestris128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
    103 
    104 
    105 define i32 @test_x86_sse42_pcmpestriz128(<16 x i8> %a0, <16 x i8> %a2) nounwind {
    106 ; CHECK-LABEL: test_x86_sse42_pcmpestriz128:
    107 ; CHECK:       ## BB#0:
    108 ; CHECK-NEXT:    pushl %ebx
    109 ; CHECK-NEXT:    movl $7, %eax
    110 ; CHECK-NEXT:    movl $7, %edx
    111 ; CHECK-NEXT:    xorl %ebx, %ebx
    112 ; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
    113 ; CHECK-NEXT:    sete %bl
    114 ; CHECK-NEXT:    movl %ebx, %eax
    115 ; CHECK-NEXT:    popl %ebx
    116 ; CHECK-NEXT:    retl
    117   %res = call i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
    118   ret i32 %res
    119 }
    120 declare i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
    121 
    122 
    123 define <16 x i8> @test_x86_sse42_pcmpestrm128(<16 x i8> %a0, <16 x i8> %a2) {
    124 ; CHECK-LABEL: test_x86_sse42_pcmpestrm128:
    125 ; CHECK:       ## BB#0:
    126 ; CHECK-NEXT:    movl $7, %eax
    127 ; CHECK-NEXT:    movl $7, %edx
    128 ; CHECK-NEXT:    pcmpestrm $7, %xmm1, %xmm0
    129 ; CHECK-NEXT:    retl
    130   %res = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <<16 x i8>> [#uses=1]
    131   ret <16 x i8> %res
    132 }
    133 declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
    134 
    135 
    136 define <16 x i8> @test_x86_sse42_pcmpestrm128_load(<16 x i8> %a0, <16 x i8>* %a2) {
    137 ; CHECK-LABEL: test_x86_sse42_pcmpestrm128_load:
    138 ; CHECK:       ## BB#0:
    139 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx
    140 ; CHECK-NEXT:    movl $7, %eax
    141 ; CHECK-NEXT:    movl $7, %edx
    142 ; CHECK-NEXT:    pcmpestrm $7, (%ecx), %xmm0
    143 ; CHECK-NEXT:    retl
    144   %1 = load <16 x i8>, <16 x i8>* %a2
    145   %res = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %1, i32 7, i8 7) ; <<16 x i8>> [#uses=1]
    146   ret <16 x i8> %res
    147 }
    148 
    149 
    150 define i32 @test_x86_sse42_pcmpistri128(<16 x i8> %a0, <16 x i8> %a1) {
    151 ; CHECK-LABEL: test_x86_sse42_pcmpistri128:
    152 ; CHECK:       ## BB#0:
    153 ; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
    154 ; CHECK-NEXT:    movl %ecx, %eax
    155 ; CHECK-NEXT:    retl
    156   %res = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
    157   ret i32 %res
    158 }
    159 declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone
    160 
    161 
    162 define i32 @test_x86_sse42_pcmpistri128_load(<16 x i8>* %a0, <16 x i8>* %a1) {
    163 ; CHECK-LABEL: test_x86_sse42_pcmpistri128_load:
    164 ; CHECK:       ## BB#0:
    165 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
    166 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx
    167 ; CHECK-NEXT:    movdqa (%ecx), %xmm0
    168 ; CHECK-NEXT:    pcmpistri $7, (%eax), %xmm0
    169 ; CHECK-NEXT:    movl %ecx, %eax
    170 ; CHECK-NEXT:    retl
    171   %1 = load <16 x i8>, <16 x i8>* %a0
    172   %2 = load <16 x i8>, <16 x i8>* %a1
    173   %res = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %1, <16 x i8> %2, i8 7) ; <i32> [#uses=1]
    174   ret i32 %res
    175 }
    176 
    177 
    178 define i32 @test_x86_sse42_pcmpistria128(<16 x i8> %a0, <16 x i8> %a1) {
    179 ; CHECK-LABEL: test_x86_sse42_pcmpistria128:
    180 ; CHECK:       ## BB#0:
    181 ; CHECK-NEXT:    xorl %eax, %eax
    182 ; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
    183 ; CHECK-NEXT:    seta %al
    184 ; CHECK-NEXT:    retl
    185   %res = call i32 @llvm.x86.sse42.pcmpistria128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
    186   ret i32 %res
    187 }
    188 declare i32 @llvm.x86.sse42.pcmpistria128(<16 x i8>, <16 x i8>, i8) nounwind readnone
    189 
    190 
    191 define i32 @test_x86_sse42_pcmpistric128(<16 x i8> %a0, <16 x i8> %a1) {
    192 ; CHECK-LABEL: test_x86_sse42_pcmpistric128:
    193 ; CHECK:       ## BB#0:
    194 ; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
    195 ; CHECK-NEXT:    sbbl %eax, %eax
    196 ; CHECK-NEXT:    andl $1, %eax
    197 ; CHECK-NEXT:    retl
    198   %res = call i32 @llvm.x86.sse42.pcmpistric128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
    199   ret i32 %res
    200 }
    201 declare i32 @llvm.x86.sse42.pcmpistric128(<16 x i8>, <16 x i8>, i8) nounwind readnone
    202 
    203 
    204 define i32 @test_x86_sse42_pcmpistrio128(<16 x i8> %a0, <16 x i8> %a1) {
    205 ; CHECK-LABEL: test_x86_sse42_pcmpistrio128:
    206 ; CHECK:       ## BB#0:
    207 ; CHECK-NEXT:    xorl %eax, %eax
    208 ; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
    209 ; CHECK-NEXT:    seto %al
    210 ; CHECK-NEXT:    retl
    211   %res = call i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
    212   ret i32 %res
    213 }
    214 declare i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8>, <16 x i8>, i8) nounwind readnone
    215 
    216 
    217 define i32 @test_x86_sse42_pcmpistris128(<16 x i8> %a0, <16 x i8> %a1) {
    218 ; CHECK-LABEL: test_x86_sse42_pcmpistris128:
    219 ; CHECK:       ## BB#0:
    220 ; CHECK-NEXT:    xorl %eax, %eax
    221 ; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
    222 ; CHECK-NEXT:    sets %al
    223 ; CHECK-NEXT:    retl
    224   %res = call i32 @llvm.x86.sse42.pcmpistris128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
    225   ret i32 %res
    226 }
    227 declare i32 @llvm.x86.sse42.pcmpistris128(<16 x i8>, <16 x i8>, i8) nounwind readnone
    228 
    229 
    230 define i32 @test_x86_sse42_pcmpistriz128(<16 x i8> %a0, <16 x i8> %a1) {
    231 ; CHECK-LABEL: test_x86_sse42_pcmpistriz128:
    232 ; CHECK:       ## BB#0:
    233 ; CHECK-NEXT:    xorl %eax, %eax
    234 ; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
    235 ; CHECK-NEXT:    sete %al
    236 ; CHECK-NEXT:    retl
    237   %res = call i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
    238   ret i32 %res
    239 }
    240 declare i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8>, <16 x i8>, i8) nounwind readnone
    241 
    242 
    243 define <16 x i8> @test_x86_sse42_pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1) {
    244 ; CHECK-LABEL: test_x86_sse42_pcmpistrm128:
    245 ; CHECK:       ## BB#0:
    246 ; CHECK-NEXT:    pcmpistrm $7, %xmm1, %xmm0
    247 ; CHECK-NEXT:    retl
    248   %res = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <<16 x i8>> [#uses=1]
    249   ret <16 x i8> %res
    250 }
    251 declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone
    252 
    253 
    254 define <16 x i8> @test_x86_sse42_pcmpistrm128_load(<16 x i8> %a0, <16 x i8>* %a1) {
    255 ; CHECK-LABEL: test_x86_sse42_pcmpistrm128_load:
    256 ; CHECK:       ## BB#0:
    257 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
    258 ; CHECK-NEXT:    pcmpistrm $7, (%eax), %xmm0
    259 ; CHECK-NEXT:    retl
    260   %1 = load <16 x i8>, <16 x i8>* %a1
    261   %res = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %1, i8 7) ; <<16 x i8>> [#uses=1]
    262   ret <16 x i8> %res
    263 }
    264