1 ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py 2 ; RUN: opt < %s -mtriple=i686-unknown-linux-gnu -cost-model -analyze -mattr=+sse2 | FileCheck %s -check-prefixes=CHECK,X86,SSE,SSE2 3 ; RUN: opt < %s -mtriple=i686-unknown-linux-gnu -cost-model -analyze -mattr=+sse4.2 | FileCheck %s -check-prefixes=CHECK,X86,SSE,SSE42 4 ; RUN: opt < %s -mtriple=i686-unknown-linux-gnu -cost-model -analyze -mattr=+avx | FileCheck %s -check-prefixes=CHECK,X86,AVX,AVX1 5 ; RUN: opt < %s -mtriple=i686-unknown-linux-gnu -cost-model -analyze -mattr=+avx2 | FileCheck %s -check-prefixes=CHECK,X86,AVX,AVX2 6 ; RUN: opt < %s -mtriple=i686-unknown-linux-gnu -cost-model -analyze -mattr=+avx512f | FileCheck %s -check-prefixes=CHECK,X86,AVX512,AVX512F 7 ; RUN: opt < %s -mtriple=i686-unknown-linux-gnu -cost-model -analyze -mattr=+avx512vl,avx512bw,avx512dq | FileCheck %s -check-prefixes=CHECK,X86,AVX512,AVX512BW 8 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+sse2 | FileCheck %s -check-prefixes=CHECK,X64,SSE,SSE2 9 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+sse4.2 | FileCheck %s -check-prefixes=CHECK,X64,SSE,SSE42 10 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+avx | FileCheck %s -check-prefixes=CHECK,X64,AVX,AVX1 11 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+avx2 | FileCheck %s -check-prefixes=CHECK,X64,AVX,AVX2 12 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+avx512f | FileCheck %s -check-prefixes=CHECK,X64,AVX512,AVX512F 13 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+avx512vl,+avx512bw,+avx512dq | FileCheck %s -check-prefixes=CHECK,X64,AVX512,AVX512BW 14 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+xop | FileCheck %s -check-prefixes=CHECK,XOP,XOPAVX 15 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+xop,+avx2 | FileCheck %s -check-prefixes=CHECK,XOP,XOPAVX2 16 17 ; Verify the cost of scalar bitreverse instructions. 18 19 declare i64 @llvm.bitreverse.i64(i64) 20 declare i32 @llvm.bitreverse.i32(i32) 21 declare i16 @llvm.bitreverse.i16(i16) 22 declare i8 @llvm.bitreverse.i8(i8) 23 24 define i64 @var_bitreverse_i64(i64 %a) { 25 ; X86-LABEL: 'var_bitreverse_i64' 26 ; X86-NEXT: Cost Model: Found an estimated cost of 28 for instruction: %bitreverse = call i64 @llvm.bitreverse.i64(i64 %a) 27 ; X86-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i64 %bitreverse 28 ; 29 ; X64-LABEL: 'var_bitreverse_i64' 30 ; X64-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %bitreverse = call i64 @llvm.bitreverse.i64(i64 %a) 31 ; X64-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i64 %bitreverse 32 ; 33 ; XOP-LABEL: 'var_bitreverse_i64' 34 ; XOP-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %bitreverse = call i64 @llvm.bitreverse.i64(i64 %a) 35 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i64 %bitreverse 36 ; 37 %bitreverse = call i64 @llvm.bitreverse.i64(i64 %a) 38 ret i64 %bitreverse 39 } 40 41 define i32 @var_bitreverse_i32(i32 %a) { 42 ; X86-LABEL: 'var_bitreverse_i32' 43 ; X86-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %bitreverse = call i32 @llvm.bitreverse.i32(i32 %a) 44 ; X86-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i32 %bitreverse 45 ; 46 ; X64-LABEL: 'var_bitreverse_i32' 47 ; X64-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %bitreverse = call i32 @llvm.bitreverse.i32(i32 %a) 48 ; X64-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i32 %bitreverse 49 ; 50 ; XOP-LABEL: 'var_bitreverse_i32' 51 ; XOP-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %bitreverse = call i32 @llvm.bitreverse.i32(i32 %a) 52 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i32 %bitreverse 53 ; 54 %bitreverse = call i32 @llvm.bitreverse.i32(i32 %a) 55 ret i32 %bitreverse 56 } 57 58 define i16 @var_bitreverse_i16(i16 %a) { 59 ; X86-LABEL: 'var_bitreverse_i16' 60 ; X86-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %bitreverse = call i16 @llvm.bitreverse.i16(i16 %a) 61 ; X86-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i16 %bitreverse 62 ; 63 ; X64-LABEL: 'var_bitreverse_i16' 64 ; X64-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %bitreverse = call i16 @llvm.bitreverse.i16(i16 %a) 65 ; X64-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i16 %bitreverse 66 ; 67 ; XOP-LABEL: 'var_bitreverse_i16' 68 ; XOP-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %bitreverse = call i16 @llvm.bitreverse.i16(i16 %a) 69 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i16 %bitreverse 70 ; 71 %bitreverse = call i16 @llvm.bitreverse.i16(i16 %a) 72 ret i16 %bitreverse 73 } 74 75 define i8 @var_bitreverse_i8(i8 %a) { 76 ; X86-LABEL: 'var_bitreverse_i8' 77 ; X86-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %bitreverse = call i8 @llvm.bitreverse.i8(i8 %a) 78 ; X86-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i8 %bitreverse 79 ; 80 ; X64-LABEL: 'var_bitreverse_i8' 81 ; X64-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %bitreverse = call i8 @llvm.bitreverse.i8(i8 %a) 82 ; X64-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i8 %bitreverse 83 ; 84 ; XOP-LABEL: 'var_bitreverse_i8' 85 ; XOP-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %bitreverse = call i8 @llvm.bitreverse.i8(i8 %a) 86 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i8 %bitreverse 87 ; 88 %bitreverse = call i8 @llvm.bitreverse.i8(i8 %a) 89 ret i8 %bitreverse 90 } 91 92 ; Verify the cost of vector bitreverse instructions. 93 94 declare <2 x i64> @llvm.bitreverse.v2i64(<2 x i64>) 95 declare <4 x i32> @llvm.bitreverse.v4i32(<4 x i32>) 96 declare <8 x i16> @llvm.bitreverse.v8i16(<8 x i16>) 97 declare <16 x i8> @llvm.bitreverse.v16i8(<16 x i8>) 98 99 declare <4 x i64> @llvm.bitreverse.v4i64(<4 x i64>) 100 declare <8 x i32> @llvm.bitreverse.v8i32(<8 x i32>) 101 declare <16 x i16> @llvm.bitreverse.v16i16(<16 x i16>) 102 declare <32 x i8> @llvm.bitreverse.v32i8(<32 x i8>) 103 104 declare <8 x i64> @llvm.bitreverse.v8i64(<8 x i64>) 105 declare <16 x i32> @llvm.bitreverse.v16i32(<16 x i32>) 106 declare <32 x i16> @llvm.bitreverse.v32i16(<32 x i16>) 107 declare <64 x i8> @llvm.bitreverse.v64i8(<64 x i8>) 108 109 define <2 x i64> @var_bitreverse_v2i64(<2 x i64> %a) { 110 ; SSE2-LABEL: 'var_bitreverse_v2i64' 111 ; SSE2-NEXT: Cost Model: Found an estimated cost of 29 for instruction: %bitreverse = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a) 112 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %bitreverse 113 ; 114 ; SSE42-LABEL: 'var_bitreverse_v2i64' 115 ; SSE42-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a) 116 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %bitreverse 117 ; 118 ; AVX-LABEL: 'var_bitreverse_v2i64' 119 ; AVX-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a) 120 ; AVX-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %bitreverse 121 ; 122 ; AVX512-LABEL: 'var_bitreverse_v2i64' 123 ; AVX512-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a) 124 ; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %bitreverse 125 ; 126 ; XOP-LABEL: 'var_bitreverse_v2i64' 127 ; XOP-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bitreverse = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a) 128 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %bitreverse 129 ; 130 %bitreverse = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a) 131 ret <2 x i64> %bitreverse 132 } 133 134 define <4 x i64> @var_bitreverse_v4i64(<4 x i64> %a) { 135 ; SSE2-LABEL: 'var_bitreverse_v4i64' 136 ; SSE2-NEXT: Cost Model: Found an estimated cost of 58 for instruction: %bitreverse = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a) 137 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %bitreverse 138 ; 139 ; SSE42-LABEL: 'var_bitreverse_v4i64' 140 ; SSE42-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %bitreverse = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a) 141 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %bitreverse 142 ; 143 ; AVX1-LABEL: 'var_bitreverse_v4i64' 144 ; AVX1-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %bitreverse = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a) 145 ; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %bitreverse 146 ; 147 ; AVX2-LABEL: 'var_bitreverse_v4i64' 148 ; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a) 149 ; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %bitreverse 150 ; 151 ; AVX512-LABEL: 'var_bitreverse_v4i64' 152 ; AVX512-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a) 153 ; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %bitreverse 154 ; 155 ; XOP-LABEL: 'var_bitreverse_v4i64' 156 ; XOP-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %bitreverse = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a) 157 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %bitreverse 158 ; 159 %bitreverse = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a) 160 ret <4 x i64> %bitreverse 161 } 162 163 define <8 x i64> @var_bitreverse_v8i64(<8 x i64> %a) { 164 ; SSE2-LABEL: 'var_bitreverse_v8i64' 165 ; SSE2-NEXT: Cost Model: Found an estimated cost of 116 for instruction: %bitreverse = call <8 x i64> @llvm.bitreverse.v8i64(<8 x i64> %a) 166 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bitreverse 167 ; 168 ; SSE42-LABEL: 'var_bitreverse_v8i64' 169 ; SSE42-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %bitreverse = call <8 x i64> @llvm.bitreverse.v8i64(<8 x i64> %a) 170 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bitreverse 171 ; 172 ; AVX1-LABEL: 'var_bitreverse_v8i64' 173 ; AVX1-NEXT: Cost Model: Found an estimated cost of 24 for instruction: %bitreverse = call <8 x i64> @llvm.bitreverse.v8i64(<8 x i64> %a) 174 ; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bitreverse 175 ; 176 ; AVX2-LABEL: 'var_bitreverse_v8i64' 177 ; AVX2-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %bitreverse = call <8 x i64> @llvm.bitreverse.v8i64(<8 x i64> %a) 178 ; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bitreverse 179 ; 180 ; AVX512F-LABEL: 'var_bitreverse_v8i64' 181 ; AVX512F-NEXT: Cost Model: Found an estimated cost of 36 for instruction: %bitreverse = call <8 x i64> @llvm.bitreverse.v8i64(<8 x i64> %a) 182 ; AVX512F-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bitreverse 183 ; 184 ; AVX512BW-LABEL: 'var_bitreverse_v8i64' 185 ; AVX512BW-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <8 x i64> @llvm.bitreverse.v8i64(<8 x i64> %a) 186 ; AVX512BW-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bitreverse 187 ; 188 ; XOP-LABEL: 'var_bitreverse_v8i64' 189 ; XOP-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %bitreverse = call <8 x i64> @llvm.bitreverse.v8i64(<8 x i64> %a) 190 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bitreverse 191 ; 192 %bitreverse = call <8 x i64> @llvm.bitreverse.v8i64(<8 x i64> %a) 193 ret <8 x i64> %bitreverse 194 } 195 196 define <4 x i32> @var_bitreverse_v4i32(<4 x i32> %a) { 197 ; SSE2-LABEL: 'var_bitreverse_v4i32' 198 ; SSE2-NEXT: Cost Model: Found an estimated cost of 27 for instruction: %bitreverse = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a) 199 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %bitreverse 200 ; 201 ; SSE42-LABEL: 'var_bitreverse_v4i32' 202 ; SSE42-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a) 203 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %bitreverse 204 ; 205 ; AVX-LABEL: 'var_bitreverse_v4i32' 206 ; AVX-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a) 207 ; AVX-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %bitreverse 208 ; 209 ; AVX512-LABEL: 'var_bitreverse_v4i32' 210 ; AVX512-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a) 211 ; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %bitreverse 212 ; 213 ; XOP-LABEL: 'var_bitreverse_v4i32' 214 ; XOP-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bitreverse = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a) 215 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %bitreverse 216 ; 217 %bitreverse = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a) 218 ret <4 x i32> %bitreverse 219 } 220 221 define <8 x i32> @var_bitreverse_v8i32(<8 x i32> %a) { 222 ; SSE2-LABEL: 'var_bitreverse_v8i32' 223 ; SSE2-NEXT: Cost Model: Found an estimated cost of 54 for instruction: %bitreverse = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a) 224 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %bitreverse 225 ; 226 ; SSE42-LABEL: 'var_bitreverse_v8i32' 227 ; SSE42-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %bitreverse = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a) 228 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %bitreverse 229 ; 230 ; AVX1-LABEL: 'var_bitreverse_v8i32' 231 ; AVX1-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %bitreverse = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a) 232 ; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %bitreverse 233 ; 234 ; AVX2-LABEL: 'var_bitreverse_v8i32' 235 ; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a) 236 ; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %bitreverse 237 ; 238 ; AVX512-LABEL: 'var_bitreverse_v8i32' 239 ; AVX512-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a) 240 ; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %bitreverse 241 ; 242 ; XOP-LABEL: 'var_bitreverse_v8i32' 243 ; XOP-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %bitreverse = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a) 244 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %bitreverse 245 ; 246 %bitreverse = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a) 247 ret <8 x i32> %bitreverse 248 } 249 250 define <16 x i32> @var_bitreverse_v16i32(<16 x i32> %a) { 251 ; SSE2-LABEL: 'var_bitreverse_v16i32' 252 ; SSE2-NEXT: Cost Model: Found an estimated cost of 108 for instruction: %bitreverse = call <16 x i32> @llvm.bitreverse.v16i32(<16 x i32> %a) 253 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bitreverse 254 ; 255 ; SSE42-LABEL: 'var_bitreverse_v16i32' 256 ; SSE42-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %bitreverse = call <16 x i32> @llvm.bitreverse.v16i32(<16 x i32> %a) 257 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bitreverse 258 ; 259 ; AVX1-LABEL: 'var_bitreverse_v16i32' 260 ; AVX1-NEXT: Cost Model: Found an estimated cost of 24 for instruction: %bitreverse = call <16 x i32> @llvm.bitreverse.v16i32(<16 x i32> %a) 261 ; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bitreverse 262 ; 263 ; AVX2-LABEL: 'var_bitreverse_v16i32' 264 ; AVX2-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %bitreverse = call <16 x i32> @llvm.bitreverse.v16i32(<16 x i32> %a) 265 ; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bitreverse 266 ; 267 ; AVX512F-LABEL: 'var_bitreverse_v16i32' 268 ; AVX512F-NEXT: Cost Model: Found an estimated cost of 24 for instruction: %bitreverse = call <16 x i32> @llvm.bitreverse.v16i32(<16 x i32> %a) 269 ; AVX512F-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bitreverse 270 ; 271 ; AVX512BW-LABEL: 'var_bitreverse_v16i32' 272 ; AVX512BW-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <16 x i32> @llvm.bitreverse.v16i32(<16 x i32> %a) 273 ; AVX512BW-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bitreverse 274 ; 275 ; XOP-LABEL: 'var_bitreverse_v16i32' 276 ; XOP-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %bitreverse = call <16 x i32> @llvm.bitreverse.v16i32(<16 x i32> %a) 277 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bitreverse 278 ; 279 %bitreverse = call <16 x i32> @llvm.bitreverse.v16i32(<16 x i32> %a) 280 ret <16 x i32> %bitreverse 281 } 282 283 define <8 x i16> @var_bitreverse_v8i16(<8 x i16> %a) { 284 ; SSE2-LABEL: 'var_bitreverse_v8i16' 285 ; SSE2-NEXT: Cost Model: Found an estimated cost of 27 for instruction: %bitreverse = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a) 286 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bitreverse 287 ; 288 ; SSE42-LABEL: 'var_bitreverse_v8i16' 289 ; SSE42-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a) 290 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bitreverse 291 ; 292 ; AVX-LABEL: 'var_bitreverse_v8i16' 293 ; AVX-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a) 294 ; AVX-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bitreverse 295 ; 296 ; AVX512-LABEL: 'var_bitreverse_v8i16' 297 ; AVX512-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a) 298 ; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bitreverse 299 ; 300 ; XOP-LABEL: 'var_bitreverse_v8i16' 301 ; XOP-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bitreverse = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a) 302 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bitreverse 303 ; 304 %bitreverse = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a) 305 ret <8 x i16> %bitreverse 306 } 307 308 define <16 x i16> @var_bitreverse_v16i16(<16 x i16> %a) { 309 ; SSE2-LABEL: 'var_bitreverse_v16i16' 310 ; SSE2-NEXT: Cost Model: Found an estimated cost of 54 for instruction: %bitreverse = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a) 311 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bitreverse 312 ; 313 ; SSE42-LABEL: 'var_bitreverse_v16i16' 314 ; SSE42-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %bitreverse = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a) 315 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bitreverse 316 ; 317 ; AVX1-LABEL: 'var_bitreverse_v16i16' 318 ; AVX1-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %bitreverse = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a) 319 ; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bitreverse 320 ; 321 ; AVX2-LABEL: 'var_bitreverse_v16i16' 322 ; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a) 323 ; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bitreverse 324 ; 325 ; AVX512-LABEL: 'var_bitreverse_v16i16' 326 ; AVX512-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a) 327 ; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bitreverse 328 ; 329 ; XOP-LABEL: 'var_bitreverse_v16i16' 330 ; XOP-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %bitreverse = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a) 331 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bitreverse 332 ; 333 %bitreverse = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a) 334 ret <16 x i16> %bitreverse 335 } 336 337 define <32 x i16> @var_bitreverse_v32i16(<32 x i16> %a) { 338 ; SSE2-LABEL: 'var_bitreverse_v32i16' 339 ; SSE2-NEXT: Cost Model: Found an estimated cost of 108 for instruction: %bitreverse = call <32 x i16> @llvm.bitreverse.v32i16(<32 x i16> %a) 340 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bitreverse 341 ; 342 ; SSE42-LABEL: 'var_bitreverse_v32i16' 343 ; SSE42-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %bitreverse = call <32 x i16> @llvm.bitreverse.v32i16(<32 x i16> %a) 344 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bitreverse 345 ; 346 ; AVX1-LABEL: 'var_bitreverse_v32i16' 347 ; AVX1-NEXT: Cost Model: Found an estimated cost of 24 for instruction: %bitreverse = call <32 x i16> @llvm.bitreverse.v32i16(<32 x i16> %a) 348 ; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bitreverse 349 ; 350 ; AVX2-LABEL: 'var_bitreverse_v32i16' 351 ; AVX2-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %bitreverse = call <32 x i16> @llvm.bitreverse.v32i16(<32 x i16> %a) 352 ; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bitreverse 353 ; 354 ; AVX512F-LABEL: 'var_bitreverse_v32i16' 355 ; AVX512F-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %bitreverse = call <32 x i16> @llvm.bitreverse.v32i16(<32 x i16> %a) 356 ; AVX512F-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bitreverse 357 ; 358 ; AVX512BW-LABEL: 'var_bitreverse_v32i16' 359 ; AVX512BW-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <32 x i16> @llvm.bitreverse.v32i16(<32 x i16> %a) 360 ; AVX512BW-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bitreverse 361 ; 362 ; XOP-LABEL: 'var_bitreverse_v32i16' 363 ; XOP-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %bitreverse = call <32 x i16> @llvm.bitreverse.v32i16(<32 x i16> %a) 364 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bitreverse 365 ; 366 %bitreverse = call <32 x i16> @llvm.bitreverse.v32i16(<32 x i16> %a) 367 ret <32 x i16> %bitreverse 368 } 369 370 define <16 x i8> @var_bitreverse_v16i8(<16 x i8> %a) { 371 ; SSE2-LABEL: 'var_bitreverse_v16i8' 372 ; SSE2-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %bitreverse = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> %a) 373 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bitreverse 374 ; 375 ; SSE42-LABEL: 'var_bitreverse_v16i8' 376 ; SSE42-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> %a) 377 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bitreverse 378 ; 379 ; AVX-LABEL: 'var_bitreverse_v16i8' 380 ; AVX-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> %a) 381 ; AVX-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bitreverse 382 ; 383 ; AVX512-LABEL: 'var_bitreverse_v16i8' 384 ; AVX512-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> %a) 385 ; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bitreverse 386 ; 387 ; XOP-LABEL: 'var_bitreverse_v16i8' 388 ; XOP-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bitreverse = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> %a) 389 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bitreverse 390 ; 391 %bitreverse = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> %a) 392 ret <16 x i8> %bitreverse 393 } 394 395 define <32 x i8> @var_bitreverse_v32i8(<32 x i8> %a) { 396 ; SSE2-LABEL: 'var_bitreverse_v32i8' 397 ; SSE2-NEXT: Cost Model: Found an estimated cost of 40 for instruction: %bitreverse = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a) 398 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bitreverse 399 ; 400 ; SSE42-LABEL: 'var_bitreverse_v32i8' 401 ; SSE42-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %bitreverse = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a) 402 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bitreverse 403 ; 404 ; AVX1-LABEL: 'var_bitreverse_v32i8' 405 ; AVX1-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %bitreverse = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a) 406 ; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bitreverse 407 ; 408 ; AVX2-LABEL: 'var_bitreverse_v32i8' 409 ; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a) 410 ; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bitreverse 411 ; 412 ; AVX512-LABEL: 'var_bitreverse_v32i8' 413 ; AVX512-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a) 414 ; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bitreverse 415 ; 416 ; XOP-LABEL: 'var_bitreverse_v32i8' 417 ; XOP-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %bitreverse = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a) 418 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bitreverse 419 ; 420 %bitreverse = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a) 421 ret <32 x i8> %bitreverse 422 } 423 424 define <64 x i8> @var_bitreverse_v64i8(<64 x i8> %a) { 425 ; SSE2-LABEL: 'var_bitreverse_v64i8' 426 ; SSE2-NEXT: Cost Model: Found an estimated cost of 80 for instruction: %bitreverse = call <64 x i8> @llvm.bitreverse.v64i8(<64 x i8> %a) 427 ; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bitreverse 428 ; 429 ; SSE42-LABEL: 'var_bitreverse_v64i8' 430 ; SSE42-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %bitreverse = call <64 x i8> @llvm.bitreverse.v64i8(<64 x i8> %a) 431 ; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bitreverse 432 ; 433 ; AVX1-LABEL: 'var_bitreverse_v64i8' 434 ; AVX1-NEXT: Cost Model: Found an estimated cost of 24 for instruction: %bitreverse = call <64 x i8> @llvm.bitreverse.v64i8(<64 x i8> %a) 435 ; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bitreverse 436 ; 437 ; AVX2-LABEL: 'var_bitreverse_v64i8' 438 ; AVX2-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %bitreverse = call <64 x i8> @llvm.bitreverse.v64i8(<64 x i8> %a) 439 ; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bitreverse 440 ; 441 ; AVX512F-LABEL: 'var_bitreverse_v64i8' 442 ; AVX512F-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %bitreverse = call <64 x i8> @llvm.bitreverse.v64i8(<64 x i8> %a) 443 ; AVX512F-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bitreverse 444 ; 445 ; AVX512BW-LABEL: 'var_bitreverse_v64i8' 446 ; AVX512BW-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %bitreverse = call <64 x i8> @llvm.bitreverse.v64i8(<64 x i8> %a) 447 ; AVX512BW-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bitreverse 448 ; 449 ; XOP-LABEL: 'var_bitreverse_v64i8' 450 ; XOP-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %bitreverse = call <64 x i8> @llvm.bitreverse.v64i8(<64 x i8> %a) 451 ; XOP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bitreverse 452 ; 453 %bitreverse = call <64 x i8> @llvm.bitreverse.v64i8(<64 x i8> %a) 454 ret <64 x i8> %bitreverse 455 } 456