Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
      2 ; RUN: opt < %s -cost-model -analyze -mcpu=slm | FileCheck %s --check-prefixes=CHECK,SLM
      3 ; RUN: opt < %s -cost-model -analyze -mcpu=goldmont | FileCheck %s --check-prefixes=CHECK,GLM
      4 ; RUN: opt < %s -cost-model -analyze -mcpu=goldmont-plus | FileCheck %s --check-prefixes=CHECK,GLM
      5 
      6 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
      7 target triple = "x86_64-unknown-linux-gnu"
      8 
      9 define <2 x i64> @slm-costs_64_vector_add(<2 x i64> %a, <2 x i64> %b) {
     10 ; SLM-LABEL: 'slm-costs_64_vector_add'
     11 ; SLM-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %res = add <2 x i64> %a, %b
     12 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %res
     13 ;
     14 ; GLM-LABEL: 'slm-costs_64_vector_add'
     15 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = add <2 x i64> %a, %b
     16 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %res
     17 ;
     18 entry:
     19   %res = add <2 x i64> %a, %b
     20   ret <2 x i64> %res
     21 }
     22 
     23 define <2 x i64> @slm-costs_64_vector_sub(<2 x i64> %a, <2 x i64> %b) {
     24 ; SLM-LABEL: 'slm-costs_64_vector_sub'
     25 ; SLM-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %res = sub <2 x i64> %a, %b
     26 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %res
     27 ;
     28 ; GLM-LABEL: 'slm-costs_64_vector_sub'
     29 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = sub <2 x i64> %a, %b
     30 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %res
     31 ;
     32 entry:
     33   %res = sub <2 x i64> %a, %b
     34   ret <2 x i64> %res
     35 }
     36 
     37 ; 8bit mul
     38 define i8 @slm-costs_8_scalar_mul(i8 %a, i8 %b)  {
     39 ; CHECK-LABEL: 'slm-costs_8_scalar_mul'
     40 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = mul nsw i8 %a, %b
     41 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i8 %res
     42 ;
     43 entry:
     44   %res = mul nsw i8 %a, %b
     45   ret i8 %res
     46 }
     47 
     48 define <2 x i8> @slm-costs_8_v2_mul(<2 x i8> %a, <2 x i8> %b)  {
     49 ; SLM-LABEL: 'slm-costs_8_v2_mul'
     50 ; SLM-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %res = mul nsw <2 x i8> %a, %b
     51 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i8> %res
     52 ;
     53 ; GLM-LABEL: 'slm-costs_8_v2_mul'
     54 ; GLM-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %res = mul nsw <2 x i8> %a, %b
     55 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i8> %res
     56 ;
     57 entry:
     58   %res = mul nsw <2 x i8> %a, %b
     59   ret <2 x i8> %res
     60 }
     61 
     62 define <4 x i8> @slm-costs_8_v4_mul(<4 x i8> %a, <4 x i8> %b)  {
     63 ; SLM-LABEL: 'slm-costs_8_v4_mul'
     64 ; SLM-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %res = mul nsw <4 x i8> %a, %b
     65 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i8> %res
     66 ;
     67 ; GLM-LABEL: 'slm-costs_8_v4_mul'
     68 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i8> %a, %b
     69 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i8> %res
     70 ;
     71 entry:
     72   %res = mul nsw <4 x i8> %a, %b
     73   ret <4 x i8> %res
     74 }
     75 
     76 define <4 x i32> @slm-costs_8_v4_zext_mul(<4 x i8> %a)  {
     77 ; SLM-LABEL: 'slm-costs_8_v4_zext_mul'
     78 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i8> %a to <4 x i32>
     79 ; SLM-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %res = mul nsw <4 x i32> %zext, <i32 255, i32 255, i32 255, i32 255>
     80 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
     81 ;
     82 ; GLM-LABEL: 'slm-costs_8_v4_zext_mul'
     83 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i8> %a to <4 x i32>
     84 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %zext, <i32 255, i32 255, i32 255, i32 255>
     85 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
     86 ;
     87 entry:
     88   %zext = zext <4 x i8> %a to <4 x i32>
     89   %res = mul nsw <4 x i32> %zext, <i32 255, i32 255, i32 255, i32 255>
     90   ret <4 x i32> %res
     91 }
     92 
     93 define <4 x i32> @slm-costs_8_v4_zext_mul_fail(<4 x i8> %a)  {
     94 ; SLM-LABEL: 'slm-costs_8_v4_zext_mul_fail'
     95 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i8> %a to <4 x i32>
     96 ; SLM-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %res = mul nsw <4 x i32> %zext, <i32 255, i32 255, i32 -1, i32 255>
     97 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
     98 ;
     99 ; GLM-LABEL: 'slm-costs_8_v4_zext_mul_fail'
    100 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i8> %a to <4 x i32>
    101 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %zext, <i32 255, i32 255, i32 -1, i32 255>
    102 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    103 ;
    104 entry:
    105   %zext = zext <4 x i8> %a to <4 x i32>
    106   %res = mul nsw <4 x i32> %zext, <i32 255, i32 255, i32 -1, i32 255>
    107   ret <4 x i32> %res
    108 }
    109 
    110 define <4 x i32> @slm-costs_8_v4_zext_mul_fail_2(<4 x i8> %a)  {
    111 ; SLM-LABEL: 'slm-costs_8_v4_zext_mul_fail_2'
    112 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i8> %a to <4 x i32>
    113 ; SLM-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %res = mul nsw <4 x i32> %zext, <i32 255, i32 256, i32 255, i32 255>
    114 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    115 ;
    116 ; GLM-LABEL: 'slm-costs_8_v4_zext_mul_fail_2'
    117 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i8> %a to <4 x i32>
    118 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %zext, <i32 255, i32 256, i32 255, i32 255>
    119 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    120 ;
    121 entry:
    122   %zext = zext <4 x i8> %a to <4 x i32>
    123   %res = mul nsw <4 x i32> %zext, <i32 255, i32 256, i32 255, i32 255>
    124   ret <4 x i32> %res
    125 }
    126 
    127 define <4 x i32> @slm-costs_8_v4_sext_mul(<4 x i8> %a)  {
    128 ; SLM-LABEL: 'slm-costs_8_v4_sext_mul'
    129 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i8> %a to <4 x i32>
    130 ; SLM-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %res = mul nsw <4 x i32> %sext, <i32 127, i32 -128, i32 127, i32 -128>
    131 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    132 ;
    133 ; GLM-LABEL: 'slm-costs_8_v4_sext_mul'
    134 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i8> %a to <4 x i32>
    135 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %sext, <i32 127, i32 -128, i32 127, i32 -128>
    136 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    137 ;
    138 entry:
    139   %sext = sext <4 x i8> %a to <4 x i32>
    140   %res = mul nsw <4 x i32> %sext, <i32 127, i32 -128, i32 127, i32 -128>
    141   ret <4 x i32> %res
    142 }
    143 
    144 define <4 x i32> @slm-costs_8_v4_sext_mul_fail(<4 x i8> %a)  {
    145 ; SLM-LABEL: 'slm-costs_8_v4_sext_mul_fail'
    146 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i8> %a to <4 x i32>
    147 ; SLM-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %res = mul nsw <4 x i32> %sext, <i32 127, i32 -128, i32 128, i32 -128>
    148 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    149 ;
    150 ; GLM-LABEL: 'slm-costs_8_v4_sext_mul_fail'
    151 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i8> %a to <4 x i32>
    152 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %sext, <i32 127, i32 -128, i32 128, i32 -128>
    153 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    154 ;
    155 entry:
    156   %sext = sext <4 x i8> %a to <4 x i32>
    157   %res = mul nsw <4 x i32> %sext, <i32 127, i32 -128, i32 128, i32 -128>
    158   ret <4 x i32> %res
    159 }
    160 
    161 define <4 x i32> @slm-costs_8_v4_sext_mul_fail_2(<4 x i8> %a)  {
    162 ; SLM-LABEL: 'slm-costs_8_v4_sext_mul_fail_2'
    163 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i8> %a to <4 x i32>
    164 ; SLM-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %res = mul nsw <4 x i32> %sext, <i32 127, i32 -129, i32 127, i32 -128>
    165 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    166 ;
    167 ; GLM-LABEL: 'slm-costs_8_v4_sext_mul_fail_2'
    168 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i8> %a to <4 x i32>
    169 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %sext, <i32 127, i32 -129, i32 127, i32 -128>
    170 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    171 ;
    172 entry:
    173   %sext = sext <4 x i8> %a to <4 x i32>
    174   %res = mul nsw <4 x i32> %sext, <i32 127, i32 -129, i32 127, i32 -128>
    175   ret <4 x i32> %res
    176 }
    177 
    178 define <8 x i8> @slm-costs_8_v8_mul(<8 x i8> %a, <8 x i8> %b)  {
    179 ; SLM-LABEL: 'slm-costs_8_v8_mul'
    180 ; SLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <8 x i8> %a, %b
    181 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i8> %res
    182 ;
    183 ; GLM-LABEL: 'slm-costs_8_v8_mul'
    184 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = mul nsw <8 x i8> %a, %b
    185 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i8> %res
    186 ;
    187 entry:
    188   %res = mul nsw <8 x i8> %a, %b
    189   ret <8 x i8> %res
    190 }
    191 
    192 define <16 x i8> @slm-costs_8_v16_mul(<16 x i8> %a, <16 x i8> %b)  {
    193 ; SLM-LABEL: 'slm-costs_8_v16_mul'
    194 ; SLM-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %res = mul nsw <16 x i8> %a, %b
    195 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %res
    196 ;
    197 ; GLM-LABEL: 'slm-costs_8_v16_mul'
    198 ; GLM-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %res = mul nsw <16 x i8> %a, %b
    199 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %res
    200 ;
    201 entry:
    202   %res = mul nsw <16 x i8> %a, %b
    203   ret <16 x i8> %res
    204 }
    205 
    206 ; 16bit mul
    207 define i16 @slm-costs_16_scalar_mul(i16 %a, i16 %b)  {
    208 ; CHECK-LABEL: 'slm-costs_16_scalar_mul'
    209 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = mul nsw i16 %a, %b
    210 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i16 %res
    211 ;
    212 entry:
    213   %res = mul nsw i16 %a, %b
    214   ret i16 %res
    215 }
    216 
    217 define <2 x i16> @slm-costs_16_v2_mul(<2 x i16> %a, <2 x i16> %b)  {
    218 ; SLM-LABEL: 'slm-costs_16_v2_mul'
    219 ; SLM-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %res = mul nsw <2 x i16> %a, %b
    220 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i16> %res
    221 ;
    222 ; GLM-LABEL: 'slm-costs_16_v2_mul'
    223 ; GLM-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %res = mul nsw <2 x i16> %a, %b
    224 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i16> %res
    225 ;
    226 entry:
    227   %res = mul nsw <2 x i16> %a, %b
    228   ret <2 x i16> %res
    229 }
    230 
    231 define <4 x i16> @slm-costs_16_v4_mul(<4 x i16> %a, <4 x i16> %b)  {
    232 ; SLM-LABEL: 'slm-costs_16_v4_mul'
    233 ; SLM-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %res = mul nsw <4 x i16> %a, %b
    234 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i16> %res
    235 ;
    236 ; GLM-LABEL: 'slm-costs_16_v4_mul'
    237 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i16> %a, %b
    238 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i16> %res
    239 ;
    240 entry:
    241   %res = mul nsw <4 x i16> %a, %b
    242   ret <4 x i16> %res
    243 }
    244 
    245 define <4 x i32> @slm-costs_16_v4_zext_mul(<4 x i16> %a)  {
    246 ; SLM-LABEL: 'slm-costs_16_v4_zext_mul'
    247 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i16> %a to <4 x i32>
    248 ; SLM-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %res = mul nsw <4 x i32> %zext, <i32 65535, i32 65535, i32 65535, i32 65535>
    249 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    250 ;
    251 ; GLM-LABEL: 'slm-costs_16_v4_zext_mul'
    252 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i16> %a to <4 x i32>
    253 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %zext, <i32 65535, i32 65535, i32 65535, i32 65535>
    254 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    255 ;
    256 entry:
    257   %zext = zext <4 x i16> %a to <4 x i32>
    258   %res = mul nsw <4 x i32> %zext, <i32 65535, i32 65535, i32 65535, i32 65535>
    259   ret <4 x i32> %res
    260 }
    261 
    262 define <4 x i32> @slm-costs_16_v4_zext_mul_fail(<4 x i16> %a)  {
    263 ; SLM-LABEL: 'slm-costs_16_v4_zext_mul_fail'
    264 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i16> %a to <4 x i32>
    265 ; SLM-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %res = mul nsw <4 x i32> %zext, <i32 -1, i32 65535, i32 65535, i32 65535>
    266 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    267 ;
    268 ; GLM-LABEL: 'slm-costs_16_v4_zext_mul_fail'
    269 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i16> %a to <4 x i32>
    270 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %zext, <i32 -1, i32 65535, i32 65535, i32 65535>
    271 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    272 ;
    273 entry:
    274   %zext = zext <4 x i16> %a to <4 x i32>
    275   %res = mul nsw <4 x i32> %zext, <i32 -1, i32 65535, i32 65535, i32 65535>
    276   ret <4 x i32> %res
    277 }
    278 
    279 define <4 x i32> @slm-costs_16_v4_zext_mul_fail_2(<4 x i16> %a)  {
    280 ; SLM-LABEL: 'slm-costs_16_v4_zext_mul_fail_2'
    281 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i16> %a to <4 x i32>
    282 ; SLM-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %res = mul nsw <4 x i32> %zext, <i32 65536, i32 65535, i32 65535, i32 65535>
    283 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    284 ;
    285 ; GLM-LABEL: 'slm-costs_16_v4_zext_mul_fail_2'
    286 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %zext = zext <4 x i16> %a to <4 x i32>
    287 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %zext, <i32 65536, i32 65535, i32 65535, i32 65535>
    288 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    289 ;
    290 entry:
    291   %zext = zext <4 x i16> %a to <4 x i32>
    292   %res = mul nsw <4 x i32> %zext, <i32 65536, i32 65535, i32 65535, i32 65535>
    293   ret <4 x i32> %res
    294 }
    295 
    296 define <4 x i32> @slm-costs_16_v4_sext_mul(<4 x i16> %a)  {
    297 ; SLM-LABEL: 'slm-costs_16_v4_sext_mul'
    298 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i16> %a to <4 x i32>
    299 ; SLM-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %res = mul nsw <4 x i32> %sext, <i32 32767, i32 -32768, i32 32767, i32 -32768>
    300 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    301 ;
    302 ; GLM-LABEL: 'slm-costs_16_v4_sext_mul'
    303 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i16> %a to <4 x i32>
    304 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %sext, <i32 32767, i32 -32768, i32 32767, i32 -32768>
    305 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    306 ;
    307 entry:
    308   %sext = sext <4 x i16> %a to <4 x i32>
    309   %res = mul nsw <4 x i32> %sext, <i32 32767, i32 -32768, i32 32767, i32 -32768>
    310   ret <4 x i32> %res
    311 }
    312 
    313 define <4 x i32> @slm-costs_16_v4_sext_mul_fail(<4 x i16> %a)  {
    314 ; SLM-LABEL: 'slm-costs_16_v4_sext_mul_fail'
    315 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i16> %a to <4 x i32>
    316 ; SLM-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %res = mul nsw <4 x i32> %sext, <i32 32767, i32 -32768, i32 32768, i32 -32768>
    317 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    318 ;
    319 ; GLM-LABEL: 'slm-costs_16_v4_sext_mul_fail'
    320 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i16> %a to <4 x i32>
    321 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %sext, <i32 32767, i32 -32768, i32 32768, i32 -32768>
    322 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    323 ;
    324 entry:
    325   %sext = sext <4 x i16> %a to <4 x i32>
    326   %res = mul nsw <4 x i32> %sext, <i32 32767, i32 -32768, i32 32768, i32 -32768>
    327   ret <4 x i32> %res
    328 }
    329 
    330 define <4 x i32> @slm-costs_16_v4_sext_mul_fail_2(<4 x i16> %a)  {
    331 ; SLM-LABEL: 'slm-costs_16_v4_sext_mul_fail_2'
    332 ; SLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i16> %a to <4 x i32>
    333 ; SLM-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %res = mul nsw <4 x i32> %sext, <i32 32767, i32 -32768, i32 32767, i32 -32769>
    334 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    335 ;
    336 ; GLM-LABEL: 'slm-costs_16_v4_sext_mul_fail_2'
    337 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %sext = sext <4 x i16> %a to <4 x i32>
    338 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %sext, <i32 32767, i32 -32768, i32 32767, i32 -32769>
    339 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    340 ;
    341 entry:
    342   %sext = sext <4 x i16> %a to <4 x i32>
    343   %res = mul nsw <4 x i32> %sext, <i32 32767, i32 -32768, i32 32767, i32 -32769>
    344   ret <4 x i32> %res
    345 }
    346 
    347 define <8 x i16> @slm-costs_16_v8_mul(<8 x i16> %a, <8 x i16> %b)  {
    348 ; SLM-LABEL: 'slm-costs_16_v8_mul'
    349 ; SLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <8 x i16> %a, %b
    350 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %res
    351 ;
    352 ; GLM-LABEL: 'slm-costs_16_v8_mul'
    353 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = mul nsw <8 x i16> %a, %b
    354 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %res
    355 ;
    356 entry:
    357   %res = mul nsw <8 x i16> %a, %b
    358   ret <8 x i16> %res
    359 }
    360 
    361 define <16 x i16> @slm-costs_16_v16_mul(<16 x i16> %a, <16 x i16> %b)  {
    362 ; SLM-LABEL: 'slm-costs_16_v16_mul'
    363 ; SLM-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %res = mul nsw <16 x i16> %a, %b
    364 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %res
    365 ;
    366 ; GLM-LABEL: 'slm-costs_16_v16_mul'
    367 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <16 x i16> %a, %b
    368 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %res
    369 ;
    370 entry:
    371   %res = mul nsw <16 x i16> %a, %b
    372   ret <16 x i16> %res
    373 }
    374 
    375 ; 32bit mul
    376 define i32 @slm-costs_32_scalar_mul(i32 %a, i32 %b)  {
    377 ; CHECK-LABEL: 'slm-costs_32_scalar_mul'
    378 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = mul nsw i32 %a, %b
    379 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 %res
    380 ;
    381 entry:
    382   %res = mul nsw i32 %a, %b
    383   ret i32 %res
    384 }
    385 
    386 define <2 x i32> @slm-costs_32_v2_mul(<2 x i32> %a, <2 x i32> %b)  {
    387 ; SLM-LABEL: 'slm-costs_32_v2_mul'
    388 ; SLM-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %res = mul nsw <2 x i32> %a, %b
    389 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %res
    390 ;
    391 ; GLM-LABEL: 'slm-costs_32_v2_mul'
    392 ; GLM-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %res = mul nsw <2 x i32> %a, %b
    393 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %res
    394 ;
    395 entry:
    396   %res = mul nsw <2 x i32> %a, %b
    397   ret <2 x i32> %res
    398 }
    399 
    400 define <4 x i32> @slm-costs_32_v4_mul(<4 x i32> %a, <4 x i32> %b)  {
    401 ; SLM-LABEL: 'slm-costs_32_v4_mul'
    402 ; SLM-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %res = mul nsw <4 x i32> %a, %b
    403 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    404 ;
    405 ; GLM-LABEL: 'slm-costs_32_v4_mul'
    406 ; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i32> %a, %b
    407 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %res
    408 ;
    409 entry:
    410   %res = mul nsw <4 x i32> %a, %b
    411   ret <4 x i32> %res
    412 }
    413 
    414 define <8 x i32> @slm-costs_32_v8_mul(<8 x i32> %a, <8 x i32> %b)  {
    415 ; SLM-LABEL: 'slm-costs_32_v8_mul'
    416 ; SLM-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %res = mul nsw <8 x i32> %a, %b
    417 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %res
    418 ;
    419 ; GLM-LABEL: 'slm-costs_32_v8_mul'
    420 ; GLM-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %res = mul nsw <8 x i32> %a, %b
    421 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %res
    422 ;
    423 entry:
    424   %res = mul nsw <8 x i32> %a, %b
    425   ret <8 x i32> %res
    426 }
    427 
    428 define <16 x i32> @slm-costs_32_v16_mul(<16 x i32> %a, <16 x i32> %b)  {
    429 ; SLM-LABEL: 'slm-costs_32_v16_mul'
    430 ; SLM-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %res = mul nsw <16 x i32> %a, %b
    431 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %res
    432 ;
    433 ; GLM-LABEL: 'slm-costs_32_v16_mul'
    434 ; GLM-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %res = mul nsw <16 x i32> %a, %b
    435 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %res
    436 ;
    437 entry:
    438   %res = mul nsw <16 x i32> %a, %b
    439   ret <16 x i32> %res
    440 }
    441 
    442 ; 64bit mul
    443 define i64 @slm-costs_64_scalar_mul(i64 %a, i64 %b)  {
    444 ; CHECK-LABEL: 'slm-costs_64_scalar_mul'
    445 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = mul nsw i64 %a, %b
    446 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i64 %res
    447 ;
    448 entry:
    449   %res = mul nsw i64 %a, %b
    450   ret i64 %res
    451 }
    452 
    453 define <2 x i64> @slm-costs_64_v2_mul(<2 x i64> %a, <2 x i64> %b)  {
    454 ; SLM-LABEL: 'slm-costs_64_v2_mul'
    455 ; SLM-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %res = mul nsw <2 x i64> %a, %b
    456 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %res
    457 ;
    458 ; GLM-LABEL: 'slm-costs_64_v2_mul'
    459 ; GLM-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %res = mul nsw <2 x i64> %a, %b
    460 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %res
    461 ;
    462 entry:
    463   %res = mul nsw <2 x i64> %a, %b
    464   ret <2 x i64> %res
    465 }
    466 
    467 define <4 x i64> @slm-costs_64_v4_mul(<4 x i64> %a, <4 x i64> %b)  {
    468 ; SLM-LABEL: 'slm-costs_64_v4_mul'
    469 ; SLM-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %res = mul nsw <4 x i64> %a, %b
    470 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %res
    471 ;
    472 ; GLM-LABEL: 'slm-costs_64_v4_mul'
    473 ; GLM-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %res = mul nsw <4 x i64> %a, %b
    474 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %res
    475 ;
    476 entry:
    477   %res = mul nsw <4 x i64> %a, %b
    478   ret <4 x i64> %res
    479 }
    480 
    481 define <8 x i64> @slm-costs_64_v8_mul(<8 x i64> %a, <8 x i64> %b)  {
    482 ; SLM-LABEL: 'slm-costs_64_v8_mul'
    483 ; SLM-NEXT:  Cost Model: Found an estimated cost of 68 for instruction: %res = mul nsw <8 x i64> %a, %b
    484 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %res
    485 ;
    486 ; GLM-LABEL: 'slm-costs_64_v8_mul'
    487 ; GLM-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %res = mul nsw <8 x i64> %a, %b
    488 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %res
    489 ;
    490 entry:
    491   %res = mul nsw <8 x i64> %a, %b
    492   ret <8 x i64> %res
    493 }
    494 
    495 define <16 x i64> @slm-costs_64_v16_mul(<16 x i64> %a, <16 x i64> %b)  {
    496 ; SLM-LABEL: 'slm-costs_64_v16_mul'
    497 ; SLM-NEXT:  Cost Model: Found an estimated cost of 136 for instruction: %res = mul nsw <16 x i64> %a, %b
    498 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i64> %res
    499 ;
    500 ; GLM-LABEL: 'slm-costs_64_v16_mul'
    501 ; GLM-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %res = mul nsw <16 x i64> %a, %b
    502 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i64> %res
    503 ;
    504 entry:
    505   %res = mul nsw <16 x i64> %a, %b
    506   ret <16 x i64> %res
    507 }
    508 
    509 ; mulsd
    510 define double @slm-costs_mulsd(double %a, double %b)  {
    511 ; SLM-LABEL: 'slm-costs_mulsd'
    512 ; SLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = fmul double %a, %b
    513 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret double %res
    514 ;
    515 ; GLM-LABEL: 'slm-costs_mulsd'
    516 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = fmul double %a, %b
    517 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret double %res
    518 ;
    519 entry:
    520   %res = fmul double %a, %b
    521   ret double %res
    522 }
    523 
    524 ; mulpd
    525 define <2 x double> @slm-costs_mulpd(<2 x double> %a, <2 x double> %b)  {
    526 ; SLM-LABEL: 'slm-costs_mulpd'
    527 ; SLM-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %res = fmul <2 x double> %a, %b
    528 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %res
    529 ;
    530 ; GLM-LABEL: 'slm-costs_mulpd'
    531 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = fmul <2 x double> %a, %b
    532 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %res
    533 ;
    534 entry:
    535   %res = fmul <2 x double> %a, %b
    536   ret <2 x double> %res
    537 }
    538 
    539 ; mulps
    540 define <4 x float> @slm-costs_mulps(<4 x float> %a, <4 x float> %b)  {
    541 ; SLM-LABEL: 'slm-costs_mulps'
    542 ; SLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = fmul <4 x float> %a, %b
    543 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x float> %res
    544 ;
    545 ; GLM-LABEL: 'slm-costs_mulps'
    546 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = fmul <4 x float> %a, %b
    547 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x float> %res
    548 ;
    549 entry:
    550   %res = fmul <4 x float> %a, %b
    551   ret <4 x float> %res
    552 }
    553 
    554 ; divss
    555 define float @slm-costs_divss(float %a, float %b)  {
    556 ; SLM-LABEL: 'slm-costs_divss'
    557 ; SLM-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %res = fdiv float %a, %b
    558 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret float %res
    559 ;
    560 ; GLM-LABEL: 'slm-costs_divss'
    561 ; GLM-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %res = fdiv float %a, %b
    562 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret float %res
    563 ;
    564 entry:
    565   %res = fdiv float %a, %b
    566   ret float %res
    567 }
    568 
    569 ; divps
    570 define <4 x float> @slm-costs_divps(<4 x float> %a, <4 x float> %b)  {
    571 ; SLM-LABEL: 'slm-costs_divps'
    572 ; SLM-NEXT:  Cost Model: Found an estimated cost of 39 for instruction: %res = fdiv <4 x float> %a, %b
    573 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x float> %res
    574 ;
    575 ; GLM-LABEL: 'slm-costs_divps'
    576 ; GLM-NEXT:  Cost Model: Found an estimated cost of 35 for instruction: %res = fdiv <4 x float> %a, %b
    577 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x float> %res
    578 ;
    579 entry:
    580   %res = fdiv <4 x float> %a, %b
    581   ret <4 x float> %res
    582 }
    583 
    584 ; divsd
    585 define double @slm-costs_divsd(double %a, double %b)  {
    586 ; SLM-LABEL: 'slm-costs_divsd'
    587 ; SLM-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %res = fdiv double %a, %b
    588 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret double %res
    589 ;
    590 ; GLM-LABEL: 'slm-costs_divsd'
    591 ; GLM-NEXT:  Cost Model: Found an estimated cost of 33 for instruction: %res = fdiv double %a, %b
    592 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret double %res
    593 ;
    594 entry:
    595   %res = fdiv double %a, %b
    596   ret double %res
    597 }
    598 
    599 ; divpd
    600 define <2 x double> @slm-costs_divpd(<2 x double> %a, <2 x double> %b)  {
    601 ; SLM-LABEL: 'slm-costs_divpd'
    602 ; SLM-NEXT:  Cost Model: Found an estimated cost of 69 for instruction: %res = fdiv <2 x double> %a, %b
    603 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %res
    604 ;
    605 ; GLM-LABEL: 'slm-costs_divpd'
    606 ; GLM-NEXT:  Cost Model: Found an estimated cost of 65 for instruction: %res = fdiv <2 x double> %a, %b
    607 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %res
    608 ;
    609 entry:
    610   %res = fdiv <2 x double> %a, %b
    611   ret <2 x double> %res
    612 }
    613 
    614 ; addpd
    615 define <2 x double> @slm-costs_addpd(<2 x double> %a, <2 x double> %b)  {
    616 ; SLM-LABEL: 'slm-costs_addpd'
    617 ; SLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = fadd <2 x double> %a, %b
    618 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %res
    619 ;
    620 ; GLM-LABEL: 'slm-costs_addpd'
    621 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = fadd <2 x double> %a, %b
    622 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %res
    623 ;
    624 entry:
    625   %res = fadd <2 x double> %a, %b
    626   ret <2 x double> %res
    627 }
    628 
    629 ; subpd
    630 define <2 x double> @slm-costs_subpd(<2 x double> %a, <2 x double> %b)  {
    631 ; SLM-LABEL: 'slm-costs_subpd'
    632 ; SLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = fsub <2 x double> %a, %b
    633 ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %res
    634 ;
    635 ; GLM-LABEL: 'slm-costs_subpd'
    636 ; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = fsub <2 x double> %a, %b
    637 ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %res
    638 ;
    639 entry:
    640   %res = fsub <2 x double> %a, %b
    641   ret <2 x double> %res
    642 }
    643 
    644