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=x86_64-apple-darwin9 -mcpu=knl | FileCheck %s --check-prefix=ALL_X64 --check-prefix=KNL
      3 ; RUN: llc < %s -mtriple=x86_64-apple-darwin9 -mcpu=skx | FileCheck %s --check-prefix=ALL_X64 --check-prefix=SKX
      4 ; RUN: llc < %s -mtriple=i686-apple-darwin9 -mcpu=knl | FileCheck %s --check-prefix=KNL_X32
      5 
      6 define <16 x i1> @test1() {
      7 ; ALL_X64-LABEL: test1:
      8 ; ALL_X64:       ## %bb.0:
      9 ; ALL_X64-NEXT:    vxorps %xmm0, %xmm0, %xmm0
     10 ; ALL_X64-NEXT:    retq
     11 ;
     12 ; KNL_X32-LABEL: test1:
     13 ; KNL_X32:       ## %bb.0:
     14 ; KNL_X32-NEXT:    vxorps %xmm0, %xmm0, %xmm0
     15 ; KNL_X32-NEXT:    retl
     16   ret <16 x i1> zeroinitializer
     17 }
     18 
     19 define <16 x i1> @test2(<16 x i1>%a, <16 x i1>%b) {
     20 ; ALL_X64-LABEL: test2:
     21 ; ALL_X64:       ## %bb.0:
     22 ; ALL_X64-NEXT:    vandps %xmm1, %xmm0, %xmm0
     23 ; ALL_X64-NEXT:    retq
     24 ;
     25 ; KNL_X32-LABEL: test2:
     26 ; KNL_X32:       ## %bb.0:
     27 ; KNL_X32-NEXT:    vandps %xmm1, %xmm0, %xmm0
     28 ; KNL_X32-NEXT:    retl
     29   %c = and <16 x i1>%a, %b
     30   ret <16 x i1> %c
     31 }
     32 
     33 define <8 x i1> @test3(<8 x i1>%a, <8 x i1>%b) {
     34 ; ALL_X64-LABEL: test3:
     35 ; ALL_X64:       ## %bb.0:
     36 ; ALL_X64-NEXT:    vandps %xmm1, %xmm0, %xmm0
     37 ; ALL_X64-NEXT:    retq
     38 ;
     39 ; KNL_X32-LABEL: test3:
     40 ; KNL_X32:       ## %bb.0:
     41 ; KNL_X32-NEXT:    vandps %xmm1, %xmm0, %xmm0
     42 ; KNL_X32-NEXT:    retl
     43   %c = and <8 x i1>%a, %b
     44   ret <8 x i1> %c
     45 }
     46 
     47 define <4 x i1> @test4(<4 x i1>%a, <4 x i1>%b) {
     48 ; ALL_X64-LABEL: test4:
     49 ; ALL_X64:       ## %bb.0:
     50 ; ALL_X64-NEXT:    vandps %xmm1, %xmm0, %xmm0
     51 ; ALL_X64-NEXT:    retq
     52 ;
     53 ; KNL_X32-LABEL: test4:
     54 ; KNL_X32:       ## %bb.0:
     55 ; KNL_X32-NEXT:    vandps %xmm1, %xmm0, %xmm0
     56 ; KNL_X32-NEXT:    retl
     57   %c = and <4 x i1>%a, %b
     58   ret <4 x i1> %c
     59 }
     60 
     61 declare <8 x i1> @func8xi1(<8 x i1> %a)
     62 
     63 define <8 x i32> @test5(<8 x i32>%a, <8 x i32>%b) {
     64 ; KNL-LABEL: test5:
     65 ; KNL:       ## %bb.0:
     66 ; KNL-NEXT:    pushq %rax
     67 ; KNL-NEXT:    .cfi_def_cfa_offset 16
     68 ; KNL-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
     69 ; KNL-NEXT:    vpmovdw %zmm0, %ymm0
     70 ; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0
     71 ; KNL-NEXT:    callq _func8xi1
     72 ; KNL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
     73 ; KNL-NEXT:    vpslld $31, %ymm0, %ymm0
     74 ; KNL-NEXT:    vpsrad $31, %ymm0, %ymm0
     75 ; KNL-NEXT:    popq %rax
     76 ; KNL-NEXT:    retq
     77 ;
     78 ; SKX-LABEL: test5:
     79 ; SKX:       ## %bb.0:
     80 ; SKX-NEXT:    pushq %rax
     81 ; SKX-NEXT:    .cfi_def_cfa_offset 16
     82 ; SKX-NEXT:    vpcmpgtd %ymm1, %ymm0, %k0
     83 ; SKX-NEXT:    vpmovm2w %k0, %xmm0
     84 ; SKX-NEXT:    vzeroupper
     85 ; SKX-NEXT:    callq _func8xi1
     86 ; SKX-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
     87 ; SKX-NEXT:    vpslld $31, %ymm0, %ymm0
     88 ; SKX-NEXT:    vpsrad $31, %ymm0, %ymm0
     89 ; SKX-NEXT:    popq %rax
     90 ; SKX-NEXT:    retq
     91 ;
     92 ; KNL_X32-LABEL: test5:
     93 ; KNL_X32:       ## %bb.0:
     94 ; KNL_X32-NEXT:    subl $12, %esp
     95 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 16
     96 ; KNL_X32-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
     97 ; KNL_X32-NEXT:    vpmovdw %zmm0, %ymm0
     98 ; KNL_X32-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0
     99 ; KNL_X32-NEXT:    calll _func8xi1
    100 ; KNL_X32-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
    101 ; KNL_X32-NEXT:    vpslld $31, %ymm0, %ymm0
    102 ; KNL_X32-NEXT:    vpsrad $31, %ymm0, %ymm0
    103 ; KNL_X32-NEXT:    addl $12, %esp
    104 ; KNL_X32-NEXT:    retl
    105   %cmpRes = icmp sgt <8 x i32>%a, %b
    106   %resi = call <8 x i1> @func8xi1(<8 x i1> %cmpRes)
    107   %res = sext <8 x i1>%resi to <8 x i32>
    108   ret <8 x i32> %res
    109 }
    110 
    111 declare <16 x i1> @func16xi1(<16 x i1> %a)
    112 
    113 define <16 x i32> @test6(<16 x i32>%a, <16 x i32>%b) {
    114 ; KNL-LABEL: test6:
    115 ; KNL:       ## %bb.0:
    116 ; KNL-NEXT:    pushq %rax
    117 ; KNL-NEXT:    .cfi_def_cfa_offset 16
    118 ; KNL-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1
    119 ; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
    120 ; KNL-NEXT:    vpmovdb %zmm0, %xmm0
    121 ; KNL-NEXT:    callq _func16xi1
    122 ; KNL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
    123 ; KNL-NEXT:    vpslld $31, %zmm0, %zmm0
    124 ; KNL-NEXT:    vpsrad $31, %zmm0, %zmm0
    125 ; KNL-NEXT:    popq %rax
    126 ; KNL-NEXT:    retq
    127 ;
    128 ; SKX-LABEL: test6:
    129 ; SKX:       ## %bb.0:
    130 ; SKX-NEXT:    pushq %rax
    131 ; SKX-NEXT:    .cfi_def_cfa_offset 16
    132 ; SKX-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0
    133 ; SKX-NEXT:    vpmovm2b %k0, %xmm0
    134 ; SKX-NEXT:    vzeroupper
    135 ; SKX-NEXT:    callq _func16xi1
    136 ; SKX-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
    137 ; SKX-NEXT:    vpslld $31, %zmm0, %zmm0
    138 ; SKX-NEXT:    vpsrad $31, %zmm0, %zmm0
    139 ; SKX-NEXT:    popq %rax
    140 ; SKX-NEXT:    retq
    141 ;
    142 ; KNL_X32-LABEL: test6:
    143 ; KNL_X32:       ## %bb.0:
    144 ; KNL_X32-NEXT:    subl $12, %esp
    145 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 16
    146 ; KNL_X32-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1
    147 ; KNL_X32-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
    148 ; KNL_X32-NEXT:    vpmovdb %zmm0, %xmm0
    149 ; KNL_X32-NEXT:    calll _func16xi1
    150 ; KNL_X32-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
    151 ; KNL_X32-NEXT:    vpslld $31, %zmm0, %zmm0
    152 ; KNL_X32-NEXT:    vpsrad $31, %zmm0, %zmm0
    153 ; KNL_X32-NEXT:    addl $12, %esp
    154 ; KNL_X32-NEXT:    retl
    155   %cmpRes = icmp sgt <16 x i32>%a, %b
    156   %resi = call <16 x i1> @func16xi1(<16 x i1> %cmpRes)
    157   %res = sext <16 x i1>%resi to <16 x i32>
    158   ret <16 x i32> %res
    159 }
    160 
    161 declare <4 x i1> @func4xi1(<4 x i1> %a)
    162 
    163 define <4 x i32> @test7(<4 x i32>%a, <4 x i32>%b) {
    164 ; ALL_X64-LABEL: test7:
    165 ; ALL_X64:       ## %bb.0:
    166 ; ALL_X64-NEXT:    pushq %rax
    167 ; ALL_X64-NEXT:    .cfi_def_cfa_offset 16
    168 ; ALL_X64-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
    169 ; ALL_X64-NEXT:    callq _func4xi1
    170 ; ALL_X64-NEXT:    vpslld $31, %xmm0, %xmm0
    171 ; ALL_X64-NEXT:    vpsrad $31, %xmm0, %xmm0
    172 ; ALL_X64-NEXT:    popq %rax
    173 ; ALL_X64-NEXT:    retq
    174 ;
    175 ; KNL_X32-LABEL: test7:
    176 ; KNL_X32:       ## %bb.0:
    177 ; KNL_X32-NEXT:    subl $12, %esp
    178 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 16
    179 ; KNL_X32-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
    180 ; KNL_X32-NEXT:    calll _func4xi1
    181 ; KNL_X32-NEXT:    vpslld $31, %xmm0, %xmm0
    182 ; KNL_X32-NEXT:    vpsrad $31, %xmm0, %xmm0
    183 ; KNL_X32-NEXT:    addl $12, %esp
    184 ; KNL_X32-NEXT:    retl
    185   %cmpRes = icmp sgt <4 x i32>%a, %b
    186   %resi = call <4 x i1> @func4xi1(<4 x i1> %cmpRes)
    187   %res = sext <4 x i1>%resi to <4 x i32>
    188   ret <4 x i32> %res
    189 }
    190 
    191 define <8 x i1> @test7a(<8 x i32>%a, <8 x i32>%b) {
    192 ; KNL-LABEL: test7a:
    193 ; KNL:       ## %bb.0:
    194 ; KNL-NEXT:    pushq %rax
    195 ; KNL-NEXT:    .cfi_def_cfa_offset 16
    196 ; KNL-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
    197 ; KNL-NEXT:    vpmovdw %zmm0, %ymm0
    198 ; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0
    199 ; KNL-NEXT:    callq _func8xi1
    200 ; KNL-NEXT:    vandps {{.*}}(%rip), %xmm0, %xmm0
    201 ; KNL-NEXT:    popq %rax
    202 ; KNL-NEXT:    retq
    203 ;
    204 ; SKX-LABEL: test7a:
    205 ; SKX:       ## %bb.0:
    206 ; SKX-NEXT:    pushq %rax
    207 ; SKX-NEXT:    .cfi_def_cfa_offset 16
    208 ; SKX-NEXT:    vpcmpgtd %ymm1, %ymm0, %k0
    209 ; SKX-NEXT:    vpmovm2w %k0, %xmm0
    210 ; SKX-NEXT:    vzeroupper
    211 ; SKX-NEXT:    callq _func8xi1
    212 ; SKX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
    213 ; SKX-NEXT:    popq %rax
    214 ; SKX-NEXT:    retq
    215 ;
    216 ; KNL_X32-LABEL: test7a:
    217 ; KNL_X32:       ## %bb.0:
    218 ; KNL_X32-NEXT:    subl $12, %esp
    219 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 16
    220 ; KNL_X32-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
    221 ; KNL_X32-NEXT:    vpmovdw %zmm0, %ymm0
    222 ; KNL_X32-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0
    223 ; KNL_X32-NEXT:    calll _func8xi1
    224 ; KNL_X32-NEXT:    vandps LCPI7_0, %xmm0, %xmm0
    225 ; KNL_X32-NEXT:    addl $12, %esp
    226 ; KNL_X32-NEXT:    retl
    227   %cmpRes = icmp sgt <8 x i32>%a, %b
    228   %resi = call <8 x i1> @func8xi1(<8 x i1> %cmpRes)
    229   %res = and <8 x i1>%resi,  <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false>
    230   ret <8 x i1> %res
    231 }
    232 
    233 define <16 x i8> @test8(<16 x i8> %a1, <16 x i8> %a2, i1 %cond) {
    234 ; ALL_X64-LABEL: test8:
    235 ; ALL_X64:       ## %bb.0:
    236 ; ALL_X64-NEXT:    testb $1, %dil
    237 ; ALL_X64-NEXT:    jne LBB8_2
    238 ; ALL_X64-NEXT:  ## %bb.1:
    239 ; ALL_X64-NEXT:    vmovaps %xmm1, %xmm0
    240 ; ALL_X64-NEXT:  LBB8_2:
    241 ; ALL_X64-NEXT:    retq
    242 ;
    243 ; KNL_X32-LABEL: test8:
    244 ; KNL_X32:       ## %bb.0:
    245 ; KNL_X32-NEXT:    testb $1, {{[0-9]+}}(%esp)
    246 ; KNL_X32-NEXT:    jne LBB8_2
    247 ; KNL_X32-NEXT:  ## %bb.1:
    248 ; KNL_X32-NEXT:    vmovaps %xmm1, %xmm0
    249 ; KNL_X32-NEXT:  LBB8_2:
    250 ; KNL_X32-NEXT:    retl
    251   %res = select i1 %cond, <16 x i8> %a1, <16 x i8> %a2
    252   ret <16 x i8> %res
    253 }
    254 
    255 define i1 @test9(double %a, double %b) {
    256 ; ALL_X64-LABEL: test9:
    257 ; ALL_X64:       ## %bb.0:
    258 ; ALL_X64-NEXT:    vucomisd %xmm0, %xmm1
    259 ; ALL_X64-NEXT:    setb %al
    260 ; ALL_X64-NEXT:    retq
    261 ;
    262 ; KNL_X32-LABEL: test9:
    263 ; KNL_X32:       ## %bb.0:
    264 ; KNL_X32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
    265 ; KNL_X32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0
    266 ; KNL_X32-NEXT:    setb %al
    267 ; KNL_X32-NEXT:    retl
    268   %c = fcmp ugt double %a, %b
    269   ret i1 %c
    270 }
    271 
    272 define i32 @test10(i32 %a, i32 %b, i1 %cond) {
    273 ; ALL_X64-LABEL: test10:
    274 ; ALL_X64:       ## %bb.0:
    275 ; ALL_X64-NEXT:    testb $1, %dl
    276 ; ALL_X64-NEXT:    cmovel %esi, %edi
    277 ; ALL_X64-NEXT:    movl %edi, %eax
    278 ; ALL_X64-NEXT:    retq
    279 ;
    280 ; KNL_X32-LABEL: test10:
    281 ; KNL_X32:       ## %bb.0:
    282 ; KNL_X32-NEXT:    testb $1, {{[0-9]+}}(%esp)
    283 ; KNL_X32-NEXT:    leal {{[0-9]+}}(%esp), %eax
    284 ; KNL_X32-NEXT:    leal {{[0-9]+}}(%esp), %ecx
    285 ; KNL_X32-NEXT:    cmovnel %eax, %ecx
    286 ; KNL_X32-NEXT:    movl (%ecx), %eax
    287 ; KNL_X32-NEXT:    retl
    288   %c = select i1 %cond, i32 %a, i32 %b
    289   ret i32 %c
    290 }
    291 
    292 define i1 @test11(i32 %a, i32 %b) {
    293 ; ALL_X64-LABEL: test11:
    294 ; ALL_X64:       ## %bb.0:
    295 ; ALL_X64-NEXT:    cmpl %esi, %edi
    296 ; ALL_X64-NEXT:    setg %al
    297 ; ALL_X64-NEXT:    retq
    298 ;
    299 ; KNL_X32-LABEL: test11:
    300 ; KNL_X32:       ## %bb.0:
    301 ; KNL_X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
    302 ; KNL_X32-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
    303 ; KNL_X32-NEXT:    setg %al
    304 ; KNL_X32-NEXT:    retl
    305   %c = icmp sgt i32 %a, %b
    306   ret i1 %c
    307 }
    308 
    309 define i32 @test12(i32 %a1, i32 %a2, i32 %b1) {
    310 ; ALL_X64-LABEL: test12:
    311 ; ALL_X64:       ## %bb.0:
    312 ; ALL_X64-NEXT:    pushq %rbp
    313 ; ALL_X64-NEXT:    .cfi_def_cfa_offset 16
    314 ; ALL_X64-NEXT:    pushq %r14
    315 ; ALL_X64-NEXT:    .cfi_def_cfa_offset 24
    316 ; ALL_X64-NEXT:    pushq %rbx
    317 ; ALL_X64-NEXT:    .cfi_def_cfa_offset 32
    318 ; ALL_X64-NEXT:    .cfi_offset %rbx, -32
    319 ; ALL_X64-NEXT:    .cfi_offset %r14, -24
    320 ; ALL_X64-NEXT:    .cfi_offset %rbp, -16
    321 ; ALL_X64-NEXT:    movl %esi, %r14d
    322 ; ALL_X64-NEXT:    movl %edi, %ebp
    323 ; ALL_X64-NEXT:    movl %edx, %esi
    324 ; ALL_X64-NEXT:    callq _test11
    325 ; ALL_X64-NEXT:    movzbl %al, %ebx
    326 ; ALL_X64-NEXT:    movl %ebp, %edi
    327 ; ALL_X64-NEXT:    movl %r14d, %esi
    328 ; ALL_X64-NEXT:    movl %ebx, %edx
    329 ; ALL_X64-NEXT:    callq _test10
    330 ; ALL_X64-NEXT:    xorl %ecx, %ecx
    331 ; ALL_X64-NEXT:    testb $1, %bl
    332 ; ALL_X64-NEXT:    cmovel %ecx, %eax
    333 ; ALL_X64-NEXT:    popq %rbx
    334 ; ALL_X64-NEXT:    popq %r14
    335 ; ALL_X64-NEXT:    popq %rbp
    336 ; ALL_X64-NEXT:    retq
    337 ;
    338 ; KNL_X32-LABEL: test12:
    339 ; KNL_X32:       ## %bb.0:
    340 ; KNL_X32-NEXT:    pushl %ebx
    341 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 8
    342 ; KNL_X32-NEXT:    pushl %edi
    343 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 12
    344 ; KNL_X32-NEXT:    pushl %esi
    345 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 16
    346 ; KNL_X32-NEXT:    subl $16, %esp
    347 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 32
    348 ; KNL_X32-NEXT:    .cfi_offset %esi, -16
    349 ; KNL_X32-NEXT:    .cfi_offset %edi, -12
    350 ; KNL_X32-NEXT:    .cfi_offset %ebx, -8
    351 ; KNL_X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
    352 ; KNL_X32-NEXT:    movl {{[0-9]+}}(%esp), %edi
    353 ; KNL_X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
    354 ; KNL_X32-NEXT:    movl %eax, {{[0-9]+}}(%esp)
    355 ; KNL_X32-NEXT:    movl %edi, (%esp)
    356 ; KNL_X32-NEXT:    calll _test11
    357 ; KNL_X32-NEXT:    movl %eax, %ebx
    358 ; KNL_X32-NEXT:    movzbl %al, %eax
    359 ; KNL_X32-NEXT:    movl %eax, {{[0-9]+}}(%esp)
    360 ; KNL_X32-NEXT:    movl %esi, {{[0-9]+}}(%esp)
    361 ; KNL_X32-NEXT:    movl %edi, (%esp)
    362 ; KNL_X32-NEXT:    calll _test10
    363 ; KNL_X32-NEXT:    xorl %ecx, %ecx
    364 ; KNL_X32-NEXT:    testb $1, %bl
    365 ; KNL_X32-NEXT:    cmovel %ecx, %eax
    366 ; KNL_X32-NEXT:    addl $16, %esp
    367 ; KNL_X32-NEXT:    popl %esi
    368 ; KNL_X32-NEXT:    popl %edi
    369 ; KNL_X32-NEXT:    popl %ebx
    370 ; KNL_X32-NEXT:    retl
    371   %cond = call i1 @test11(i32 %a1, i32 %b1)
    372   %res = call i32 @test10(i32 %a1, i32 %a2, i1 %cond)
    373   %res1 = select i1 %cond, i32 %res, i32 0
    374   ret i32 %res1
    375 }
    376 
    377 define <1 x i1> @test13(<1 x i1>* %foo) {
    378 ; KNL-LABEL: test13:
    379 ; KNL:       ## %bb.0:
    380 ; KNL-NEXT:    movzbl (%rdi), %eax
    381 ; KNL-NEXT:    ## kill: def $al killed $al killed $eax
    382 ; KNL-NEXT:    retq
    383 ;
    384 ; SKX-LABEL: test13:
    385 ; SKX:       ## %bb.0:
    386 ; SKX-NEXT:    kmovb (%rdi), %k0
    387 ; SKX-NEXT:    kmovd %k0, %eax
    388 ; SKX-NEXT:    ## kill: def $al killed $al killed $eax
    389 ; SKX-NEXT:    retq
    390 ;
    391 ; KNL_X32-LABEL: test13:
    392 ; KNL_X32:       ## %bb.0:
    393 ; KNL_X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
    394 ; KNL_X32-NEXT:    movzbl (%eax), %eax
    395 ; KNL_X32-NEXT:    ## kill: def $al killed $al killed $eax
    396 ; KNL_X32-NEXT:    retl
    397   %bar = load <1 x i1>, <1 x i1>* %foo
    398   ret <1 x i1> %bar
    399 }
    400