1 ; RUN: opt < %s -cost-model -analyze | FileCheck %s 2 target datalayout = "E-m:e-i64:64-n32:64" 3 target triple = "powerpc64-unknown-linux-gnu" 4 5 define <16 x i8> @test_l_v16i8(<16 x i8>* %p) #0 { 6 entry: 7 %r = load <16 x i8>, <16 x i8>* %p, align 1 8 ret <16 x i8> %r 9 10 ; CHECK-LABEL: test_l_v16i8 11 ; CHECK: cost of 2 for instruction: %r = load <16 x i8>, <16 x i8>* %p, align 1 12 } 13 14 define <32 x i8> @test_l_v32i8(<32 x i8>* %p) #0 { 15 entry: 16 %r = load <32 x i8>, <32 x i8>* %p, align 1 17 ret <32 x i8> %r 18 19 ; CHECK-LABEL: test_l_v32i8 20 ; CHECK: cost of 4 for instruction: %r = load <32 x i8>, <32 x i8>* %p, align 1 21 } 22 23 define <8 x i16> @test_l_v8i16(<8 x i16>* %p) #0 { 24 entry: 25 %r = load <8 x i16>, <8 x i16>* %p, align 2 26 ret <8 x i16> %r 27 28 ; CHECK-LABEL: test_l_v8i16 29 ; CHECK: cost of 2 for instruction: %r = load <8 x i16>, <8 x i16>* %p, align 2 30 } 31 32 define <16 x i16> @test_l_v16i16(<16 x i16>* %p) #0 { 33 entry: 34 %r = load <16 x i16>, <16 x i16>* %p, align 2 35 ret <16 x i16> %r 36 37 ; CHECK-LABEL: test_l_v16i16 38 ; CHECK: cost of 4 for instruction: %r = load <16 x i16>, <16 x i16>* %p, align 2 39 } 40 41 define <4 x i32> @test_l_v4i32(<4 x i32>* %p) #0 { 42 entry: 43 %r = load <4 x i32>, <4 x i32>* %p, align 4 44 ret <4 x i32> %r 45 46 ; CHECK-LABEL: test_l_v4i32 47 ; CHECK: cost of 2 for instruction: %r = load <4 x i32>, <4 x i32>* %p, align 4 48 } 49 50 define <8 x i32> @test_l_v8i32(<8 x i32>* %p) #0 { 51 entry: 52 %r = load <8 x i32>, <8 x i32>* %p, align 4 53 ret <8 x i32> %r 54 55 ; CHECK-LABEL: test_l_v8i32 56 ; CHECK: cost of 4 for instruction: %r = load <8 x i32>, <8 x i32>* %p, align 4 57 } 58 59 define <2 x i64> @test_l_v2i64(<2 x i64>* %p) #0 { 60 entry: 61 %r = load <2 x i64>, <2 x i64>* %p, align 8 62 ret <2 x i64> %r 63 64 ; CHECK-LABEL: test_l_v2i64 65 ; CHECK: cost of 1 for instruction: %r = load <2 x i64>, <2 x i64>* %p, align 8 66 } 67 68 define <4 x i64> @test_l_v4i64(<4 x i64>* %p) #0 { 69 entry: 70 %r = load <4 x i64>, <4 x i64>* %p, align 8 71 ret <4 x i64> %r 72 73 ; CHECK-LABEL: test_l_v4i64 74 ; CHECK: cost of 2 for instruction: %r = load <4 x i64>, <4 x i64>* %p, align 8 75 } 76 77 define <4 x float> @test_l_v4float(<4 x float>* %p) #0 { 78 entry: 79 %r = load <4 x float>, <4 x float>* %p, align 4 80 ret <4 x float> %r 81 82 ; CHECK-LABEL: test_l_v4float 83 ; CHECK: cost of 2 for instruction: %r = load <4 x float>, <4 x float>* %p, align 4 84 } 85 86 define <8 x float> @test_l_v8float(<8 x float>* %p) #0 { 87 entry: 88 %r = load <8 x float>, <8 x float>* %p, align 4 89 ret <8 x float> %r 90 91 ; CHECK-LABEL: test_l_v8float 92 ; CHECK: cost of 4 for instruction: %r = load <8 x float>, <8 x float>* %p, align 4 93 } 94 95 define <2 x double> @test_l_v2double(<2 x double>* %p) #0 { 96 entry: 97 %r = load <2 x double>, <2 x double>* %p, align 8 98 ret <2 x double> %r 99 100 ; CHECK-LABEL: test_l_v2double 101 ; CHECK: cost of 1 for instruction: %r = load <2 x double>, <2 x double>* %p, align 8 102 } 103 104 define <4 x double> @test_l_v4double(<4 x double>* %p) #0 { 105 entry: 106 %r = load <4 x double>, <4 x double>* %p, align 8 107 ret <4 x double> %r 108 109 ; CHECK-LABEL: test_l_v4double 110 ; CHECK: cost of 2 for instruction: %r = load <4 x double>, <4 x double>* %p, align 8 111 } 112 113 define <16 x i8> @test_l_p8v16i8(<16 x i8>* %p) #2 { 114 entry: 115 %r = load <16 x i8>, <16 x i8>* %p, align 1 116 ret <16 x i8> %r 117 118 ; CHECK-LABEL: test_l_p8v16i8 119 ; CHECK: cost of 1 for instruction: %r = load <16 x i8>, <16 x i8>* %p, align 1 120 } 121 122 define <32 x i8> @test_l_p8v32i8(<32 x i8>* %p) #2 { 123 entry: 124 %r = load <32 x i8>, <32 x i8>* %p, align 1 125 ret <32 x i8> %r 126 127 ; CHECK-LABEL: test_l_p8v32i8 128 ; CHECK: cost of 2 for instruction: %r = load <32 x i8>, <32 x i8>* %p, align 1 129 } 130 131 define <8 x i16> @test_l_p8v8i16(<8 x i16>* %p) #2 { 132 entry: 133 %r = load <8 x i16>, <8 x i16>* %p, align 2 134 ret <8 x i16> %r 135 136 ; CHECK-LABEL: test_l_p8v8i16 137 ; CHECK: cost of 1 for instruction: %r = load <8 x i16>, <8 x i16>* %p, align 2 138 } 139 140 define <16 x i16> @test_l_p8v16i16(<16 x i16>* %p) #2 { 141 entry: 142 %r = load <16 x i16>, <16 x i16>* %p, align 2 143 ret <16 x i16> %r 144 145 ; CHECK-LABEL: test_l_p8v16i16 146 ; CHECK: cost of 2 for instruction: %r = load <16 x i16>, <16 x i16>* %p, align 2 147 } 148 149 define <4 x i32> @test_l_p8v4i32(<4 x i32>* %p) #2 { 150 entry: 151 %r = load <4 x i32>, <4 x i32>* %p, align 4 152 ret <4 x i32> %r 153 154 ; CHECK-LABEL: test_l_p8v4i32 155 ; CHECK: cost of 1 for instruction: %r = load <4 x i32>, <4 x i32>* %p, align 4 156 } 157 158 define <8 x i32> @test_l_p8v8i32(<8 x i32>* %p) #2 { 159 entry: 160 %r = load <8 x i32>, <8 x i32>* %p, align 4 161 ret <8 x i32> %r 162 163 ; CHECK-LABEL: test_l_p8v8i32 164 ; CHECK: cost of 2 for instruction: %r = load <8 x i32>, <8 x i32>* %p, align 4 165 } 166 167 define <2 x i64> @test_l_p8v2i64(<2 x i64>* %p) #2 { 168 entry: 169 %r = load <2 x i64>, <2 x i64>* %p, align 8 170 ret <2 x i64> %r 171 172 ; CHECK-LABEL: test_l_p8v2i64 173 ; CHECK: cost of 1 for instruction: %r = load <2 x i64>, <2 x i64>* %p, align 8 174 } 175 176 define <4 x i64> @test_l_p8v4i64(<4 x i64>* %p) #2 { 177 entry: 178 %r = load <4 x i64>, <4 x i64>* %p, align 8 179 ret <4 x i64> %r 180 181 ; CHECK-LABEL: test_l_p8v4i64 182 ; CHECK: cost of 2 for instruction: %r = load <4 x i64>, <4 x i64>* %p, align 8 183 } 184 185 define <4 x float> @test_l_p8v4float(<4 x float>* %p) #2 { 186 entry: 187 %r = load <4 x float>, <4 x float>* %p, align 4 188 ret <4 x float> %r 189 190 ; CHECK-LABEL: test_l_p8v4float 191 ; CHECK: cost of 1 for instruction: %r = load <4 x float>, <4 x float>* %p, align 4 192 } 193 194 define <8 x float> @test_l_p8v8float(<8 x float>* %p) #2 { 195 entry: 196 %r = load <8 x float>, <8 x float>* %p, align 4 197 ret <8 x float> %r 198 199 ; CHECK-LABEL: test_l_p8v8float 200 ; CHECK: cost of 2 for instruction: %r = load <8 x float>, <8 x float>* %p, align 4 201 } 202 203 define <2 x double> @test_l_p8v2double(<2 x double>* %p) #2 { 204 entry: 205 %r = load <2 x double>, <2 x double>* %p, align 8 206 ret <2 x double> %r 207 208 ; CHECK-LABEL: test_l_p8v2double 209 ; CHECK: cost of 1 for instruction: %r = load <2 x double>, <2 x double>* %p, align 8 210 } 211 212 define <4 x double> @test_l_p8v4double(<4 x double>* %p) #2 { 213 entry: 214 %r = load <4 x double>, <4 x double>* %p, align 8 215 ret <4 x double> %r 216 217 ; CHECK-LABEL: test_l_p8v4double 218 ; CHECK: cost of 2 for instruction: %r = load <4 x double>, <4 x double>* %p, align 8 219 } 220 221 define <4 x float> @test_l_qv4float(<4 x float>* %p) #1 { 222 entry: 223 %r = load <4 x float>, <4 x float>* %p, align 4 224 ret <4 x float> %r 225 226 ; CHECK-LABEL: test_l_qv4float 227 ; CHECK: cost of 2 for instruction: %r = load <4 x float>, <4 x float>* %p, align 4 228 } 229 230 define <8 x float> @test_l_qv8float(<8 x float>* %p) #1 { 231 entry: 232 %r = load <8 x float>, <8 x float>* %p, align 4 233 ret <8 x float> %r 234 235 ; CHECK-LABEL: test_l_qv8float 236 ; CHECK: cost of 4 for instruction: %r = load <8 x float>, <8 x float>* %p, align 4 237 } 238 239 define <4 x double> @test_l_qv4double(<4 x double>* %p) #1 { 240 entry: 241 %r = load <4 x double>, <4 x double>* %p, align 8 242 ret <4 x double> %r 243 244 ; CHECK-LABEL: test_l_qv4double 245 ; CHECK: cost of 2 for instruction: %r = load <4 x double>, <4 x double>* %p, align 8 246 } 247 248 define <8 x double> @test_l_qv8double(<8 x double>* %p) #1 { 249 entry: 250 %r = load <8 x double>, <8 x double>* %p, align 8 251 ret <8 x double> %r 252 253 ; CHECK-LABEL: test_l_qv8double 254 ; CHECK: cost of 4 for instruction: %r = load <8 x double>, <8 x double>* %p, align 8 255 } 256 257 define void @test_s_v16i8(<16 x i8>* %p, <16 x i8> %v) #0 { 258 entry: 259 store <16 x i8> %v, <16 x i8>* %p, align 1 260 ret void 261 262 ; CHECK-LABEL: test_s_v16i8 263 ; CHECK: cost of 1 for instruction: store <16 x i8> %v, <16 x i8>* %p, align 1 264 } 265 266 define void @test_s_v32i8(<32 x i8>* %p, <32 x i8> %v) #0 { 267 entry: 268 store <32 x i8> %v, <32 x i8>* %p, align 1 269 ret void 270 271 ; CHECK-LABEL: test_s_v32i8 272 ; CHECK: cost of 2 for instruction: store <32 x i8> %v, <32 x i8>* %p, align 1 273 } 274 275 define void @test_s_v8i16(<8 x i16>* %p, <8 x i16> %v) #0 { 276 entry: 277 store <8 x i16> %v, <8 x i16>* %p, align 2 278 ret void 279 280 ; CHECK-LABEL: test_s_v8i16 281 ; CHECK: cost of 1 for instruction: store <8 x i16> %v, <8 x i16>* %p, align 2 282 } 283 284 define void @test_s_v16i16(<16 x i16>* %p, <16 x i16> %v) #0 { 285 entry: 286 store <16 x i16> %v, <16 x i16>* %p, align 2 287 ret void 288 289 ; CHECK-LABEL: test_s_v16i16 290 ; CHECK: cost of 2 for instruction: store <16 x i16> %v, <16 x i16>* %p, align 2 291 } 292 293 define void @test_s_v4i32(<4 x i32>* %p, <4 x i32> %v) #0 { 294 entry: 295 store <4 x i32> %v, <4 x i32>* %p, align 4 296 ret void 297 298 ; CHECK-LABEL: test_s_v4i32 299 ; CHECK: cost of 1 for instruction: store <4 x i32> %v, <4 x i32>* %p, align 4 300 } 301 302 define void @test_s_v8i32(<8 x i32>* %p, <8 x i32> %v) #0 { 303 entry: 304 store <8 x i32> %v, <8 x i32>* %p, align 4 305 ret void 306 307 ; CHECK-LABEL: test_s_v8i32 308 ; CHECK: cost of 2 for instruction: store <8 x i32> %v, <8 x i32>* %p, align 4 309 } 310 311 define void @test_s_v2i64(<2 x i64>* %p, <2 x i64> %v) #0 { 312 entry: 313 store <2 x i64> %v, <2 x i64>* %p, align 8 314 ret void 315 316 ; CHECK-LABEL: test_s_v2i64 317 ; CHECK: cost of 1 for instruction: store <2 x i64> %v, <2 x i64>* %p, align 8 318 } 319 320 define void @test_s_v4i64(<4 x i64>* %p, <4 x i64> %v) #0 { 321 entry: 322 store <4 x i64> %v, <4 x i64>* %p, align 8 323 ret void 324 325 ; CHECK-LABEL: test_s_v4i64 326 ; CHECK: cost of 2 for instruction: store <4 x i64> %v, <4 x i64>* %p, align 8 327 } 328 329 define void @test_s_v4float(<4 x float>* %p, <4 x float> %v) #0 { 330 entry: 331 store <4 x float> %v, <4 x float>* %p, align 4 332 ret void 333 334 ; CHECK-LABEL: test_s_v4float 335 ; CHECK: cost of 1 for instruction: store <4 x float> %v, <4 x float>* %p, align 4 336 } 337 338 define void @test_s_v8float(<8 x float>* %p, <8 x float> %v) #0 { 339 entry: 340 store <8 x float> %v, <8 x float>* %p, align 4 341 ret void 342 343 ; CHECK-LABEL: test_s_v8float 344 ; CHECK: cost of 2 for instruction: store <8 x float> %v, <8 x float>* %p, align 4 345 } 346 347 define void @test_s_v2double(<2 x double>* %p, <2 x double> %v) #0 { 348 entry: 349 store <2 x double> %v, <2 x double>* %p, align 8 350 ret void 351 352 ; CHECK-LABEL: test_s_v2double 353 ; CHECK: cost of 1 for instruction: store <2 x double> %v, <2 x double>* %p, align 8 354 } 355 356 define void @test_s_v4double(<4 x double>* %p, <4 x double> %v) #0 { 357 entry: 358 store <4 x double> %v, <4 x double>* %p, align 8 359 ret void 360 361 ; CHECK-LABEL: test_s_v4double 362 ; CHECK: cost of 2 for instruction: store <4 x double> %v, <4 x double>* %p, align 8 363 } 364 365 define void @test_s_qv4float(<4 x float>* %p, <4 x float> %v) #1 { 366 entry: 367 store <4 x float> %v, <4 x float>* %p, align 4 368 ret void 369 370 ; CHECK-LABEL: test_s_qv4float 371 ; CHECK: cost of 7 for instruction: store <4 x float> %v, <4 x float>* %p, align 4 372 } 373 374 define void @test_s_qv8float(<8 x float>* %p, <8 x float> %v) #1 { 375 entry: 376 store <8 x float> %v, <8 x float>* %p, align 4 377 ret void 378 379 ; CHECK-LABEL: test_s_qv8float 380 ; CHECK: cost of 15 for instruction: store <8 x float> %v, <8 x float>* %p, align 4 381 } 382 383 define void @test_s_qv4double(<4 x double>* %p, <4 x double> %v) #1 { 384 entry: 385 store <4 x double> %v, <4 x double>* %p, align 8 386 ret void 387 388 ; CHECK-LABEL: test_s_qv4double 389 ; CHECK: cost of 7 for instruction: store <4 x double> %v, <4 x double>* %p, align 8 390 } 391 392 define void @test_s_qv8double(<8 x double>* %p, <8 x double> %v) #1 { 393 entry: 394 store <8 x double> %v, <8 x double>* %p, align 8 395 ret void 396 397 ; CHECK-LABEL: test_s_qv8double 398 ; CHECK: cost of 15 for instruction: store <8 x double> %v, <8 x double>* %p, align 8 399 } 400 401 attributes #0 = { nounwind "target-cpu"="pwr7" } 402 attributes #1 = { nounwind "target-cpu"="a2q" } 403 attributes #2 = { nounwind "target-cpu"="pwr8" } 404 405