Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
      2 ; RUN: opt < %s -mtriple=x86_64-apple-darwin -cost-model -analyze -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,SSE2
      3 ; RUN: opt < %s -mtriple=x86_64-apple-darwin -cost-model -analyze -mattr=+sse4.1 | FileCheck %s --check-prefixes=CHECK,SSE41
      4 
      5 define void @zext_v4i8_to_v4i64(<4 x i8>* %a) {
      6 ; SSE2-LABEL: 'zext_v4i8_to_v4i64'
      7 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i8>, <4 x i8>* %a
      8 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %2 = zext <4 x i8> %1 to <4 x i64>
      9 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
     10 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
     11 ;
     12 ; SSE41-LABEL: 'zext_v4i8_to_v4i64'
     13 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i8>, <4 x i8>* %a
     14 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = zext <4 x i8> %1 to <4 x i64>
     15 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
     16 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
     17 ;
     18   %1 = load <4 x i8>, <4 x i8>* %a
     19   %2 = zext <4 x i8> %1 to <4 x i64>
     20   store <4 x i64> %2, <4 x i64>* undef, align 4
     21   ret void
     22 }
     23 
     24 define void @sext_v4i8_to_v4i64(<4 x i8>* %a) {
     25 ; SSE2-LABEL: 'sext_v4i8_to_v4i64'
     26 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i8>, <4 x i8>* %a
     27 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %2 = sext <4 x i8> %1 to <4 x i64>
     28 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
     29 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
     30 ;
     31 ; SSE41-LABEL: 'sext_v4i8_to_v4i64'
     32 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i8>, <4 x i8>* %a
     33 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = sext <4 x i8> %1 to <4 x i64>
     34 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
     35 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
     36 ;
     37   %1 = load <4 x i8>, <4 x i8>* %a
     38   %2 = sext <4 x i8> %1 to <4 x i64>
     39   store <4 x i64> %2, <4 x i64>* undef, align 4
     40   ret void
     41 }
     42 
     43 define void @zext_v4i16_to_v4i64(<4 x i16>* %a) {
     44 ; SSE2-LABEL: 'zext_v4i16_to_v4i64'
     45 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i16>, <4 x i16>* %a
     46 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %2 = zext <4 x i16> %1 to <4 x i64>
     47 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
     48 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
     49 ;
     50 ; SSE41-LABEL: 'zext_v4i16_to_v4i64'
     51 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i16>, <4 x i16>* %a
     52 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = zext <4 x i16> %1 to <4 x i64>
     53 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
     54 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
     55 ;
     56   %1 = load <4 x i16>, <4 x i16>* %a
     57   %2 = zext <4 x i16> %1 to <4 x i64>
     58   store <4 x i64> %2, <4 x i64>* undef, align 4
     59   ret void
     60 }
     61 
     62 define void @sext_v4i16_to_v4i64(<4 x i16>* %a) {
     63 ; SSE2-LABEL: 'sext_v4i16_to_v4i64'
     64 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i16>, <4 x i16>* %a
     65 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %2 = sext <4 x i16> %1 to <4 x i64>
     66 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
     67 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
     68 ;
     69 ; SSE41-LABEL: 'sext_v4i16_to_v4i64'
     70 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i16>, <4 x i16>* %a
     71 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = sext <4 x i16> %1 to <4 x i64>
     72 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
     73 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
     74 ;
     75   %1 = load <4 x i16>, <4 x i16>* %a
     76   %2 = sext <4 x i16> %1 to <4 x i64>
     77   store <4 x i64> %2, <4 x i64>* undef, align 4
     78   ret void
     79 }
     80 
     81 
     82 define void @zext_v4i32_to_v4i64(<4 x i32>* %a) {
     83 ; SSE2-LABEL: 'zext_v4i32_to_v4i64'
     84 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i32>, <4 x i32>* %a
     85 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %2 = zext <4 x i32> %1 to <4 x i64>
     86 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
     87 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
     88 ;
     89 ; SSE41-LABEL: 'zext_v4i32_to_v4i64'
     90 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i32>, <4 x i32>* %a
     91 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = zext <4 x i32> %1 to <4 x i64>
     92 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
     93 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
     94 ;
     95   %1 = load <4 x i32>, <4 x i32>* %a
     96   %2 = zext <4 x i32> %1 to <4 x i64>
     97   store <4 x i64> %2, <4 x i64>* undef, align 4
     98   ret void
     99 }
    100 
    101 define void @sext_v4i32_to_v4i64(<4 x i32>* %a) {
    102 ; SSE2-LABEL: 'sext_v4i32_to_v4i64'
    103 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i32>, <4 x i32>* %a
    104 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %2 = sext <4 x i32> %1 to <4 x i64>
    105 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
    106 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    107 ;
    108 ; SSE41-LABEL: 'sext_v4i32_to_v4i64'
    109 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i32>, <4 x i32>* %a
    110 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = sext <4 x i32> %1 to <4 x i64>
    111 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <4 x i64> %2, <4 x i64>* undef, align 4
    112 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    113 ;
    114   %1 = load <4 x i32>, <4 x i32>* %a
    115   %2 = sext <4 x i32> %1 to <4 x i64>
    116   store <4 x i64> %2, <4 x i64>* undef, align 4
    117   ret void
    118 }
    119 
    120 define void @zext_v16i16_to_v16i32(<16 x i16>* %a) {
    121 ; SSE2-LABEL: 'zext_v16i16_to_v16i32'
    122 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = load <16 x i16>, <16 x i16>* %a
    123 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %2 = zext <16 x i16> %1 to <16 x i32>
    124 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: store <16 x i32> %2, <16 x i32>* undef, align 4
    125 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    126 ;
    127 ; SSE41-LABEL: 'zext_v16i16_to_v16i32'
    128 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = load <16 x i16>, <16 x i16>* %a
    129 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %2 = zext <16 x i16> %1 to <16 x i32>
    130 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: store <16 x i32> %2, <16 x i32>* undef, align 4
    131 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    132 ;
    133   %1 = load <16 x i16>, <16 x i16>* %a
    134   %2 = zext <16 x i16> %1 to <16 x i32>
    135   store <16 x i32> %2, <16 x i32>* undef, align 4
    136   ret void
    137 }
    138 
    139 define void @sext_v16i16_to_v16i32(<16 x i16>* %a) {
    140 ; SSE2-LABEL: 'sext_v16i16_to_v16i32'
    141 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = load <16 x i16>, <16 x i16>* %a
    142 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %2 = sext <16 x i16> %1 to <16 x i32>
    143 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: store <16 x i32> %2, <16 x i32>* undef, align 4
    144 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    145 ;
    146 ; SSE41-LABEL: 'sext_v16i16_to_v16i32'
    147 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = load <16 x i16>, <16 x i16>* %a
    148 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %2 = sext <16 x i16> %1 to <16 x i32>
    149 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: store <16 x i32> %2, <16 x i32>* undef, align 4
    150 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    151 ;
    152   %1 = load <16 x i16>, <16 x i16>* %a
    153   %2 = sext <16 x i16> %1 to <16 x i32>
    154   store <16 x i32> %2, <16 x i32>* undef, align 4
    155   ret void
    156 }
    157 
    158 define void @zext_v8i16_to_v8i32(<8 x i16>* %a) {
    159 ; SSE2-LABEL: 'zext_v8i16_to_v8i32'
    160 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i16>, <8 x i16>* %a
    161 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %2 = zext <8 x i16> %1 to <8 x i32>
    162 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <8 x i32> %2, <8 x i32>* undef, align 4
    163 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    164 ;
    165 ; SSE41-LABEL: 'zext_v8i16_to_v8i32'
    166 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i16>, <8 x i16>* %a
    167 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = zext <8 x i16> %1 to <8 x i32>
    168 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <8 x i32> %2, <8 x i32>* undef, align 4
    169 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    170 ;
    171   %1 = load <8 x i16>, <8 x i16>* %a
    172   %2 = zext <8 x i16> %1 to <8 x i32>
    173   store <8 x i32> %2, <8 x i32>* undef, align 4
    174   ret void
    175 }
    176 
    177 define void @sext_v8i16_to_v8i32(<8 x i16>* %a) {
    178 ; SSE2-LABEL: 'sext_v8i16_to_v8i32'
    179 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i16>, <8 x i16>* %a
    180 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %2 = sext <8 x i16> %1 to <8 x i32>
    181 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <8 x i32> %2, <8 x i32>* undef, align 4
    182 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    183 ;
    184 ; SSE41-LABEL: 'sext_v8i16_to_v8i32'
    185 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i16>, <8 x i16>* %a
    186 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = sext <8 x i16> %1 to <8 x i32>
    187 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <8 x i32> %2, <8 x i32>* undef, align 4
    188 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    189 ;
    190   %1 = load <8 x i16>, <8 x i16>* %a
    191   %2 = sext <8 x i16> %1 to <8 x i32>
    192   store <8 x i32> %2, <8 x i32>* undef, align 4
    193   ret void
    194 }
    195 
    196 define void @zext_v4i16_to_v4i32(<4 x i16>* %a) {
    197 ; CHECK-LABEL: 'zext_v4i16_to_v4i32'
    198 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i16>, <4 x i16>* %a
    199 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %2 = zext <4 x i16> %1 to <4 x i32>
    200 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i32> %2, <4 x i32>* undef, align 4
    201 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    202 ;
    203   %1 = load <4 x i16>, <4 x i16>* %a
    204   %2 = zext <4 x i16> %1 to <4 x i32>
    205   store <4 x i32> %2, <4 x i32>* undef, align 4
    206   ret void
    207 }
    208 
    209 define void @sext_v4i16_to_v4i32(<4 x i16>* %a) {
    210 ; SSE2-LABEL: 'sext_v4i16_to_v4i32'
    211 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i16>, <4 x i16>* %a
    212 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = sext <4 x i16> %1 to <4 x i32>
    213 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i32> %2, <4 x i32>* undef, align 4
    214 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    215 ;
    216 ; SSE41-LABEL: 'sext_v4i16_to_v4i32'
    217 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i16>, <4 x i16>* %a
    218 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %2 = sext <4 x i16> %1 to <4 x i32>
    219 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i32> %2, <4 x i32>* undef, align 4
    220 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    221 ;
    222   %1 = load <4 x i16>, <4 x i16>* %a
    223   %2 = sext <4 x i16> %1 to <4 x i32>
    224   store <4 x i32> %2, <4 x i32>* undef, align 4
    225   ret void
    226 }
    227 
    228 define void @zext_v16i8_to_v16i32(<16 x i8>* %a) {
    229 ; SSE2-LABEL: 'zext_v16i8_to_v16i32'
    230 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <16 x i8>, <16 x i8>* %a
    231 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %2 = zext <16 x i8> %1 to <16 x i32>
    232 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: store <16 x i32> %2, <16 x i32>* undef, align 4
    233 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    234 ;
    235 ; SSE41-LABEL: 'zext_v16i8_to_v16i32'
    236 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <16 x i8>, <16 x i8>* %a
    237 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %2 = zext <16 x i8> %1 to <16 x i32>
    238 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: store <16 x i32> %2, <16 x i32>* undef, align 4
    239 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    240 ;
    241   %1 = load <16 x i8>, <16 x i8>* %a
    242   %2 = zext <16 x i8> %1 to <16 x i32>
    243   store <16 x i32> %2, <16 x i32>* undef, align 4
    244   ret void
    245 }
    246 
    247 define void @sext_v16i8_to_v16i32(<16 x i8>* %a) {
    248 ; SSE2-LABEL: 'sext_v16i8_to_v16i32'
    249 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <16 x i8>, <16 x i8>* %a
    250 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %2 = sext <16 x i8> %1 to <16 x i32>
    251 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: store <16 x i32> %2, <16 x i32>* undef, align 4
    252 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    253 ;
    254 ; SSE41-LABEL: 'sext_v16i8_to_v16i32'
    255 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <16 x i8>, <16 x i8>* %a
    256 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %2 = sext <16 x i8> %1 to <16 x i32>
    257 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: store <16 x i32> %2, <16 x i32>* undef, align 4
    258 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    259 ;
    260   %1 = load <16 x i8>, <16 x i8>* %a
    261   %2 = sext <16 x i8> %1 to <16 x i32>
    262   store <16 x i32> %2, <16 x i32>* undef, align 4
    263   ret void
    264 }
    265 
    266 define void @zext_v8i8_to_v8i32(<8 x i8>* %a) {
    267 ; SSE2-LABEL: 'zext_v8i8_to_v8i32'
    268 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i8>, <8 x i8>* %a
    269 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %2 = zext <8 x i8> %1 to <8 x i32>
    270 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <8 x i32> %2, <8 x i32>* undef, align 4
    271 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    272 ;
    273 ; SSE41-LABEL: 'zext_v8i8_to_v8i32'
    274 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i8>, <8 x i8>* %a
    275 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = zext <8 x i8> %1 to <8 x i32>
    276 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <8 x i32> %2, <8 x i32>* undef, align 4
    277 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    278 ;
    279   %1 = load <8 x i8>, <8 x i8>* %a
    280   %2 = zext <8 x i8> %1 to <8 x i32>
    281   store <8 x i32> %2, <8 x i32>* undef, align 4
    282   ret void
    283 }
    284 
    285 define void @sext_v8i8_to_v8i32(<8 x i8>* %a) {
    286 ; SSE2-LABEL: 'sext_v8i8_to_v8i32'
    287 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i8>, <8 x i8>* %a
    288 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %2 = sext <8 x i8> %1 to <8 x i32>
    289 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <8 x i32> %2, <8 x i32>* undef, align 4
    290 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    291 ;
    292 ; SSE41-LABEL: 'sext_v8i8_to_v8i32'
    293 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i8>, <8 x i8>* %a
    294 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = sext <8 x i8> %1 to <8 x i32>
    295 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <8 x i32> %2, <8 x i32>* undef, align 4
    296 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    297 ;
    298   %1 = load <8 x i8>, <8 x i8>* %a
    299   %2 = sext <8 x i8> %1 to <8 x i32>
    300   store <8 x i32> %2, <8 x i32>* undef, align 4
    301   ret void
    302 }
    303 
    304 define void @zext_v4i8_to_v4i32(<4 x i8>* %a) {
    305 ; SSE2-LABEL: 'zext_v4i8_to_v4i32'
    306 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i8>, <4 x i8>* %a
    307 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = zext <4 x i8> %1 to <4 x i32>
    308 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i32> %2, <4 x i32>* undef, align 4
    309 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    310 ;
    311 ; SSE41-LABEL: 'zext_v4i8_to_v4i32'
    312 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i8>, <4 x i8>* %a
    313 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %2 = zext <4 x i8> %1 to <4 x i32>
    314 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i32> %2, <4 x i32>* undef, align 4
    315 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    316 ;
    317   %1 = load <4 x i8>, <4 x i8>* %a
    318   %2 = zext <4 x i8> %1 to <4 x i32>
    319   store <4 x i32> %2, <4 x i32>* undef, align 4
    320   ret void
    321 }
    322 
    323 define void @sext_v4i8_to_v4i32(<4 x i8>* %a) {
    324 ; SSE2-LABEL: 'sext_v4i8_to_v4i32'
    325 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i8>, <4 x i8>* %a
    326 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %2 = sext <4 x i8> %1 to <4 x i32>
    327 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i32> %2, <4 x i32>* undef, align 4
    328 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    329 ;
    330 ; SSE41-LABEL: 'sext_v4i8_to_v4i32'
    331 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i8>, <4 x i8>* %a
    332 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %2 = sext <4 x i8> %1 to <4 x i32>
    333 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i32> %2, <4 x i32>* undef, align 4
    334 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    335 ;
    336   %1 = load <4 x i8>, <4 x i8>* %a
    337   %2 = sext <4 x i8> %1 to <4 x i32>
    338   store <4 x i32> %2, <4 x i32>* undef, align 4
    339   ret void
    340 }
    341 
    342 define void @zext_v16i8_to_v16i16(<16 x i8>* %a) {
    343 ; SSE2-LABEL: 'zext_v16i8_to_v16i16'
    344 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <16 x i8>, <16 x i8>* %a
    345 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %2 = zext <16 x i8> %1 to <16 x i16>
    346 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <16 x i16> %2, <16 x i16>* undef, align 4
    347 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    348 ;
    349 ; SSE41-LABEL: 'zext_v16i8_to_v16i16'
    350 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <16 x i8>, <16 x i8>* %a
    351 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = zext <16 x i8> %1 to <16 x i16>
    352 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <16 x i16> %2, <16 x i16>* undef, align 4
    353 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    354 ;
    355   %1 = load <16 x i8>, <16 x i8>* %a
    356   %2 = zext <16 x i8> %1 to <16 x i16>
    357   store <16 x i16> %2, <16 x i16>* undef, align 4
    358   ret void
    359 }
    360 
    361 define void @sext_v16i8_to_v16i16(<16 x i8>* %a) {
    362 ; SSE2-LABEL: 'sext_v16i8_to_v16i16'
    363 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <16 x i8>, <16 x i8>* %a
    364 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %2 = sext <16 x i8> %1 to <16 x i16>
    365 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <16 x i16> %2, <16 x i16>* undef, align 4
    366 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    367 ;
    368 ; SSE41-LABEL: 'sext_v16i8_to_v16i16'
    369 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <16 x i8>, <16 x i8>* %a
    370 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = sext <16 x i8> %1 to <16 x i16>
    371 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <16 x i16> %2, <16 x i16>* undef, align 4
    372 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    373 ;
    374   %1 = load <16 x i8>, <16 x i8>* %a
    375   %2 = sext <16 x i8> %1 to <16 x i16>
    376   store <16 x i16> %2, <16 x i16>* undef, align 4
    377   ret void
    378 }
    379 
    380 define void @zext_v8i8_to_v8i16(<8 x i8>* %a) {
    381 ; CHECK-LABEL: 'zext_v8i8_to_v8i16'
    382 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i8>, <8 x i8>* %a
    383 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %2 = zext <8 x i8> %1 to <8 x i16>
    384 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <8 x i16> %2, <8 x i16>* undef, align 4
    385 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    386 ;
    387   %1 = load <8 x i8>, <8 x i8>* %a
    388   %2 = zext <8 x i8> %1 to <8 x i16>
    389   store <8 x i16> %2, <8 x i16>* undef, align 4
    390   ret void
    391 }
    392 
    393 define void @sext_v8i8_to_v8i16(<8 x i8>* %a) {
    394 ; SSE2-LABEL: 'sext_v8i8_to_v8i16'
    395 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i8>, <8 x i8>* %a
    396 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = sext <8 x i8> %1 to <8 x i16>
    397 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <8 x i16> %2, <8 x i16>* undef, align 4
    398 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    399 ;
    400 ; SSE41-LABEL: 'sext_v8i8_to_v8i16'
    401 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i8>, <8 x i8>* %a
    402 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %2 = sext <8 x i8> %1 to <8 x i16>
    403 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <8 x i16> %2, <8 x i16>* undef, align 4
    404 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    405 ;
    406   %1 = load <8 x i8>, <8 x i8>* %a
    407   %2 = sext <8 x i8> %1 to <8 x i16>
    408   store <8 x i16> %2, <8 x i16>* undef, align 4
    409   ret void
    410 }
    411 
    412 define void @zext_v4i8_to_v4i16(<4 x i8>* %a) {
    413 ; CHECK-LABEL: 'zext_v4i8_to_v4i16'
    414 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i8>, <4 x i8>* %a
    415 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %2 = zext <4 x i8> %1 to <4 x i16>
    416 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i16> %2, <4 x i16>* undef, align 4
    417 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    418 ;
    419   %1 = load <4 x i8>, <4 x i8>* %a
    420   %2 = zext <4 x i8> %1 to <4 x i16>
    421   store <4 x i16> %2, <4 x i16>* undef, align 4
    422   ret void
    423 }
    424 
    425 define void @sext_v4i8_to_v4i16(<4 x i8>* %a) {
    426 ; SSE2-LABEL: 'sext_v4i8_to_v4i16'
    427 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i8>, <4 x i8>* %a
    428 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %2 = sext <4 x i8> %1 to <4 x i16>
    429 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i16> %2, <4 x i16>* undef, align 4
    430 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    431 ;
    432 ; SSE41-LABEL: 'sext_v4i8_to_v4i16'
    433 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i8>, <4 x i8>* %a
    434 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = sext <4 x i8> %1 to <4 x i16>
    435 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i16> %2, <4 x i16>* undef, align 4
    436 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    437 ;
    438   %1 = load <4 x i8>, <4 x i8>* %a
    439   %2 = sext <4 x i8> %1 to <4 x i16>
    440   store <4 x i16> %2, <4 x i16>* undef, align 4
    441   ret void
    442 }
    443 
    444 define void @truncate_v16i32_to_v16i16(<16 x i32>* %a) {
    445 ; SSE2-LABEL: 'truncate_v16i32_to_v16i16'
    446 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %1 = load <16 x i32>, <16 x i32>* %a
    447 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %2 = trunc <16 x i32> %1 to <16 x i16>
    448 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <16 x i16> %2, <16 x i16>* undef, align 4
    449 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    450 ;
    451 ; SSE41-LABEL: 'truncate_v16i32_to_v16i16'
    452 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %1 = load <16 x i32>, <16 x i32>* %a
    453 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %2 = trunc <16 x i32> %1 to <16 x i16>
    454 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: store <16 x i16> %2, <16 x i16>* undef, align 4
    455 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    456 ;
    457   %1 = load <16 x i32>, <16 x i32>* %a
    458   %2 = trunc <16 x i32> %1 to <16 x i16>
    459   store <16 x i16> %2, <16 x i16>* undef, align 4
    460   ret void
    461 }
    462 
    463 define void @truncate_v8i32_to_v8i16(<8 x i32>* %a) {
    464 ; SSE2-LABEL: 'truncate_v8i32_to_v8i16'
    465 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = load <8 x i32>, <8 x i32>* %a
    466 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %2 = trunc <8 x i32> %1 to <8 x i16>
    467 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <8 x i16> %2, <8 x i16>* undef, align 4
    468 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    469 ;
    470 ; SSE41-LABEL: 'truncate_v8i32_to_v8i16'
    471 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = load <8 x i32>, <8 x i32>* %a
    472 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %2 = trunc <8 x i32> %1 to <8 x i16>
    473 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <8 x i16> %2, <8 x i16>* undef, align 4
    474 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    475 ;
    476   %1 = load <8 x i32>, <8 x i32>* %a
    477   %2 = trunc <8 x i32> %1 to <8 x i16>
    478   store <8 x i16> %2, <8 x i16>* undef, align 4
    479   ret void
    480 }
    481 
    482 define void @truncate_v4i32_to_v4i16(<4 x i32>* %a) {
    483 ; SSE2-LABEL: 'truncate_v4i32_to_v4i16'
    484 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i32>, <4 x i32>* %a
    485 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %2 = trunc <4 x i32> %1 to <4 x i16>
    486 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i16> %2, <4 x i16>* undef, align 4
    487 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    488 ;
    489 ; SSE41-LABEL: 'truncate_v4i32_to_v4i16'
    490 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i32>, <4 x i32>* %a
    491 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %2 = trunc <4 x i32> %1 to <4 x i16>
    492 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i16> %2, <4 x i16>* undef, align 4
    493 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    494 ;
    495   %1 = load <4 x i32>, <4 x i32>* %a
    496   %2 = trunc <4 x i32> %1 to <4 x i16>
    497   store <4 x i16> %2, <4 x i16>* undef, align 4
    498   ret void
    499 }
    500 
    501 define void @truncate_v16i32_to_v16i8(<16 x i32>* %a) {
    502 ; CHECK-LABEL: 'truncate_v16i32_to_v16i8'
    503 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %1 = load <16 x i32>, <16 x i32>* %a
    504 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %2 = trunc <16 x i32> %1 to <16 x i8>
    505 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <16 x i8> %2, <16 x i8>* undef, align 4
    506 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    507 ;
    508   %1 = load <16 x i32>, <16 x i32>* %a
    509   %2 = trunc <16 x i32> %1 to <16 x i8>
    510   store <16 x i8> %2, <16 x i8>* undef, align 4
    511   ret void
    512 }
    513 
    514 define void @truncate_v8i32_to_v8i8(<8 x i32>* %a) {
    515 ; SSE2-LABEL: 'truncate_v8i32_to_v8i8'
    516 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = load <8 x i32>, <8 x i32>* %a
    517 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %2 = trunc <8 x i32> %1 to <8 x i8>
    518 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <8 x i8> %2, <8 x i8>* undef, align 4
    519 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    520 ;
    521 ; SSE41-LABEL: 'truncate_v8i32_to_v8i8'
    522 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = load <8 x i32>, <8 x i32>* %a
    523 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %2 = trunc <8 x i32> %1 to <8 x i8>
    524 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <8 x i8> %2, <8 x i8>* undef, align 4
    525 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    526 ;
    527   %1 = load <8 x i32>, <8 x i32>* %a
    528   %2 = trunc <8 x i32> %1 to <8 x i8>
    529   store <8 x i8> %2, <8 x i8>* undef, align 4
    530   ret void
    531 }
    532 
    533 define void @truncate_v4i32_to_v4i8(<4 x i32>* %a) {
    534 ; SSE2-LABEL: 'truncate_v4i32_to_v4i8'
    535 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i32>, <4 x i32>* %a
    536 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %2 = trunc <4 x i32> %1 to <4 x i8>
    537 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i8> %2, <4 x i8>* undef, align 4
    538 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    539 ;
    540 ; SSE41-LABEL: 'truncate_v4i32_to_v4i8'
    541 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i32>, <4 x i32>* %a
    542 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %2 = trunc <4 x i32> %1 to <4 x i8>
    543 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i8> %2, <4 x i8>* undef, align 4
    544 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    545 ;
    546   %1 = load <4 x i32>, <4 x i32>* %a
    547   %2 = trunc <4 x i32> %1 to <4 x i8>
    548   store <4 x i8> %2, <4 x i8>* undef, align 4
    549   ret void
    550 }
    551 
    552 define void @truncate_v16i16_to_v16i8(<16 x i16>* %a) {
    553 ; CHECK-LABEL: 'truncate_v16i16_to_v16i8'
    554 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = load <16 x i16>, <16 x i16>* %a
    555 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %2 = trunc <16 x i16> %1 to <16 x i8>
    556 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <16 x i8> %2, <16 x i8>* undef, align 4
    557 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    558 ;
    559   %1 = load <16 x i16>, <16 x i16>* %a
    560   %2 = trunc <16 x i16> %1 to <16 x i8>
    561   store <16 x i8> %2, <16 x i8>* undef, align 4
    562   ret void
    563 }
    564 
    565 define void @truncate_v8i16_to_v8i8(<8 x i16>* %a) {
    566 ; SSE2-LABEL: 'truncate_v8i16_to_v8i8'
    567 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i16>, <8 x i16>* %a
    568 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = trunc <8 x i16> %1 to <8 x i8>
    569 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <8 x i8> %2, <8 x i8>* undef, align 4
    570 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    571 ;
    572 ; SSE41-LABEL: 'truncate_v8i16_to_v8i8'
    573 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <8 x i16>, <8 x i16>* %a
    574 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %2 = trunc <8 x i16> %1 to <8 x i8>
    575 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <8 x i8> %2, <8 x i8>* undef, align 4
    576 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    577 ;
    578   %1 = load <8 x i16>, <8 x i16>* %a
    579   %2 = trunc <8 x i16> %1 to <8 x i8>
    580   store <8 x i8> %2, <8 x i8>* undef, align 4
    581   ret void
    582 }
    583 
    584 define void @truncate_v4i16_to_v4i8(<4 x i16>* %a) {
    585 ; SSE2-LABEL: 'truncate_v4i16_to_v4i8'
    586 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i16>, <4 x i16>* %a
    587 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %2 = trunc <4 x i16> %1 to <4 x i8>
    588 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i8> %2, <4 x i8>* undef, align 4
    589 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    590 ;
    591 ; SSE41-LABEL: 'truncate_v4i16_to_v4i8'
    592 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = load <4 x i16>, <4 x i16>* %a
    593 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %2 = trunc <4 x i16> %1 to <4 x i8>
    594 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: store <4 x i8> %2, <4 x i8>* undef, align 4
    595 ; SSE41-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
    596 ;
    597   %1 = load <4 x i16>, <4 x i16>* %a
    598   %2 = trunc <4 x i16> %1 to <4 x i8>
    599   store <4 x i8> %2, <4 x i8>* undef, align 4
    600   ret void
    601 }
    602