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=i686-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X86
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X64
      4 
      5 define <4 x i32> @add_4i32(<4 x i32> %a0, <4 x i32> %a1) {
      6 ; X86-LABEL: add_4i32:
      7 ; X86:       # %bb.0:
      8 ; X86-NEXT:    paddd %xmm1, %xmm0
      9 ; X86-NEXT:    retl
     10 ;
     11 ; X64-LABEL: add_4i32:
     12 ; X64:       # %bb.0:
     13 ; X64-NEXT:    paddd %xmm1, %xmm0
     14 ; X64-NEXT:    retq
     15   %1 = add <4 x i32> %a0, <i32  1, i32 -2, i32  3, i32 -4>
     16   %2 = add <4 x i32> %a1, <i32 -1, i32  2, i32 -3, i32  4>
     17   %3 = add <4 x i32> %1, %2
     18   ret <4 x i32> %3
     19 }
     20 
     21 define <4 x i32> @add_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {
     22 ; X86-LABEL: add_4i32_commute:
     23 ; X86:       # %bb.0:
     24 ; X86-NEXT:    paddd %xmm1, %xmm0
     25 ; X86-NEXT:    retl
     26 ;
     27 ; X64-LABEL: add_4i32_commute:
     28 ; X64:       # %bb.0:
     29 ; X64-NEXT:    paddd %xmm1, %xmm0
     30 ; X64-NEXT:    retq
     31   %1 = add <4 x i32> <i32  1, i32 -2, i32  3, i32 -4>, %a0
     32   %2 = add <4 x i32> <i32 -1, i32  2, i32 -3, i32  4>, %a1
     33   %3 = add <4 x i32> %1, %2
     34   ret <4 x i32> %3
     35 }
     36 
     37 define <4 x i32> @mul_4i32(<4 x i32> %a0, <4 x i32> %a1) {
     38 ; X86-LABEL: mul_4i32:
     39 ; X86:       # %bb.0:
     40 ; X86-NEXT:    pmulld %xmm1, %xmm0
     41 ; X86-NEXT:    pmulld {{\.LCPI.*}}, %xmm0
     42 ; X86-NEXT:    retl
     43 ;
     44 ; X64-LABEL: mul_4i32:
     45 ; X64:       # %bb.0:
     46 ; X64-NEXT:    pmulld %xmm1, %xmm0
     47 ; X64-NEXT:    pmulld {{.*}}(%rip), %xmm0
     48 ; X64-NEXT:    retq
     49   %1 = mul <4 x i32> %a0, <i32 1, i32 2, i32 3, i32 4>
     50   %2 = mul <4 x i32> %a1, <i32 4, i32 3, i32 2, i32 1>
     51   %3 = mul <4 x i32> %1, %2
     52   ret <4 x i32> %3
     53 }
     54 
     55 define <4 x i32> @mul_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {
     56 ; X86-LABEL: mul_4i32_commute:
     57 ; X86:       # %bb.0:
     58 ; X86-NEXT:    pmulld %xmm1, %xmm0
     59 ; X86-NEXT:    pmulld {{\.LCPI.*}}, %xmm0
     60 ; X86-NEXT:    retl
     61 ;
     62 ; X64-LABEL: mul_4i32_commute:
     63 ; X64:       # %bb.0:
     64 ; X64-NEXT:    pmulld %xmm1, %xmm0
     65 ; X64-NEXT:    pmulld {{.*}}(%rip), %xmm0
     66 ; X64-NEXT:    retq
     67   %1 = mul <4 x i32> <i32 1, i32 2, i32 3, i32 4>, %a0
     68   %2 = mul <4 x i32> <i32 4, i32 3, i32 2, i32 1>, %a1
     69   %3 = mul <4 x i32> %1, %2
     70   ret <4 x i32> %3
     71 }
     72 
     73 define <4 x i32> @and_4i32(<4 x i32> %a0, <4 x i32> %a1) {
     74 ; X86-LABEL: and_4i32:
     75 ; X86:       # %bb.0:
     76 ; X86-NEXT:    andps %xmm1, %xmm0
     77 ; X86-NEXT:    andps {{\.LCPI.*}}, %xmm0
     78 ; X86-NEXT:    retl
     79 ;
     80 ; X64-LABEL: and_4i32:
     81 ; X64:       # %bb.0:
     82 ; X64-NEXT:    andps %xmm1, %xmm0
     83 ; X64-NEXT:    andps {{.*}}(%rip), %xmm0
     84 ; X64-NEXT:    retq
     85   %1 = and <4 x i32> %a0, <i32 -2, i32 -2, i32  3, i32  3>
     86   %2 = and <4 x i32> %a1, <i32 -1, i32 -1, i32  1, i32  1>
     87   %3 = and <4 x i32> %1, %2
     88   ret <4 x i32> %3
     89 }
     90 
     91 define <4 x i32> @and_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {
     92 ; X86-LABEL: and_4i32_commute:
     93 ; X86:       # %bb.0:
     94 ; X86-NEXT:    andps %xmm1, %xmm0
     95 ; X86-NEXT:    andps {{\.LCPI.*}}, %xmm0
     96 ; X86-NEXT:    retl
     97 ;
     98 ; X64-LABEL: and_4i32_commute:
     99 ; X64:       # %bb.0:
    100 ; X64-NEXT:    andps %xmm1, %xmm0
    101 ; X64-NEXT:    andps {{.*}}(%rip), %xmm0
    102 ; X64-NEXT:    retq
    103   %1 = and <4 x i32> <i32 -2, i32 -2, i32  3, i32  3>, %a0
    104   %2 = and <4 x i32> <i32 -1, i32 -1, i32  1, i32  1>, %a1
    105   %3 = and <4 x i32> %1, %2
    106   ret <4 x i32> %3
    107 }
    108 
    109 define <4 x i32> @or_4i32(<4 x i32> %a0, <4 x i32> %a1) {
    110 ; X86-LABEL: or_4i32:
    111 ; X86:       # %bb.0:
    112 ; X86-NEXT:    orps %xmm1, %xmm0
    113 ; X86-NEXT:    orps {{\.LCPI.*}}, %xmm0
    114 ; X86-NEXT:    retl
    115 ;
    116 ; X64-LABEL: or_4i32:
    117 ; X64:       # %bb.0:
    118 ; X64-NEXT:    orps %xmm1, %xmm0
    119 ; X64-NEXT:    orps {{.*}}(%rip), %xmm0
    120 ; X64-NEXT:    retq
    121   %1 = or <4 x i32> %a0, <i32 -2, i32 -2, i32  3, i32  3>
    122   %2 = or <4 x i32> %a1, <i32 -1, i32 -1, i32  1, i32  1>
    123   %3 = or <4 x i32> %1, %2
    124   ret <4 x i32> %3
    125 }
    126 
    127 define <4 x i32> @or_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {
    128 ; X86-LABEL: or_4i32_commute:
    129 ; X86:       # %bb.0:
    130 ; X86-NEXT:    orps %xmm1, %xmm0
    131 ; X86-NEXT:    orps {{\.LCPI.*}}, %xmm0
    132 ; X86-NEXT:    retl
    133 ;
    134 ; X64-LABEL: or_4i32_commute:
    135 ; X64:       # %bb.0:
    136 ; X64-NEXT:    orps %xmm1, %xmm0
    137 ; X64-NEXT:    orps {{.*}}(%rip), %xmm0
    138 ; X64-NEXT:    retq
    139   %1 = or <4 x i32> <i32 -2, i32 -2, i32  3, i32  3>, %a0
    140   %2 = or <4 x i32> <i32 -1, i32 -1, i32  1, i32  1>, %a1
    141   %3 = or <4 x i32> %1, %2
    142   ret <4 x i32> %3
    143 }
    144 
    145 define <4 x i32> @xor_4i32(<4 x i32> %a0, <4 x i32> %a1) {
    146 ; X86-LABEL: xor_4i32:
    147 ; X86:       # %bb.0:
    148 ; X86-NEXT:    xorps %xmm1, %xmm0
    149 ; X86-NEXT:    xorps {{\.LCPI.*}}, %xmm0
    150 ; X86-NEXT:    retl
    151 ;
    152 ; X64-LABEL: xor_4i32:
    153 ; X64:       # %bb.0:
    154 ; X64-NEXT:    xorps %xmm1, %xmm0
    155 ; X64-NEXT:    xorps {{.*}}(%rip), %xmm0
    156 ; X64-NEXT:    retq
    157   %1 = xor <4 x i32> %a0, <i32 -2, i32 -2, i32  3, i32  3>
    158   %2 = xor <4 x i32> %a1, <i32 -1, i32 -1, i32  1, i32  1>
    159   %3 = xor <4 x i32> %1, %2
    160   ret <4 x i32> %3
    161 }
    162 
    163 define <4 x i32> @xor_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {
    164 ; X86-LABEL: xor_4i32_commute:
    165 ; X86:       # %bb.0:
    166 ; X86-NEXT:    xorps %xmm1, %xmm0
    167 ; X86-NEXT:    xorps {{\.LCPI.*}}, %xmm0
    168 ; X86-NEXT:    retl
    169 ;
    170 ; X64-LABEL: xor_4i32_commute:
    171 ; X64:       # %bb.0:
    172 ; X64-NEXT:    xorps %xmm1, %xmm0
    173 ; X64-NEXT:    xorps {{.*}}(%rip), %xmm0
    174 ; X64-NEXT:    retq
    175   %1 = xor <4 x i32> <i32 -2, i32 -2, i32  3, i32  3>, %a0
    176   %2 = xor <4 x i32> <i32 -1, i32 -1, i32  1, i32  1>, %a1
    177   %3 = xor <4 x i32> %1, %2
    178   ret <4 x i32> %3
    179 }
    180