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