Home | History | Annotate | Download | only in X86
      1 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=pentium4 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=SSE -check-prefix=SSE2
      2 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=SSE -check-prefix=SSE42
      3 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7-avx -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=AVX -check-prefix=AVX1
      4 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=core-avx2 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=AVX -check-prefix=AVX2
      5 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=bdver2 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=XOP -check-prefix=XOPAVX1
      6 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=bdver4 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=XOP -check-prefix=XOPAVX2
      7 
      8 ; Verify the cost of vector population count instructions.
      9 
     10 declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>)
     11 declare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>)
     12 declare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>)
     13 declare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>)
     14 
     15 declare <4 x i64> @llvm.ctpop.v4i64(<4 x i64>)
     16 declare <8 x i32> @llvm.ctpop.v8i32(<8 x i32>)
     17 declare <16 x i16> @llvm.ctpop.v16i16(<16 x i16>)
     18 declare <32 x i8> @llvm.ctpop.v32i8(<32 x i8>)
     19 
     20 define <2 x i64> @var_ctpop_v2i64(<2 x i64> %a) {
     21 ; CHECK: 'Cost Model Analysis' for function 'var_ctpop_v2i64':
     22 ; SSE: Found an estimated cost of 2 for instruction:   %ctpop
     23 ; AVX: Found an estimated cost of 2 for instruction:   %ctpop
     24 ; XOP: Found an estimated cost of 2 for instruction:   %ctpop
     25   %ctpop = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %a)
     26   ret <2 x i64> %ctpop
     27 }
     28 
     29 define <4 x i64> @var_ctpop_v4i64(<4 x i64> %a) {
     30 ; CHECK: 'Cost Model Analysis' for function 'var_ctpop_v4i64':
     31 ; SSE: Found an estimated cost of 4 for instruction:   %ctpop
     32 ; AVX: Found an estimated cost of 2 for instruction:   %ctpop
     33 ; XOP: Found an estimated cost of 2 for instruction:   %ctpop
     34   %ctpop = call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> %a)
     35   ret <4 x i64> %ctpop
     36 }
     37 
     38 define <4 x i32> @var_ctpop_v4i32(<4 x i32> %a) {
     39 ; CHECK: 'Cost Model Analysis' for function 'var_ctpop_v4i32':
     40 ; SSE: Found an estimated cost of 2 for instruction:   %ctpop
     41 ; AVX: Found an estimated cost of 2 for instruction:   %ctpop
     42 ; XOP: Found an estimated cost of 2 for instruction:   %ctpop
     43   %ctpop = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %a)
     44   ret <4 x i32> %ctpop
     45 }
     46 
     47 define <8 x i32> @var_ctpop_v8i32(<8 x i32> %a) {
     48 ; CHECK: 'Cost Model Analysis' for function 'var_ctpop_v8i32':
     49 ; SSE: Found an estimated cost of 4 for instruction:   %ctpop
     50 ; AVX: Found an estimated cost of 2 for instruction:   %ctpop
     51 ; XOP: Found an estimated cost of 2 for instruction:   %ctpop
     52   %ctpop = call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %a)
     53   ret <8 x i32> %ctpop
     54 }
     55 
     56 define <8 x i16> @var_ctpop_v8i16(<8 x i16> %a) {
     57 ; CHECK: 'Cost Model Analysis' for function 'var_ctpop_v8i16':
     58 ; SSE: Found an estimated cost of 2 for instruction:   %ctpop
     59 ; AVX: Found an estimated cost of 2 for instruction:   %ctpop
     60 ; XOP: Found an estimated cost of 2 for instruction:   %ctpop
     61   %ctpop = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %a)
     62   ret <8 x i16> %ctpop
     63 }
     64 
     65 define <16 x i16> @var_ctpop_v16i16(<16 x i16> %a) {
     66 ; CHECK: 'Cost Model Analysis' for function 'var_ctpop_v16i16':
     67 ; SSE: Found an estimated cost of 4 for instruction:   %ctpop
     68 ; AVX: Found an estimated cost of 2 for instruction:   %ctpop
     69 ; XOP: Found an estimated cost of 2 for instruction:   %ctpop
     70   %ctpop = call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> %a)
     71   ret <16 x i16> %ctpop
     72 }
     73 
     74 define <16 x i8> @var_ctpop_v16i8(<16 x i8> %a) {
     75 ; CHECK: 'Cost Model Analysis' for function 'var_ctpop_v16i8':
     76 ; SSE: Found an estimated cost of 2 for instruction:   %ctpop
     77 ; AVX: Found an estimated cost of 2 for instruction:   %ctpop
     78 ; XOP: Found an estimated cost of 2 for instruction:   %ctpop
     79   %ctpop = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %a)
     80   ret <16 x i8> %ctpop
     81 }
     82 
     83 define <32 x i8> @var_ctpop_v32i8(<32 x i8> %a) {
     84 ; CHECK: 'Cost Model Analysis' for function 'var_ctpop_v32i8':
     85 ; SSE: Found an estimated cost of 4 for instruction:   %ctpop
     86 ; AVX: Found an estimated cost of 2 for instruction:   %ctpop
     87 ; XOP: Found an estimated cost of 2 for instruction:   %ctpop
     88   %ctpop = call <32 x i8> @llvm.ctpop.v32i8(<32 x i8> %a)
     89   ret <32 x i8> %ctpop
     90 }
     91 
     92 ; Verify the cost of vector leading zero count instructions.
     93 
     94 declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1)
     95 declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1)
     96 declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1)
     97 declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1)
     98 
     99 declare <4 x i64> @llvm.ctlz.v4i64(<4 x i64>, i1)
    100 declare <8 x i32> @llvm.ctlz.v8i32(<8 x i32>, i1)
    101 declare <16 x i16> @llvm.ctlz.v16i16(<16 x i16>, i1)
    102 declare <32 x i8> @llvm.ctlz.v32i8(<32 x i8>, i1)
    103 
    104 define <2 x i64> @var_ctlz_v2i64(<2 x i64> %a) {
    105 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v2i64':
    106 ; SSE: Found an estimated cost of 6 for instruction:   %ctlz
    107 ; AVX: Found an estimated cost of 6 for instruction:   %ctlz
    108 ; XOP: Found an estimated cost of 6 for instruction:   %ctlz
    109   %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 0)
    110   ret <2 x i64> %ctlz
    111 }
    112 
    113 define <2 x i64> @var_ctlz_v2i64u(<2 x i64> %a) {
    114 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v2i64u':
    115 ; SSE: Found an estimated cost of 6 for instruction:   %ctlz
    116 ; AVX: Found an estimated cost of 6 for instruction:   %ctlz
    117 ; XOP: Found an estimated cost of 6 for instruction:   %ctlz
    118   %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 1)
    119   ret <2 x i64> %ctlz
    120 }
    121 
    122 define <4 x i64> @var_ctlz_v4i64(<4 x i64> %a) {
    123 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v4i64':
    124 ; SSE: Found an estimated cost of 12 for instruction:   %ctlz
    125 ; AVX: Found an estimated cost of 12 for instruction:   %ctlz
    126 ; XOP: Found an estimated cost of 12 for instruction:   %ctlz
    127   %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 0)
    128   ret <4 x i64> %ctlz
    129 }
    130 
    131 define <4 x i64> @var_ctlz_v4i64u(<4 x i64> %a) {
    132 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v4i64u':
    133 ; SSE: Found an estimated cost of 12 for instruction:   %ctlz
    134 ; AVX: Found an estimated cost of 12 for instruction:   %ctlz
    135 ; XOP: Found an estimated cost of 12 for instruction:   %ctlz
    136   %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 1)
    137   ret <4 x i64> %ctlz
    138 }
    139 
    140 define <4 x i32> @var_ctlz_v4i32(<4 x i32> %a) {
    141 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v4i32':
    142 ; SSE: Found an estimated cost of 12 for instruction:   %ctlz
    143 ; AVX: Found an estimated cost of 12 for instruction:   %ctlz
    144 ; XOP: Found an estimated cost of 12 for instruction:   %ctlz
    145   %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 0)
    146   ret <4 x i32> %ctlz
    147 }
    148 
    149 define <4 x i32> @var_ctlz_v4i32u(<4 x i32> %a) {
    150 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v4i32u':
    151 ; SSE: Found an estimated cost of 12 for instruction:   %ctlz
    152 ; AVX: Found an estimated cost of 12 for instruction:   %ctlz
    153 ; XOP: Found an estimated cost of 12 for instruction:   %ctlz
    154   %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 1)
    155   ret <4 x i32> %ctlz
    156 }
    157 
    158 define <8 x i32> @var_ctlz_v8i32(<8 x i32> %a) {
    159 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v8i32':
    160 ; SSE: Found an estimated cost of 24 for instruction:   %ctlz
    161 ; AVX: Found an estimated cost of 24 for instruction:   %ctlz
    162 ; XOP: Found an estimated cost of 24 for instruction:   %ctlz
    163   %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 0)
    164   ret <8 x i32> %ctlz
    165 }
    166 
    167 define <8 x i32> @var_ctlz_v8i32u(<8 x i32> %a) {
    168 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v8i32u':
    169 ; SSE: Found an estimated cost of 24 for instruction:   %ctlz
    170 ; AVX: Found an estimated cost of 24 for instruction:   %ctlz
    171 ; XOP: Found an estimated cost of 24 for instruction:   %ctlz
    172   %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 1)
    173   ret <8 x i32> %ctlz
    174 }
    175 
    176 define <8 x i16> @var_ctlz_v8i16(<8 x i16> %a) {
    177 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v8i16':
    178 ; SSE: Found an estimated cost of 24 for instruction:   %ctlz
    179 ; AVX: Found an estimated cost of 24 for instruction:   %ctlz
    180 ; XOP: Found an estimated cost of 24 for instruction:   %ctlz
    181   %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 0)
    182   ret <8 x i16> %ctlz
    183 }
    184 
    185 define <8 x i16> @var_ctlz_v8i16u(<8 x i16> %a) {
    186 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v8i16u':
    187 ; SSE: Found an estimated cost of 24 for instruction:   %ctlz
    188 ; AVX: Found an estimated cost of 24 for instruction:   %ctlz
    189 ; XOP: Found an estimated cost of 24 for instruction:   %ctlz
    190   %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 1)
    191   ret <8 x i16> %ctlz
    192 }
    193 
    194 define <16 x i16> @var_ctlz_v16i16(<16 x i16> %a) {
    195 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v16i16':
    196 ; SSE: Found an estimated cost of 48 for instruction:   %ctlz
    197 ; AVX: Found an estimated cost of 48 for instruction:   %ctlz
    198 ; XOP: Found an estimated cost of 48 for instruction:   %ctlz
    199   %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 0)
    200   ret <16 x i16> %ctlz
    201 }
    202 
    203 define <16 x i16> @var_ctlz_v16i16u(<16 x i16> %a) {
    204 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v16i16u':
    205 ; SSE: Found an estimated cost of 48 for instruction:   %ctlz
    206 ; AVX: Found an estimated cost of 48 for instruction:   %ctlz
    207 ; XOP: Found an estimated cost of 48 for instruction:   %ctlz
    208   %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 1)
    209   ret <16 x i16> %ctlz
    210 }
    211 
    212 define <16 x i8> @var_ctlz_v16i8(<16 x i8> %a) {
    213 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v16i8':
    214 ; SSE: Found an estimated cost of 48 for instruction:   %ctlz
    215 ; AVX: Found an estimated cost of 48 for instruction:   %ctlz
    216 ; XOP: Found an estimated cost of 48 for instruction:   %ctlz
    217   %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 0)
    218   ret <16 x i8> %ctlz
    219 }
    220 
    221 define <16 x i8> @var_ctlz_v16i8u(<16 x i8> %a) {
    222 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v16i8u':
    223 ; SSE: Found an estimated cost of 48 for instruction:   %ctlz
    224 ; AVX: Found an estimated cost of 48 for instruction:   %ctlz
    225 ; XOP: Found an estimated cost of 48 for instruction:   %ctlz
    226   %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 1)
    227   ret <16 x i8> %ctlz
    228 }
    229 
    230 define <32 x i8> @var_ctlz_v32i8(<32 x i8> %a) {
    231 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v32i8':
    232 ; SSE: Found an estimated cost of 96 for instruction:   %ctlz
    233 ; AVX: Found an estimated cost of 96 for instruction:   %ctlz
    234 ; XOP: Found an estimated cost of 96 for instruction:   %ctlz
    235   %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 0)
    236   ret <32 x i8> %ctlz
    237 }
    238 
    239 define <32 x i8> @var_ctlz_v32i8u(<32 x i8> %a) {
    240 ; CHECK: 'Cost Model Analysis' for function 'var_ctlz_v32i8u':
    241 ; SSE: Found an estimated cost of 96 for instruction:   %ctlz
    242 ; AVX: Found an estimated cost of 96 for instruction:   %ctlz
    243 ; XOP: Found an estimated cost of 96 for instruction:   %ctlz
    244   %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 1)
    245   ret <32 x i8> %ctlz
    246 }
    247 
    248 ; Verify the cost of vector trailing zero count instructions.
    249 
    250 declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1)
    251 declare <4 x i32> @llvm.cttz.v4i32(<4 x i32>, i1)
    252 declare <8 x i16> @llvm.cttz.v8i16(<8 x i16>, i1)
    253 declare <16 x i8> @llvm.cttz.v16i8(<16 x i8>, i1)
    254 
    255 declare <4 x i64> @llvm.cttz.v4i64(<4 x i64>, i1)
    256 declare <8 x i32> @llvm.cttz.v8i32(<8 x i32>, i1)
    257 declare <16 x i16> @llvm.cttz.v16i16(<16 x i16>, i1)
    258 declare <32 x i8> @llvm.cttz.v32i8(<32 x i8>, i1)
    259 
    260 define <2 x i64> @var_cttz_v2i64(<2 x i64> %a) {
    261 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v2i64':
    262 ; SSE: Found an estimated cost of 6 for instruction:   %cttz
    263 ; AVX: Found an estimated cost of 6 for instruction:   %cttz
    264 ; XOP: Found an estimated cost of 6 for instruction:   %cttz
    265   %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 0)
    266   ret <2 x i64> %cttz
    267 }
    268 
    269 define <2 x i64> @var_cttz_v2i64u(<2 x i64> %a) {
    270 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v2i64u':
    271 ; SSE: Found an estimated cost of 6 for instruction:   %cttz
    272 ; AVX: Found an estimated cost of 6 for instruction:   %cttz
    273 ; XOP: Found an estimated cost of 6 for instruction:   %cttz
    274   %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 1)
    275   ret <2 x i64> %cttz
    276 }
    277 
    278 define <4 x i64> @var_cttz_v4i64(<4 x i64> %a) {
    279 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v4i64':
    280 ; SSE: Found an estimated cost of 12 for instruction:   %cttz
    281 ; AVX: Found an estimated cost of 12 for instruction:   %cttz
    282 ; XOP: Found an estimated cost of 12 for instruction:   %cttz
    283   %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 0)
    284   ret <4 x i64> %cttz
    285 }
    286 
    287 define <4 x i64> @var_cttz_v4i64u(<4 x i64> %a) {
    288 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v4i64u':
    289 ; SSE: Found an estimated cost of 12 for instruction:   %cttz
    290 ; AVX: Found an estimated cost of 12 for instruction:   %cttz
    291 ; XOP: Found an estimated cost of 12 for instruction:   %cttz
    292   %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 1)
    293   ret <4 x i64> %cttz
    294 }
    295 
    296 define <4 x i32> @var_cttz_v4i32(<4 x i32> %a) {
    297 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v4i32':
    298 ; SSE: Found an estimated cost of 12 for instruction:   %cttz
    299 ; AVX: Found an estimated cost of 12 for instruction:   %cttz
    300 ; XOP: Found an estimated cost of 12 for instruction:   %cttz
    301   %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 0)
    302   ret <4 x i32> %cttz
    303 }
    304 
    305 define <4 x i32> @var_cttz_v4i32u(<4 x i32> %a) {
    306 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v4i32u':
    307 ; SSE: Found an estimated cost of 12 for instruction:   %cttz
    308 ; AVX: Found an estimated cost of 12 for instruction:   %cttz
    309 ; XOP: Found an estimated cost of 12 for instruction:   %cttz
    310   %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 1)
    311   ret <4 x i32> %cttz
    312 }
    313 
    314 define <8 x i32> @var_cttz_v8i32(<8 x i32> %a) {
    315 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v8i32':
    316 ; SSE: Found an estimated cost of 24 for instruction:   %cttz
    317 ; AVX: Found an estimated cost of 24 for instruction:   %cttz
    318 ; XOP: Found an estimated cost of 24 for instruction:   %cttz
    319   %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 0)
    320   ret <8 x i32> %cttz
    321 }
    322 
    323 define <8 x i32> @var_cttz_v8i32u(<8 x i32> %a) {
    324 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v8i32u':
    325 ; SSE: Found an estimated cost of 24 for instruction:   %cttz
    326 ; AVX: Found an estimated cost of 24 for instruction:   %cttz
    327 ; XOP: Found an estimated cost of 24 for instruction:   %cttz
    328   %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 1)
    329   ret <8 x i32> %cttz
    330 }
    331 
    332 define <8 x i16> @var_cttz_v8i16(<8 x i16> %a) {
    333 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v8i16':
    334 ; SSE: Found an estimated cost of 24 for instruction:   %cttz
    335 ; AVX: Found an estimated cost of 24 for instruction:   %cttz
    336 ; XOP: Found an estimated cost of 24 for instruction:   %cttz
    337   %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 0)
    338   ret <8 x i16> %cttz
    339 }
    340 
    341 define <8 x i16> @var_cttz_v8i16u(<8 x i16> %a) {
    342 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v8i16u':
    343 ; SSE: Found an estimated cost of 24 for instruction:   %cttz
    344 ; AVX: Found an estimated cost of 24 for instruction:   %cttz
    345 ; XOP: Found an estimated cost of 24 for instruction:   %cttz
    346   %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 1)
    347   ret <8 x i16> %cttz
    348 }
    349 
    350 define <16 x i16> @var_cttz_v16i16(<16 x i16> %a) {
    351 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v16i16':
    352 ; SSE: Found an estimated cost of 48 for instruction:   %cttz
    353 ; AVX: Found an estimated cost of 48 for instruction:   %cttz
    354 ; XOP: Found an estimated cost of 48 for instruction:   %cttz
    355   %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 0)
    356   ret <16 x i16> %cttz
    357 }
    358 
    359 define <16 x i16> @var_cttz_v16i16u(<16 x i16> %a) {
    360 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v16i16u':
    361 ; SSE: Found an estimated cost of 48 for instruction:   %cttz
    362 ; AVX: Found an estimated cost of 48 for instruction:   %cttz
    363 ; XOP: Found an estimated cost of 48 for instruction:   %cttz
    364   %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 1)
    365   ret <16 x i16> %cttz
    366 }
    367 
    368 define <16 x i8> @var_cttz_v16i8(<16 x i8> %a) {
    369 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v16i8':
    370 ; SSE: Found an estimated cost of 48 for instruction:   %cttz
    371 ; AVX: Found an estimated cost of 48 for instruction:   %cttz
    372 ; XOP: Found an estimated cost of 48 for instruction:   %cttz
    373   %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 0)
    374   ret <16 x i8> %cttz
    375 }
    376 
    377 define <16 x i8> @var_cttz_v16i8u(<16 x i8> %a) {
    378 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v16i8u':
    379 ; SSE: Found an estimated cost of 48 for instruction:   %cttz
    380 ; AVX: Found an estimated cost of 48 for instruction:   %cttz
    381 ; XOP: Found an estimated cost of 48 for instruction:   %cttz
    382   %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 1)
    383   ret <16 x i8> %cttz
    384 }
    385 
    386 define <32 x i8> @var_cttz_v32i8(<32 x i8> %a) {
    387 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v32i8':
    388 ; SSE: Found an estimated cost of 96 for instruction:   %cttz
    389 ; AVX: Found an estimated cost of 96 for instruction:   %cttz
    390 ; XOP: Found an estimated cost of 96 for instruction:   %cttz
    391   %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 0)
    392   ret <32 x i8> %cttz
    393 }
    394 
    395 define <32 x i8> @var_cttz_v32i8u(<32 x i8> %a) {
    396 ; CHECK: 'Cost Model Analysis' for function 'var_cttz_v32i8u':
    397 ; SSE: Found an estimated cost of 96 for instruction:   %cttz
    398 ; AVX: Found an estimated cost of 96 for instruction:   %cttz
    399 ; XOP: Found an estimated cost of 96 for instruction:   %cttz
    400   %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 1)
    401   ret <32 x i8> %cttz
    402 }
    403