brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.2 KiB · 55614c7 Raw
636 lines · plain
1! RUN: %flang_fc1 -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR","LLVMIR-LE" %s2! RUN: %flang_fc1 -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR","LLVMIR-BE" %s3! REQUIRES: target=powerpc{{.*}}4 5!----------------6! vec_splat7!----------------8 9! CHECK-LABEL: vec_splat_testi8i810subroutine vec_splat_testi8i8(x)11  vector(integer(1)) :: x, y12  y = vec_splat(x, 0_1)13 14! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 1615! LLVMIR-LE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 016! LLVMIR-BE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 1517! LLVMIR: %[[ins:.*]] = insertelement <16 x i8> poison, i8 %[[ele]], i32 018! LLVMIR: %[[y:.*]] = shufflevector <16 x i8> %[[ins]], <16 x i8> poison, <16 x i32> zeroinitializer19! LLVMIR: store <16 x i8> %[[y]], ptr %{{[0-9]}}, align 1620end subroutine vec_splat_testi8i821 22! CHECK-LABEL: vec_splat_testi8i1623subroutine vec_splat_testi8i16(x)24  vector(integer(1)) :: x, y25  y = vec_splat(x, 0_2)26 27! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 1628! LLVMIR-LE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 029! LLVMIR-BE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 1530! LLVMIR: %[[ins:.*]] = insertelement <16 x i8> poison, i8 %[[ele]], i32 031! LLVMIR: %[[y:.*]] = shufflevector <16 x i8> %[[ins]], <16 x i8> poison, <16 x i32> zeroinitializer32! LLVMIR: store <16 x i8> %[[y]], ptr %{{[0-9]}}, align 1633end subroutine vec_splat_testi8i1634 35! CHECK-LABEL: vec_splat_testi8i3236subroutine vec_splat_testi8i32(x)37  vector(integer(1)) :: x, y38  y = vec_splat(x, 0_4)39 40! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 1641! LLVMIR-LE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 042! LLVMIR-BE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 1543! LLVMIR: %[[ins:.*]] = insertelement <16 x i8> poison, i8 %[[ele]], i32 044! LLVMIR: %[[y:.*]] = shufflevector <16 x i8> %[[ins]], <16 x i8> poison, <16 x i32> zeroinitializer45! LLVMIR: store <16 x i8> %[[y]], ptr %{{[0-9]}}, align 1646end subroutine vec_splat_testi8i3247 48! CHECK-LABEL: vec_splat_testi8i6449subroutine vec_splat_testi8i64(x)50  vector(integer(1)) :: x, y51  y = vec_splat(x, 0_8)52 53! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 1654! LLVMIR-LE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 055! LLVMIR-BE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 1556! LLVMIR: %[[ins:.*]] = insertelement <16 x i8> poison, i8 %[[ele]], i32 057! LLVMIR: %[[y:.*]] = shufflevector <16 x i8> %[[ins]], <16 x i8> poison, <16 x i32> zeroinitializer58! LLVMIR: store <16 x i8> %[[y]], ptr %{{[0-9]}}, align 1659end subroutine vec_splat_testi8i6460 61! CHECK-LABEL: vec_splat_testi16i862subroutine vec_splat_testi16i8(x)63  vector(integer(2)) :: x, y64  y = vec_splat(x, 0_1)65 66! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 1667! LLVMIR-LE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 068! LLVMIR-BE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 769! LLVMIR: %[[ins:.*]] = insertelement <8 x i16> poison, i16 %[[ele]], i32 070! LLVMIR: %[[y:.*]] = shufflevector <8 x i16> %[[ins]], <8 x i16> poison, <8 x i32> zeroinitializer71! LLVMIR: store <8 x i16> %[[y]], ptr %{{[0-9]}}, align 1672end subroutine vec_splat_testi16i873 74! CHECK-LABEL: vec_splat_testi16i1675subroutine vec_splat_testi16i16(x)76  vector(integer(2)) :: x, y77  y = vec_splat(x, 0_2)78 79! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 1680! LLVMIR-LE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 081! LLVMIR-BE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 782! LLVMIR: %[[ins:.*]] = insertelement <8 x i16> poison, i16 %[[ele]], i32 083! LLVMIR: %[[y:.*]] = shufflevector <8 x i16> %[[ins]], <8 x i16> poison, <8 x i32> zeroinitializer84! LLVMIR: store <8 x i16> %[[y]], ptr %{{[0-9]}}, align 1685end subroutine vec_splat_testi16i1686 87! CHECK-LABEL: vec_splat_testi16i3288subroutine vec_splat_testi16i32(x)89  vector(integer(2)) :: x, y90  y = vec_splat(x, 0_4)91 92! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 1693! LLVMIR-LE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 094! LLVMIR-BE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 795! LLVMIR: %[[ins:.*]] = insertelement <8 x i16> poison, i16 %[[ele]], i32 096! LLVMIR: %[[y:.*]] = shufflevector <8 x i16> %[[ins]], <8 x i16> poison, <8 x i32> zeroinitializer97! LLVMIR: store <8 x i16> %[[y]], ptr %{{[0-9]}}, align 1698end subroutine vec_splat_testi16i3299 100! CHECK-LABEL: vec_splat_testi16i64101subroutine vec_splat_testi16i64(x)102  vector(integer(2)) :: x, y103  y = vec_splat(x, 0_8)104 105! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16106! LLVMIR-LE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 0107! LLVMIR-BE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 7108! LLVMIR: %[[ins:.*]] = insertelement <8 x i16> poison, i16 %[[ele]], i32 0109! LLVMIR: %[[y:.*]] = shufflevector <8 x i16> %[[ins]], <8 x i16> poison, <8 x i32> zeroinitializer110! LLVMIR: store <8 x i16> %[[y]], ptr %{{[0-9]}}, align 16111end subroutine vec_splat_testi16i64112 113! CHECK-LABEL: vec_splat_testi32i8114subroutine vec_splat_testi32i8(x)115  vector(integer(4)) :: x, y116  y = vec_splat(x, 0_1)117 118! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16119! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 0120! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 3121! LLVMIR: %[[ins:.*]] = insertelement <4 x i32> poison, i32 %[[ele]], i32 0122! LLVMIR: %[[y:.*]] = shufflevector <4 x i32> %[[ins]], <4 x i32> poison, <4 x i32> zeroinitializer123! LLVMIR: store <4 x i32> %[[y]], ptr %{{[0-9]}}, align 16124end subroutine vec_splat_testi32i8125 126! CHECK-LABEL: vec_splat_testi32i16127subroutine vec_splat_testi32i16(x)128  vector(integer(4)) :: x, y129  y = vec_splat(x, 0_2)130 131! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16132! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 0133! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 3134! LLVMIR: %[[ins:.*]] = insertelement <4 x i32> poison, i32 %[[ele]], i32 0135! LLVMIR: %[[y:.*]] = shufflevector <4 x i32> %[[ins]], <4 x i32> poison, <4 x i32> zeroinitializer136! LLVMIR: store <4 x i32> %[[y]], ptr %{{[0-9]}}, align 16137end subroutine vec_splat_testi32i16138 139! CHECK-LABEL: vec_splat_testi32i32140subroutine vec_splat_testi32i32(x)141  vector(integer(4)) :: x, y142  y = vec_splat(x, 0_4)143 144! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16145! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 0146! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 3147! LLVMIR: %[[ins:.*]] = insertelement <4 x i32> poison, i32 %[[ele]], i32 0148! LLVMIR: %[[y:.*]] = shufflevector <4 x i32> %[[ins]], <4 x i32> poison, <4 x i32> zeroinitializer149! LLVMIR: store <4 x i32> %[[y]], ptr %{{[0-9]}}, align 16150end subroutine vec_splat_testi32i32151 152! CHECK-LABEL: vec_splat_testi32i64153subroutine vec_splat_testi32i64(x)154  vector(integer(4)) :: x, y155  y = vec_splat(x, 0_8)156 157! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16158! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 0159! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 3160! LLVMIR: %[[ins:.*]] = insertelement <4 x i32> poison, i32 %[[ele]], i32 0161! LLVMIR: %[[y:.*]] = shufflevector <4 x i32> %[[ins]], <4 x i32> poison, <4 x i32> zeroinitializer162! LLVMIR: store <4 x i32> %[[y]], ptr %{{[0-9]}}, align 16163end subroutine vec_splat_testi32i64164 165! CHECK-LABEL: vec_splat_testi64i8166subroutine vec_splat_testi64i8(x)167  vector(integer(8)) :: x, y168  y = vec_splat(x, 0_1)169 170! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16171! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 0172! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 1173! LLVMIR: %[[ins:.*]] = insertelement <2 x i64> poison, i64 %[[ele]], i32 0174! LLVMIR: %[[y:.*]] = shufflevector <2 x i64> %[[ins]], <2 x i64> poison, <2 x i32> zeroinitializer175! LLVMIR: store <2 x i64> %[[y]], ptr %{{[0-9]}}, align 16176end subroutine vec_splat_testi64i8177 178! CHECK-LABEL: vec_splat_testi64i16179subroutine vec_splat_testi64i16(x)180  vector(integer(8)) :: x, y181  y = vec_splat(x, 0_2)182 183! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16184! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 0185! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 1186! LLVMIR: %[[ins:.*]] = insertelement <2 x i64> poison, i64 %[[ele]], i32 0187! LLVMIR: %[[y:.*]] = shufflevector <2 x i64> %[[ins]], <2 x i64> poison, <2 x i32> zeroinitializer188! LLVMIR: store <2 x i64> %[[y]], ptr %{{[0-9]}}, align 16189end subroutine vec_splat_testi64i16190 191! CHECK-LABEL: vec_splat_testi64i32192subroutine vec_splat_testi64i32(x)193  vector(integer(8)) :: x, y194  y = vec_splat(x, 0_4)195 196! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16197! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 0198! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 1199! LLVMIR: %[[ins:.*]] = insertelement <2 x i64> poison, i64 %[[ele]], i32 0200! LLVMIR: %[[y:.*]] = shufflevector <2 x i64> %[[ins]], <2 x i64> poison, <2 x i32> zeroinitializer201! LLVMIR: store <2 x i64> %[[y]], ptr %{{[0-9]}}, align 16202end subroutine vec_splat_testi64i32203 204! CHECK-LABEL: vec_splat_testi64i64205subroutine vec_splat_testi64i64(x)206  vector(integer(8)) :: x, y207  y = vec_splat(x, 0_8)208 209! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16210! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 0211! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 1212! LLVMIR: %[[ins:.*]] = insertelement <2 x i64> poison, i64 %[[ele]], i32 0213! LLVMIR: %[[y:.*]] = shufflevector <2 x i64> %[[ins]], <2 x i64> poison, <2 x i32> zeroinitializer214! LLVMIR: store <2 x i64> %[[y]], ptr %{{[0-9]}}, align 16215end subroutine vec_splat_testi64i64216 217! CHECK-LABEL: vec_splat_testf32i8218subroutine vec_splat_testf32i8(x)219  vector(real(4)) :: x, y220  y = vec_splat(x, 0_1)221 222! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 16223! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x float> %[[x]], i64 0224! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x float> %[[x]], i64 3225! LLVMIR: %[[ins:.*]] = insertelement <4 x float> poison, float %[[ele]], i32 0226! LLVMIR: %[[y:.*]] = shufflevector <4 x float> %[[ins]], <4 x float> poison, <4 x i32> zeroinitializer227! LLVMIR: store <4 x float> %[[y]], ptr %{{[0-9]}}, align 16228end subroutine vec_splat_testf32i8229 230! CHECK-LABEL: vec_splat_testf32i16231subroutine vec_splat_testf32i16(x)232  vector(real(4)) :: x, y233  y = vec_splat(x, 0_2)234 235! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 16236! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x float> %[[x]], i64 0237! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x float> %[[x]], i64 3238! LLVMIR: %[[ins:.*]] = insertelement <4 x float> poison, float %[[ele]], i32 0239! LLVMIR: %[[y:.*]] = shufflevector <4 x float> %[[ins]], <4 x float> poison, <4 x i32> zeroinitializer240! LLVMIR: store <4 x float> %[[y]], ptr %{{[0-9]}}, align 16241end subroutine vec_splat_testf32i16242 243! CHECK-LABEL: vec_splat_testf32i32244subroutine vec_splat_testf32i32(x)245  vector(real(4)) :: x, y246  y = vec_splat(x, 0_4)247 248! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 16249! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x float> %[[x]], i64 0250! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x float> %[[x]], i64 3251! LLVMIR: %[[ins:.*]] = insertelement <4 x float> poison, float %[[ele]], i32 0252! LLVMIR: %[[y:.*]] = shufflevector <4 x float> %[[ins]], <4 x float> poison, <4 x i32> zeroinitializer253! LLVMIR: store <4 x float> %[[y]], ptr %{{[0-9]}}, align 16254end subroutine vec_splat_testf32i32255 256! CHECK-LABEL: vec_splat_testf32i64257subroutine vec_splat_testf32i64(x)258  vector(real(4)) :: x, y259  y = vec_splat(x, 0_8)260 261! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 16262! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x float> %[[x]], i64 0263! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x float> %[[x]], i64 3264! LLVMIR: %[[ins:.*]] = insertelement <4 x float> poison, float %[[ele]], i32 0265! LLVMIR: %[[y:.*]] = shufflevector <4 x float> %[[ins]], <4 x float> poison, <4 x i32> zeroinitializer266! LLVMIR: store <4 x float> %[[y]], ptr %{{[0-9]}}, align 16267end subroutine vec_splat_testf32i64268 269! CHECK-LABEL: vec_splat_testf64i8270subroutine vec_splat_testf64i8(x)271  vector(real(8)) :: x, y272  y = vec_splat(x, 0_1)273 274! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 16275! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x double> %[[x]], i64 0276! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x double> %[[x]], i64 1277! LLVMIR: %[[ins:.*]] = insertelement <2 x double> poison, double %[[ele]], i32 0278! LLVMIR: %[[y:.*]] = shufflevector <2 x double> %[[ins]], <2 x double> poison, <2 x i32> zeroinitializer279! LLVMIR: store <2 x double> %[[y]], ptr %{{[0-9]}}, align 16280end subroutine vec_splat_testf64i8281 282! CHECK-LABEL: vec_splat_testf64i16283subroutine vec_splat_testf64i16(x)284  vector(real(8)) :: x, y285  y = vec_splat(x, 0_2)286 287! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 16288! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x double> %[[x]], i64 0289! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x double> %[[x]], i64 1290! LLVMIR: %[[ins:.*]] = insertelement <2 x double> poison, double %[[ele]], i32 0291! LLVMIR: %[[y:.*]] = shufflevector <2 x double> %[[ins]], <2 x double> poison, <2 x i32> zeroinitializer292! LLVMIR: store <2 x double> %[[y]], ptr %{{[0-9]}}, align 16293end subroutine vec_splat_testf64i16294 295! CHECK-LABEL: vec_splat_testf64i32296subroutine vec_splat_testf64i32(x)297  vector(real(8)) :: x, y298  y = vec_splat(x, 0_4)299 300! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 16301! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x double> %[[x]], i64 0302! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x double> %[[x]], i64 1303! LLVMIR: %[[ins:.*]] = insertelement <2 x double> poison, double %[[ele]], i32 0304! LLVMIR: %[[y:.*]] = shufflevector <2 x double> %[[ins]], <2 x double> poison, <2 x i32> zeroinitializer305! LLVMIR: store <2 x double> %[[y]], ptr %{{[0-9]}}, align 16306end subroutine vec_splat_testf64i32307 308! CHECK-LABEL: vec_splat_testf64i64309subroutine vec_splat_testf64i64(x)310  vector(real(8)) :: x, y311  y = vec_splat(x, 0_8)312 313! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 16314! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x double> %[[x]], i64 0315! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x double> %[[x]], i64 1316! LLVMIR: %[[ins:.*]] = insertelement <2 x double> poison, double %[[ele]], i32 0317! LLVMIR: %[[y:.*]] = shufflevector <2 x double> %[[ins]], <2 x double> poison, <2 x i32> zeroinitializer318! LLVMIR: store <2 x double> %[[y]], ptr %{{[0-9]}}, align 16319end subroutine vec_splat_testf64i64320 321! CHECK-LABEL: vec_splat_testu8i8322subroutine vec_splat_testu8i8(x)323  vector(unsigned(1)) :: x, y324  y = vec_splat(x, 0_1)325 326! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16327! LLVMIR-LE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 0328! LLVMIR-BE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 15329! LLVMIR: %[[ins:.*]] = insertelement <16 x i8> poison, i8 %[[ele]], i32 0330! LLVMIR: %[[y:.*]] = shufflevector <16 x i8> %[[ins]], <16 x i8> poison, <16 x i32> zeroinitializer331! LLVMIR: store <16 x i8> %[[y]], ptr %{{[0-9]}}, align 16332end subroutine vec_splat_testu8i8333 334! CHECK-LABEL: vec_splat_testu8i16335subroutine vec_splat_testu8i16(x)336  vector(unsigned(1)) :: x, y337  y = vec_splat(x, 0_2)338 339! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16340! LLVMIR-LE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 0341! LLVMIR-BE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 15342! LLVMIR: %[[ins:.*]] = insertelement <16 x i8> poison, i8 %[[ele]], i32 0343! LLVMIR: %[[y:.*]] = shufflevector <16 x i8> %[[ins]], <16 x i8> poison, <16 x i32> zeroinitializer344! LLVMIR: store <16 x i8> %[[y]], ptr %{{[0-9]}}, align 16345end subroutine vec_splat_testu8i16346 347! CHECK-LABEL: vec_splat_testu8i32348subroutine vec_splat_testu8i32(x)349  vector(unsigned(1)) :: x, y350  y = vec_splat(x, 0_4)351 352! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16353! LLVMIR-LE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 0354! LLVMIR-BE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 15355! LLVMIR: %[[ins:.*]] = insertelement <16 x i8> poison, i8 %[[ele]], i32 0356! LLVMIR: %[[y:.*]] = shufflevector <16 x i8> %[[ins]], <16 x i8> poison, <16 x i32> zeroinitializer357! LLVMIR: store <16 x i8> %[[y]], ptr %{{[0-9]}}, align 16358end subroutine vec_splat_testu8i32359 360! CHECK-LABEL: vec_splat_testu8i64361subroutine vec_splat_testu8i64(x)362  vector(unsigned(1)) :: x, y363  y = vec_splat(x, 0_8)364 365! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16366! LLVMIR-LE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 0367! LLVMIR-BE: %[[ele:.*]] = extractelement <16 x i8> %[[x]], i64 15368! LLVMIR: %[[ins:.*]] = insertelement <16 x i8> poison, i8 %[[ele]], i32 0369! LLVMIR: %[[y:.*]] = shufflevector <16 x i8> %[[ins]], <16 x i8> poison, <16 x i32> zeroinitializer370! LLVMIR: store <16 x i8> %[[y]], ptr %{{[0-9]}}, align 16371end subroutine vec_splat_testu8i64372 373! CHECK-LABEL: vec_splat_testu16i8374subroutine vec_splat_testu16i8(x)375  vector(unsigned(2)) :: x, y376  y = vec_splat(x, 0_1)377 378! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16379! LLVMIR-LE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 0380! LLVMIR-BE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 7381! LLVMIR: %[[ins:.*]] = insertelement <8 x i16> poison, i16 %[[ele]], i32 0382! LLVMIR: %[[y:.*]] = shufflevector <8 x i16> %[[ins]], <8 x i16> poison, <8 x i32> zeroinitializer383! LLVMIR: store <8 x i16> %[[y]], ptr %{{[0-9]}}, align 16384end subroutine vec_splat_testu16i8385 386! CHECK-LABEL: vec_splat_testu16i16387subroutine vec_splat_testu16i16(x)388  vector(unsigned(2)) :: x, y389  y = vec_splat(x, 0_2)390 391! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16392! LLVMIR-LE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 0393! LLVMIR-BE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 7394! LLVMIR: %[[ins:.*]] = insertelement <8 x i16> poison, i16 %[[ele]], i32 0395! LLVMIR: %[[y:.*]] = shufflevector <8 x i16> %[[ins]], <8 x i16> poison, <8 x i32> zeroinitializer396! LLVMIR: store <8 x i16> %[[y]], ptr %{{[0-9]}}, align 16397end subroutine vec_splat_testu16i16398 399! CHECK-LABEL: vec_splat_testu16i32400subroutine vec_splat_testu16i32(x)401  vector(unsigned(2)) :: x, y402  y = vec_splat(x, 0_4)403 404! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16405! LLVMIR-LE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 0406! LLVMIR-BE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 7407! LLVMIR: %[[ins:.*]] = insertelement <8 x i16> poison, i16 %[[ele]], i32 0408! LLVMIR: %[[y:.*]] = shufflevector <8 x i16> %[[ins]], <8 x i16> poison, <8 x i32> zeroinitializer409! LLVMIR: store <8 x i16> %[[y]], ptr %{{[0-9]}}, align 16410end subroutine vec_splat_testu16i32411 412! CHECK-LABEL: vec_splat_testu16i64413subroutine vec_splat_testu16i64(x)414  vector(unsigned(2)) :: x, y415  y = vec_splat(x, 0_8)416 417! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16418! LLVMIR-LE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 0419! LLVMIR-BE: %[[ele:.*]] = extractelement <8 x i16> %[[x]], i64 7420! LLVMIR: %[[ins:.*]] = insertelement <8 x i16> poison, i16 %[[ele]], i32 0421! LLVMIR: %[[y:.*]] = shufflevector <8 x i16> %[[ins]], <8 x i16> poison, <8 x i32> zeroinitializer422! LLVMIR: store <8 x i16> %[[y]], ptr %{{[0-9]}}, align 16423end subroutine vec_splat_testu16i64424 425! CHECK-LABEL: vec_splat_testu32i8426subroutine vec_splat_testu32i8(x)427  vector(unsigned(4)) :: x, y428  y = vec_splat(x, 0_1)429 430! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16431! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 0432! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 3433! LLVMIR: %[[ins:.*]] = insertelement <4 x i32> poison, i32 %[[ele]], i32 0434! LLVMIR: %[[y:.*]] = shufflevector <4 x i32> %[[ins]], <4 x i32> poison, <4 x i32> zeroinitializer435! LLVMIR: store <4 x i32> %[[y]], ptr %{{[0-9]}}, align 16436end subroutine vec_splat_testu32i8437 438! CHECK-LABEL: vec_splat_testu32i16439subroutine vec_splat_testu32i16(x)440  vector(unsigned(4)) :: x, y441  y = vec_splat(x, 0_2)442 443! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16444! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 0445! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 3446! LLVMIR: %[[ins:.*]] = insertelement <4 x i32> poison, i32 %[[ele]], i32 0447! LLVMIR: %[[y:.*]] = shufflevector <4 x i32> %[[ins]], <4 x i32> poison, <4 x i32> zeroinitializer448! LLVMIR: store <4 x i32> %[[y]], ptr %{{[0-9]}}, align 16449end subroutine vec_splat_testu32i16450 451! CHECK-LABEL: vec_splat_testu32i32452subroutine vec_splat_testu32i32(x)453  vector(unsigned(4)) :: x, y454  y = vec_splat(x, 0_4)455 456! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16457! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 0458! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 3459! LLVMIR: %[[ins:.*]] = insertelement <4 x i32> poison, i32 %[[ele]], i32 0460! LLVMIR: %[[y:.*]] = shufflevector <4 x i32> %[[ins]], <4 x i32> poison, <4 x i32> zeroinitializer461! LLVMIR: store <4 x i32> %[[y]], ptr %{{[0-9]}}, align 16462end subroutine vec_splat_testu32i32463 464! CHECK-LABEL: vec_splat_testu32i64465subroutine vec_splat_testu32i64(x)466  vector(unsigned(4)) :: x, y467  y = vec_splat(x, 0_8)468 469! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16470! LLVMIR-LE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 0471! LLVMIR-BE: %[[ele:.*]] = extractelement <4 x i32> %[[x]], i64 3472! LLVMIR: %[[ins:.*]] = insertelement <4 x i32> poison, i32 %[[ele]], i32 0473! LLVMIR: %[[y:.*]] = shufflevector <4 x i32> %[[ins]], <4 x i32> poison, <4 x i32> zeroinitializer474! LLVMIR: store <4 x i32> %[[y]], ptr %{{[0-9]}}, align 16475end subroutine vec_splat_testu32i64476 477! CHECK-LABEL: vec_splat_testu64i8478subroutine vec_splat_testu64i8(x)479  vector(unsigned(8)) :: x, y480  y = vec_splat(x, 0_1)481 482! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16483! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 0484! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 1485! LLVMIR: %[[ins:.*]] = insertelement <2 x i64> poison, i64 %[[ele]], i32 0486! LLVMIR: %[[y:.*]] = shufflevector <2 x i64> %[[ins]], <2 x i64> poison, <2 x i32> zeroinitializer487! LLVMIR: store <2 x i64> %[[y]], ptr %{{[0-9]}}, align 16488end subroutine vec_splat_testu64i8489 490! CHECK-LABEL: vec_splat_testu64i16491subroutine vec_splat_testu64i16(x)492  vector(unsigned(8)) :: x, y493  y = vec_splat(x, 0_2)494 495! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16496! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 0497! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 1498! LLVMIR: %[[ins:.*]] = insertelement <2 x i64> poison, i64 %[[ele]], i32 0499! LLVMIR: %[[y:.*]] = shufflevector <2 x i64> %[[ins]], <2 x i64> poison, <2 x i32> zeroinitializer500! LLVMIR: store <2 x i64> %[[y]], ptr %{{[0-9]}}, align 16501end subroutine vec_splat_testu64i16502 503! CHECK-LABEL: vec_splat_testu64i32504subroutine vec_splat_testu64i32(x)505  vector(unsigned(8)) :: x, y506  y = vec_splat(x, 0_4)507 508! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16509! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 0510! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 1511! LLVMIR: %[[ins:.*]] = insertelement <2 x i64> poison, i64 %[[ele]], i32 0512! LLVMIR: %[[y:.*]] = shufflevector <2 x i64> %[[ins]], <2 x i64> poison, <2 x i32> zeroinitializer513! LLVMIR: store <2 x i64> %[[y]], ptr %{{[0-9]}}, align 16514end subroutine vec_splat_testu64i32515 516! CHECK-LABEL: vec_splat_testu64i64517subroutine vec_splat_testu64i64(x)518  vector(unsigned(8)) :: x, y519  y = vec_splat(x, 0_8)520 521! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16522! LLVMIR-LE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 0523! LLVMIR-BE: %[[ele:.*]] = extractelement <2 x i64> %[[x]], i64 1524! LLVMIR: %[[ins:.*]] = insertelement <2 x i64> poison, i64 %[[ele]], i32 0525! LLVMIR: %[[y:.*]] = shufflevector <2 x i64> %[[ins]], <2 x i64> poison, <2 x i32> zeroinitializer526! LLVMIR: store <2 x i64> %[[y]], ptr %{{[0-9]}}, align 16527end subroutine vec_splat_testu64i64528 529!----------------530! vec_splats531!----------------532 533! CHECK-LABEL: vec_splats_testi8534subroutine vec_splats_testi8(x)535  integer(1) :: x536  vector(integer(1)) :: y537  y = vec_splats(x)538 539! LLVMIR: %[[x:.*]] = load i8, ptr %{{[0-9]}}, align 1540! LLVMIR: %[[ins:.*]] = insertelement <16 x i8> poison, i8 %[[x]], i32 0541! LLVMIR: %[[y:.*]] = shufflevector <16 x i8> %[[ins]], <16 x i8> poison, <16 x i32> zeroinitializer542! LLVMIR: store <16 x i8> %[[y]], ptr %{{[0-9]}}, align 16543end subroutine vec_splats_testi8544 545! CHECK-LABEL: vec_splats_testi16546subroutine vec_splats_testi16(x)547  integer(2) :: x548  vector(integer(2)) :: y549  y = vec_splats(x)550 551! LLVMIR: %[[x:.*]] = load i16, ptr %{{[0-9]}}, align 2552! LLVMIR: %[[ins:.*]] = insertelement <8 x i16> poison, i16 %[[x]], i32 0553! LLVMIR: %[[y:.*]] = shufflevector <8 x i16> %[[ins]], <8 x i16> poison, <8 x i32> zeroinitializer554! LLVMIR: store <8 x i16> %[[y]], ptr %{{[0-9]}}, align 16555end subroutine vec_splats_testi16556 557! CHECK-LABEL: vec_splats_testi32558subroutine vec_splats_testi32(x)559  integer(4) :: x560  vector(integer(4)) :: y561  y = vec_splats(x)562 563! LLVMIR: %[[x:.*]] = load i32, ptr %{{[0-9]}}, align 4564! LLVMIR: %[[ins:.*]] = insertelement <4 x i32> poison, i32 %[[x]], i32 0565! LLVMIR: %[[y:.*]] = shufflevector <4 x i32> %[[ins]], <4 x i32> poison, <4 x i32> zeroinitializer566! LLVMIR: store <4 x i32> %[[y]], ptr %{{[0-9]}}, align 16567end subroutine vec_splats_testi32568 569! CHECK-LABEL: vec_splats_testi64570subroutine vec_splats_testi64(x)571  integer(8) :: x572  vector(integer(8)) :: y573  y = vec_splats(x)574 575! LLVMIR: %[[x:.*]] = load i64, ptr %{{[0-9]}}, align 8576! LLVMIR: %[[ins:.*]] = insertelement <2 x i64> poison, i64 %[[x]], i32 0577! LLVMIR: %[[y:.*]] = shufflevector <2 x i64> %[[ins]], <2 x i64> poison, <2 x i32> zeroinitializer578! LLVMIR: store <2 x i64> %[[y]], ptr %{{[0-9]}}, align 16579end subroutine vec_splats_testi64580 581! CHECK-LABEL: vec_splats_testf32582subroutine vec_splats_testf32(x)583  real(4) :: x584  vector(real(4)) :: y585  y = vec_splats(x)586 587! LLVMIR: %[[x:.*]] = load float, ptr %{{[0-9]}}, align 4588! LLVMIR: %[[ins:.*]] = insertelement <4 x float> poison, float %[[x]], i32 0589! LLVMIR: %[[y:.*]] = shufflevector <4 x float> %[[ins]], <4 x float> poison, <4 x i32> zeroinitializer590! LLVMIR: store <4 x float> %[[y]], ptr %{{[0-9]}}, align 16591end subroutine vec_splats_testf32592 593! CHECK-LABEL: vec_splats_testf64594subroutine vec_splats_testf64(x)595  real(8) :: x596  vector(real(8)) :: y597  y = vec_splats(x)598 599! LLVMIR: %[[x:.*]] = load double, ptr %{{[0-9]}}, align 8600! LLVMIR: %[[ins:.*]] = insertelement <2 x double> poison, double %[[x]], i32 0601! LLVMIR: %[[y:.*]] = shufflevector <2 x double> %[[ins]], <2 x double> poison, <2 x i32> zeroinitializer602! LLVMIR: store <2 x double> %[[y]], ptr %{{[0-9]}}, align 16603end subroutine vec_splats_testf64604 605! CHECK-LABEL: vec_splat_s32testi8606subroutine vec_splat_s32testi8()607  vector(integer(4)) :: y608  y = vec_splat_s32(7_1)609 610! LLVMIR: store <4 x i32> splat (i32 7), ptr %{{[0-9]}}, align 16611end subroutine vec_splat_s32testi8612 613! CHECK-LABEL: vec_splat_s32testi16614subroutine vec_splat_s32testi16()615  vector(integer(4)) :: y616  y = vec_splat_s32(7_2)617 618! LLVMIR: store <4 x i32> splat (i32 7), ptr %{{[0-9]}}, align 16619end subroutine vec_splat_s32testi16620 621! CHECK-LABEL: vec_splat_s32testi32622subroutine vec_splat_s32testi32()623  vector(integer(4)) :: y624  y = vec_splat_s32(7_4)625 626! LLVMIR: store <4 x i32> splat (i32 7), ptr %{{[0-9]}}, align 16627end subroutine vec_splat_s32testi32628 629! CHECK-LABEL: vec_splat_s32testi64630subroutine vec_splat_s32testi64()631  vector(integer(4)) :: y632  y = vec_splat_s32(7_8)633 634! LLVMIR: store <4 x i32> splat (i32 7), ptr %{{[0-9]}}, align 16635end subroutine vec_splat_s32testi64636