Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -mtriple=x86_64-unknown -mcpu=corei7 | FileCheck %s
      2 
      3 
      4 define <2 x double> @test_x86_sse41_blend_pd(<2 x double> %a0, <2 x double> %a1) {
      5   %1 = call <2 x double> @llvm.x86.sse41.blendpd(<2 x double> %a0, <2 x double> %a1, i32 0)
      6   ret <2 x double> %1
      7 }
      8 ; CHECK-LABEL: test_x86_sse41_blend_pd
      9 ; CHECK-NOT: blendpd
     10 ; CHECK: ret
     11 
     12 
     13 define <4 x float> @test_x86_sse41_blend_ps(<4 x float> %a0, <4 x float> %a1) {
     14   %1 = call <4 x float> @llvm.x86.sse41.blendps(<4 x float> %a0, <4 x float> %a1, i32 0)
     15   ret <4 x float> %1
     16 }
     17 ; CHECK-LABEL: test_x86_sse41_blend_ps
     18 ; CHECK-NOT: blendps
     19 ; CHECK: ret
     20 
     21 
     22 define <2 x double> @test_x86_sse41_blendv_pd(<2 x double> %a0, <2 x double> %a1) {
     23   %1 = call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> zeroinitializer)
     24   ret <2 x double> %1
     25 }
     26 ; CHECK-LABEL: test_x86_sse41_blendv_pd
     27 ; CHECK-NOT: blendvpd
     28 ; CHECK: ret
     29 
     30 
     31 define <4 x float> @test_x86_sse41_blendv_ps(<4 x float> %a0, <4 x float> %a1) {
     32   %1 = call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> zeroinitializer)
     33   ret <4 x float> %1
     34 }
     35 ; CHECK-LABEL: test_x86_sse41_blendv_ps
     36 ; CHECK-NOT: blendvps
     37 ; CHECK: ret
     38 
     39 
     40 define <16 x i8> @test_x86_sse41_pblendv_b(<16 x i8> %a0, <16 x i8> %a1) {
     41   %1 = call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> zeroinitializer)
     42   ret <16 x i8> %1
     43 }
     44 ; CHECK-LABEL: test_x86_sse41_pblendv_b
     45 ; CHECK-NOT: pblendvb
     46 ; CHECK: ret
     47 
     48 
     49 define <8 x i16> @test_x86_sse41_pblend_w(<8 x i16> %a0, <8 x i16> %a1) {
     50   %1 = call <8 x i16> @llvm.x86.sse41.pblendw(<8 x i16> %a0, <8 x i16> %a1, i32 0)
     51   ret <8 x i16> %1
     52 }
     53 ; CHECK-LABEL: test_x86_sse41_pblend_w
     54 ; CHECK-NOT: pblendw
     55 ; CHECK: ret
     56 
     57 
     58 define <2 x double> @test2_x86_sse41_blend_pd(<2 x double> %a0, <2 x double> %a1) {
     59   %1 = call <2 x double> @llvm.x86.sse41.blendpd(<2 x double> %a0, <2 x double> %a1, i32 -1)
     60   ret <2 x double> %1
     61 }
     62 ; CHECK-LABEL: test2_x86_sse41_blend_pd
     63 ; CHECK-NOT: blendpd
     64 ; CHECK: movaps %xmm1, %xmm0
     65 ; CHECK-NEXT: ret
     66 
     67 
     68 define <4 x float> @test2_x86_sse41_blend_ps(<4 x float> %a0, <4 x float> %a1) {
     69   %1 = call <4 x float> @llvm.x86.sse41.blendps(<4 x float> %a0, <4 x float> %a1, i32 -1)
     70   ret <4 x float> %1
     71 }
     72 ; CHECK-LABEL: test2_x86_sse41_blend_ps
     73 ; CHECK-NOT: blendps
     74 ; CHECK: movaps %xmm1, %xmm0
     75 ; CHECK-NEXT: ret
     76 
     77 
     78 define <2 x double> @test2_x86_sse41_blendv_pd(<2 x double> %a0, <2 x double> %a1) {
     79   %Mask = bitcast <2 x i64> <i64 -1, i64 -1> to <2 x double>
     80   %1 = call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %Mask )
     81   ret <2 x double> %1
     82 }
     83 ; CHECK-LABEL: test2_x86_sse41_blendv_pd
     84 ; CHECK-NOT: blendvpd
     85 ; CHECK: movaps %xmm1, %xmm0
     86 ; CHECK-NEXT: ret
     87 
     88 
     89 define <4 x float> @test2_x86_sse41_blendv_ps(<4 x float> %a0, <4 x float> %a1) {
     90   %Mask = bitcast <2 x i64> <i64 -1, i64 -1> to <4 x float>
     91   %1 = call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %Mask)
     92   ret <4 x float> %1
     93 }
     94 ; CHECK-LABEL: test2_x86_sse41_blendv_ps
     95 ; CHECK-NOT: blendvps
     96 ; CHECK: movaps %xmm1, %xmm0
     97 ; CHECK-NEXT: ret
     98 
     99 
    100 define <16 x i8> @test2_x86_sse41_pblendv_b(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) {
    101   %Mask = bitcast <2 x i64> <i64 -1, i64 -1> to <16 x i8>
    102   %1 = call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %Mask)
    103   ret <16 x i8> %1
    104 }
    105 ; CHECK-LABEL: test2_x86_sse41_pblendv_b
    106 ; CHECK-NOT: pblendvb
    107 ; CHECK: movaps %xmm1, %xmm0
    108 ; CHECK-NEXT: ret
    109 
    110 
    111 define <8 x i16> @test2_x86_sse41_pblend_w(<8 x i16> %a0, <8 x i16> %a1) {
    112   %1 = call <8 x i16> @llvm.x86.sse41.pblendw(<8 x i16> %a0, <8 x i16> %a1, i32 -1)
    113   ret <8 x i16> %1
    114 }
    115 ; CHECK-LABEL: test2_x86_sse41_pblend_w
    116 ; CHECK-NOT: pblendw
    117 ; CHECK: movaps %xmm1, %xmm0
    118 ; CHECK-NEXT: ret
    119 
    120 
    121 define <2 x double> @test3_x86_sse41_blend_pd(<2 x double> %a0) {
    122   %1 = call <2 x double> @llvm.x86.sse41.blendpd(<2 x double> %a0, <2 x double> %a0, i32 7)
    123   ret <2 x double> %1
    124 }
    125 ; CHECK-LABEL: test3_x86_sse41_blend_pd
    126 ; CHECK-NOT: blendpd
    127 ; CHECK: ret
    128 
    129 
    130 define <4 x float> @test3_x86_sse41_blend_ps(<4 x float> %a0) {
    131   %1 = call <4 x float> @llvm.x86.sse41.blendps(<4 x float> %a0, <4 x float> %a0, i32 7)
    132   ret <4 x float> %1
    133 }
    134 ; CHECK-LABEL: test3_x86_sse41_blend_ps
    135 ; CHECK-NOT: blendps
    136 ; CHECK: ret
    137 
    138 
    139 define <2 x double> @test3_x86_sse41_blendv_pd(<2 x double> %a0, <2 x double> %a1) {
    140   %1 = call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %a0, <2 x double> %a0, <2 x double> %a1 )
    141   ret <2 x double> %1
    142 }
    143 ; CHECK-LABEL: test3_x86_sse41_blendv_pd
    144 ; CHECK-NOT: blendvpd
    145 ; CHECK: ret
    146 
    147 
    148 define <4 x float> @test3_x86_sse41_blendv_ps(<4 x float> %a0, <4 x float> %a1) {
    149   %1 = call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %a0, <4 x float> %a0, <4 x float> %a1)
    150   ret <4 x float> %1
    151 }
    152 ; CHECK-LABEL: test3_x86_sse41_blendv_ps
    153 ; CHECK-NOT: blendvps
    154 ; CHECK: ret
    155 
    156 
    157 define <16 x i8> @test3_x86_sse41_pblendv_b(<16 x i8> %a0, <16 x i8> %a1) {
    158   %1 = call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %a0, <16 x i8> %a0, <16 x i8> %a1)
    159   ret <16 x i8> %1
    160 }
    161 ; CHECK-LABEL: test3_x86_sse41_pblendv_b
    162 ; CHECK-NOT: pblendvb
    163 ; CHECK: ret
    164 
    165 
    166 define <8 x i16> @test3_x86_sse41_pblend_w(<8 x i16> %a0) {
    167   %1 = call <8 x i16> @llvm.x86.sse41.pblendw(<8 x i16> %a0, <8 x i16> %a0, i32 7)
    168   ret <8 x i16> %1
    169 }
    170 ; CHECK-LABEL: test3_x86_sse41_pblend_w
    171 ; CHECK-NOT: pblendw
    172 ; CHECK: ret
    173 
    174 
    175 declare <2 x double> @llvm.x86.sse41.blendpd(<2 x double>, <2 x double>, i32)
    176 declare <4 x float> @llvm.x86.sse41.blendps(<4 x float>, <4 x float>, i32)
    177 declare <2 x double> @llvm.x86.sse41.blendvpd(<2 x double>, <2 x double>, <2 x double>)
    178 declare <4 x float> @llvm.x86.sse41.blendvps(<4 x float>, <4 x float>, <4 x float>)
    179 declare <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8>, <16 x i8>, <16 x i8>)
    180 declare <8 x i16> @llvm.x86.sse41.pblendw(<8 x i16>, <8 x i16>, i32)
    181 declare <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16>)
    182 
    183