1! RUN: %flang_fc1 -flang-experimental-hlfir -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR","LLVMIR-LE" %s 2! RUN: %flang_fc1 -flang-experimental-hlfir -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR","LLVMIR-BE" %s 3! REQUIRES: target=powerpc{{.*}} 4 5!--------- 6! vec_ctf 7!--------- 8! CHECK-LABEL: vec_ctf_test_i4i1 9subroutine vec_ctf_test_i4i1(arg1) 10 vector(integer(4)), intent(in) :: arg1 11 vector(real(4)) :: r 12 r = vec_ctf(arg1, 1_1) 13 14! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 15! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfsx(<4 x i32> %[[arg1]], i32 1) 16! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 17end subroutine vec_ctf_test_i4i1 18 19! CHECK-LABEL: vec_ctf_test_i4i2 20subroutine vec_ctf_test_i4i2(arg1) 21 vector(integer(4)), intent(in) :: arg1 22 vector(real(4)) :: r 23 r = vec_ctf(arg1, 1_2) 24 25! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 26! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfsx(<4 x i32> %[[arg1]], i32 1) 27! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 28end subroutine vec_ctf_test_i4i2 29 30! CHECK-LABEL: vec_ctf_test_i4i4 31subroutine vec_ctf_test_i4i4(arg1) 32 vector(integer(4)), intent(in) :: arg1 33 vector(real(4)) :: r 34 r = vec_ctf(arg1, 1_4) 35 36! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 37! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfsx(<4 x i32> %[[arg1]], i32 1) 38! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 39end subroutine vec_ctf_test_i4i4 40 41! CHECK-LABEL: vec_ctf_test_i4i8 42subroutine vec_ctf_test_i4i8(arg1) 43 vector(integer(4)), intent(in) :: arg1 44 vector(real(4)) :: r 45 r = vec_ctf(arg1, 1_8) 46 47! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 48! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfsx(<4 x i32> %[[arg1]], i32 1) 49! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 50end subroutine vec_ctf_test_i4i8 51 52! CHECK-LABEL: vec_ctf_test_i8i1 53subroutine vec_ctf_test_i8i1(arg1) 54 vector(integer(8)), intent(in) :: arg1 55 vector(real(8)) :: r 56 r = vec_ctf(arg1, 3_1) 57 58! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 59! LLVMIR: %[[carg:.*]] = sitofp <2 x i64> %[[arg1]] to <2 x double> 60! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01) 61! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 62end subroutine vec_ctf_test_i8i1 63 64! CHECK-LABEL: vec_ctf_test_i8i2 65subroutine vec_ctf_test_i8i2(arg1) 66 vector(integer(8)), intent(in) :: arg1 67 vector(real(8)) :: r 68 r = vec_ctf(arg1, 3_2) 69 70! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 71! LLVMIR: %[[carg:.*]] = sitofp <2 x i64> %[[arg1]] to <2 x double> 72! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01) 73! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 74end subroutine vec_ctf_test_i8i2 75 76! CHECK-LABEL: vec_ctf_test_i8i4 77subroutine vec_ctf_test_i8i4(arg1) 78 vector(integer(8)), intent(in) :: arg1 79 vector(real(8)) :: r 80 r = vec_ctf(arg1, 3_4) 81 82! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 83! LLVMIR: %[[carg:.*]] = sitofp <2 x i64> %[[arg1]] to <2 x double> 84! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01) 85! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 86end subroutine vec_ctf_test_i8i4 87 88! CHECK-LABEL: vec_ctf_test_i8i8 89subroutine vec_ctf_test_i8i8(arg1) 90 vector(integer(8)), intent(in) :: arg1 91 vector(real(8)) :: r 92 r = vec_ctf(arg1, 3_8) 93 94! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 95! LLVMIR: %[[carg:.*]] = sitofp <2 x i64> %[[arg1]] to <2 x double> 96! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01) 97! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 98end subroutine vec_ctf_test_i8i8 99 100! CHECK-LABEL: vec_ctf_test_u4i1 101subroutine vec_ctf_test_u4i1(arg1) 102 vector(unsigned(4)), intent(in) :: arg1 103 vector(real(4)) :: r 104 r = vec_ctf(arg1, 1_1) 105 106! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 107! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfux(<4 x i32> %[[arg1]], i32 1) 108! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 109end subroutine vec_ctf_test_u4i1 110 111! CHECK-LABEL: vec_ctf_test_u4i2 112subroutine vec_ctf_test_u4i2(arg1) 113 vector(unsigned(4)), intent(in) :: arg1 114 vector(real(4)) :: r 115 r = vec_ctf(arg1, 1_2) 116 117! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 118! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfux(<4 x i32> %[[arg1]], i32 1) 119! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 120end subroutine vec_ctf_test_u4i2 121 122! CHECK-LABEL: vec_ctf_test_u4i4 123subroutine vec_ctf_test_u4i4(arg1) 124 vector(unsigned(4)), intent(in) :: arg1 125 vector(real(4)) :: r 126 r = vec_ctf(arg1, 1_4) 127 128! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 129! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfux(<4 x i32> %[[arg1]], i32 1) 130! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 131end subroutine vec_ctf_test_u4i4 132 133! CHECK-LABEL: vec_ctf_test_u4i8 134subroutine vec_ctf_test_u4i8(arg1) 135 vector(unsigned(4)), intent(in) :: arg1 136 vector(real(4)) :: r 137 r = vec_ctf(arg1, 1_8) 138 139! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 140! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfux(<4 x i32> %[[arg1]], i32 1) 141! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 142end subroutine vec_ctf_test_u4i8 143 144! CHECK-LABEL: vec_ctf_test_u8i1 145subroutine vec_ctf_test_u8i1(arg1) 146 vector(unsigned(8)), intent(in) :: arg1 147 vector(real(8)) :: r 148 r = vec_ctf(arg1, 3_1) 149 150! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 151! LLVMIR: %[[carg:.*]] = uitofp <2 x i64> %[[arg1]] to <2 x double> 152! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01) 153! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 154end subroutine vec_ctf_test_u8i1 155 156! CHECK-LABEL: vec_ctf_test_u8i2 157subroutine vec_ctf_test_u8i2(arg1) 158 vector(unsigned(8)), intent(in) :: arg1 159 vector(real(8)) :: r 160 r = vec_ctf(arg1, 3_2) 161 162! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 163! LLVMIR: %[[carg:.*]] = uitofp <2 x i64> %[[arg1]] to <2 x double> 164! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01) 165! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 166end subroutine vec_ctf_test_u8i2 167 168! CHECK-LABEL: vec_ctf_test_u8i4 169subroutine vec_ctf_test_u8i4(arg1) 170 vector(unsigned(8)), intent(in) :: arg1 171 vector(real(8)) :: r 172 r = vec_ctf(arg1, 3_4) 173 174! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 175! LLVMIR: %[[carg:.*]] = uitofp <2 x i64> %[[arg1]] to <2 x double> 176! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01) 177! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 178end subroutine vec_ctf_test_u8i4 179 180! CHECK-LABEL: vec_ctf_test_u8i8 181subroutine vec_ctf_test_u8i8(arg1) 182 vector(unsigned(8)), intent(in) :: arg1 183 vector(real(8)) :: r 184 r = vec_ctf(arg1, 3_8) 185 186! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 187! LLVMIR: %[[carg:.*]] = uitofp <2 x i64> %[[arg1]] to <2 x double> 188! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01) 189! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 190end subroutine vec_ctf_test_u8i8 191 192!------------- 193! vec_convert 194!------------- 195! CHECK-LABEL: vec_convert_test_i1i1 196subroutine vec_convert_test_i1i1(v, mold) 197 vector(integer(1)) :: v 198 vector(integer(1)) :: mold, r 199 r = vec_convert(v, mold) 200 201! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 202! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16 203end subroutine vec_convert_test_i1i1 204 205! CHECK-LABEL: vec_convert_test_i1i2 206subroutine vec_convert_test_i1i2(v, mold) 207 vector(integer(1)) :: v 208 vector(integer(2)) :: mold, r 209 r = vec_convert(v, mold) 210 211! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 212! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <8 x i16> 213! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 214end subroutine vec_convert_test_i1i2 215 216! CHECK-LABEL: vec_convert_test_i1i4 217subroutine vec_convert_test_i1i4(v, mold) 218 vector(integer(1)) :: v 219 vector(integer(4)) :: mold, r 220 r = vec_convert(v, mold) 221 222! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 223! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x i32> 224! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 225end subroutine vec_convert_test_i1i4 226 227! CHECK-LABEL: vec_convert_test_i1i8 228subroutine vec_convert_test_i1i8(v, mold) 229 vector(integer(1)) :: v 230 vector(integer(8)) :: mold, r 231 r = vec_convert(v, mold) 232 233! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 234! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x i64> 235! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 236end subroutine vec_convert_test_i1i8 237 238! CHECK-LABEL: vec_convert_test_i1u1 239subroutine vec_convert_test_i1u1(v, mold) 240 vector(integer(1)) :: v 241 vector(unsigned(1)) :: mold, r 242 r = vec_convert(v, mold) 243 244! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 245! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16 246end subroutine vec_convert_test_i1u1 247 248! CHECK-LABEL: vec_convert_test_i1u2 249subroutine vec_convert_test_i1u2(v, mold) 250 vector(integer(1)) :: v 251 vector(unsigned(2)) :: mold, r 252 r = vec_convert(v, mold) 253 254! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 255! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <8 x i16> 256! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 257end subroutine vec_convert_test_i1u2 258 259! CHECK-LABEL: vec_convert_test_i1u4 260subroutine vec_convert_test_i1u4(v, mold) 261 vector(integer(1)) :: v 262 vector(unsigned(4)) :: mold, r 263 r = vec_convert(v, mold) 264 265! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 266! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x i32> 267! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 268end subroutine vec_convert_test_i1u4 269 270! CHECK-LABEL: vec_convert_test_i1u8 271subroutine vec_convert_test_i1u8(v, mold) 272 vector(integer(1)) :: v 273 vector(unsigned(8)) :: mold, r 274 r = vec_convert(v, mold) 275 276! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 277! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x i64> 278! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 279end subroutine vec_convert_test_i1u8 280 281! CHECK-LABEL: vec_convert_test_i1r4 282subroutine vec_convert_test_i1r4(v, mold) 283 vector(integer(1)) :: v 284 vector(real(4)) :: mold, r 285 r = vec_convert(v, mold) 286 287! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 288! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x float> 289! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 290end subroutine vec_convert_test_i1r4 291 292! CHECK-LABEL: vec_convert_test_i1r8 293subroutine vec_convert_test_i1r8(v, mold) 294 vector(integer(1)) :: v 295 vector(real(8)) :: mold, r 296 r = vec_convert(v, mold) 297 298! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 299! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x double> 300! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 301end subroutine vec_convert_test_i1r8 302 303! CHECK-LABEL: vec_convert_test_i2i1 304subroutine vec_convert_test_i2i1(v, mold) 305 vector(integer(2)) :: v 306 vector(integer(1)) :: mold, r 307 r = vec_convert(v, mold) 308 309! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 310! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <16 x i8> 311! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 312end subroutine vec_convert_test_i2i1 313 314! CHECK-LABEL: vec_convert_test_i2i2 315subroutine vec_convert_test_i2i2(v, mold) 316 vector(integer(2)) :: v 317 vector(integer(2)) :: mold, r 318 r = vec_convert(v, mold) 319 320! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 321! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16 322end subroutine vec_convert_test_i2i2 323 324! CHECK-LABEL: vec_convert_test_i2i4 325subroutine vec_convert_test_i2i4(v, mold) 326 vector(integer(2)) :: v 327 vector(integer(4)) :: mold, r 328 r = vec_convert(v, mold) 329 330! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 331! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x i32> 332! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 333end subroutine vec_convert_test_i2i4 334 335! CHECK-LABEL: vec_convert_test_i2i8 336subroutine vec_convert_test_i2i8(v, mold) 337 vector(integer(2)) :: v 338 vector(integer(8)) :: mold, r 339 r = vec_convert(v, mold) 340 341! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 342! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x i64> 343! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 344end subroutine vec_convert_test_i2i8 345 346! CHECK-LABEL: vec_convert_test_i2u1 347subroutine vec_convert_test_i2u1(v, mold) 348 vector(integer(2)) :: v 349 vector(unsigned(1)) :: mold, r 350 r = vec_convert(v, mold) 351 352! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 353! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <16 x i8> 354! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 355end subroutine vec_convert_test_i2u1 356 357! CHECK-LABEL: vec_convert_test_i2u2 358subroutine vec_convert_test_i2u2(v, mold) 359 vector(integer(2)) :: v 360 vector(unsigned(2)) :: mold, r 361 r = vec_convert(v, mold) 362 363! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 364! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16 365end subroutine vec_convert_test_i2u2 366 367! CHECK-LABEL: vec_convert_test_i2u4 368subroutine vec_convert_test_i2u4(v, mold) 369 vector(integer(2)) :: v 370 vector(unsigned(4)) :: mold, r 371 r = vec_convert(v, mold) 372 373! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 374! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x i32> 375! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 376end subroutine vec_convert_test_i2u4 377 378! CHECK-LABEL: vec_convert_test_i2u8 379subroutine vec_convert_test_i2u8(v, mold) 380 vector(integer(2)) :: v 381 vector(unsigned(8)) :: mold, r 382 r = vec_convert(v, mold) 383 384! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 385! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x i64> 386! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 387end subroutine vec_convert_test_i2u8 388 389! CHECK-LABEL: vec_convert_test_i2r4 390subroutine vec_convert_test_i2r4(v, mold) 391 vector(integer(2)) :: v 392 vector(real(4)) :: mold, r 393 r = vec_convert(v, mold) 394 395! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 396! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x float> 397! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 398end subroutine vec_convert_test_i2r4 399 400! CHECK-LABEL: vec_convert_test_i2r8 401subroutine vec_convert_test_i2r8(v, mold) 402 vector(integer(2)) :: v 403 vector(real(8)) :: mold, r 404 r = vec_convert(v, mold) 405 406! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 407! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x double> 408! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 409end subroutine vec_convert_test_i2r8 410 411! CHECK-LABEL: vec_convert_test_i4i1 412subroutine vec_convert_test_i4i1(v, mold) 413 vector(integer(4)) :: v 414 vector(integer(1)) :: mold, r 415 r = vec_convert(v, mold) 416 417! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 418! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <16 x i8> 419! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 420end subroutine vec_convert_test_i4i1 421 422! CHECK-LABEL: vec_convert_test_i4i2 423subroutine vec_convert_test_i4i2(v, mold) 424 vector(integer(4)) :: v 425 vector(integer(2)) :: mold, r 426 r = vec_convert(v, mold) 427 428! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 429! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <8 x i16> 430! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 431end subroutine vec_convert_test_i4i2 432 433! CHECK-LABEL: vec_convert_test_i4i4 434subroutine vec_convert_test_i4i4(v, mold) 435 vector(integer(4)) :: v 436 vector(integer(4)) :: mold, r 437 r = vec_convert(v, mold) 438 439! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 440! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16 441end subroutine vec_convert_test_i4i4 442 443! CHECK-LABEL: vec_convert_test_i4i8 444subroutine vec_convert_test_i4i8(v, mold) 445 vector(integer(4)) :: v 446 vector(integer(8)) :: mold, r 447 r = vec_convert(v, mold) 448 449! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 450! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x i64> 451! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 452end subroutine vec_convert_test_i4i8 453 454! CHECK-LABEL: vec_convert_test_i4u1 455subroutine vec_convert_test_i4u1(v, mold) 456 vector(integer(4)) :: v 457 vector(unsigned(1)) :: mold, r 458 r = vec_convert(v, mold) 459 460! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 461! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <16 x i8> 462! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 463end subroutine vec_convert_test_i4u1 464 465! CHECK-LABEL: vec_convert_test_i4u2 466subroutine vec_convert_test_i4u2(v, mold) 467 vector(integer(4)) :: v 468 vector(unsigned(2)) :: mold, r 469 r = vec_convert(v, mold) 470 471! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 472! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <8 x i16> 473! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 474end subroutine vec_convert_test_i4u2 475 476! CHECK-LABEL: vec_convert_test_i4u4 477subroutine vec_convert_test_i4u4(v, mold) 478 vector(integer(4)) :: v 479 vector(unsigned(4)) :: mold, r 480 r = vec_convert(v, mold) 481 482! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 483! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16 484end subroutine vec_convert_test_i4u4 485 486! CHECK-LABEL: vec_convert_test_i4u8 487subroutine vec_convert_test_i4u8(v, mold) 488 vector(integer(4)) :: v 489 vector(unsigned(8)) :: mold, r 490 r = vec_convert(v, mold) 491 492! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 493! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x i64> 494! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 495end subroutine vec_convert_test_i4u8 496 497! CHECK-LABEL: vec_convert_test_i4r4 498subroutine vec_convert_test_i4r4(v, mold) 499 vector(integer(4)) :: v 500 vector(real(4)) :: mold, r 501 r = vec_convert(v, mold) 502 503! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 504! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <4 x float> 505! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 506end subroutine vec_convert_test_i4r4 507 508! CHECK-LABEL: vec_convert_test_i4r8 509subroutine vec_convert_test_i4r8(v, mold) 510 vector(integer(4)) :: v 511 vector(real(8)) :: mold, r 512 r = vec_convert(v, mold) 513 514! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 515! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x double> 516! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 517end subroutine vec_convert_test_i4r8 518 519! CHECK-LABEL: vec_convert_test_i8i1 520subroutine vec_convert_test_i8i1(v, mold) 521 vector(integer(8)) :: v 522 vector(integer(1)) :: mold, r 523 r = vec_convert(v, mold) 524 525! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 526! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <16 x i8> 527! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 528end subroutine vec_convert_test_i8i1 529 530! CHECK-LABEL: vec_convert_test_i8i2 531subroutine vec_convert_test_i8i2(v, mold) 532 vector(integer(8)) :: v 533 vector(integer(2)) :: mold, r 534 r = vec_convert(v, mold) 535 536! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 537! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <8 x i16> 538! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 539end subroutine vec_convert_test_i8i2 540 541! CHECK-LABEL: vec_convert_test_i8i4 542subroutine vec_convert_test_i8i4(v, mold) 543 vector(integer(8)) :: v 544 vector(integer(4)) :: mold, r 545 r = vec_convert(v, mold) 546 547! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 548! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x i32> 549! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 550end subroutine vec_convert_test_i8i4 551 552! CHECK-LABEL: vec_convert_test_i8i8 553subroutine vec_convert_test_i8i8(v, mold) 554 vector(integer(8)) :: v 555 vector(integer(8)) :: mold, r 556 r = vec_convert(v, mold) 557 558! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 559! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16 560end subroutine vec_convert_test_i8i8 561 562! CHECK-LABEL: vec_convert_test_i8u1 563subroutine vec_convert_test_i8u1(v, mold) 564 vector(integer(8)) :: v 565 vector(unsigned(1)) :: mold, r 566 r = vec_convert(v, mold) 567 568! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 569! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <16 x i8> 570! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 571end subroutine vec_convert_test_i8u1 572 573! CHECK-LABEL: vec_convert_test_i8u2 574subroutine vec_convert_test_i8u2(v, mold) 575 vector(integer(8)) :: v 576 vector(unsigned(2)) :: mold, r 577 r = vec_convert(v, mold) 578 579! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 580! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <8 x i16> 581! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 582end subroutine vec_convert_test_i8u2 583 584! CHECK-LABEL: vec_convert_test_i8u4 585subroutine vec_convert_test_i8u4(v, mold) 586 vector(integer(8)) :: v 587 vector(unsigned(4)) :: mold, r 588 r = vec_convert(v, mold) 589 590! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 591! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x i32> 592! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 593end subroutine vec_convert_test_i8u4 594 595! CHECK-LABEL: vec_convert_test_i8u8 596subroutine vec_convert_test_i8u8(v, mold) 597 vector(integer(8)) :: v 598 vector(unsigned(8)) :: mold, r 599 r = vec_convert(v, mold) 600 601! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 602! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16 603end subroutine vec_convert_test_i8u8 604 605! CHECK-LABEL: vec_convert_test_i8r4 606subroutine vec_convert_test_i8r4(v, mold) 607 vector(integer(8)) :: v 608 vector(real(4)) :: mold, r 609 r = vec_convert(v, mold) 610 611! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 612! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x float> 613! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 614end subroutine vec_convert_test_i8r4 615 616! CHECK-LABEL: vec_convert_test_i8r8 617subroutine vec_convert_test_i8r8(v, mold) 618 vector(integer(8)) :: v 619 vector(real(8)) :: mold, r 620 r = vec_convert(v, mold) 621 622! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 623! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <2 x double> 624! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 625end subroutine vec_convert_test_i8r8 626 627! CHECK-LABEL: vec_convert_test_u1i1 628subroutine vec_convert_test_u1i1(v, mold) 629 vector(unsigned(1)) :: v 630 vector(integer(1)) :: mold, r 631 r = vec_convert(v, mold) 632 633! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 634! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16 635end subroutine vec_convert_test_u1i1 636 637! CHECK-LABEL: vec_convert_test_u1i2 638subroutine vec_convert_test_u1i2(v, mold) 639 vector(unsigned(1)) :: v 640 vector(integer(2)) :: mold, r 641 r = vec_convert(v, mold) 642 643! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 644! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <8 x i16> 645! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 646end subroutine vec_convert_test_u1i2 647 648! CHECK-LABEL: vec_convert_test_u1i4 649subroutine vec_convert_test_u1i4(v, mold) 650 vector(unsigned(1)) :: v 651 vector(integer(4)) :: mold, r 652 r = vec_convert(v, mold) 653 654! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 655! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x i32> 656! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 657end subroutine vec_convert_test_u1i4 658 659! CHECK-LABEL: vec_convert_test_u1i8 660subroutine vec_convert_test_u1i8(v, mold) 661 vector(unsigned(1)) :: v 662 vector(integer(8)) :: mold, r 663 r = vec_convert(v, mold) 664 665! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 666! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x i64> 667! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 668end subroutine vec_convert_test_u1i8 669 670! CHECK-LABEL: vec_convert_test_u1u1 671subroutine vec_convert_test_u1u1(v, mold) 672 vector(unsigned(1)) :: v 673 vector(unsigned(1)) :: mold, r 674 r = vec_convert(v, mold) 675 676! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 677! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16 678end subroutine vec_convert_test_u1u1 679 680! CHECK-LABEL: vec_convert_test_u1u2 681subroutine vec_convert_test_u1u2(v, mold) 682 vector(unsigned(1)) :: v 683 vector(unsigned(2)) :: mold, r 684 r = vec_convert(v, mold) 685 686! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 687! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <8 x i16> 688! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 689end subroutine vec_convert_test_u1u2 690 691! CHECK-LABEL: vec_convert_test_u1u4 692subroutine vec_convert_test_u1u4(v, mold) 693 vector(unsigned(1)) :: v 694 vector(unsigned(4)) :: mold, r 695 r = vec_convert(v, mold) 696 697! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 698! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x i32> 699! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 700end subroutine vec_convert_test_u1u4 701 702! CHECK-LABEL: vec_convert_test_u1u8 703subroutine vec_convert_test_u1u8(v, mold) 704 vector(unsigned(1)) :: v 705 vector(unsigned(8)) :: mold, r 706 r = vec_convert(v, mold) 707 708! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 709! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x i64> 710! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 711end subroutine vec_convert_test_u1u8 712 713! CHECK-LABEL: vec_convert_test_u1r4 714subroutine vec_convert_test_u1r4(v, mold) 715 vector(unsigned(1)) :: v 716 vector(real(4)) :: mold, r 717 r = vec_convert(v, mold) 718 719! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 720! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x float> 721! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 722end subroutine vec_convert_test_u1r4 723 724! CHECK-LABEL: vec_convert_test_u1r8 725subroutine vec_convert_test_u1r8(v, mold) 726 vector(unsigned(1)) :: v 727 vector(real(8)) :: mold, r 728 r = vec_convert(v, mold) 729 730! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16 731! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x double> 732! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 733end subroutine vec_convert_test_u1r8 734 735! CHECK-LABEL: vec_convert_test_u2i1 736subroutine vec_convert_test_u2i1(v, mold) 737 vector(unsigned(2)) :: v 738 vector(integer(1)) :: mold, r 739 r = vec_convert(v, mold) 740 741! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 742! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <16 x i8> 743! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 744end subroutine vec_convert_test_u2i1 745 746! CHECK-LABEL: vec_convert_test_u2i2 747subroutine vec_convert_test_u2i2(v, mold) 748 vector(unsigned(2)) :: v 749 vector(integer(2)) :: mold, r 750 r = vec_convert(v, mold) 751 752! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 753! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16 754end subroutine vec_convert_test_u2i2 755 756! CHECK-LABEL: vec_convert_test_u2i4 757subroutine vec_convert_test_u2i4(v, mold) 758 vector(unsigned(2)) :: v 759 vector(integer(4)) :: mold, r 760 r = vec_convert(v, mold) 761 762! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 763! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x i32> 764! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 765end subroutine vec_convert_test_u2i4 766 767! CHECK-LABEL: vec_convert_test_u2i8 768subroutine vec_convert_test_u2i8(v, mold) 769 vector(unsigned(2)) :: v 770 vector(integer(8)) :: mold, r 771 r = vec_convert(v, mold) 772 773! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 774! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x i64> 775! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 776end subroutine vec_convert_test_u2i8 777 778! CHECK-LABEL: vec_convert_test_u2u1 779subroutine vec_convert_test_u2u1(v, mold) 780 vector(unsigned(2)) :: v 781 vector(unsigned(1)) :: mold, r 782 r = vec_convert(v, mold) 783 784! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 785! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <16 x i8> 786! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 787end subroutine vec_convert_test_u2u1 788 789! CHECK-LABEL: vec_convert_test_u2u2 790subroutine vec_convert_test_u2u2(v, mold) 791 vector(unsigned(2)) :: v 792 vector(unsigned(2)) :: mold, r 793 r = vec_convert(v, mold) 794 795! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 796! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16 797end subroutine vec_convert_test_u2u2 798 799! CHECK-LABEL: vec_convert_test_u2u4 800subroutine vec_convert_test_u2u4(v, mold) 801 vector(unsigned(2)) :: v 802 vector(unsigned(4)) :: mold, r 803 r = vec_convert(v, mold) 804 805! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 806! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x i32> 807! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 808end subroutine vec_convert_test_u2u4 809 810! CHECK-LABEL: vec_convert_test_u2u8 811subroutine vec_convert_test_u2u8(v, mold) 812 vector(unsigned(2)) :: v 813 vector(unsigned(8)) :: mold, r 814 r = vec_convert(v, mold) 815 816! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 817! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x i64> 818! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 819end subroutine vec_convert_test_u2u8 820 821! CHECK-LABEL: vec_convert_test_u2r4 822subroutine vec_convert_test_u2r4(v, mold) 823 vector(unsigned(2)) :: v 824 vector(real(4)) :: mold, r 825 r = vec_convert(v, mold) 826 827! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 828! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x float> 829! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 830end subroutine vec_convert_test_u2r4 831 832! CHECK-LABEL: vec_convert_test_u2r8 833subroutine vec_convert_test_u2r8(v, mold) 834 vector(unsigned(2)) :: v 835 vector(real(8)) :: mold, r 836 r = vec_convert(v, mold) 837 838! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16 839! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x double> 840! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 841end subroutine vec_convert_test_u2r8 842 843! CHECK-LABEL: vec_convert_test_u4i1 844subroutine vec_convert_test_u4i1(v, mold) 845 vector(unsigned(4)) :: v 846 vector(integer(1)) :: mold, r 847 r = vec_convert(v, mold) 848 849! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 850! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <16 x i8> 851! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 852end subroutine vec_convert_test_u4i1 853 854! CHECK-LABEL: vec_convert_test_u4i2 855subroutine vec_convert_test_u4i2(v, mold) 856 vector(unsigned(4)) :: v 857 vector(integer(2)) :: mold, r 858 r = vec_convert(v, mold) 859 860! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 861! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <8 x i16> 862! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 863end subroutine vec_convert_test_u4i2 864 865! CHECK-LABEL: vec_convert_test_u4i4 866subroutine vec_convert_test_u4i4(v, mold) 867 vector(unsigned(4)) :: v 868 vector(integer(4)) :: mold, r 869 r = vec_convert(v, mold) 870 871! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 872! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16 873end subroutine vec_convert_test_u4i4 874 875! CHECK-LABEL: vec_convert_test_u4i8 876subroutine vec_convert_test_u4i8(v, mold) 877 vector(unsigned(4)) :: v 878 vector(integer(8)) :: mold, r 879 r = vec_convert(v, mold) 880 881! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 882! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x i64> 883! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 884end subroutine vec_convert_test_u4i8 885 886! CHECK-LABEL: vec_convert_test_u4u1 887subroutine vec_convert_test_u4u1(v, mold) 888 vector(unsigned(4)) :: v 889 vector(unsigned(1)) :: mold, r 890 r = vec_convert(v, mold) 891 892! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 893! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <16 x i8> 894! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 895end subroutine vec_convert_test_u4u1 896 897! CHECK-LABEL: vec_convert_test_u4u2 898subroutine vec_convert_test_u4u2(v, mold) 899 vector(unsigned(4)) :: v 900 vector(unsigned(2)) :: mold, r 901 r = vec_convert(v, mold) 902 903! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 904! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <8 x i16> 905! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 906end subroutine vec_convert_test_u4u2 907 908! CHECK-LABEL: vec_convert_test_u4u4 909subroutine vec_convert_test_u4u4(v, mold) 910 vector(unsigned(4)) :: v 911 vector(unsigned(4)) :: mold, r 912 r = vec_convert(v, mold) 913 914! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 915! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16 916end subroutine vec_convert_test_u4u4 917 918! CHECK-LABEL: vec_convert_test_u4u8 919subroutine vec_convert_test_u4u8(v, mold) 920 vector(unsigned(4)) :: v 921 vector(unsigned(8)) :: mold, r 922 r = vec_convert(v, mold) 923 924! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 925! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x i64> 926! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 927end subroutine vec_convert_test_u4u8 928 929! CHECK-LABEL: vec_convert_test_u4r4 930subroutine vec_convert_test_u4r4(v, mold) 931 vector(unsigned(4)) :: v 932 vector(real(4)) :: mold, r 933 r = vec_convert(v, mold) 934 935! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 936! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <4 x float> 937! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 938end subroutine vec_convert_test_u4r4 939 940! CHECK-LABEL: vec_convert_test_u4r8 941subroutine vec_convert_test_u4r8(v, mold) 942 vector(unsigned(4)) :: v 943 vector(real(8)) :: mold, r 944 r = vec_convert(v, mold) 945 946! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16 947! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x double> 948! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 949end subroutine vec_convert_test_u4r8 950 951! CHECK-LABEL: vec_convert_test_u8i1 952subroutine vec_convert_test_u8i1(v, mold) 953 vector(unsigned(8)) :: v 954 vector(integer(1)) :: mold, r 955 r = vec_convert(v, mold) 956 957! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 958! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <16 x i8> 959! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 960end subroutine vec_convert_test_u8i1 961 962! CHECK-LABEL: vec_convert_test_u8i2 963subroutine vec_convert_test_u8i2(v, mold) 964 vector(unsigned(8)) :: v 965 vector(integer(2)) :: mold, r 966 r = vec_convert(v, mold) 967 968! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 969! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <8 x i16> 970! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 971end subroutine vec_convert_test_u8i2 972 973! CHECK-LABEL: vec_convert_test_u8i4 974subroutine vec_convert_test_u8i4(v, mold) 975 vector(unsigned(8)) :: v 976 vector(integer(4)) :: mold, r 977 r = vec_convert(v, mold) 978 979! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 980! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x i32> 981! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 982end subroutine vec_convert_test_u8i4 983 984! CHECK-LABEL: vec_convert_test_u8i8 985subroutine vec_convert_test_u8i8(v, mold) 986 vector(unsigned(8)) :: v 987 vector(integer(8)) :: mold, r 988 r = vec_convert(v, mold) 989 990! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 991! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16 992end subroutine vec_convert_test_u8i8 993 994! CHECK-LABEL: vec_convert_test_u8u1 995subroutine vec_convert_test_u8u1(v, mold) 996 vector(unsigned(8)) :: v 997 vector(unsigned(1)) :: mold, r 998 r = vec_convert(v, mold) 999 1000! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 1001! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <16 x i8> 1002! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 1003end subroutine vec_convert_test_u8u1 1004 1005! CHECK-LABEL: vec_convert_test_u8u2 1006subroutine vec_convert_test_u8u2(v, mold) 1007 vector(unsigned(8)) :: v 1008 vector(unsigned(2)) :: mold, r 1009 r = vec_convert(v, mold) 1010 1011! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 1012! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <8 x i16> 1013! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 1014end subroutine vec_convert_test_u8u2 1015 1016! CHECK-LABEL: vec_convert_test_u8u4 1017subroutine vec_convert_test_u8u4(v, mold) 1018 vector(unsigned(8)) :: v 1019 vector(unsigned(4)) :: mold, r 1020 r = vec_convert(v, mold) 1021 1022! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 1023! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x i32> 1024! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 1025end subroutine vec_convert_test_u8u4 1026 1027! CHECK-LABEL: vec_convert_test_u8u8 1028subroutine vec_convert_test_u8u8(v, mold) 1029 vector(unsigned(8)) :: v 1030 vector(unsigned(8)) :: mold, r 1031 r = vec_convert(v, mold) 1032 1033! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 1034! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16 1035end subroutine vec_convert_test_u8u8 1036 1037! CHECK-LABEL: vec_convert_test_u8r4 1038subroutine vec_convert_test_u8r4(v, mold) 1039 vector(unsigned(8)) :: v 1040 vector(real(4)) :: mold, r 1041 r = vec_convert(v, mold) 1042 1043! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 1044! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x float> 1045! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 1046end subroutine vec_convert_test_u8r4 1047 1048! CHECK-LABEL: vec_convert_test_u8r8 1049subroutine vec_convert_test_u8r8(v, mold) 1050 vector(unsigned(8)) :: v 1051 vector(real(8)) :: mold, r 1052 r = vec_convert(v, mold) 1053 1054! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16 1055! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <2 x double> 1056! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 1057end subroutine vec_convert_test_u8r8 1058 1059! CHECK-LABEL: vec_convert_test_r4i1 1060subroutine vec_convert_test_r4i1(v, mold) 1061 vector(real(4)) :: v 1062 vector(integer(1)) :: mold, r 1063 r = vec_convert(v, mold) 1064 1065! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16 1066! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <16 x i8> 1067! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 1068end subroutine vec_convert_test_r4i1 1069 1070! CHECK-LABEL: vec_convert_test_r4i2 1071subroutine vec_convert_test_r4i2(v, mold) 1072 vector(real(4)) :: v 1073 vector(integer(2)) :: mold, r 1074 r = vec_convert(v, mold) 1075 1076! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16 1077! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <8 x i16> 1078! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 1079end subroutine vec_convert_test_r4i2 1080 1081! CHECK-LABEL: vec_convert_test_r4i4 1082subroutine vec_convert_test_r4i4(v, mold) 1083 vector(real(4)) :: v 1084 vector(integer(4)) :: mold, r 1085 r = vec_convert(v, mold) 1086 1087! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16 1088! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <4 x i32> 1089! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 1090end subroutine vec_convert_test_r4i4 1091 1092! CHECK-LABEL: vec_convert_test_r4i8 1093subroutine vec_convert_test_r4i8(v, mold) 1094 vector(real(4)) :: v 1095 vector(integer(8)) :: mold, r 1096 r = vec_convert(v, mold) 1097 1098! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16 1099! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <2 x i64> 1100! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 1101end subroutine vec_convert_test_r4i8 1102 1103! CHECK-LABEL: vec_convert_test_r4u1 1104subroutine vec_convert_test_r4u1(v, mold) 1105 vector(real(4)) :: v 1106 vector(unsigned(1)) :: mold, r 1107 r = vec_convert(v, mold) 1108 1109! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16 1110! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <16 x i8> 1111! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 1112end subroutine vec_convert_test_r4u1 1113 1114! CHECK-LABEL: vec_convert_test_r4u2 1115subroutine vec_convert_test_r4u2(v, mold) 1116 vector(real(4)) :: v 1117 vector(unsigned(2)) :: mold, r 1118 r = vec_convert(v, mold) 1119 1120! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16 1121! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <8 x i16> 1122! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 1123end subroutine vec_convert_test_r4u2 1124 1125! CHECK-LABEL: vec_convert_test_r4u4 1126subroutine vec_convert_test_r4u4(v, mold) 1127 vector(real(4)) :: v 1128 vector(unsigned(4)) :: mold, r 1129 r = vec_convert(v, mold) 1130 1131! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16 1132! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <4 x i32> 1133! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 1134end subroutine vec_convert_test_r4u4 1135 1136! CHECK-LABEL: vec_convert_test_r4u8 1137subroutine vec_convert_test_r4u8(v, mold) 1138 vector(real(4)) :: v 1139 vector(unsigned(8)) :: mold, r 1140 r = vec_convert(v, mold) 1141 1142! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16 1143! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <2 x i64> 1144! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 1145end subroutine vec_convert_test_r4u8 1146 1147! CHECK-LABEL: vec_convert_test_r4r4 1148subroutine vec_convert_test_r4r4(v, mold) 1149 vector(real(4)) :: v 1150 vector(real(4)) :: mold, r 1151 r = vec_convert(v, mold) 1152 1153! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16 1154! LLVMIR: store <4 x float> %[[v]], ptr %{{.*}}, align 16 1155end subroutine vec_convert_test_r4r4 1156 1157! CHECK-LABEL: vec_convert_test_r4r8 1158subroutine vec_convert_test_r4r8(v, mold) 1159 vector(real(4)) :: v 1160 vector(real(8)) :: mold, r 1161 r = vec_convert(v, mold) 1162 1163! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16 1164! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <2 x double> 1165! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 1166end subroutine vec_convert_test_r4r8 1167 1168! CHECK-LABEL: vec_convert_test_r8i1 1169subroutine vec_convert_test_r8i1(v, mold) 1170 vector(real(8)) :: v 1171 vector(integer(1)) :: mold, r 1172 r = vec_convert(v, mold) 1173 1174! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16 1175! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <16 x i8> 1176! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 1177end subroutine vec_convert_test_r8i1 1178 1179! CHECK-LABEL: vec_convert_test_r8i2 1180subroutine vec_convert_test_r8i2(v, mold) 1181 vector(real(8)) :: v 1182 vector(integer(2)) :: mold, r 1183 r = vec_convert(v, mold) 1184 1185! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16 1186! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <8 x i16> 1187! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 1188end subroutine vec_convert_test_r8i2 1189 1190! CHECK-LABEL: vec_convert_test_r8i4 1191subroutine vec_convert_test_r8i4(v, mold) 1192 vector(real(8)) :: v 1193 vector(integer(4)) :: mold, r 1194 r = vec_convert(v, mold) 1195 1196! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16 1197! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <4 x i32> 1198! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 1199end subroutine vec_convert_test_r8i4 1200 1201! CHECK-LABEL: vec_convert_test_r8i8 1202subroutine vec_convert_test_r8i8(v, mold) 1203 vector(real(8)) :: v 1204 vector(integer(8)) :: mold, r 1205 r = vec_convert(v, mold) 1206 1207! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16 1208! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <2 x i64> 1209! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 1210end subroutine vec_convert_test_r8i8 1211 1212! CHECK-LABEL: vec_convert_test_r8u1 1213subroutine vec_convert_test_r8u1(v, mold) 1214 vector(real(8)) :: v 1215 vector(unsigned(1)) :: mold, r 1216 r = vec_convert(v, mold) 1217 1218! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16 1219! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <16 x i8> 1220! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16 1221end subroutine vec_convert_test_r8u1 1222 1223! CHECK-LABEL: vec_convert_test_r8u2 1224subroutine vec_convert_test_r8u2(v, mold) 1225 vector(real(8)) :: v 1226 vector(unsigned(2)) :: mold, r 1227 r = vec_convert(v, mold) 1228 1229! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16 1230! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <8 x i16> 1231! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 1232end subroutine vec_convert_test_r8u2 1233 1234! CHECK-LABEL: vec_convert_test_r8u4 1235subroutine vec_convert_test_r8u4(v, mold) 1236 vector(real(8)) :: v 1237 vector(unsigned(4)) :: mold, r 1238 r = vec_convert(v, mold) 1239 1240! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16 1241! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <4 x i32> 1242! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16 1243end subroutine vec_convert_test_r8u4 1244 1245! CHECK-LABEL: vec_convert_test_r8u8 1246subroutine vec_convert_test_r8u8(v, mold) 1247 vector(real(8)) :: v 1248 vector(unsigned(8)) :: mold, r 1249 r = vec_convert(v, mold) 1250 1251! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16 1252! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <2 x i64> 1253! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16 1254end subroutine vec_convert_test_r8u8 1255 1256! CHECK-LABEL: vec_convert_test_r8r4 1257subroutine vec_convert_test_r8r4(v, mold) 1258 vector(real(8)) :: v 1259 vector(real(4)) :: mold, r 1260 r = vec_convert(v, mold) 1261 1262! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16 1263! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <4 x float> 1264! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16 1265end subroutine vec_convert_test_r8r4 1266 1267! CHECK-LABEL: vec_convert_test_r8r8 1268subroutine vec_convert_test_r8r8(v, mold) 1269 vector(real(8)) :: v 1270 vector(real(8)) :: mold, r 1271 r = vec_convert(v, mold) 1272 1273! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16 1274! LLVMIR: store <2 x double> %[[v]], ptr %{{.*}}, align 16 1275end subroutine vec_convert_test_r8r8 1276 1277! CHECK-LABEL: vec_convert_test_i1i1_array 1278subroutine vec_convert_test_i1i1_array(v, mold) 1279 vector(integer(1)) :: v 1280 vector(integer(1)) :: mold(4, 8), r 1281 r = vec_convert(v, mold) 1282 1283! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 1284! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16 1285end subroutine vec_convert_test_i1i1_array 1286 1287! CHECK-LABEL: vec_convert_test_i4r8_array 1288subroutine vec_convert_test_i4r8_array(v, mold) 1289 vector(integer(4)) :: v 1290 vector(real(8)) :: mold(2, 4, 8), r 1291 r = vec_convert(v, mold) 1292 1293! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 1294! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x double> 1295! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16 1296end subroutine vec_convert_test_i4r8_array 1297 1298! CHECK-LABEL: vec_convert_test_u8i2_array 1299subroutine vec_convert_test_u8i2_array(v, mold) 1300 vector(unsigned(8)) :: v 1301 vector(integer(2)) :: mold(10), r 1302 r = vec_convert(v, mold) 1303 1304! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 1305! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <8 x i16> 1306! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16 1307end subroutine vec_convert_test_u8i2_array 1308 1309!--------- 1310! vec_cvf 1311!--------- 1312! CHECK-LABEL: vec_cvf_test_r4r8 1313subroutine vec_cvf_test_r4r8(arg1) 1314 vector(real(8)), intent(in) :: arg1 1315 vector(real(4)) :: r 1316 r = vec_cvf(arg1) 1317 1318! LLVMIR: %[[arg:.*]] = load <2 x double>, ptr %{{.*}}, align 16 1319! LLVMIR: %[[call:.*]] = call contract <4 x float> @llvm.ppc.vsx.xvcvdpsp(<2 x double> %[[arg]]) 1320! LLVMIR-LE: %[[b:.*]] = bitcast <4 x float> %[[call]] to <16 x i8> 1321! LLVMIR-LE: %[[sh:.*]] = shufflevector <16 x i8> %[[b]], <16 x i8> %[[b]], <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11> 1322! LLVMIR-LE: %[[r:.*]] = bitcast <16 x i8> %[[sh]] to <4 x float> 1323! LLVMIR-LE: store <4 x float> %[[r]], ptr %{{.*}}, align 16 1324! LLVMIR-BE: store <4 x float> %[[call]], ptr %{{.*}}, align 16 1325end subroutine vec_cvf_test_r4r8 1326 1327! CHECK-LABEL: vec_cvf_test_r8r4 1328subroutine vec_cvf_test_r8r4(arg1) 1329 vector(real(4)), intent(in) :: arg1 1330 vector(real(8)) :: r 1331 r = vec_cvf(arg1) 1332 1333! LLVMIR: %[[arg:.*]] = load <4 x float>, ptr %{{.*}}, align 16 1334! LLVMIR-LE: %[[bfi:.*]] = bitcast <4 x float> %[[arg]] to <16 x i8> 1335! LLVMIR-LE: %[[sh:.*]] = shufflevector <16 x i8> %[[bfi]], <16 x i8> %[[bfi]], <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11> 1336! LLVMIR-LE: %[[bif:.*]] = bitcast <16 x i8> %[[sh]] to <4 x float> 1337! LLVMIR-LE: %[[r:.*]] = call contract <2 x double> @llvm.ppc.vsx.xvcvspdp(<4 x float> %[[bif]]) 1338! LLVMIR-LE: store <2 x double> %[[r]], ptr %{{.*}}, align 16 1339! LLVMIR-BE: %[[r:.*]] = call contract <2 x double> @llvm.ppc.vsx.xvcvspdp(<4 x float> %[[arg]]) 1340! LLVMIR-BE: store <2 x double> %[[call]], ptr %{{.*}}, align 16 1341end subroutine vec_cvf_test_r8r4 1342 1343