1814 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \3; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64le-unknown-linux-gnu < %s | \4; RUN: FileCheck %s --check-prefix=CHECK-LE-P85; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \6; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64le-unknown-linux-gnu < %s | \7; RUN: FileCheck %s --check-prefix=CHECK-LE-P98; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \9; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64-unknown-linux-gnu < %s | \10; RUN: FileCheck %s --check-prefix=CHECK-BE-P811; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \12; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64-unknown-linux-gnu < %s | \13; RUN: FileCheck %s --check-prefix=CHECK-BE-P914 15; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \16; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64-ibm-aix < %s | \17; RUN: FileCheck %s --check-prefix=CHECK-AIX-64-P818; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \19; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc64-ibm-aix < %s | \20; RUN: FileCheck %s --check-prefix=CHECK-AIX-64-P921; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-asm-full-reg-names \22; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc-ibm-aix < %s | \23; RUN: FileCheck %s --check-prefix=CHECK-AIX-32-P824; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names \25; RUN: -ppc-vsr-nums-as-vr -mtriple=powerpc-ibm-aix < %s | \26; RUN: FileCheck %s --check-prefix=CHECK-AIX-32-P927 28define <2 x i64> @test_v16i8_v16i8(i8 %arg1, i8 %arg) {29; CHECK-LE-P8-LABEL: test_v16i8_v16i8:30; CHECK-LE-P8: # %bb.0: # %entry31; CHECK-LE-P8-NEXT: mtfprd f0, r332; CHECK-LE-P8-NEXT: mtfprd f1, r433; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs034; CHECK-LE-P8-NEXT: blr35;36; CHECK-LE-P9-LABEL: test_v16i8_v16i8:37; CHECK-LE-P9: # %bb.0: # %entry38; CHECK-LE-P9-NEXT: mtfprd f0, r339; CHECK-LE-P9-NEXT: mtfprd f1, r440; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs041; CHECK-LE-P9-NEXT: blr42;43; CHECK-BE-P8-LABEL: test_v16i8_v16i8:44; CHECK-BE-P8: # %bb.0: # %entry45; CHECK-BE-P8-NEXT: mtfprwz f0, r346; CHECK-BE-P8-NEXT: mtfprwz f1, r447; CHECK-BE-P8-NEXT: xxmrgld v2, vs0, vs148; CHECK-BE-P8-NEXT: blr49;50; CHECK-BE-P9-LABEL: test_v16i8_v16i8:51; CHECK-BE-P9: # %bb.0: # %entry52; CHECK-BE-P9-NEXT: mtfprwz f0, r353; CHECK-BE-P9-NEXT: mtfprwz f1, r454; CHECK-BE-P9-NEXT: xxmrgld v2, vs0, vs155; CHECK-BE-P9-NEXT: blr56;57; CHECK-AIX-64-P8-LABEL: test_v16i8_v16i8:58; CHECK-AIX-64-P8: # %bb.0: # %entry59; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r360; CHECK-AIX-64-P8-NEXT: mtfprwz f1, r461; CHECK-AIX-64-P8-NEXT: xxmrgld v2, vs0, vs162; CHECK-AIX-64-P8-NEXT: blr63;64; CHECK-AIX-64-P9-LABEL: test_v16i8_v16i8:65; CHECK-AIX-64-P9: # %bb.0: # %entry66; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r367; CHECK-AIX-64-P9-NEXT: mtfprwz f1, r468; CHECK-AIX-64-P9-NEXT: xxmrgld v2, vs0, vs169; CHECK-AIX-64-P9-NEXT: blr70;71; CHECK-AIX-32-P8-LABEL: test_v16i8_v16i8:72; CHECK-AIX-32-P8: # %bb.0: # %entry73; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)74; CHECK-AIX-32-P8-NEXT: addi r3, r1, -1675; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r376; CHECK-AIX-32-P8-NEXT: addi r3, r1, -3277; CHECK-AIX-32-P8-NEXT: stb r4, -32(r1)78; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r379; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs0, vs180; CHECK-AIX-32-P8-NEXT: blr81;82; CHECK-AIX-32-P9-LABEL: test_v16i8_v16i8:83; CHECK-AIX-32-P9: # %bb.0: # %entry84; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)85; CHECK-AIX-32-P9-NEXT: stb r4, -32(r1)86; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)87; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)88; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs0, vs189; CHECK-AIX-32-P9-NEXT: blr90entry:91 %lhs.tmp = insertelement <16 x i8> undef, i8 %arg1, i32 092 %lhs = bitcast <16 x i8> %lhs.tmp to <2 x i64>93 %rhs.tmp = insertelement <16 x i8> undef, i8 %arg, i32 094 %rhs = bitcast <16 x i8> %rhs.tmp to <2 x i64>95 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>96 ret <2 x i64> %shuffle97}98 99define <2 x i64> @test_none_v16i8(i8 %arg1, ptr nocapture noundef readonly %b) {100; CHECK-LE-P8-LABEL: test_none_v16i8:101; CHECK-LE-P8: # %bb.0: # %entry102; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r4103; CHECK-LE-P8-NEXT: xxswapd v2, vs0104; CHECK-LE-P8-NEXT: mtfprd f0, r3105; CHECK-LE-P8-NEXT: xxpermdi v2, vs0, v2, 1106; CHECK-LE-P8-NEXT: blr107;108; CHECK-LE-P9-LABEL: test_none_v16i8:109; CHECK-LE-P9: # %bb.0: # %entry110; CHECK-LE-P9-NEXT: lxv v2, 0(r4)111; CHECK-LE-P9-NEXT: mtfprd f0, r3112; CHECK-LE-P9-NEXT: xxpermdi v2, vs0, v2, 1113; CHECK-LE-P9-NEXT: blr114;115; CHECK-BE-P8-LABEL: test_none_v16i8:116; CHECK-BE-P8: # %bb.0: # %entry117; CHECK-BE-P8-NEXT: mtfprwz f0, r3118; CHECK-BE-P8-NEXT: lxvd2x v2, 0, r4119; CHECK-BE-P8-NEXT: xxpermdi v2, v2, vs0, 1120; CHECK-BE-P8-NEXT: blr121;122; CHECK-BE-P9-LABEL: test_none_v16i8:123; CHECK-BE-P9: # %bb.0: # %entry124; CHECK-BE-P9-NEXT: lxv v2, 0(r4)125; CHECK-BE-P9-NEXT: mtfprwz f0, r3126; CHECK-BE-P9-NEXT: xxpermdi v2, v2, vs0, 1127; CHECK-BE-P9-NEXT: blr128;129; CHECK-AIX-64-P8-LABEL: test_none_v16i8:130; CHECK-AIX-64-P8: # %bb.0: # %entry131; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r3132; CHECK-AIX-64-P8-NEXT: lxvd2x v2, 0, r4133; CHECK-AIX-64-P8-NEXT: xxpermdi v2, v2, vs0, 1134; CHECK-AIX-64-P8-NEXT: blr135;136; CHECK-AIX-64-P9-LABEL: test_none_v16i8:137; CHECK-AIX-64-P9: # %bb.0: # %entry138; CHECK-AIX-64-P9-NEXT: lxv v2, 0(r4)139; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3140; CHECK-AIX-64-P9-NEXT: xxpermdi v2, v2, vs0, 1141; CHECK-AIX-64-P9-NEXT: blr142;143; CHECK-AIX-32-P8-LABEL: test_none_v16i8:144; CHECK-AIX-32-P8: # %bb.0: # %entry145; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)146; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16147; CHECK-AIX-32-P8-NEXT: lxvd2x v2, 0, r4148; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r3149; CHECK-AIX-32-P8-NEXT: xxmrghd v2, v2, vs0150; CHECK-AIX-32-P8-NEXT: blr151;152; CHECK-AIX-32-P9-LABEL: test_none_v16i8:153; CHECK-AIX-32-P9: # %bb.0: # %entry154; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)155; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)156; CHECK-AIX-32-P9-NEXT: lxv v2, 0(r4)157; CHECK-AIX-32-P9-NEXT: xxmrghd v2, v2, vs0158; CHECK-AIX-32-P9-NEXT: blr159entry:160 %lhs.tmp = insertelement <16 x i8> undef, i8 %arg1, i32 0161 %lhs = bitcast <16 x i8> %lhs.tmp to <2 x i64>162 %rhs = load <2 x i64>, ptr %b, align 4163 %shuffle = shufflevector <2 x i64> %rhs, <2 x i64> %lhs, <2 x i32> <i32 0, i32 2>164 ret <2 x i64> %shuffle165}166 167define <2 x i64> @test_v16i8_none(i8 %arg1, ptr nocapture noundef readonly %b) {168; CHECK-LE-P8-LABEL: test_v16i8_none:169; CHECK-LE-P8: # %bb.0: # %entry170; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r4171; CHECK-LE-P8-NEXT: xxswapd v2, vs0172; CHECK-LE-P8-NEXT: mtfprd f0, r3173; CHECK-LE-P8-NEXT: xxpermdi v2, v2, vs0, 2174; CHECK-LE-P8-NEXT: blr175;176; CHECK-LE-P9-LABEL: test_v16i8_none:177; CHECK-LE-P9: # %bb.0: # %entry178; CHECK-LE-P9-NEXT: lxv v2, 0(r4)179; CHECK-LE-P9-NEXT: mtfprd f0, r3180; CHECK-LE-P9-NEXT: xxpermdi v2, v2, vs0, 2181; CHECK-LE-P9-NEXT: blr182;183; CHECK-BE-P8-LABEL: test_v16i8_none:184; CHECK-BE-P8: # %bb.0: # %entry185; CHECK-BE-P8-NEXT: mtfprwz f0, r3186; CHECK-BE-P8-NEXT: lxvd2x v2, 0, r4187; CHECK-BE-P8-NEXT: xxpermdi v2, vs0, v2, 2188; CHECK-BE-P8-NEXT: blr189;190; CHECK-BE-P9-LABEL: test_v16i8_none:191; CHECK-BE-P9: # %bb.0: # %entry192; CHECK-BE-P9-NEXT: lxv v2, 0(r4)193; CHECK-BE-P9-NEXT: mtfprwz f0, r3194; CHECK-BE-P9-NEXT: xxpermdi v2, vs0, v2, 2195; CHECK-BE-P9-NEXT: blr196;197; CHECK-AIX-64-P8-LABEL: test_v16i8_none:198; CHECK-AIX-64-P8: # %bb.0: # %entry199; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r3200; CHECK-AIX-64-P8-NEXT: lxvd2x v2, 0, r4201; CHECK-AIX-64-P8-NEXT: xxpermdi v2, vs0, v2, 2202; CHECK-AIX-64-P8-NEXT: blr203;204; CHECK-AIX-64-P9-LABEL: test_v16i8_none:205; CHECK-AIX-64-P9: # %bb.0: # %entry206; CHECK-AIX-64-P9-NEXT: lxv v2, 0(r4)207; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3208; CHECK-AIX-64-P9-NEXT: xxpermdi v2, vs0, v2, 2209; CHECK-AIX-64-P9-NEXT: blr210;211; CHECK-AIX-32-P8-LABEL: test_v16i8_none:212; CHECK-AIX-32-P8: # %bb.0: # %entry213; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)214; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16215; CHECK-AIX-32-P8-NEXT: lxvd2x v2, 0, r4216; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r3217; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs0, v2218; CHECK-AIX-32-P8-NEXT: blr219;220; CHECK-AIX-32-P9-LABEL: test_v16i8_none:221; CHECK-AIX-32-P9: # %bb.0: # %entry222; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)223; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)224; CHECK-AIX-32-P9-NEXT: lxv v2, 0(r4)225; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs0, v2226; CHECK-AIX-32-P9-NEXT: blr227entry:228 %lhs.tmp = insertelement <16 x i8> undef, i8 %arg1, i32 0229 %lhs = bitcast <16 x i8> %lhs.tmp to <2 x i64>230 %rhs = load <2 x i64>, ptr %b, align 4231 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>232 ret <2 x i64> %shuffle233}234 235define <2 x i64> @test_v16i8_v8i16(i8 %arg1, i16 %arg) {236; CHECK-LE-P8-LABEL: test_v16i8_v8i16:237; CHECK-LE-P8: # %bb.0: # %entry238; CHECK-LE-P8-NEXT: mtfprd f0, r3239; CHECK-LE-P8-NEXT: mtfprd f1, r4240; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs0241; CHECK-LE-P8-NEXT: blr242;243; CHECK-LE-P9-LABEL: test_v16i8_v8i16:244; CHECK-LE-P9: # %bb.0: # %entry245; CHECK-LE-P9-NEXT: mtfprd f0, r3246; CHECK-LE-P9-NEXT: mtfprd f1, r4247; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs0248; CHECK-LE-P9-NEXT: blr249;250; CHECK-BE-P8-LABEL: test_v16i8_v8i16:251; CHECK-BE-P8: # %bb.0: # %entry252; CHECK-BE-P8-NEXT: mtfprwz f0, r3253; CHECK-BE-P8-NEXT: mtfprwz f1, r4254; CHECK-BE-P8-NEXT: xxmrgld v2, vs0, vs1255; CHECK-BE-P8-NEXT: blr256;257; CHECK-BE-P9-LABEL: test_v16i8_v8i16:258; CHECK-BE-P9: # %bb.0: # %entry259; CHECK-BE-P9-NEXT: mtfprwz f0, r3260; CHECK-BE-P9-NEXT: mtfprwz f1, r4261; CHECK-BE-P9-NEXT: xxmrgld v2, vs0, vs1262; CHECK-BE-P9-NEXT: blr263;264; CHECK-AIX-64-P8-LABEL: test_v16i8_v8i16:265; CHECK-AIX-64-P8: # %bb.0: # %entry266; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r3267; CHECK-AIX-64-P8-NEXT: mtfprwz f1, r4268; CHECK-AIX-64-P8-NEXT: xxmrgld v2, vs0, vs1269; CHECK-AIX-64-P8-NEXT: blr270;271; CHECK-AIX-64-P9-LABEL: test_v16i8_v8i16:272; CHECK-AIX-64-P9: # %bb.0: # %entry273; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3274; CHECK-AIX-64-P9-NEXT: mtfprwz f1, r4275; CHECK-AIX-64-P9-NEXT: xxmrgld v2, vs0, vs1276; CHECK-AIX-64-P9-NEXT: blr277;278; CHECK-AIX-32-P8-LABEL: test_v16i8_v8i16:279; CHECK-AIX-32-P8: # %bb.0: # %entry280; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)281; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16282; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r3283; CHECK-AIX-32-P8-NEXT: addi r3, r1, -32284; CHECK-AIX-32-P8-NEXT: sth r4, -32(r1)285; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r3286; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs0, vs1287; CHECK-AIX-32-P8-NEXT: blr288;289; CHECK-AIX-32-P9-LABEL: test_v16i8_v8i16:290; CHECK-AIX-32-P9: # %bb.0: # %entry291; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)292; CHECK-AIX-32-P9-NEXT: sth r4, -32(r1)293; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)294; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)295; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs0, vs1296; CHECK-AIX-32-P9-NEXT: blr297entry:298 %lhs.tmp = insertelement <16 x i8> undef, i8 %arg1, i32 0299 %lhs = bitcast <16 x i8> %lhs.tmp to <2 x i64>300 %rhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 0301 %rhs = bitcast <8 x i16> %rhs.tmp to <2 x i64>302 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>303 ret <2 x i64> %shuffle304}305 306define <2 x i64> @test_v8i16_v16i8(i8 %arg1, i16 %arg) {307; CHECK-LE-P8-LABEL: test_v8i16_v16i8:308; CHECK-LE-P8: # %bb.0: # %entry309; CHECK-LE-P8-NEXT: mtfprd f0, r3310; CHECK-LE-P8-NEXT: mtfprd f1, r4311; CHECK-LE-P8-NEXT: xxmrghd v2, vs0, vs1312; CHECK-LE-P8-NEXT: blr313;314; CHECK-LE-P9-LABEL: test_v8i16_v16i8:315; CHECK-LE-P9: # %bb.0: # %entry316; CHECK-LE-P9-NEXT: mtfprd f0, r3317; CHECK-LE-P9-NEXT: mtfprd f1, r4318; CHECK-LE-P9-NEXT: xxmrghd v2, vs0, vs1319; CHECK-LE-P9-NEXT: blr320;321; CHECK-BE-P8-LABEL: test_v8i16_v16i8:322; CHECK-BE-P8: # %bb.0: # %entry323; CHECK-BE-P8-NEXT: mtfprwz f0, r3324; CHECK-BE-P8-NEXT: mtfprwz f1, r4325; CHECK-BE-P8-NEXT: xxmrgld v2, vs1, vs0326; CHECK-BE-P8-NEXT: blr327;328; CHECK-BE-P9-LABEL: test_v8i16_v16i8:329; CHECK-BE-P9: # %bb.0: # %entry330; CHECK-BE-P9-NEXT: mtfprwz f0, r3331; CHECK-BE-P9-NEXT: mtfprwz f1, r4332; CHECK-BE-P9-NEXT: xxmrgld v2, vs1, vs0333; CHECK-BE-P9-NEXT: blr334;335; CHECK-AIX-64-P8-LABEL: test_v8i16_v16i8:336; CHECK-AIX-64-P8: # %bb.0: # %entry337; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r3338; CHECK-AIX-64-P8-NEXT: mtfprwz f1, r4339; CHECK-AIX-64-P8-NEXT: xxmrgld v2, vs1, vs0340; CHECK-AIX-64-P8-NEXT: blr341;342; CHECK-AIX-64-P9-LABEL: test_v8i16_v16i8:343; CHECK-AIX-64-P9: # %bb.0: # %entry344; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3345; CHECK-AIX-64-P9-NEXT: mtfprwz f1, r4346; CHECK-AIX-64-P9-NEXT: xxmrgld v2, vs1, vs0347; CHECK-AIX-64-P9-NEXT: blr348;349; CHECK-AIX-32-P8-LABEL: test_v8i16_v16i8:350; CHECK-AIX-32-P8: # %bb.0: # %entry351; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)352; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16353; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r3354; CHECK-AIX-32-P8-NEXT: addi r3, r1, -32355; CHECK-AIX-32-P8-NEXT: sth r4, -32(r1)356; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r3357; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs1, vs0358; CHECK-AIX-32-P8-NEXT: blr359;360; CHECK-AIX-32-P9-LABEL: test_v8i16_v16i8:361; CHECK-AIX-32-P9: # %bb.0: # %entry362; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)363; CHECK-AIX-32-P9-NEXT: sth r4, -32(r1)364; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)365; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)366; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs1, vs0367; CHECK-AIX-32-P9-NEXT: blr368entry:369 %lhs.tmp = insertelement <16 x i8> undef, i8 %arg1, i32 0370 %lhs = bitcast <16 x i8> %lhs.tmp to <2 x i64>371 %rhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 0372 %rhs = bitcast <8 x i16> %rhs.tmp to <2 x i64>373 %shuffle = shufflevector <2 x i64> %rhs, <2 x i64> %lhs, <2 x i32> <i32 0, i32 2>374 ret <2 x i64> %shuffle375}376 377define <2 x i64> @test_v8i16_none(i16 %arg1, ptr nocapture noundef readonly %b) {378; CHECK-LE-P8-LABEL: test_v8i16_none:379; CHECK-LE-P8: # %bb.0: # %entry380; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r4381; CHECK-LE-P8-NEXT: xxswapd v2, vs0382; CHECK-LE-P8-NEXT: mtfprd f0, r3383; CHECK-LE-P8-NEXT: xxpermdi v2, v2, vs0, 2384; CHECK-LE-P8-NEXT: blr385;386; CHECK-LE-P9-LABEL: test_v8i16_none:387; CHECK-LE-P9: # %bb.0: # %entry388; CHECK-LE-P9-NEXT: lxv v2, 0(r4)389; CHECK-LE-P9-NEXT: mtfprd f0, r3390; CHECK-LE-P9-NEXT: xxpermdi v2, v2, vs0, 2391; CHECK-LE-P9-NEXT: blr392;393; CHECK-BE-P8-LABEL: test_v8i16_none:394; CHECK-BE-P8: # %bb.0: # %entry395; CHECK-BE-P8-NEXT: mtfprwz f0, r3396; CHECK-BE-P8-NEXT: lxvd2x v2, 0, r4397; CHECK-BE-P8-NEXT: xxpermdi v2, vs0, v2, 2398; CHECK-BE-P8-NEXT: blr399;400; CHECK-BE-P9-LABEL: test_v8i16_none:401; CHECK-BE-P9: # %bb.0: # %entry402; CHECK-BE-P9-NEXT: lxv v2, 0(r4)403; CHECK-BE-P9-NEXT: mtfprwz f0, r3404; CHECK-BE-P9-NEXT: xxpermdi v2, vs0, v2, 2405; CHECK-BE-P9-NEXT: blr406;407; CHECK-AIX-64-P8-LABEL: test_v8i16_none:408; CHECK-AIX-64-P8: # %bb.0: # %entry409; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r3410; CHECK-AIX-64-P8-NEXT: lxvd2x v2, 0, r4411; CHECK-AIX-64-P8-NEXT: xxpermdi v2, vs0, v2, 2412; CHECK-AIX-64-P8-NEXT: blr413;414; CHECK-AIX-64-P9-LABEL: test_v8i16_none:415; CHECK-AIX-64-P9: # %bb.0: # %entry416; CHECK-AIX-64-P9-NEXT: lxv v2, 0(r4)417; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3418; CHECK-AIX-64-P9-NEXT: xxpermdi v2, vs0, v2, 2419; CHECK-AIX-64-P9-NEXT: blr420;421; CHECK-AIX-32-P8-LABEL: test_v8i16_none:422; CHECK-AIX-32-P8: # %bb.0: # %entry423; CHECK-AIX-32-P8-NEXT: sth r3, -16(r1)424; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16425; CHECK-AIX-32-P8-NEXT: lxvd2x v2, 0, r4426; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r3427; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs0, v2428; CHECK-AIX-32-P8-NEXT: blr429;430; CHECK-AIX-32-P9-LABEL: test_v8i16_none:431; CHECK-AIX-32-P9: # %bb.0: # %entry432; CHECK-AIX-32-P9-NEXT: sth r3, -16(r1)433; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)434; CHECK-AIX-32-P9-NEXT: lxv v2, 0(r4)435; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs0, v2436; CHECK-AIX-32-P9-NEXT: blr437entry:438 %lhs.tmp = insertelement <8 x i16> undef, i16 %arg1, i32 0439 %lhs = bitcast <8 x i16> %lhs.tmp to <2 x i64>440 %rhs = load <2 x i64>, ptr %b, align 4441 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>442 ret <2 x i64> %shuffle443}444 445define <2 x i64> @test_none_v8i16(i16 %arg1, ptr nocapture noundef readonly %b) {446; CHECK-LE-P8-LABEL: test_none_v8i16:447; CHECK-LE-P8: # %bb.0: # %entry448; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r4449; CHECK-LE-P8-NEXT: xxswapd v2, vs0450; CHECK-LE-P8-NEXT: mtfprd f0, r3451; CHECK-LE-P8-NEXT: xxpermdi v2, vs0, v2, 1452; CHECK-LE-P8-NEXT: blr453;454; CHECK-LE-P9-LABEL: test_none_v8i16:455; CHECK-LE-P9: # %bb.0: # %entry456; CHECK-LE-P9-NEXT: lxv v2, 0(r4)457; CHECK-LE-P9-NEXT: mtfprd f0, r3458; CHECK-LE-P9-NEXT: xxpermdi v2, vs0, v2, 1459; CHECK-LE-P9-NEXT: blr460;461; CHECK-BE-P8-LABEL: test_none_v8i16:462; CHECK-BE-P8: # %bb.0: # %entry463; CHECK-BE-P8-NEXT: mtfprwz f0, r3464; CHECK-BE-P8-NEXT: lxvd2x v2, 0, r4465; CHECK-BE-P8-NEXT: xxpermdi v2, v2, vs0, 1466; CHECK-BE-P8-NEXT: blr467;468; CHECK-BE-P9-LABEL: test_none_v8i16:469; CHECK-BE-P9: # %bb.0: # %entry470; CHECK-BE-P9-NEXT: lxv v2, 0(r4)471; CHECK-BE-P9-NEXT: mtfprwz f0, r3472; CHECK-BE-P9-NEXT: xxpermdi v2, v2, vs0, 1473; CHECK-BE-P9-NEXT: blr474;475; CHECK-AIX-64-P8-LABEL: test_none_v8i16:476; CHECK-AIX-64-P8: # %bb.0: # %entry477; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r3478; CHECK-AIX-64-P8-NEXT: lxvd2x v2, 0, r4479; CHECK-AIX-64-P8-NEXT: xxpermdi v2, v2, vs0, 1480; CHECK-AIX-64-P8-NEXT: blr481;482; CHECK-AIX-64-P9-LABEL: test_none_v8i16:483; CHECK-AIX-64-P9: # %bb.0: # %entry484; CHECK-AIX-64-P9-NEXT: lxv v2, 0(r4)485; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3486; CHECK-AIX-64-P9-NEXT: xxpermdi v2, v2, vs0, 1487; CHECK-AIX-64-P9-NEXT: blr488;489; CHECK-AIX-32-P8-LABEL: test_none_v8i16:490; CHECK-AIX-32-P8: # %bb.0: # %entry491; CHECK-AIX-32-P8-NEXT: sth r3, -16(r1)492; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16493; CHECK-AIX-32-P8-NEXT: lxvd2x v2, 0, r4494; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r3495; CHECK-AIX-32-P8-NEXT: xxmrghd v2, v2, vs0496; CHECK-AIX-32-P8-NEXT: blr497;498; CHECK-AIX-32-P9-LABEL: test_none_v8i16:499; CHECK-AIX-32-P9: # %bb.0: # %entry500; CHECK-AIX-32-P9-NEXT: sth r3, -16(r1)501; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)502; CHECK-AIX-32-P9-NEXT: lxv v2, 0(r4)503; CHECK-AIX-32-P9-NEXT: xxmrghd v2, v2, vs0504; CHECK-AIX-32-P9-NEXT: blr505entry:506 %lhs.tmp = insertelement <8 x i16> undef, i16 %arg1, i32 0507 %lhs = bitcast <8 x i16> %lhs.tmp to <2 x i64>508 %rhs = load <2 x i64>, ptr %b, align 4509 %shuffle = shufflevector <2 x i64> %rhs, <2 x i64> %lhs, <2 x i32> <i32 0, i32 2>510 ret <2 x i64> %shuffle511}512 513define <2 x i64> @test_v16i8_v4i32(i8 %arg1, i32 %arg) {514; CHECK-LE-P8-LABEL: test_v16i8_v4i32:515; CHECK-LE-P8: # %bb.0: # %entry516; CHECK-LE-P8-NEXT: mtfprd f0, r3517; CHECK-LE-P8-NEXT: mtfprwz f1, r4518; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs0519; CHECK-LE-P8-NEXT: blr520;521; CHECK-LE-P9-LABEL: test_v16i8_v4i32:522; CHECK-LE-P9: # %bb.0: # %entry523; CHECK-LE-P9-NEXT: mtfprd f0, r3524; CHECK-LE-P9-NEXT: mtfprwz f1, r4525; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs0526; CHECK-LE-P9-NEXT: blr527;528; CHECK-BE-P8-LABEL: test_v16i8_v4i32:529; CHECK-BE-P8: # %bb.0: # %entry530; CHECK-BE-P8-NEXT: mtfprwz f0, r3531; CHECK-BE-P8-NEXT: mtfprwz f1, r4532; CHECK-BE-P8-NEXT: xxmrgld v2, vs0, vs1533; CHECK-BE-P8-NEXT: blr534;535; CHECK-BE-P9-LABEL: test_v16i8_v4i32:536; CHECK-BE-P9: # %bb.0: # %entry537; CHECK-BE-P9-NEXT: mtfprwz f0, r3538; CHECK-BE-P9-NEXT: mtfprwz f1, r4539; CHECK-BE-P9-NEXT: xxmrgld v2, vs0, vs1540; CHECK-BE-P9-NEXT: blr541;542; CHECK-AIX-64-P8-LABEL: test_v16i8_v4i32:543; CHECK-AIX-64-P8: # %bb.0: # %entry544; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r3545; CHECK-AIX-64-P8-NEXT: mtfprwz f1, r4546; CHECK-AIX-64-P8-NEXT: xxmrgld v2, vs0, vs1547; CHECK-AIX-64-P8-NEXT: blr548;549; CHECK-AIX-64-P9-LABEL: test_v16i8_v4i32:550; CHECK-AIX-64-P9: # %bb.0: # %entry551; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3552; CHECK-AIX-64-P9-NEXT: mtfprwz f1, r4553; CHECK-AIX-64-P9-NEXT: xxmrgld v2, vs0, vs1554; CHECK-AIX-64-P9-NEXT: blr555;556; CHECK-AIX-32-P8-LABEL: test_v16i8_v4i32:557; CHECK-AIX-32-P8: # %bb.0: # %entry558; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)559; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16560; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r3561; CHECK-AIX-32-P8-NEXT: addi r3, r1, -32562; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)563; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r3564; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs0, vs1565; CHECK-AIX-32-P8-NEXT: blr566;567; CHECK-AIX-32-P9-LABEL: test_v16i8_v4i32:568; CHECK-AIX-32-P9: # %bb.0: # %entry569; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)570; CHECK-AIX-32-P9-NEXT: stw r4, -32(r1)571; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)572; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)573; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs0, vs1574; CHECK-AIX-32-P9-NEXT: blr575entry:576 %lhs.tmp = insertelement <16 x i8> undef, i8 %arg1, i32 0577 %lhs = bitcast <16 x i8> %lhs.tmp to <2 x i64>578 %rhs.tmp = insertelement <4 x i32> undef, i32 %arg, i32 0579 %rhs = bitcast <4 x i32> %rhs.tmp to <2 x i64>580 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>581 ret <2 x i64> %shuffle582}583 584define <2 x i64> @test_v4i32_v16i8(i8 %arg1, i32 %arg) {585; CHECK-LE-P8-LABEL: test_v4i32_v16i8:586; CHECK-LE-P8: # %bb.0: # %entry587; CHECK-LE-P8-NEXT: mtfprd f0, r3588; CHECK-LE-P8-NEXT: mtfprwz f1, r4589; CHECK-LE-P8-NEXT: xxmrghd v2, vs0, vs1590; CHECK-LE-P8-NEXT: blr591;592; CHECK-LE-P9-LABEL: test_v4i32_v16i8:593; CHECK-LE-P9: # %bb.0: # %entry594; CHECK-LE-P9-NEXT: mtfprd f0, r3595; CHECK-LE-P9-NEXT: mtfprwz f1, r4596; CHECK-LE-P9-NEXT: xxmrghd v2, vs0, vs1597; CHECK-LE-P9-NEXT: blr598;599; CHECK-BE-P8-LABEL: test_v4i32_v16i8:600; CHECK-BE-P8: # %bb.0: # %entry601; CHECK-BE-P8-NEXT: mtfprwz f0, r3602; CHECK-BE-P8-NEXT: mtfprwz f1, r4603; CHECK-BE-P8-NEXT: xxmrgld v2, vs1, vs0604; CHECK-BE-P8-NEXT: blr605;606; CHECK-BE-P9-LABEL: test_v4i32_v16i8:607; CHECK-BE-P9: # %bb.0: # %entry608; CHECK-BE-P9-NEXT: mtfprwz f0, r3609; CHECK-BE-P9-NEXT: mtfprwz f1, r4610; CHECK-BE-P9-NEXT: xxmrgld v2, vs1, vs0611; CHECK-BE-P9-NEXT: blr612;613; CHECK-AIX-64-P8-LABEL: test_v4i32_v16i8:614; CHECK-AIX-64-P8: # %bb.0: # %entry615; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r3616; CHECK-AIX-64-P8-NEXT: mtfprwz f1, r4617; CHECK-AIX-64-P8-NEXT: xxmrgld v2, vs1, vs0618; CHECK-AIX-64-P8-NEXT: blr619;620; CHECK-AIX-64-P9-LABEL: test_v4i32_v16i8:621; CHECK-AIX-64-P9: # %bb.0: # %entry622; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3623; CHECK-AIX-64-P9-NEXT: mtfprwz f1, r4624; CHECK-AIX-64-P9-NEXT: xxmrgld v2, vs1, vs0625; CHECK-AIX-64-P9-NEXT: blr626;627; CHECK-AIX-32-P8-LABEL: test_v4i32_v16i8:628; CHECK-AIX-32-P8: # %bb.0: # %entry629; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)630; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16631; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r3632; CHECK-AIX-32-P8-NEXT: addi r3, r1, -32633; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)634; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r3635; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs1, vs0636; CHECK-AIX-32-P8-NEXT: blr637;638; CHECK-AIX-32-P9-LABEL: test_v4i32_v16i8:639; CHECK-AIX-32-P9: # %bb.0: # %entry640; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)641; CHECK-AIX-32-P9-NEXT: stw r4, -32(r1)642; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)643; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)644; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs1, vs0645; CHECK-AIX-32-P9-NEXT: blr646entry:647 %lhs.tmp = insertelement <16 x i8> undef, i8 %arg1, i32 0648 %lhs = bitcast <16 x i8> %lhs.tmp to <2 x i64>649 %rhs.tmp = insertelement <4 x i32> undef, i32 %arg, i32 0650 %rhs = bitcast <4 x i32> %rhs.tmp to <2 x i64>651 %shuffle = shufflevector <2 x i64> %rhs, <2 x i64> %lhs, <2 x i32> <i32 0, i32 2>652 ret <2 x i64> %shuffle653}654 655define <2 x i64> @test_none_v4i32(i32 %arg1, ptr nocapture noundef readonly %b) {656; CHECK-LE-P8-LABEL: test_none_v4i32:657; CHECK-LE-P8: # %bb.0: # %entry658; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r4659; CHECK-LE-P8-NEXT: xxswapd v2, vs0660; CHECK-LE-P8-NEXT: mtfprwz f0, r3661; CHECK-LE-P8-NEXT: xxpermdi v2, vs0, v2, 1662; CHECK-LE-P8-NEXT: blr663;664; CHECK-LE-P9-LABEL: test_none_v4i32:665; CHECK-LE-P9: # %bb.0: # %entry666; CHECK-LE-P9-NEXT: lxv v2, 0(r4)667; CHECK-LE-P9-NEXT: mtfprwz f0, r3668; CHECK-LE-P9-NEXT: xxpermdi v2, vs0, v2, 1669; CHECK-LE-P9-NEXT: blr670;671; CHECK-BE-P8-LABEL: test_none_v4i32:672; CHECK-BE-P8: # %bb.0: # %entry673; CHECK-BE-P8-NEXT: mtfprwz f0, r3674; CHECK-BE-P8-NEXT: lxvd2x v2, 0, r4675; CHECK-BE-P8-NEXT: xxpermdi v2, v2, vs0, 1676; CHECK-BE-P8-NEXT: blr677;678; CHECK-BE-P9-LABEL: test_none_v4i32:679; CHECK-BE-P9: # %bb.0: # %entry680; CHECK-BE-P9-NEXT: lxv v2, 0(r4)681; CHECK-BE-P9-NEXT: mtfprwz f0, r3682; CHECK-BE-P9-NEXT: xxpermdi v2, v2, vs0, 1683; CHECK-BE-P9-NEXT: blr684;685; CHECK-AIX-64-P8-LABEL: test_none_v4i32:686; CHECK-AIX-64-P8: # %bb.0: # %entry687; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r3688; CHECK-AIX-64-P8-NEXT: lxvd2x v2, 0, r4689; CHECK-AIX-64-P8-NEXT: xxpermdi v2, v2, vs0, 1690; CHECK-AIX-64-P8-NEXT: blr691;692; CHECK-AIX-64-P9-LABEL: test_none_v4i32:693; CHECK-AIX-64-P9: # %bb.0: # %entry694; CHECK-AIX-64-P9-NEXT: lxv v2, 0(r4)695; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3696; CHECK-AIX-64-P9-NEXT: xxpermdi v2, v2, vs0, 1697; CHECK-AIX-64-P9-NEXT: blr698;699; CHECK-AIX-32-P8-LABEL: test_none_v4i32:700; CHECK-AIX-32-P8: # %bb.0: # %entry701; CHECK-AIX-32-P8-NEXT: stw r3, -16(r1)702; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16703; CHECK-AIX-32-P8-NEXT: lxvd2x v2, 0, r4704; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r3705; CHECK-AIX-32-P8-NEXT: xxmrghd v2, v2, vs0706; CHECK-AIX-32-P8-NEXT: blr707;708; CHECK-AIX-32-P9-LABEL: test_none_v4i32:709; CHECK-AIX-32-P9: # %bb.0: # %entry710; CHECK-AIX-32-P9-NEXT: stw r3, -16(r1)711; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)712; CHECK-AIX-32-P9-NEXT: lxv v2, 0(r4)713; CHECK-AIX-32-P9-NEXT: xxmrghd v2, v2, vs0714; CHECK-AIX-32-P9-NEXT: blr715entry:716 %lhs.tmp = insertelement <4 x i32> undef, i32 %arg1, i32 0717 %lhs = bitcast <4 x i32> %lhs.tmp to <2 x i64>718 %rhs = load <2 x i64>, ptr %b, align 4719 %shuffle = shufflevector <2 x i64> %rhs, <2 x i64> %lhs, <2 x i32> <i32 0, i32 2>720 ret <2 x i64> %shuffle721}722 723define <2 x i64> @test_v4i32_none(i32 %arg1, ptr nocapture noundef readonly %b) {724; CHECK-LE-P8-LABEL: test_v4i32_none:725; CHECK-LE-P8: # %bb.0: # %entry726; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r4727; CHECK-LE-P8-NEXT: xxswapd v2, vs0728; CHECK-LE-P8-NEXT: mtfprwz f0, r3729; CHECK-LE-P8-NEXT: xxpermdi v2, v2, vs0, 2730; CHECK-LE-P8-NEXT: blr731;732; CHECK-LE-P9-LABEL: test_v4i32_none:733; CHECK-LE-P9: # %bb.0: # %entry734; CHECK-LE-P9-NEXT: lxv v2, 0(r4)735; CHECK-LE-P9-NEXT: mtfprwz f0, r3736; CHECK-LE-P9-NEXT: xxpermdi v2, v2, vs0, 2737; CHECK-LE-P9-NEXT: blr738;739; CHECK-BE-P8-LABEL: test_v4i32_none:740; CHECK-BE-P8: # %bb.0: # %entry741; CHECK-BE-P8-NEXT: mtfprwz f0, r3742; CHECK-BE-P8-NEXT: lxvd2x v2, 0, r4743; CHECK-BE-P8-NEXT: xxpermdi v2, vs0, v2, 2744; CHECK-BE-P8-NEXT: blr745;746; CHECK-BE-P9-LABEL: test_v4i32_none:747; CHECK-BE-P9: # %bb.0: # %entry748; CHECK-BE-P9-NEXT: lxv v2, 0(r4)749; CHECK-BE-P9-NEXT: mtfprwz f0, r3750; CHECK-BE-P9-NEXT: xxpermdi v2, vs0, v2, 2751; CHECK-BE-P9-NEXT: blr752;753; CHECK-AIX-64-P8-LABEL: test_v4i32_none:754; CHECK-AIX-64-P8: # %bb.0: # %entry755; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r3756; CHECK-AIX-64-P8-NEXT: lxvd2x v2, 0, r4757; CHECK-AIX-64-P8-NEXT: xxpermdi v2, vs0, v2, 2758; CHECK-AIX-64-P8-NEXT: blr759;760; CHECK-AIX-64-P9-LABEL: test_v4i32_none:761; CHECK-AIX-64-P9: # %bb.0: # %entry762; CHECK-AIX-64-P9-NEXT: lxv v2, 0(r4)763; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3764; CHECK-AIX-64-P9-NEXT: xxpermdi v2, vs0, v2, 2765; CHECK-AIX-64-P9-NEXT: blr766;767; CHECK-AIX-32-P8-LABEL: test_v4i32_none:768; CHECK-AIX-32-P8: # %bb.0: # %entry769; CHECK-AIX-32-P8-NEXT: stw r3, -16(r1)770; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16771; CHECK-AIX-32-P8-NEXT: lxvd2x v2, 0, r4772; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r3773; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs0, v2774; CHECK-AIX-32-P8-NEXT: blr775;776; CHECK-AIX-32-P9-LABEL: test_v4i32_none:777; CHECK-AIX-32-P9: # %bb.0: # %entry778; CHECK-AIX-32-P9-NEXT: stw r3, -16(r1)779; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)780; CHECK-AIX-32-P9-NEXT: lxv v2, 0(r4)781; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs0, v2782; CHECK-AIX-32-P9-NEXT: blr783entry:784 %lhs.tmp = insertelement <4 x i32> undef, i32 %arg1, i32 0785 %lhs = bitcast <4 x i32> %lhs.tmp to <2 x i64>786 %rhs = load <2 x i64>, ptr %b, align 4787 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>788 ret <2 x i64> %shuffle789}790 791define <2 x i64> @test_v16i8_v2i64(i8 %arg1, i64 %arg) {792; CHECK-LE-P8-LABEL: test_v16i8_v2i64:793; CHECK-LE-P8: # %bb.0: # %entry794; CHECK-LE-P8-NEXT: mtfprd f0, r3795; CHECK-LE-P8-NEXT: mtfprd f1, r4796; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs0797; CHECK-LE-P8-NEXT: blr798;799; CHECK-LE-P9-LABEL: test_v16i8_v2i64:800; CHECK-LE-P9: # %bb.0: # %entry801; CHECK-LE-P9-NEXT: mtfprd f0, r3802; CHECK-LE-P9-NEXT: mtfprd f1, r4803; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs0804; CHECK-LE-P9-NEXT: blr805;806; CHECK-BE-P8-LABEL: test_v16i8_v2i64:807; CHECK-BE-P8: # %bb.0: # %entry808; CHECK-BE-P8-NEXT: sldi r3, r3, 56809; CHECK-BE-P8-NEXT: mtfprd f1, r4810; CHECK-BE-P8-NEXT: mtfprd f0, r3811; CHECK-BE-P8-NEXT: xxmrghd v2, vs0, vs1812; CHECK-BE-P8-NEXT: blr813;814; CHECK-BE-P9-LABEL: test_v16i8_v2i64:815; CHECK-BE-P9: # %bb.0: # %entry816; CHECK-BE-P9-NEXT: sldi r3, r3, 56817; CHECK-BE-P9-NEXT: mtfprd f1, r4818; CHECK-BE-P9-NEXT: mtfprd f0, r3819; CHECK-BE-P9-NEXT: xxmrghd v2, vs0, vs1820; CHECK-BE-P9-NEXT: blr821;822; CHECK-AIX-64-P8-LABEL: test_v16i8_v2i64:823; CHECK-AIX-64-P8: # %bb.0: # %entry824; CHECK-AIX-64-P8-NEXT: sldi r3, r3, 56825; CHECK-AIX-64-P8-NEXT: mtfprd f1, r4826; CHECK-AIX-64-P8-NEXT: mtfprd f0, r3827; CHECK-AIX-64-P8-NEXT: xxmrghd v2, vs0, vs1828; CHECK-AIX-64-P8-NEXT: blr829;830; CHECK-AIX-64-P9-LABEL: test_v16i8_v2i64:831; CHECK-AIX-64-P9: # %bb.0: # %entry832; CHECK-AIX-64-P9-NEXT: sldi r3, r3, 56833; CHECK-AIX-64-P9-NEXT: mtfprd f1, r4834; CHECK-AIX-64-P9-NEXT: mtfprd f0, r3835; CHECK-AIX-64-P9-NEXT: xxmrghd v2, vs0, vs1836; CHECK-AIX-64-P9-NEXT: blr837;838; CHECK-AIX-32-P8-LABEL: test_v16i8_v2i64:839; CHECK-AIX-32-P8: # %bb.0: # %entry840; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)841; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16842; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r3843; CHECK-AIX-32-P8-NEXT: lwz r3, L..C0(r2) # %const.0844; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)845; CHECK-AIX-32-P8-NEXT: stw r5, -48(r1)846; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3847; CHECK-AIX-32-P8-NEXT: addi r3, r1, -32848; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3849; CHECK-AIX-32-P8-NEXT: lwz r3, L..C1(r2) # %const.1850; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v4, v3851; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3852; CHECK-AIX-32-P8-NEXT: addi r3, r1, -48853; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3854; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v4, v3855; CHECK-AIX-32-P8-NEXT: blr856;857; CHECK-AIX-32-P9-LABEL: test_v16i8_v2i64:858; CHECK-AIX-32-P9: # %bb.0: # %entry859; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)860; CHECK-AIX-32-P9-NEXT: mtfprwz f0, r4861; CHECK-AIX-32-P9-NEXT: lxv v2, -16(r1)862; CHECK-AIX-32-P9-NEXT: xxinsertw v2, vs0, 8863; CHECK-AIX-32-P9-NEXT: mtfprwz f0, r5864; CHECK-AIX-32-P9-NEXT: xxinsertw v2, vs0, 12865; CHECK-AIX-32-P9-NEXT: blr866entry:867 %lhs.tmp = insertelement <16 x i8> undef, i8 %arg1, i32 0868 %lhs = bitcast <16 x i8> %lhs.tmp to <2 x i64>869 %rhs.tmp = insertelement <2 x i64> undef, i64 %arg, i32 0870 %rhs = bitcast <2 x i64> %rhs.tmp to <2 x i64>871 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>872 ret <2 x i64> %shuffle873}874 875define <2 x i64> @test_v2i64_v16i8(i8 %arg1, i64 %arg) {876; CHECK-LE-P8-LABEL: test_v2i64_v16i8:877; CHECK-LE-P8: # %bb.0: # %entry878; CHECK-LE-P8-NEXT: mtfprd f0, r3879; CHECK-LE-P8-NEXT: mtfprd f1, r4880; CHECK-LE-P8-NEXT: xxmrghd v2, vs0, vs1881; CHECK-LE-P8-NEXT: blr882;883; CHECK-LE-P9-LABEL: test_v2i64_v16i8:884; CHECK-LE-P9: # %bb.0: # %entry885; CHECK-LE-P9-NEXT: mtfprd f0, r3886; CHECK-LE-P9-NEXT: mtfprd f1, r4887; CHECK-LE-P9-NEXT: xxmrghd v2, vs0, vs1888; CHECK-LE-P9-NEXT: blr889;890; CHECK-BE-P8-LABEL: test_v2i64_v16i8:891; CHECK-BE-P8: # %bb.0: # %entry892; CHECK-BE-P8-NEXT: mtfprd f0, r4893; CHECK-BE-P8-NEXT: xxspltd v2, vs0, 0894; CHECK-BE-P8-NEXT: mtfprwz f0, r3895; CHECK-BE-P8-NEXT: xxmrgld v2, v2, vs0896; CHECK-BE-P8-NEXT: blr897;898; CHECK-BE-P9-LABEL: test_v2i64_v16i8:899; CHECK-BE-P9: # %bb.0: # %entry900; CHECK-BE-P9-NEXT: mtfprwz f0, r3901; CHECK-BE-P9-NEXT: mtvsrdd v2, r4, r4902; CHECK-BE-P9-NEXT: xxmrgld v2, v2, vs0903; CHECK-BE-P9-NEXT: blr904;905; CHECK-AIX-64-P8-LABEL: test_v2i64_v16i8:906; CHECK-AIX-64-P8: # %bb.0: # %entry907; CHECK-AIX-64-P8-NEXT: mtfprd f0, r4908; CHECK-AIX-64-P8-NEXT: xxmrghd v2, vs0, vs0909; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r3910; CHECK-AIX-64-P8-NEXT: xxmrgld v2, v2, vs0911; CHECK-AIX-64-P8-NEXT: blr912;913; CHECK-AIX-64-P9-LABEL: test_v2i64_v16i8:914; CHECK-AIX-64-P9: # %bb.0: # %entry915; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3916; CHECK-AIX-64-P9-NEXT: mtvsrdd v2, r4, r4917; CHECK-AIX-64-P9-NEXT: xxmrgld v2, v2, vs0918; CHECK-AIX-64-P9-NEXT: blr919;920; CHECK-AIX-32-P8-LABEL: test_v2i64_v16i8:921; CHECK-AIX-32-P8: # %bb.0: # %entry922; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)923; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16924; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r3925; CHECK-AIX-32-P8-NEXT: addi r3, r1, -32926; CHECK-AIX-32-P8-NEXT: stw r5, -32(r1)927; CHECK-AIX-32-P8-NEXT: stw r4, -48(r1)928; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r3929; CHECK-AIX-32-P8-NEXT: addi r3, r1, -48930; CHECK-AIX-32-P8-NEXT: lxvw4x vs2, 0, r3931; CHECK-AIX-32-P8-NEXT: xxmrghw vs1, vs2, vs1932; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs1, vs0933; CHECK-AIX-32-P8-NEXT: blr934;935; CHECK-AIX-32-P9-LABEL: test_v2i64_v16i8:936; CHECK-AIX-32-P9: # %bb.0: # %entry937; CHECK-AIX-32-P9-NEXT: stw r5, -32(r1)938; CHECK-AIX-32-P9-NEXT: stw r4, -48(r1)939; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)940; CHECK-AIX-32-P9-NEXT: lxv vs2, -48(r1)941; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)942; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)943; CHECK-AIX-32-P9-NEXT: xxmrghw vs1, vs2, vs1944; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs1, vs0945; CHECK-AIX-32-P9-NEXT: blr946entry:947 %lhs.tmp = insertelement <16 x i8> undef, i8 %arg1, i32 0948 %lhs = bitcast <16 x i8> %lhs.tmp to <2 x i64>949 %rhs.tmp = insertelement <2 x i64> undef, i64 %arg, i32 0950 %rhs = bitcast <2 x i64> %rhs.tmp to <2 x i64>951 %shuffle = shufflevector <2 x i64> %rhs, <2 x i64> %lhs, <2 x i32> <i32 0, i32 2>952 ret <2 x i64> %shuffle953}954 955define <2 x i64> @test_none_v2i64(ptr nocapture noundef readonly %b, i64 %arg) {956; CHECK-LE-P8-LABEL: test_none_v2i64:957; CHECK-LE-P8: # %bb.0: # %entry958; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r3959; CHECK-LE-P8-NEXT: xxswapd v2, vs0960; CHECK-LE-P8-NEXT: mtfprd f0, r4961; CHECK-LE-P8-NEXT: xxpermdi v2, vs0, v2, 1962; CHECK-LE-P8-NEXT: blr963;964; CHECK-LE-P9-LABEL: test_none_v2i64:965; CHECK-LE-P9: # %bb.0: # %entry966; CHECK-LE-P9-NEXT: lxv v2, 0(r3)967; CHECK-LE-P9-NEXT: mtfprd f0, r4968; CHECK-LE-P9-NEXT: xxpermdi v2, vs0, v2, 1969; CHECK-LE-P9-NEXT: blr970;971; CHECK-BE-P8-LABEL: test_none_v2i64:972; CHECK-BE-P8: # %bb.0: # %entry973; CHECK-BE-P8-NEXT: lxvd2x v2, 0, r3974; CHECK-BE-P8-NEXT: mtfprd f0, r4975; CHECK-BE-P8-NEXT: xxmrghd v2, v2, vs0976; CHECK-BE-P8-NEXT: blr977;978; CHECK-BE-P9-LABEL: test_none_v2i64:979; CHECK-BE-P9: # %bb.0: # %entry980; CHECK-BE-P9-NEXT: lxv v2, 0(r3)981; CHECK-BE-P9-NEXT: mtfprd f0, r4982; CHECK-BE-P9-NEXT: xxmrghd v2, v2, vs0983; CHECK-BE-P9-NEXT: blr984;985; CHECK-AIX-64-P8-LABEL: test_none_v2i64:986; CHECK-AIX-64-P8: # %bb.0: # %entry987; CHECK-AIX-64-P8-NEXT: lxvd2x v2, 0, r3988; CHECK-AIX-64-P8-NEXT: mtfprd f0, r4989; CHECK-AIX-64-P8-NEXT: xxmrghd v2, v2, vs0990; CHECK-AIX-64-P8-NEXT: blr991;992; CHECK-AIX-64-P9-LABEL: test_none_v2i64:993; CHECK-AIX-64-P9: # %bb.0: # %entry994; CHECK-AIX-64-P9-NEXT: lxv v2, 0(r3)995; CHECK-AIX-64-P9-NEXT: mtfprd f0, r4996; CHECK-AIX-64-P9-NEXT: xxmrghd v2, v2, vs0997; CHECK-AIX-64-P9-NEXT: blr998;999; CHECK-AIX-32-P8-LABEL: test_none_v2i64:1000; CHECK-AIX-32-P8: # %bb.0: # %entry1001; CHECK-AIX-32-P8-NEXT: stw r4, -16(r1)1002; CHECK-AIX-32-P8-NEXT: stw r5, -32(r1)1003; CHECK-AIX-32-P8-NEXT: lwz r4, L..C2(r2) # %const.01004; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r31005; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161006; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r41007; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r31008; CHECK-AIX-32-P8-NEXT: lwz r3, L..C3(r2) # %const.11009; CHECK-AIX-32-P8-NEXT: vperm v2, v3, v4, v21010; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r31011; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321012; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r31013; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v4, v31014; CHECK-AIX-32-P8-NEXT: blr1015;1016; CHECK-AIX-32-P9-LABEL: test_none_v2i64:1017; CHECK-AIX-32-P9: # %bb.0: # %entry1018; CHECK-AIX-32-P9-NEXT: lxv v2, 0(r3)1019; CHECK-AIX-32-P9-NEXT: mtfprwz f0, r41020; CHECK-AIX-32-P9-NEXT: xxinsertw v2, vs0, 81021; CHECK-AIX-32-P9-NEXT: mtfprwz f0, r51022; CHECK-AIX-32-P9-NEXT: xxinsertw v2, vs0, 121023; CHECK-AIX-32-P9-NEXT: blr1024entry:1025 %lhs = load <2 x i64>, ptr %b, align 41026 %rhs = insertelement <2 x i64> undef, i64 %arg, i32 01027 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>1028 ret <2 x i64> %shuffle1029}1030 1031define <2 x i64> @test_v2i64_none(ptr nocapture noundef readonly %b, i64 %arg) {1032; CHECK-LE-P8-LABEL: test_v2i64_none:1033; CHECK-LE-P8: # %bb.0: # %entry1034; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r31035; CHECK-LE-P8-NEXT: xxswapd v2, vs01036; CHECK-LE-P8-NEXT: mtfprd f0, r41037; CHECK-LE-P8-NEXT: xxpermdi v2, v2, vs0, 21038; CHECK-LE-P8-NEXT: blr1039;1040; CHECK-LE-P9-LABEL: test_v2i64_none:1041; CHECK-LE-P9: # %bb.0: # %entry1042; CHECK-LE-P9-NEXT: lxv v2, 0(r3)1043; CHECK-LE-P9-NEXT: mtfprd f0, r41044; CHECK-LE-P9-NEXT: xxpermdi v2, v2, vs0, 21045; CHECK-LE-P9-NEXT: blr1046;1047; CHECK-BE-P8-LABEL: test_v2i64_none:1048; CHECK-BE-P8: # %bb.0: # %entry1049; CHECK-BE-P8-NEXT: mtfprd f0, r41050; CHECK-BE-P8-NEXT: lxvd2x v3, 0, r31051; CHECK-BE-P8-NEXT: xxspltd v2, vs0, 01052; CHECK-BE-P8-NEXT: xxmrghd v2, v2, v31053; CHECK-BE-P8-NEXT: blr1054;1055; CHECK-BE-P9-LABEL: test_v2i64_none:1056; CHECK-BE-P9: # %bb.0: # %entry1057; CHECK-BE-P9-NEXT: lxv v2, 0(r3)1058; CHECK-BE-P9-NEXT: mtvsrdd v3, r4, r41059; CHECK-BE-P9-NEXT: xxmrghd v2, v3, v21060; CHECK-BE-P9-NEXT: blr1061;1062; CHECK-AIX-64-P8-LABEL: test_v2i64_none:1063; CHECK-AIX-64-P8: # %bb.0: # %entry1064; CHECK-AIX-64-P8-NEXT: mtfprd f0, r41065; CHECK-AIX-64-P8-NEXT: lxvd2x v3, 0, r31066; CHECK-AIX-64-P8-NEXT: xxmrghd v2, vs0, vs01067; CHECK-AIX-64-P8-NEXT: xxmrghd v2, v2, v31068; CHECK-AIX-64-P8-NEXT: blr1069;1070; CHECK-AIX-64-P9-LABEL: test_v2i64_none:1071; CHECK-AIX-64-P9: # %bb.0: # %entry1072; CHECK-AIX-64-P9-NEXT: lxv v2, 0(r3)1073; CHECK-AIX-64-P9-NEXT: mtvsrdd v3, r4, r41074; CHECK-AIX-64-P9-NEXT: xxmrghd v2, v3, v21075; CHECK-AIX-64-P9-NEXT: blr1076;1077; CHECK-AIX-32-P8-LABEL: test_v2i64_none:1078; CHECK-AIX-32-P8: # %bb.0: # %entry1079; CHECK-AIX-32-P8-NEXT: lxvd2x v2, 0, r31080; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161081; CHECK-AIX-32-P8-NEXT: stw r5, -16(r1)1082; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)1083; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r31084; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321085; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r31086; CHECK-AIX-32-P8-NEXT: xxmrghw vs0, vs1, vs01087; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs0, v21088; CHECK-AIX-32-P8-NEXT: blr1089;1090; CHECK-AIX-32-P9-LABEL: test_v2i64_none:1091; CHECK-AIX-32-P9: # %bb.0: # %entry1092; CHECK-AIX-32-P9-NEXT: lxv v2, 0(r3)1093; CHECK-AIX-32-P9-NEXT: stw r5, -16(r1)1094; CHECK-AIX-32-P9-NEXT: stw r4, -32(r1)1095; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)1096; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)1097; CHECK-AIX-32-P9-NEXT: xxmrghw vs0, vs1, vs01098; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs0, v21099; CHECK-AIX-32-P9-NEXT: blr1100entry:1101 %lhs = load <2 x i64>, ptr %b, align 41102 %rhs = insertelement <2 x i64> undef, i64 %arg, i32 01103 %shuffle = shufflevector <2 x i64> %rhs, <2 x i64> %lhs, <2 x i32> <i32 0, i32 2>1104 ret <2 x i64> %shuffle1105}1106 1107define <2 x i64> @test_v8i16_v8i16(i16 %arg1, i16 %arg) {1108; CHECK-LE-P8-LABEL: test_v8i16_v8i16:1109; CHECK-LE-P8: # %bb.0: # %entry1110; CHECK-LE-P8-NEXT: mtfprd f0, r31111; CHECK-LE-P8-NEXT: mtfprd f1, r41112; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs01113; CHECK-LE-P8-NEXT: blr1114;1115; CHECK-LE-P9-LABEL: test_v8i16_v8i16:1116; CHECK-LE-P9: # %bb.0: # %entry1117; CHECK-LE-P9-NEXT: mtfprd f0, r31118; CHECK-LE-P9-NEXT: mtfprd f1, r41119; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs01120; CHECK-LE-P9-NEXT: blr1121;1122; CHECK-BE-P8-LABEL: test_v8i16_v8i16:1123; CHECK-BE-P8: # %bb.0: # %entry1124; CHECK-BE-P8-NEXT: mtfprwz f0, r31125; CHECK-BE-P8-NEXT: mtfprwz f1, r41126; CHECK-BE-P8-NEXT: xxmrgld v2, vs0, vs11127; CHECK-BE-P8-NEXT: blr1128;1129; CHECK-BE-P9-LABEL: test_v8i16_v8i16:1130; CHECK-BE-P9: # %bb.0: # %entry1131; CHECK-BE-P9-NEXT: mtfprwz f0, r31132; CHECK-BE-P9-NEXT: mtfprwz f1, r41133; CHECK-BE-P9-NEXT: xxmrgld v2, vs0, vs11134; CHECK-BE-P9-NEXT: blr1135;1136; CHECK-AIX-64-P8-LABEL: test_v8i16_v8i16:1137; CHECK-AIX-64-P8: # %bb.0: # %entry1138; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r31139; CHECK-AIX-64-P8-NEXT: mtfprwz f1, r41140; CHECK-AIX-64-P8-NEXT: xxmrgld v2, vs0, vs11141; CHECK-AIX-64-P8-NEXT: blr1142;1143; CHECK-AIX-64-P9-LABEL: test_v8i16_v8i16:1144; CHECK-AIX-64-P9: # %bb.0: # %entry1145; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r31146; CHECK-AIX-64-P9-NEXT: mtfprwz f1, r41147; CHECK-AIX-64-P9-NEXT: xxmrgld v2, vs0, vs11148; CHECK-AIX-64-P9-NEXT: blr1149;1150; CHECK-AIX-32-P8-LABEL: test_v8i16_v8i16:1151; CHECK-AIX-32-P8: # %bb.0: # %entry1152; CHECK-AIX-32-P8-NEXT: sth r3, -16(r1)1153; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161154; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r31155; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321156; CHECK-AIX-32-P8-NEXT: sth r4, -32(r1)1157; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r31158; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs0, vs11159; CHECK-AIX-32-P8-NEXT: blr1160;1161; CHECK-AIX-32-P9-LABEL: test_v8i16_v8i16:1162; CHECK-AIX-32-P9: # %bb.0: # %entry1163; CHECK-AIX-32-P9-NEXT: sth r3, -16(r1)1164; CHECK-AIX-32-P9-NEXT: sth r4, -32(r1)1165; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)1166; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)1167; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs0, vs11168; CHECK-AIX-32-P9-NEXT: blr1169entry:1170 %lhs.tmp = insertelement <8 x i16> undef, i16 %arg1, i32 01171 %lhs = bitcast <8 x i16> %lhs.tmp to <2 x i64>1172 %rhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 01173 %rhs = bitcast <8 x i16> %rhs.tmp to <2 x i64>1174 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>1175 ret <2 x i64> %shuffle1176}1177 1178define <2 x i64> @test_v8i16_v4i32(i16 %arg1, i32 %arg) {1179; CHECK-LE-P8-LABEL: test_v8i16_v4i32:1180; CHECK-LE-P8: # %bb.0: # %entry1181; CHECK-LE-P8-NEXT: mtfprd f0, r31182; CHECK-LE-P8-NEXT: mtfprwz f1, r41183; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs01184; CHECK-LE-P8-NEXT: blr1185;1186; CHECK-LE-P9-LABEL: test_v8i16_v4i32:1187; CHECK-LE-P9: # %bb.0: # %entry1188; CHECK-LE-P9-NEXT: mtfprd f0, r31189; CHECK-LE-P9-NEXT: mtfprwz f1, r41190; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs01191; CHECK-LE-P9-NEXT: blr1192;1193; CHECK-BE-P8-LABEL: test_v8i16_v4i32:1194; CHECK-BE-P8: # %bb.0: # %entry1195; CHECK-BE-P8-NEXT: mtfprwz f0, r31196; CHECK-BE-P8-NEXT: mtfprwz f1, r41197; CHECK-BE-P8-NEXT: xxmrgld v2, vs0, vs11198; CHECK-BE-P8-NEXT: blr1199;1200; CHECK-BE-P9-LABEL: test_v8i16_v4i32:1201; CHECK-BE-P9: # %bb.0: # %entry1202; CHECK-BE-P9-NEXT: mtfprwz f0, r31203; CHECK-BE-P9-NEXT: mtfprwz f1, r41204; CHECK-BE-P9-NEXT: xxmrgld v2, vs0, vs11205; CHECK-BE-P9-NEXT: blr1206;1207; CHECK-AIX-64-P8-LABEL: test_v8i16_v4i32:1208; CHECK-AIX-64-P8: # %bb.0: # %entry1209; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r31210; CHECK-AIX-64-P8-NEXT: mtfprwz f1, r41211; CHECK-AIX-64-P8-NEXT: xxmrgld v2, vs0, vs11212; CHECK-AIX-64-P8-NEXT: blr1213;1214; CHECK-AIX-64-P9-LABEL: test_v8i16_v4i32:1215; CHECK-AIX-64-P9: # %bb.0: # %entry1216; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r31217; CHECK-AIX-64-P9-NEXT: mtfprwz f1, r41218; CHECK-AIX-64-P9-NEXT: xxmrgld v2, vs0, vs11219; CHECK-AIX-64-P9-NEXT: blr1220;1221; CHECK-AIX-32-P8-LABEL: test_v8i16_v4i32:1222; CHECK-AIX-32-P8: # %bb.0: # %entry1223; CHECK-AIX-32-P8-NEXT: sth r3, -16(r1)1224; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161225; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r31226; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321227; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)1228; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r31229; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs0, vs11230; CHECK-AIX-32-P8-NEXT: blr1231;1232; CHECK-AIX-32-P9-LABEL: test_v8i16_v4i32:1233; CHECK-AIX-32-P9: # %bb.0: # %entry1234; CHECK-AIX-32-P9-NEXT: sth r3, -16(r1)1235; CHECK-AIX-32-P9-NEXT: stw r4, -32(r1)1236; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)1237; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)1238; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs0, vs11239; CHECK-AIX-32-P9-NEXT: blr1240entry:1241 %lhs.tmp = insertelement <8 x i16> undef, i16 %arg1, i32 01242 %lhs = bitcast <8 x i16> %lhs.tmp to <2 x i64>1243 %rhs.tmp = insertelement <4 x i32> undef, i32 %arg, i32 01244 %rhs = bitcast <4 x i32> %rhs.tmp to <2 x i64>1245 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>1246 ret <2 x i64> %shuffle1247}1248 1249define <2 x i64> @test_v8i16_v2i64(i16 %arg1, i64 %arg) {1250; CHECK-LE-P8-LABEL: test_v8i16_v2i64:1251; CHECK-LE-P8: # %bb.0: # %entry1252; CHECK-LE-P8-NEXT: mtfprd f0, r31253; CHECK-LE-P8-NEXT: mtfprd f1, r41254; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs01255; CHECK-LE-P8-NEXT: blr1256;1257; CHECK-LE-P9-LABEL: test_v8i16_v2i64:1258; CHECK-LE-P9: # %bb.0: # %entry1259; CHECK-LE-P9-NEXT: mtfprd f0, r31260; CHECK-LE-P9-NEXT: mtfprd f1, r41261; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs01262; CHECK-LE-P9-NEXT: blr1263;1264; CHECK-BE-P8-LABEL: test_v8i16_v2i64:1265; CHECK-BE-P8: # %bb.0: # %entry1266; CHECK-BE-P8-NEXT: sldi r3, r3, 481267; CHECK-BE-P8-NEXT: mtfprd f1, r41268; CHECK-BE-P8-NEXT: mtfprd f0, r31269; CHECK-BE-P8-NEXT: xxmrghd v2, vs0, vs11270; CHECK-BE-P8-NEXT: blr1271;1272; CHECK-BE-P9-LABEL: test_v8i16_v2i64:1273; CHECK-BE-P9: # %bb.0: # %entry1274; CHECK-BE-P9-NEXT: sldi r3, r3, 481275; CHECK-BE-P9-NEXT: mtfprd f1, r41276; CHECK-BE-P9-NEXT: mtfprd f0, r31277; CHECK-BE-P9-NEXT: xxmrghd v2, vs0, vs11278; CHECK-BE-P9-NEXT: blr1279;1280; CHECK-AIX-64-P8-LABEL: test_v8i16_v2i64:1281; CHECK-AIX-64-P8: # %bb.0: # %entry1282; CHECK-AIX-64-P8-NEXT: sldi r3, r3, 481283; CHECK-AIX-64-P8-NEXT: mtfprd f1, r41284; CHECK-AIX-64-P8-NEXT: mtfprd f0, r31285; CHECK-AIX-64-P8-NEXT: xxmrghd v2, vs0, vs11286; CHECK-AIX-64-P8-NEXT: blr1287;1288; CHECK-AIX-64-P9-LABEL: test_v8i16_v2i64:1289; CHECK-AIX-64-P9: # %bb.0: # %entry1290; CHECK-AIX-64-P9-NEXT: sldi r3, r3, 481291; CHECK-AIX-64-P9-NEXT: mtfprd f1, r41292; CHECK-AIX-64-P9-NEXT: mtfprd f0, r31293; CHECK-AIX-64-P9-NEXT: xxmrghd v2, vs0, vs11294; CHECK-AIX-64-P9-NEXT: blr1295;1296; CHECK-AIX-32-P8-LABEL: test_v8i16_v2i64:1297; CHECK-AIX-32-P8: # %bb.0: # %entry1298; CHECK-AIX-32-P8-NEXT: sth r3, -16(r1)1299; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161300; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r31301; CHECK-AIX-32-P8-NEXT: lwz r3, L..C4(r2) # %const.01302; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)1303; CHECK-AIX-32-P8-NEXT: stw r5, -48(r1)1304; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r31305; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321306; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r31307; CHECK-AIX-32-P8-NEXT: lwz r3, L..C5(r2) # %const.11308; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v4, v31309; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r31310; CHECK-AIX-32-P8-NEXT: addi r3, r1, -481311; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r31312; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v4, v31313; CHECK-AIX-32-P8-NEXT: blr1314;1315; CHECK-AIX-32-P9-LABEL: test_v8i16_v2i64:1316; CHECK-AIX-32-P9: # %bb.0: # %entry1317; CHECK-AIX-32-P9-NEXT: sth r3, -16(r1)1318; CHECK-AIX-32-P9-NEXT: mtfprwz f0, r41319; CHECK-AIX-32-P9-NEXT: lxv v2, -16(r1)1320; CHECK-AIX-32-P9-NEXT: xxinsertw v2, vs0, 81321; CHECK-AIX-32-P9-NEXT: mtfprwz f0, r51322; CHECK-AIX-32-P9-NEXT: xxinsertw v2, vs0, 121323; CHECK-AIX-32-P9-NEXT: blr1324entry:1325 %lhs.tmp = insertelement <8 x i16> undef, i16 %arg1, i32 01326 %lhs = bitcast <8 x i16> %lhs.tmp to <2 x i64>1327 %rhs.tmp = insertelement <2 x i64> undef, i64 %arg, i32 01328 %rhs = bitcast <2 x i64> %rhs.tmp to <2 x i64>1329 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>1330 ret <2 x i64> %shuffle1331}1332 1333define <2 x i64> @test_v4i32_v4i32(i32 %arg1, i32 %arg) {1334; CHECK-LE-P8-LABEL: test_v4i32_v4i32:1335; CHECK-LE-P8: # %bb.0: # %entry1336; CHECK-LE-P8-NEXT: mtfprwz f0, r31337; CHECK-LE-P8-NEXT: mtfprwz f1, r41338; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs01339; CHECK-LE-P8-NEXT: blr1340;1341; CHECK-LE-P9-LABEL: test_v4i32_v4i32:1342; CHECK-LE-P9: # %bb.0: # %entry1343; CHECK-LE-P9-NEXT: mtfprwz f0, r31344; CHECK-LE-P9-NEXT: mtfprwz f1, r41345; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs01346; CHECK-LE-P9-NEXT: blr1347;1348; CHECK-BE-P8-LABEL: test_v4i32_v4i32:1349; CHECK-BE-P8: # %bb.0: # %entry1350; CHECK-BE-P8-NEXT: mtfprwz f0, r31351; CHECK-BE-P8-NEXT: mtfprwz f1, r41352; CHECK-BE-P8-NEXT: xxmrgld v2, vs0, vs11353; CHECK-BE-P8-NEXT: blr1354;1355; CHECK-BE-P9-LABEL: test_v4i32_v4i32:1356; CHECK-BE-P9: # %bb.0: # %entry1357; CHECK-BE-P9-NEXT: mtfprwz f0, r31358; CHECK-BE-P9-NEXT: mtfprwz f1, r41359; CHECK-BE-P9-NEXT: xxmrgld v2, vs0, vs11360; CHECK-BE-P9-NEXT: blr1361;1362; CHECK-AIX-64-P8-LABEL: test_v4i32_v4i32:1363; CHECK-AIX-64-P8: # %bb.0: # %entry1364; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r31365; CHECK-AIX-64-P8-NEXT: mtfprwz f1, r41366; CHECK-AIX-64-P8-NEXT: xxmrgld v2, vs0, vs11367; CHECK-AIX-64-P8-NEXT: blr1368;1369; CHECK-AIX-64-P9-LABEL: test_v4i32_v4i32:1370; CHECK-AIX-64-P9: # %bb.0: # %entry1371; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r31372; CHECK-AIX-64-P9-NEXT: mtfprwz f1, r41373; CHECK-AIX-64-P9-NEXT: xxmrgld v2, vs0, vs11374; CHECK-AIX-64-P9-NEXT: blr1375;1376; CHECK-AIX-32-P8-LABEL: test_v4i32_v4i32:1377; CHECK-AIX-32-P8: # %bb.0: # %entry1378; CHECK-AIX-32-P8-NEXT: stw r3, -16(r1)1379; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161380; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r31381; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321382; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)1383; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r31384; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs0, vs11385; CHECK-AIX-32-P8-NEXT: blr1386;1387; CHECK-AIX-32-P9-LABEL: test_v4i32_v4i32:1388; CHECK-AIX-32-P9: # %bb.0: # %entry1389; CHECK-AIX-32-P9-NEXT: stw r3, -16(r1)1390; CHECK-AIX-32-P9-NEXT: stw r4, -32(r1)1391; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)1392; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)1393; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs0, vs11394; CHECK-AIX-32-P9-NEXT: blr1395entry:1396 %lhs.tmp = insertelement <4 x i32> undef, i32 %arg1, i32 01397 %lhs = bitcast <4 x i32> %lhs.tmp to <2 x i64>1398 %rhs.tmp = insertelement <4 x i32> undef, i32 %arg, i32 01399 %rhs = bitcast <4 x i32> %rhs.tmp to <2 x i64>1400 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>1401 ret <2 x i64> %shuffle1402}1403 1404define <2 x i64> @test_v4i32_v8i16(i32 %arg1, i16 %arg) {1405; CHECK-LE-P8-LABEL: test_v4i32_v8i16:1406; CHECK-LE-P8: # %bb.0: # %entry1407; CHECK-LE-P8-NEXT: mtfprwz f0, r31408; CHECK-LE-P8-NEXT: mtfprd f1, r41409; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs01410; CHECK-LE-P8-NEXT: blr1411;1412; CHECK-LE-P9-LABEL: test_v4i32_v8i16:1413; CHECK-LE-P9: # %bb.0: # %entry1414; CHECK-LE-P9-NEXT: mtfprwz f0, r31415; CHECK-LE-P9-NEXT: mtfprd f1, r41416; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs01417; CHECK-LE-P9-NEXT: blr1418;1419; CHECK-BE-P8-LABEL: test_v4i32_v8i16:1420; CHECK-BE-P8: # %bb.0: # %entry1421; CHECK-BE-P8-NEXT: mtfprwz f0, r31422; CHECK-BE-P8-NEXT: mtfprwz f1, r41423; CHECK-BE-P8-NEXT: xxmrgld v2, vs0, vs11424; CHECK-BE-P8-NEXT: blr1425;1426; CHECK-BE-P9-LABEL: test_v4i32_v8i16:1427; CHECK-BE-P9: # %bb.0: # %entry1428; CHECK-BE-P9-NEXT: mtfprwz f0, r31429; CHECK-BE-P9-NEXT: mtfprwz f1, r41430; CHECK-BE-P9-NEXT: xxmrgld v2, vs0, vs11431; CHECK-BE-P9-NEXT: blr1432;1433; CHECK-AIX-64-P8-LABEL: test_v4i32_v8i16:1434; CHECK-AIX-64-P8: # %bb.0: # %entry1435; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r31436; CHECK-AIX-64-P8-NEXT: mtfprwz f1, r41437; CHECK-AIX-64-P8-NEXT: xxmrgld v2, vs0, vs11438; CHECK-AIX-64-P8-NEXT: blr1439;1440; CHECK-AIX-64-P9-LABEL: test_v4i32_v8i16:1441; CHECK-AIX-64-P9: # %bb.0: # %entry1442; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r31443; CHECK-AIX-64-P9-NEXT: mtfprwz f1, r41444; CHECK-AIX-64-P9-NEXT: xxmrgld v2, vs0, vs11445; CHECK-AIX-64-P9-NEXT: blr1446;1447; CHECK-AIX-32-P8-LABEL: test_v4i32_v8i16:1448; CHECK-AIX-32-P8: # %bb.0: # %entry1449; CHECK-AIX-32-P8-NEXT: stw r3, -16(r1)1450; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161451; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r31452; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321453; CHECK-AIX-32-P8-NEXT: sth r4, -32(r1)1454; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r31455; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs0, vs11456; CHECK-AIX-32-P8-NEXT: blr1457;1458; CHECK-AIX-32-P9-LABEL: test_v4i32_v8i16:1459; CHECK-AIX-32-P9: # %bb.0: # %entry1460; CHECK-AIX-32-P9-NEXT: stw r3, -16(r1)1461; CHECK-AIX-32-P9-NEXT: sth r4, -32(r1)1462; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)1463; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)1464; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs0, vs11465; CHECK-AIX-32-P9-NEXT: blr1466entry:1467 %lhs.tmp = insertelement <4 x i32> undef, i32 %arg1, i32 01468 %lhs = bitcast <4 x i32> %lhs.tmp to <2 x i64>1469 %rhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 01470 %rhs = bitcast <8 x i16> %rhs.tmp to <2 x i64>1471 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>1472 ret <2 x i64> %shuffle1473}1474 1475define <2 x i64> @test_v4i32_v2i64(i32 %arg1, i64 %arg) {1476; CHECK-LE-P8-LABEL: test_v4i32_v2i64:1477; CHECK-LE-P8: # %bb.0: # %entry1478; CHECK-LE-P8-NEXT: mtfprwz f0, r31479; CHECK-LE-P8-NEXT: mtfprd f1, r41480; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs01481; CHECK-LE-P8-NEXT: blr1482;1483; CHECK-LE-P9-LABEL: test_v4i32_v2i64:1484; CHECK-LE-P9: # %bb.0: # %entry1485; CHECK-LE-P9-NEXT: mtfprwz f0, r31486; CHECK-LE-P9-NEXT: mtfprd f1, r41487; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs01488; CHECK-LE-P9-NEXT: blr1489;1490; CHECK-BE-P8-LABEL: test_v4i32_v2i64:1491; CHECK-BE-P8: # %bb.0: # %entry1492; CHECK-BE-P8-NEXT: sldi r3, r3, 321493; CHECK-BE-P8-NEXT: mtfprd f1, r41494; CHECK-BE-P8-NEXT: mtfprd f0, r31495; CHECK-BE-P8-NEXT: xxmrghd v2, vs0, vs11496; CHECK-BE-P8-NEXT: blr1497;1498; CHECK-BE-P9-LABEL: test_v4i32_v2i64:1499; CHECK-BE-P9: # %bb.0: # %entry1500; CHECK-BE-P9-NEXT: mtvsrws vs0, r31501; CHECK-BE-P9-NEXT: mtfprd f1, r41502; CHECK-BE-P9-NEXT: xxmrghd v2, vs0, vs11503; CHECK-BE-P9-NEXT: blr1504;1505; CHECK-AIX-64-P8-LABEL: test_v4i32_v2i64:1506; CHECK-AIX-64-P8: # %bb.0: # %entry1507; CHECK-AIX-64-P8-NEXT: sldi r3, r3, 321508; CHECK-AIX-64-P8-NEXT: mtfprd f1, r41509; CHECK-AIX-64-P8-NEXT: mtfprd f0, r31510; CHECK-AIX-64-P8-NEXT: xxmrghd v2, vs0, vs11511; CHECK-AIX-64-P8-NEXT: blr1512;1513; CHECK-AIX-64-P9-LABEL: test_v4i32_v2i64:1514; CHECK-AIX-64-P9: # %bb.0: # %entry1515; CHECK-AIX-64-P9-NEXT: mtvsrws vs0, r31516; CHECK-AIX-64-P9-NEXT: mtfprd f1, r41517; CHECK-AIX-64-P9-NEXT: xxmrghd v2, vs0, vs11518; CHECK-AIX-64-P9-NEXT: blr1519;1520; CHECK-AIX-32-P8-LABEL: test_v4i32_v2i64:1521; CHECK-AIX-32-P8: # %bb.0: # %entry1522; CHECK-AIX-32-P8-NEXT: stw r3, -48(r1)1523; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321524; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)1525; CHECK-AIX-32-P8-NEXT: stw r5, -16(r1)1526; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r31527; CHECK-AIX-32-P8-NEXT: addi r3, r1, -481528; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r31529; CHECK-AIX-32-P8-NEXT: lwz r3, L..C6(r2) # %const.01530; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r31531; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161532; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r31533; CHECK-AIX-32-P8-NEXT: xxmrghw v2, vs1, vs01534; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v4, v31535; CHECK-AIX-32-P8-NEXT: blr1536;1537; CHECK-AIX-32-P9-LABEL: test_v4i32_v2i64:1538; CHECK-AIX-32-P9: # %bb.0: # %entry1539; CHECK-AIX-32-P9-NEXT: stw r4, -32(r1)1540; CHECK-AIX-32-P9-NEXT: stw r3, -48(r1)1541; CHECK-AIX-32-P9-NEXT: lwz r3, L..C0(r2) # %const.01542; CHECK-AIX-32-P9-NEXT: lxv vs0, -32(r1)1543; CHECK-AIX-32-P9-NEXT: lxv vs1, -48(r1)1544; CHECK-AIX-32-P9-NEXT: stw r5, -16(r1)1545; CHECK-AIX-32-P9-NEXT: lxv v2, -16(r1)1546; CHECK-AIX-32-P9-NEXT: xxmrghw v3, vs1, vs01547; CHECK-AIX-32-P9-NEXT: lxv vs0, 0(r3)1548; CHECK-AIX-32-P9-NEXT: xxperm v2, v3, vs01549; CHECK-AIX-32-P9-NEXT: blr1550entry:1551 %lhs.tmp = insertelement <4 x i32> undef, i32 %arg1, i32 01552 %lhs = bitcast <4 x i32> %lhs.tmp to <2 x i64>1553 %rhs = insertelement <2 x i64> undef, i64 %arg, i32 01554 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>1555 ret <2 x i64> %shuffle1556}1557 1558define <2 x i64> @test_v2i64_v2i64(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {1559; CHECK-LE-P8-LABEL: test_v2i64_v2i64:1560; CHECK-LE-P8: # %bb.0: # %entry1561; CHECK-LE-P8-NEXT: ld r3, 0(r3)1562; CHECK-LE-P8-NEXT: lfdx f1, 0, r41563; CHECK-LE-P8-NEXT: mtfprd f0, r31564; CHECK-LE-P8-NEXT: xxswapd v2, vs01565; CHECK-LE-P8-NEXT: xxmrghd v3, vs1, vs01566; CHECK-LE-P8-NEXT: vaddudm v2, v3, v21567; CHECK-LE-P8-NEXT: blr1568;1569; CHECK-LE-P9-LABEL: test_v2i64_v2i64:1570; CHECK-LE-P9: # %bb.0: # %entry1571; CHECK-LE-P9-NEXT: ld r3, 0(r3)1572; CHECK-LE-P9-NEXT: lfd f1, 0(r4)1573; CHECK-LE-P9-NEXT: mtfprd f0, r31574; CHECK-LE-P9-NEXT: xxswapd v2, vs01575; CHECK-LE-P9-NEXT: xxmrghd v3, vs1, vs01576; CHECK-LE-P9-NEXT: vaddudm v2, v3, v21577; CHECK-LE-P9-NEXT: blr1578;1579; CHECK-BE-P8-LABEL: test_v2i64_v2i64:1580; CHECK-BE-P8: # %bb.0: # %entry1581; CHECK-BE-P8-NEXT: lxsdx v2, 0, r31582; CHECK-BE-P8-NEXT: lfdx f0, 0, r41583; CHECK-BE-P8-NEXT: xxmrghd v3, v2, vs01584; CHECK-BE-P8-NEXT: vaddudm v2, v3, v21585; CHECK-BE-P8-NEXT: blr1586;1587; CHECK-BE-P9-LABEL: test_v2i64_v2i64:1588; CHECK-BE-P9: # %bb.0: # %entry1589; CHECK-BE-P9-NEXT: lxsd v2, 0(r3)1590; CHECK-BE-P9-NEXT: lfd f0, 0(r4)1591; CHECK-BE-P9-NEXT: xxmrghd v3, v2, vs01592; CHECK-BE-P9-NEXT: vaddudm v2, v3, v21593; CHECK-BE-P9-NEXT: blr1594;1595; CHECK-AIX-64-P8-LABEL: test_v2i64_v2i64:1596; CHECK-AIX-64-P8: # %bb.0: # %entry1597; CHECK-AIX-64-P8-NEXT: lxsdx v2, 0, r31598; CHECK-AIX-64-P8-NEXT: lfdx f0, 0, r41599; CHECK-AIX-64-P8-NEXT: xxmrghd v3, v2, vs01600; CHECK-AIX-64-P8-NEXT: vaddudm v2, v3, v21601; CHECK-AIX-64-P8-NEXT: blr1602;1603; CHECK-AIX-64-P9-LABEL: test_v2i64_v2i64:1604; CHECK-AIX-64-P9: # %bb.0: # %entry1605; CHECK-AIX-64-P9-NEXT: lxsd v2, 0(r3)1606; CHECK-AIX-64-P9-NEXT: lfd f0, 0(r4)1607; CHECK-AIX-64-P9-NEXT: xxmrghd v3, v2, vs01608; CHECK-AIX-64-P9-NEXT: vaddudm v2, v3, v21609; CHECK-AIX-64-P9-NEXT: blr1610;1611; CHECK-AIX-32-P8-LABEL: test_v2i64_v2i64:1612; CHECK-AIX-32-P8: # %bb.0: # %entry1613; CHECK-AIX-32-P8-NEXT: li r5, 41614; CHECK-AIX-32-P8-NEXT: lfiwzx f1, 0, r31615; CHECK-AIX-32-P8-NEXT: lfiwzx f3, 0, r41616; CHECK-AIX-32-P8-NEXT: lfiwzx f0, r3, r51617; CHECK-AIX-32-P8-NEXT: lfiwzx f2, r4, r51618; CHECK-AIX-32-P8-NEXT: xxspltw vs1, vs1, 11619; CHECK-AIX-32-P8-NEXT: xxspltw vs3, vs3, 11620; CHECK-AIX-32-P8-NEXT: xxspltw vs0, vs0, 11621; CHECK-AIX-32-P8-NEXT: xxspltw vs2, vs2, 11622; CHECK-AIX-32-P8-NEXT: xxmrghw v2, vs1, vs01623; CHECK-AIX-32-P8-NEXT: xxmrghw vs0, vs3, vs21624; CHECK-AIX-32-P8-NEXT: xxmrghd v3, v2, vs01625; CHECK-AIX-32-P8-NEXT: vaddudm v2, v3, v21626; CHECK-AIX-32-P8-NEXT: blr1627;1628; CHECK-AIX-32-P9-LABEL: test_v2i64_v2i64:1629; CHECK-AIX-32-P9: # %bb.0: # %entry1630; CHECK-AIX-32-P9-NEXT: li r5, 41631; CHECK-AIX-32-P9-NEXT: lxvwsx vs1, 0, r31632; CHECK-AIX-32-P9-NEXT: lxvwsx vs0, r3, r51633; CHECK-AIX-32-P9-NEXT: xxmrghw v2, vs1, vs01634; CHECK-AIX-32-P9-NEXT: lxvwsx vs0, r4, r51635; CHECK-AIX-32-P9-NEXT: lxvwsx vs1, 0, r41636; CHECK-AIX-32-P9-NEXT: xxmrghw vs0, vs1, vs01637; CHECK-AIX-32-P9-NEXT: xxmrghd v3, v2, vs01638; CHECK-AIX-32-P9-NEXT: vaddudm v2, v3, v21639; CHECK-AIX-32-P9-NEXT: blr1640entry:1641 %0 = load <8 x i8>, ptr %a, align 81642 %bc1 = bitcast <8 x i8> %0 to i641643 %vecinit3 = insertelement <2 x i64> poison, i64 %bc1, i64 01644 %1 = load <8 x i8>, ptr %b, align 81645 %bc2 = bitcast <8 x i8> %1 to i641646 %vecinit6 = insertelement <2 x i64> undef, i64 %bc2, i64 01647 %2 = bitcast <2 x i64> %vecinit3 to <2 x i64>1648 %3 = bitcast <2 x i64> %vecinit6 to <2 x i64>1649 %shuffle = shufflevector <2 x i64> %2, <2 x i64> %3, <2 x i32> <i32 0, i32 2>1650 %4 = add <2 x i64> %shuffle, %21651 ret <2 x i64> %41652}1653 1654define <2 x i64> @test_v2i64_v4i32(i64 %arg1, i32 %arg) {1655; CHECK-LE-P8-LABEL: test_v2i64_v4i32:1656; CHECK-LE-P8: # %bb.0: # %entry1657; CHECK-LE-P8-NEXT: mtfprd f0, r31658; CHECK-LE-P8-NEXT: mtfprwz f1, r41659; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs01660; CHECK-LE-P8-NEXT: blr1661;1662; CHECK-LE-P9-LABEL: test_v2i64_v4i32:1663; CHECK-LE-P9: # %bb.0: # %entry1664; CHECK-LE-P9-NEXT: mtfprd f0, r31665; CHECK-LE-P9-NEXT: mtfprwz f1, r41666; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs01667; CHECK-LE-P9-NEXT: blr1668;1669; CHECK-BE-P8-LABEL: test_v2i64_v4i32:1670; CHECK-BE-P8: # %bb.0: # %entry1671; CHECK-BE-P8-NEXT: mtfprd f0, r31672; CHECK-BE-P8-NEXT: xxspltd v2, vs0, 01673; CHECK-BE-P8-NEXT: mtfprwz f0, r41674; CHECK-BE-P8-NEXT: xxmrgld v2, v2, vs01675; CHECK-BE-P8-NEXT: blr1676;1677; CHECK-BE-P9-LABEL: test_v2i64_v4i32:1678; CHECK-BE-P9: # %bb.0: # %entry1679; CHECK-BE-P9-NEXT: mtfprwz f0, r41680; CHECK-BE-P9-NEXT: mtvsrdd v2, r3, r31681; CHECK-BE-P9-NEXT: xxmrgld v2, v2, vs01682; CHECK-BE-P9-NEXT: blr1683;1684; CHECK-AIX-64-P8-LABEL: test_v2i64_v4i32:1685; CHECK-AIX-64-P8: # %bb.0: # %entry1686; CHECK-AIX-64-P8-NEXT: mtfprd f0, r31687; CHECK-AIX-64-P8-NEXT: xxmrghd v2, vs0, vs01688; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r41689; CHECK-AIX-64-P8-NEXT: xxmrgld v2, v2, vs01690; CHECK-AIX-64-P8-NEXT: blr1691;1692; CHECK-AIX-64-P9-LABEL: test_v2i64_v4i32:1693; CHECK-AIX-64-P9: # %bb.0: # %entry1694; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r41695; CHECK-AIX-64-P9-NEXT: mtvsrdd v2, r3, r31696; CHECK-AIX-64-P9-NEXT: xxmrgld v2, v2, vs01697; CHECK-AIX-64-P9-NEXT: blr1698;1699; CHECK-AIX-32-P8-LABEL: test_v2i64_v4i32:1700; CHECK-AIX-32-P8: # %bb.0: # %entry1701; CHECK-AIX-32-P8-NEXT: stw r5, -48(r1)1702; CHECK-AIX-32-P8-NEXT: addi r5, r1, -481703; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r51704; CHECK-AIX-32-P8-NEXT: stw r3, -32(r1)1705; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161706; CHECK-AIX-32-P8-NEXT: stw r4, -16(r1)1707; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r31708; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321709; CHECK-AIX-32-P8-NEXT: lxvw4x vs2, 0, r31710; CHECK-AIX-32-P8-NEXT: xxmrghw vs1, vs2, vs11711; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs1, vs01712; CHECK-AIX-32-P8-NEXT: blr1713;1714; CHECK-AIX-32-P9-LABEL: test_v2i64_v4i32:1715; CHECK-AIX-32-P9: # %bb.0: # %entry1716; CHECK-AIX-32-P9-NEXT: stw r4, -16(r1)1717; CHECK-AIX-32-P9-NEXT: stw r3, -32(r1)1718; CHECK-AIX-32-P9-NEXT: lxv vs1, -16(r1)1719; CHECK-AIX-32-P9-NEXT: lxv vs2, -32(r1)1720; CHECK-AIX-32-P9-NEXT: stw r5, -48(r1)1721; CHECK-AIX-32-P9-NEXT: lxv vs0, -48(r1)1722; CHECK-AIX-32-P9-NEXT: xxmrghw vs1, vs2, vs11723; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs1, vs01724; CHECK-AIX-32-P9-NEXT: blr1725entry:1726 %lhs.tmp = insertelement <2 x i64> undef, i64 %arg1, i32 01727 %lhs = bitcast <2 x i64> %lhs.tmp to <2 x i64>1728 %rhs.tmp = insertelement <4 x i32> undef, i32 %arg, i32 01729 %rhs = bitcast <4 x i32> %rhs.tmp to <2 x i64>1730 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>1731 ret <2 x i64> %shuffle1732}1733 1734define <2 x i64> @test_v2i64_v8i16(i64 %arg1, i16 %arg) {1735; CHECK-LE-P8-LABEL: test_v2i64_v8i16:1736; CHECK-LE-P8: # %bb.0: # %entry1737; CHECK-LE-P8-NEXT: mtfprd f0, r31738; CHECK-LE-P8-NEXT: mtfprd f1, r41739; CHECK-LE-P8-NEXT: xxmrghd v2, vs1, vs01740; CHECK-LE-P8-NEXT: blr1741;1742; CHECK-LE-P9-LABEL: test_v2i64_v8i16:1743; CHECK-LE-P9: # %bb.0: # %entry1744; CHECK-LE-P9-NEXT: mtfprd f0, r31745; CHECK-LE-P9-NEXT: mtfprd f1, r41746; CHECK-LE-P9-NEXT: xxmrghd v2, vs1, vs01747; CHECK-LE-P9-NEXT: blr1748;1749; CHECK-BE-P8-LABEL: test_v2i64_v8i16:1750; CHECK-BE-P8: # %bb.0: # %entry1751; CHECK-BE-P8-NEXT: mtfprd f0, r31752; CHECK-BE-P8-NEXT: xxspltd v2, vs0, 01753; CHECK-BE-P8-NEXT: mtfprwz f0, r41754; CHECK-BE-P8-NEXT: xxmrgld v2, v2, vs01755; CHECK-BE-P8-NEXT: blr1756;1757; CHECK-BE-P9-LABEL: test_v2i64_v8i16:1758; CHECK-BE-P9: # %bb.0: # %entry1759; CHECK-BE-P9-NEXT: mtfprwz f0, r41760; CHECK-BE-P9-NEXT: mtvsrdd v2, r3, r31761; CHECK-BE-P9-NEXT: xxmrgld v2, v2, vs01762; CHECK-BE-P9-NEXT: blr1763;1764; CHECK-AIX-64-P8-LABEL: test_v2i64_v8i16:1765; CHECK-AIX-64-P8: # %bb.0: # %entry1766; CHECK-AIX-64-P8-NEXT: mtfprd f0, r31767; CHECK-AIX-64-P8-NEXT: xxmrghd v2, vs0, vs01768; CHECK-AIX-64-P8-NEXT: mtfprwz f0, r41769; CHECK-AIX-64-P8-NEXT: xxmrgld v2, v2, vs01770; CHECK-AIX-64-P8-NEXT: blr1771;1772; CHECK-AIX-64-P9-LABEL: test_v2i64_v8i16:1773; CHECK-AIX-64-P9: # %bb.0: # %entry1774; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r41775; CHECK-AIX-64-P9-NEXT: mtvsrdd v2, r3, r31776; CHECK-AIX-64-P9-NEXT: xxmrgld v2, v2, vs01777; CHECK-AIX-64-P9-NEXT: blr1778;1779; CHECK-AIX-32-P8-LABEL: test_v2i64_v8i16:1780; CHECK-AIX-32-P8: # %bb.0: # %entry1781; CHECK-AIX-32-P8-NEXT: sth r5, -48(r1)1782; CHECK-AIX-32-P8-NEXT: addi r5, r1, -481783; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r51784; CHECK-AIX-32-P8-NEXT: stw r3, -32(r1)1785; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161786; CHECK-AIX-32-P8-NEXT: stw r4, -16(r1)1787; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r31788; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321789; CHECK-AIX-32-P8-NEXT: lxvw4x vs2, 0, r31790; CHECK-AIX-32-P8-NEXT: xxmrghw vs1, vs2, vs11791; CHECK-AIX-32-P8-NEXT: xxmrghd v2, vs1, vs01792; CHECK-AIX-32-P8-NEXT: blr1793;1794; CHECK-AIX-32-P9-LABEL: test_v2i64_v8i16:1795; CHECK-AIX-32-P9: # %bb.0: # %entry1796; CHECK-AIX-32-P9-NEXT: stw r4, -16(r1)1797; CHECK-AIX-32-P9-NEXT: stw r3, -32(r1)1798; CHECK-AIX-32-P9-NEXT: lxv vs1, -16(r1)1799; CHECK-AIX-32-P9-NEXT: lxv vs2, -32(r1)1800; CHECK-AIX-32-P9-NEXT: sth r5, -48(r1)1801; CHECK-AIX-32-P9-NEXT: lxv vs0, -48(r1)1802; CHECK-AIX-32-P9-NEXT: xxmrghw vs1, vs2, vs11803; CHECK-AIX-32-P9-NEXT: xxmrghd v2, vs1, vs01804; CHECK-AIX-32-P9-NEXT: blr1805entry:1806 %lhs.tmp = insertelement <2 x i64> undef, i64 %arg1, i32 01807 %lhs = bitcast <2 x i64> %lhs.tmp to <2 x i64>1808 %rhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 01809 %rhs = bitcast <8 x i16> %rhs.tmp to <2 x i64>1810 %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>1811 ret <2 x i64> %shuffle1812}1813 1814