2060 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 <16 x i8> @test_v16i8_v16i8(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {29; CHECK-LE-P8-LABEL: test_v16i8_v16i8:30; CHECK-LE-P8: # %bb.0: # %entry31; CHECK-LE-P8-NEXT: lbz r3, 0(r3)32; CHECK-LE-P8-NEXT: lbz r4, 0(r4)33; CHECK-LE-P8-NEXT: mtvsrd v2, r334; CHECK-LE-P8-NEXT: mtvsrd v3, r435; CHECK-LE-P8-NEXT: vmrghh v2, v3, v236; CHECK-LE-P8-NEXT: blr37;38; CHECK-LE-P9-LABEL: test_v16i8_v16i8:39; CHECK-LE-P9: # %bb.0: # %entry40; CHECK-LE-P9-NEXT: lxsibzx v2, 0, r341; CHECK-LE-P9-NEXT: lxsibzx v3, 0, r442; CHECK-LE-P9-NEXT: vmrghh v2, v3, v243; CHECK-LE-P9-NEXT: blr44;45; CHECK-BE-P8-LABEL: test_v16i8_v16i8:46; CHECK-BE-P8: # %bb.0: # %entry47; CHECK-BE-P8-NEXT: addis r5, r2, .LCPI0_0@toc@ha48; CHECK-BE-P8-NEXT: lbz r3, 0(r3)49; CHECK-BE-P8-NEXT: lbz r4, 0(r4)50; CHECK-BE-P8-NEXT: addi r5, r5, .LCPI0_0@toc@l51; CHECK-BE-P8-NEXT: mtvsrwz v3, r452; CHECK-BE-P8-NEXT: mtvsrwz v4, r353; CHECK-BE-P8-NEXT: lxvw4x v2, 0, r554; CHECK-BE-P8-NEXT: vperm v2, v4, v3, v255; CHECK-BE-P8-NEXT: blr56;57; CHECK-BE-P9-LABEL: test_v16i8_v16i8:58; CHECK-BE-P9: # %bb.0: # %entry59; CHECK-BE-P9-NEXT: addis r5, r2, .LCPI0_0@toc@ha60; CHECK-BE-P9-NEXT: lxsibzx v2, 0, r461; CHECK-BE-P9-NEXT: lxsibzx f1, 0, r362; CHECK-BE-P9-NEXT: addi r5, r5, .LCPI0_0@toc@l63; CHECK-BE-P9-NEXT: lxv vs0, 0(r5)64; CHECK-BE-P9-NEXT: xxperm v2, vs1, vs065; CHECK-BE-P9-NEXT: blr66;67; CHECK-AIX-64-P8-LABEL: test_v16i8_v16i8:68; CHECK-AIX-64-P8: # %bb.0: # %entry69; CHECK-AIX-64-P8-NEXT: lbz r3, 0(r3)70; CHECK-AIX-64-P8-NEXT: lbz r4, 0(r4)71; CHECK-AIX-64-P8-NEXT: ld r5, L..C0(r2) # %const.072; CHECK-AIX-64-P8-NEXT: lxvw4x v2, 0, r573; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r474; CHECK-AIX-64-P8-NEXT: mtvsrwz v4, r375; CHECK-AIX-64-P8-NEXT: vperm v2, v4, v3, v276; CHECK-AIX-64-P8-NEXT: blr77;78; CHECK-AIX-64-P9-LABEL: test_v16i8_v16i8:79; CHECK-AIX-64-P9: # %bb.0: # %entry80; CHECK-AIX-64-P9-NEXT: ld r5, L..C0(r2) # %const.081; CHECK-AIX-64-P9-NEXT: lxsibzx v2, 0, r482; CHECK-AIX-64-P9-NEXT: lxsibzx f1, 0, r383; CHECK-AIX-64-P9-NEXT: lxv vs0, 0(r5)84; CHECK-AIX-64-P9-NEXT: xxperm v2, vs1, vs085; CHECK-AIX-64-P9-NEXT: blr86;87; CHECK-AIX-32-P8-LABEL: test_v16i8_v16i8:88; CHECK-AIX-32-P8: # %bb.0: # %entry89; CHECK-AIX-32-P8-NEXT: lbz r3, 0(r3)90; CHECK-AIX-32-P8-NEXT: lbz r4, 0(r4)91; CHECK-AIX-32-P8-NEXT: lwz r5, L..C0(r2) # %const.092; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r593; CHECK-AIX-32-P8-NEXT: mtvsrwz v3, r494; CHECK-AIX-32-P8-NEXT: mtvsrwz v4, r395; CHECK-AIX-32-P8-NEXT: vperm v2, v4, v3, v296; CHECK-AIX-32-P8-NEXT: blr97;98; CHECK-AIX-32-P9-LABEL: test_v16i8_v16i8:99; CHECK-AIX-32-P9: # %bb.0: # %entry100; CHECK-AIX-32-P9-NEXT: lwz r5, L..C0(r2) # %const.0101; CHECK-AIX-32-P9-NEXT: lxsibzx v2, 0, r4102; CHECK-AIX-32-P9-NEXT: lxsibzx f1, 0, r3103; CHECK-AIX-32-P9-NEXT: lxv vs0, 0(r5)104; CHECK-AIX-32-P9-NEXT: xxperm v2, vs1, vs0105; CHECK-AIX-32-P9-NEXT: blr106entry:107 %0 = load <1 x i8>, ptr %a, align 4108 %bc1 = bitcast <1 x i8> %0 to i8109 %vecinit3 = insertelement <16 x i8> poison, i8 %bc1, i64 0110 %1 = load <1 x i8>, ptr %b, align 8111 %bc2 = bitcast <1 x i8> %1 to i8112 %vecinit6 = insertelement <16 x i8> undef, i8 %bc2, i64 0113 %2 = bitcast <16 x i8> %vecinit3 to <16 x i8>114 %3 = bitcast <16 x i8> %vecinit6 to <16 x i8>115 %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>116 ret <16 x i8> %shuffle117}118 119define <16 x i8> @test_v16i8_none(<16 x i8> %a, i8 %b) {120; CHECK-LE-P8-LABEL: test_v16i8_none:121; CHECK-LE-P8: # %bb.0: # %entry122; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI1_0@toc@ha123; CHECK-LE-P8-NEXT: mtvsrd v4, r5124; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI1_0@toc@l125; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r3126; CHECK-LE-P8-NEXT: xxswapd v3, vs0127; CHECK-LE-P8-NEXT: vperm v2, v2, v4, v3128; CHECK-LE-P8-NEXT: blr129;130; CHECK-LE-P9-LABEL: test_v16i8_none:131; CHECK-LE-P9: # %bb.0: # %entry132; CHECK-LE-P9-NEXT: mtvsrwz v3, r5133; CHECK-LE-P9-NEXT: vinsertb v2, v3, 15134; CHECK-LE-P9-NEXT: blr135;136; CHECK-BE-P8-LABEL: test_v16i8_none:137; CHECK-BE-P8: # %bb.0: # %entry138; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI1_0@toc@ha139; CHECK-BE-P8-NEXT: mtvsrwz v4, r5140; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI1_0@toc@l141; CHECK-BE-P8-NEXT: lxvw4x v3, 0, r3142; CHECK-BE-P8-NEXT: vperm v2, v4, v2, v3143; CHECK-BE-P8-NEXT: blr144;145; CHECK-BE-P9-LABEL: test_v16i8_none:146; CHECK-BE-P9: # %bb.0: # %entry147; CHECK-BE-P9-NEXT: mtvsrwz v3, r5148; CHECK-BE-P9-NEXT: vinsertb v2, v3, 0149; CHECK-BE-P9-NEXT: blr150;151; CHECK-AIX-64-P8-LABEL: test_v16i8_none:152; CHECK-AIX-64-P8: # %bb.0: # %entry153; CHECK-AIX-64-P8-NEXT: ld r4, L..C1(r2) # %const.0154; CHECK-AIX-64-P8-NEXT: mtvsrwz v4, r3155; CHECK-AIX-64-P8-NEXT: lxvw4x v3, 0, r4156; CHECK-AIX-64-P8-NEXT: vperm v2, v4, v2, v3157; CHECK-AIX-64-P8-NEXT: blr158;159; CHECK-AIX-64-P9-LABEL: test_v16i8_none:160; CHECK-AIX-64-P9: # %bb.0: # %entry161; CHECK-AIX-64-P9-NEXT: mtvsrwz v3, r3162; CHECK-AIX-64-P9-NEXT: vinsertb v2, v3, 0163; CHECK-AIX-64-P9-NEXT: blr164;165; CHECK-AIX-32-P8-LABEL: test_v16i8_none:166; CHECK-AIX-32-P8: # %bb.0: # %entry167; CHECK-AIX-32-P8-NEXT: lwz r4, L..C1(r2) # %const.0168; CHECK-AIX-32-P8-NEXT: mtvsrwz v4, r3169; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r4170; CHECK-AIX-32-P8-NEXT: vperm v2, v4, v2, v3171; CHECK-AIX-32-P8-NEXT: blr172;173; CHECK-AIX-32-P9-LABEL: test_v16i8_none:174; CHECK-AIX-32-P9: # %bb.0: # %entry175; CHECK-AIX-32-P9-NEXT: mtvsrwz v3, r3176; CHECK-AIX-32-P9-NEXT: vinsertb v2, v3, 0177; CHECK-AIX-32-P9-NEXT: blr178entry:179 %vecins = insertelement <16 x i8> %a, i8 %b, i32 0180 ret <16 x i8> %vecins181}182 183define <16 x i8> @test_none_v16i8(i8 %arg, ptr nocapture noundef readonly %b) {184; CHECK-LE-P8-LABEL: test_none_v16i8:185; CHECK-LE-P8: # %bb.0: # %entry186; CHECK-LE-P8-NEXT: addis r5, r2, .LCPI2_0@toc@ha187; CHECK-LE-P8-NEXT: lxvd2x v3, 0, r4188; CHECK-LE-P8-NEXT: mtvsrd v4, r3189; CHECK-LE-P8-NEXT: addi r5, r5, .LCPI2_0@toc@l190; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r5191; CHECK-LE-P8-NEXT: xxswapd v2, vs0192; CHECK-LE-P8-NEXT: vperm v2, v4, v3, v2193; CHECK-LE-P8-NEXT: blr194;195; CHECK-LE-P9-LABEL: test_none_v16i8:196; CHECK-LE-P9: # %bb.0: # %entry197; CHECK-LE-P9-NEXT: mtvsrd v2, r3198; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI2_0@toc@ha199; CHECK-LE-P9-NEXT: lxv vs0, 0(r4)200; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI2_0@toc@l201; CHECK-LE-P9-NEXT: lxv vs1, 0(r3)202; CHECK-LE-P9-NEXT: xxperm v2, vs0, vs1203; CHECK-LE-P9-NEXT: blr204;205; CHECK-BE-P8-LABEL: test_none_v16i8:206; CHECK-BE-P8: # %bb.0: # %entry207; CHECK-BE-P8-NEXT: mtvsrwz v3, r3208; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI2_0@toc@ha209; CHECK-BE-P8-NEXT: lxvw4x v2, 0, r4210; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI2_0@toc@l211; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3212; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v4213; CHECK-BE-P8-NEXT: blr214;215; CHECK-BE-P9-LABEL: test_none_v16i8:216; CHECK-BE-P9: # %bb.0: # %entry217; CHECK-BE-P9-NEXT: mtvsrwz v2, r3218; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI2_0@toc@ha219; CHECK-BE-P9-NEXT: lxv vs0, 0(r4)220; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI2_0@toc@l221; CHECK-BE-P9-NEXT: lxv vs1, 0(r3)222; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs1223; CHECK-BE-P9-NEXT: blr224;225; CHECK-AIX-64-P8-LABEL: test_none_v16i8:226; CHECK-AIX-64-P8: # %bb.0: # %entry227; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r3228; CHECK-AIX-64-P8-NEXT: ld r3, L..C2(r2) # %const.0229; CHECK-AIX-64-P8-NEXT: lxvw4x v2, 0, r4230; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3231; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v4232; CHECK-AIX-64-P8-NEXT: blr233;234; CHECK-AIX-64-P9-LABEL: test_none_v16i8:235; CHECK-AIX-64-P9: # %bb.0: # %entry236; CHECK-AIX-64-P9-NEXT: mtvsrwz v2, r3237; CHECK-AIX-64-P9-NEXT: ld r3, L..C1(r2) # %const.0238; CHECK-AIX-64-P9-NEXT: lxv vs0, 0(r4)239; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3)240; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs1241; CHECK-AIX-64-P9-NEXT: blr242;243; CHECK-AIX-32-P8-LABEL: test_none_v16i8:244; CHECK-AIX-32-P8: # %bb.0: # %entry245; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r4246; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)247; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16248; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3249; CHECK-AIX-32-P8-NEXT: vmrghh v2, v2, v3250; CHECK-AIX-32-P8-NEXT: blr251;252; CHECK-AIX-32-P9-LABEL: test_none_v16i8:253; CHECK-AIX-32-P9: # %bb.0: # %entry254; CHECK-AIX-32-P9-NEXT: lxv v2, 0(r4)255; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)256; CHECK-AIX-32-P9-NEXT: lxv v3, -16(r1)257; CHECK-AIX-32-P9-NEXT: vmrghh v2, v2, v3258; CHECK-AIX-32-P9-NEXT: blr259entry:260 %lhs = load <16 x i8>, ptr %b, align 4261 %rhs = insertelement <16 x i8> undef, i8 %arg, i32 0262 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>263 ret <16 x i8> %shuffle264}265 266define <16 x i8> @test_v16i8_v8i16(i16 %arg, i8 %arg1) {267; CHECK-LE-P8-LABEL: test_v16i8_v8i16:268; CHECK-LE-P8: # %bb.0: # %entry269; CHECK-LE-P8-NEXT: mtvsrd v2, r4270; CHECK-LE-P8-NEXT: mtvsrd v3, r3271; CHECK-LE-P8-NEXT: vmrghh v2, v3, v2272; CHECK-LE-P8-NEXT: blr273;274; CHECK-LE-P9-LABEL: test_v16i8_v8i16:275; CHECK-LE-P9: # %bb.0: # %entry276; CHECK-LE-P9-NEXT: mtvsrd v2, r4277; CHECK-LE-P9-NEXT: mtvsrd v3, r3278; CHECK-LE-P9-NEXT: vmrghh v2, v3, v2279; CHECK-LE-P9-NEXT: blr280;281; CHECK-BE-P8-LABEL: test_v16i8_v8i16:282; CHECK-BE-P8: # %bb.0: # %entry283; CHECK-BE-P8-NEXT: mtvsrwz v3, r3284; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI3_0@toc@ha285; CHECK-BE-P8-NEXT: mtvsrwz v2, r4286; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI3_0@toc@l287; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3288; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v4289; CHECK-BE-P8-NEXT: blr290;291; CHECK-BE-P9-LABEL: test_v16i8_v8i16:292; CHECK-BE-P9: # %bb.0: # %entry293; CHECK-BE-P9-NEXT: mtvsrwz v2, r3294; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI3_0@toc@ha295; CHECK-BE-P9-NEXT: mtfprwz f0, r4296; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI3_0@toc@l297; CHECK-BE-P9-NEXT: lxv vs1, 0(r3)298; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs1299; CHECK-BE-P9-NEXT: blr300;301; CHECK-AIX-64-P8-LABEL: test_v16i8_v8i16:302; CHECK-AIX-64-P8: # %bb.0: # %entry303; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r3304; CHECK-AIX-64-P8-NEXT: ld r3, L..C3(r2) # %const.0305; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r4306; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3307; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v4308; CHECK-AIX-64-P8-NEXT: blr309;310; CHECK-AIX-64-P9-LABEL: test_v16i8_v8i16:311; CHECK-AIX-64-P9: # %bb.0: # %entry312; CHECK-AIX-64-P9-NEXT: mtvsrwz v2, r3313; CHECK-AIX-64-P9-NEXT: ld r3, L..C2(r2) # %const.0314; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r4315; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3)316; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs1317; CHECK-AIX-64-P9-NEXT: blr318;319; CHECK-AIX-32-P8-LABEL: test_v16i8_v8i16:320; CHECK-AIX-32-P8: # %bb.0: # %entry321; CHECK-AIX-32-P8-NEXT: stb r4, -32(r1)322; CHECK-AIX-32-P8-NEXT: addi r4, r1, -32323; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r4324; CHECK-AIX-32-P8-NEXT: sth r3, -16(r1)325; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16326; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3327; CHECK-AIX-32-P8-NEXT: vmrghh v2, v2, v3328; CHECK-AIX-32-P8-NEXT: blr329;330; CHECK-AIX-32-P9-LABEL: test_v16i8_v8i16:331; CHECK-AIX-32-P9: # %bb.0: # %entry332; CHECK-AIX-32-P9-NEXT: stb r4, -32(r1)333; CHECK-AIX-32-P9-NEXT: sth r3, -16(r1)334; CHECK-AIX-32-P9-NEXT: lxv v2, -32(r1)335; CHECK-AIX-32-P9-NEXT: lxv v3, -16(r1)336; CHECK-AIX-32-P9-NEXT: vmrghh v2, v2, v3337; CHECK-AIX-32-P9-NEXT: blr338entry:339 %lhs = insertelement <16 x i8> undef, i8 %arg1, i32 0340 %rhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 0341 %rhs = bitcast <8 x i16> %rhs.tmp to <16 x i8>342 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>343 ret <16 x i8> %shuffle344}345 346define <16 x i8> @test_v8i16_v16i8(i16 %arg, i8 %arg1) {347; CHECK-LE-P8-LABEL: test_v8i16_v16i8:348; CHECK-LE-P8: # %bb.0: # %entry349; CHECK-LE-P8-NEXT: mtvsrd v2, r4350; CHECK-LE-P8-NEXT: mtvsrd v3, r3351; CHECK-LE-P8-NEXT: vmrghh v2, v2, v3352; CHECK-LE-P8-NEXT: blr353;354; CHECK-LE-P9-LABEL: test_v8i16_v16i8:355; CHECK-LE-P9: # %bb.0: # %entry356; CHECK-LE-P9-NEXT: mtvsrd v2, r4357; CHECK-LE-P9-NEXT: mtvsrd v3, r3358; CHECK-LE-P9-NEXT: vmrghh v2, v2, v3359; CHECK-LE-P9-NEXT: blr360;361; CHECK-BE-P8-LABEL: test_v8i16_v16i8:362; CHECK-BE-P8: # %bb.0: # %entry363; CHECK-BE-P8-NEXT: mtvsrwz v3, r3364; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI4_0@toc@ha365; CHECK-BE-P8-NEXT: mtvsrwz v2, r4366; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI4_0@toc@l367; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3368; CHECK-BE-P8-NEXT: vperm v2, v3, v2, v4369; CHECK-BE-P8-NEXT: blr370;371; CHECK-BE-P9-LABEL: test_v8i16_v16i8:372; CHECK-BE-P9: # %bb.0: # %entry373; CHECK-BE-P9-NEXT: mtfprwz f0, r3374; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI4_0@toc@ha375; CHECK-BE-P9-NEXT: mtvsrwz v2, r4376; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI4_0@toc@l377; CHECK-BE-P9-NEXT: lxv vs1, 0(r3)378; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs1379; CHECK-BE-P9-NEXT: blr380;381; CHECK-AIX-64-P8-LABEL: test_v8i16_v16i8:382; CHECK-AIX-64-P8: # %bb.0: # %entry383; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r3384; CHECK-AIX-64-P8-NEXT: ld r3, L..C4(r2) # %const.0385; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r4386; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3387; CHECK-AIX-64-P8-NEXT: vperm v2, v3, v2, v4388; CHECK-AIX-64-P8-NEXT: blr389;390; CHECK-AIX-64-P9-LABEL: test_v8i16_v16i8:391; CHECK-AIX-64-P9: # %bb.0: # %entry392; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3393; CHECK-AIX-64-P9-NEXT: ld r3, L..C3(r2) # %const.0394; CHECK-AIX-64-P9-NEXT: mtvsrwz v2, r4395; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3)396; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs1397; CHECK-AIX-64-P9-NEXT: blr398;399; CHECK-AIX-32-P8-LABEL: test_v8i16_v16i8:400; CHECK-AIX-32-P8: # %bb.0: # %entry401; CHECK-AIX-32-P8-NEXT: stb r4, -32(r1)402; CHECK-AIX-32-P8-NEXT: addi r4, r1, -32403; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r4404; CHECK-AIX-32-P8-NEXT: sth r3, -16(r1)405; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16406; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3407; CHECK-AIX-32-P8-NEXT: vmrghh v2, v3, v2408; CHECK-AIX-32-P8-NEXT: blr409;410; CHECK-AIX-32-P9-LABEL: test_v8i16_v16i8:411; CHECK-AIX-32-P9: # %bb.0: # %entry412; CHECK-AIX-32-P9-NEXT: stb r4, -32(r1)413; CHECK-AIX-32-P9-NEXT: sth r3, -16(r1)414; CHECK-AIX-32-P9-NEXT: lxv v2, -32(r1)415; CHECK-AIX-32-P9-NEXT: lxv v3, -16(r1)416; CHECK-AIX-32-P9-NEXT: vmrghh v2, v3, v2417; CHECK-AIX-32-P9-NEXT: blr418entry:419 %rhs = insertelement <16 x i8> undef, i8 %arg1, i32 0420 %lhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 0421 %lhs = bitcast <8 x i16> %lhs.tmp to <16 x i8>422 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>423 ret <16 x i8> %shuffle424}425 426define <16 x i8> @test_none_v8i16(i16 %arg, ptr nocapture noundef readonly %b) {427; CHECK-LE-P8-LABEL: test_none_v8i16:428; CHECK-LE-P8: # %bb.0: # %entry429; CHECK-LE-P8-NEXT: addis r5, r2, .LCPI5_0@toc@ha430; CHECK-LE-P8-NEXT: lxvd2x v3, 0, r4431; CHECK-LE-P8-NEXT: mtvsrd v4, r3432; CHECK-LE-P8-NEXT: addi r5, r5, .LCPI5_0@toc@l433; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r5434; CHECK-LE-P8-NEXT: xxswapd v2, vs0435; CHECK-LE-P8-NEXT: vperm v2, v4, v3, v2436; CHECK-LE-P8-NEXT: blr437;438; CHECK-LE-P9-LABEL: test_none_v8i16:439; CHECK-LE-P9: # %bb.0: # %entry440; CHECK-LE-P9-NEXT: mtvsrd v2, r3441; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI5_0@toc@ha442; CHECK-LE-P9-NEXT: lxv vs0, 0(r4)443; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI5_0@toc@l444; CHECK-LE-P9-NEXT: lxv vs1, 0(r3)445; CHECK-LE-P9-NEXT: xxperm v2, vs0, vs1446; CHECK-LE-P9-NEXT: blr447;448; CHECK-BE-P8-LABEL: test_none_v8i16:449; CHECK-BE-P8: # %bb.0: # %entry450; CHECK-BE-P8-NEXT: mtvsrwz v3, r3451; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI5_0@toc@ha452; CHECK-BE-P8-NEXT: lxvw4x v2, 0, r4453; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI5_0@toc@l454; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3455; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v4456; CHECK-BE-P8-NEXT: blr457;458; CHECK-BE-P9-LABEL: test_none_v8i16:459; CHECK-BE-P9: # %bb.0: # %entry460; CHECK-BE-P9-NEXT: mtvsrwz v2, r3461; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI5_0@toc@ha462; CHECK-BE-P9-NEXT: lxv vs0, 0(r4)463; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI5_0@toc@l464; CHECK-BE-P9-NEXT: lxv vs1, 0(r3)465; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs1466; CHECK-BE-P9-NEXT: blr467;468; CHECK-AIX-64-P8-LABEL: test_none_v8i16:469; CHECK-AIX-64-P8: # %bb.0: # %entry470; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r3471; CHECK-AIX-64-P8-NEXT: ld r3, L..C5(r2) # %const.0472; CHECK-AIX-64-P8-NEXT: lxvw4x v2, 0, r4473; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3474; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v4475; CHECK-AIX-64-P8-NEXT: blr476;477; CHECK-AIX-64-P9-LABEL: test_none_v8i16:478; CHECK-AIX-64-P9: # %bb.0: # %entry479; CHECK-AIX-64-P9-NEXT: mtvsrwz v2, r3480; CHECK-AIX-64-P9-NEXT: ld r3, L..C4(r2) # %const.0481; CHECK-AIX-64-P9-NEXT: lxv vs0, 0(r4)482; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3)483; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs1484; CHECK-AIX-64-P9-NEXT: blr485;486; CHECK-AIX-32-P8-LABEL: test_none_v8i16:487; CHECK-AIX-32-P8: # %bb.0: # %entry488; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r4489; CHECK-AIX-32-P8-NEXT: sth r3, -16(r1)490; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16491; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3492; CHECK-AIX-32-P8-NEXT: vmrghh v2, v2, v3493; CHECK-AIX-32-P8-NEXT: blr494;495; CHECK-AIX-32-P9-LABEL: test_none_v8i16:496; CHECK-AIX-32-P9: # %bb.0: # %entry497; CHECK-AIX-32-P9-NEXT: lxv v2, 0(r4)498; CHECK-AIX-32-P9-NEXT: sth r3, -16(r1)499; CHECK-AIX-32-P9-NEXT: lxv v3, -16(r1)500; CHECK-AIX-32-P9-NEXT: vmrghh v2, v2, v3501; CHECK-AIX-32-P9-NEXT: blr502entry:503 %lhs = load <16 x i8>, ptr %b, align 4504 %rhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 0505 %rhs = bitcast <8 x i16> %rhs.tmp to <16 x i8>506 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>507 ret <16 x i8> %shuffle508}509 510define <8 x i16> @test_v8i16_none(<8 x i16> %a, i16 %b) {511; CHECK-LE-P8-LABEL: test_v8i16_none:512; CHECK-LE-P8: # %bb.0: # %entry513; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI6_0@toc@ha514; CHECK-LE-P8-NEXT: mtvsrd v4, r5515; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI6_0@toc@l516; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r3517; CHECK-LE-P8-NEXT: xxswapd v3, vs0518; CHECK-LE-P8-NEXT: vperm v2, v2, v4, v3519; CHECK-LE-P8-NEXT: blr520;521; CHECK-LE-P9-LABEL: test_v8i16_none:522; CHECK-LE-P9: # %bb.0: # %entry523; CHECK-LE-P9-NEXT: mtvsrwz v3, r5524; CHECK-LE-P9-NEXT: vinserth v2, v3, 14525; CHECK-LE-P9-NEXT: blr526;527; CHECK-BE-P8-LABEL: test_v8i16_none:528; CHECK-BE-P8: # %bb.0: # %entry529; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI6_0@toc@ha530; CHECK-BE-P8-NEXT: mtvsrwz v4, r5531; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI6_0@toc@l532; CHECK-BE-P8-NEXT: lxvw4x v3, 0, r3533; CHECK-BE-P8-NEXT: vperm v2, v4, v2, v3534; CHECK-BE-P8-NEXT: blr535;536; CHECK-BE-P9-LABEL: test_v8i16_none:537; CHECK-BE-P9: # %bb.0: # %entry538; CHECK-BE-P9-NEXT: mtvsrwz v3, r5539; CHECK-BE-P9-NEXT: vinserth v2, v3, 0540; CHECK-BE-P9-NEXT: blr541;542; CHECK-AIX-64-P8-LABEL: test_v8i16_none:543; CHECK-AIX-64-P8: # %bb.0: # %entry544; CHECK-AIX-64-P8-NEXT: ld r4, L..C6(r2) # %const.0545; CHECK-AIX-64-P8-NEXT: mtvsrwz v4, r3546; CHECK-AIX-64-P8-NEXT: lxvw4x v3, 0, r4547; CHECK-AIX-64-P8-NEXT: vperm v2, v4, v2, v3548; CHECK-AIX-64-P8-NEXT: blr549;550; CHECK-AIX-64-P9-LABEL: test_v8i16_none:551; CHECK-AIX-64-P9: # %bb.0: # %entry552; CHECK-AIX-64-P9-NEXT: mtvsrwz v3, r3553; CHECK-AIX-64-P9-NEXT: vinserth v2, v3, 0554; CHECK-AIX-64-P9-NEXT: blr555;556; CHECK-AIX-32-P8-LABEL: test_v8i16_none:557; CHECK-AIX-32-P8: # %bb.0: # %entry558; CHECK-AIX-32-P8-NEXT: sth r3, -16(r1)559; CHECK-AIX-32-P8-NEXT: lwz r3, L..C2(r2) # %const.0560; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3561; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16562; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3563; CHECK-AIX-32-P8-NEXT: vperm v2, v4, v2, v3564; CHECK-AIX-32-P8-NEXT: blr565;566; CHECK-AIX-32-P9-LABEL: test_v8i16_none:567; CHECK-AIX-32-P9: # %bb.0: # %entry568; CHECK-AIX-32-P9-NEXT: mtvsrwz v3, r3569; CHECK-AIX-32-P9-NEXT: vinserth v2, v3, 0570; CHECK-AIX-32-P9-NEXT: blr571entry:572 %vecins = insertelement <8 x i16> %a, i16 %b, i32 0573 ret <8 x i16> %vecins574}575 576define <16 x i8> @test_v16i8_v4i32(i8 %arg, i32 %arg1, <16 x i8> %a, <4 x i32> %b) {577; CHECK-LE-P8-LABEL: test_v16i8_v4i32:578; CHECK-LE-P8: # %bb.0: # %entry579; CHECK-LE-P8-NEXT: mtvsrd v2, r3580; CHECK-LE-P8-NEXT: mtvsrwz v3, r4581; CHECK-LE-P8-NEXT: vmrghb v2, v3, v2582; CHECK-LE-P8-NEXT: blr583;584; CHECK-LE-P9-LABEL: test_v16i8_v4i32:585; CHECK-LE-P9: # %bb.0: # %entry586; CHECK-LE-P9-NEXT: mtvsrd v2, r3587; CHECK-LE-P9-NEXT: mtvsrwz v3, r4588; CHECK-LE-P9-NEXT: vmrghb v2, v3, v2589; CHECK-LE-P9-NEXT: blr590;591; CHECK-BE-P8-LABEL: test_v16i8_v4i32:592; CHECK-BE-P8: # %bb.0: # %entry593; CHECK-BE-P8-NEXT: mtvsrwz v2, r3594; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI7_0@toc@ha595; CHECK-BE-P8-NEXT: mtvsrwz v3, r4596; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI7_0@toc@l597; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3598; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v4599; CHECK-BE-P8-NEXT: blr600;601; CHECK-BE-P9-LABEL: test_v16i8_v4i32:602; CHECK-BE-P9: # %bb.0: # %entry603; CHECK-BE-P9-NEXT: mtfprwz f0, r3604; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI7_0@toc@ha605; CHECK-BE-P9-NEXT: mtvsrwz v2, r4606; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI7_0@toc@l607; CHECK-BE-P9-NEXT: lxv vs1, 0(r3)608; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs1609; CHECK-BE-P9-NEXT: blr610;611; CHECK-AIX-64-P8-LABEL: test_v16i8_v4i32:612; CHECK-AIX-64-P8: # %bb.0: # %entry613; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r3614; CHECK-AIX-64-P8-NEXT: ld r3, L..C7(r2) # %const.0615; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r4616; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3617; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v4618; CHECK-AIX-64-P8-NEXT: blr619;620; CHECK-AIX-64-P9-LABEL: test_v16i8_v4i32:621; CHECK-AIX-64-P9: # %bb.0: # %entry622; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3623; CHECK-AIX-64-P9-NEXT: ld r3, L..C5(r2) # %const.0624; CHECK-AIX-64-P9-NEXT: mtvsrwz v2, r4625; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3)626; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs1627; CHECK-AIX-64-P9-NEXT: blr628;629; CHECK-AIX-32-P8-LABEL: test_v16i8_v4i32:630; CHECK-AIX-32-P8: # %bb.0: # %entry631; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)632; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16633; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r3634; CHECK-AIX-32-P8-NEXT: addi r3, r1, -32635; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)636; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3637; CHECK-AIX-32-P8-NEXT: vmrghb v2, v2, v3638; CHECK-AIX-32-P8-NEXT: blr639;640; CHECK-AIX-32-P9-LABEL: test_v16i8_v4i32:641; CHECK-AIX-32-P9: # %bb.0: # %entry642; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)643; CHECK-AIX-32-P9-NEXT: stw r4, -32(r1)644; CHECK-AIX-32-P9-NEXT: lxv v2, -16(r1)645; CHECK-AIX-32-P9-NEXT: lxv v3, -32(r1)646; CHECK-AIX-32-P9-NEXT: vmrghb v2, v2, v3647; CHECK-AIX-32-P9-NEXT: blr648entry:649 %lhs.tmp = insertelement <16 x i8> %a, i8 %arg, i32 0650 %lhs = bitcast <16 x i8> %lhs.tmp to <16 x i8>651 %rhs.tmp = insertelement <4 x i32> %b, i32 %arg1, i32 0652 %rhs = bitcast <4 x i32> %rhs.tmp to <16 x i8>653 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 16, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>654 ret <16 x i8> %shuffle655}656 657define <16 x i8> @test_v4i32_v16i8(i32 %arg, i8 %arg1) {658; CHECK-LE-P8-LABEL: test_v4i32_v16i8:659; CHECK-LE-P8: # %bb.0: # %entry660; CHECK-LE-P8-NEXT: mtvsrd v2, r4661; CHECK-LE-P8-NEXT: mtvsrwz v3, r3662; CHECK-LE-P8-NEXT: vmrghh v2, v2, v3663; CHECK-LE-P8-NEXT: blr664;665; CHECK-LE-P9-LABEL: test_v4i32_v16i8:666; CHECK-LE-P9: # %bb.0: # %entry667; CHECK-LE-P9-NEXT: mtvsrd v2, r4668; CHECK-LE-P9-NEXT: mtvsrwz v3, r3669; CHECK-LE-P9-NEXT: vmrghh v2, v2, v3670; CHECK-LE-P9-NEXT: blr671;672; CHECK-BE-P8-LABEL: test_v4i32_v16i8:673; CHECK-BE-P8: # %bb.0: # %entry674; CHECK-BE-P8-NEXT: mtvsrwz v3, r3675; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI8_0@toc@ha676; CHECK-BE-P8-NEXT: mtvsrwz v2, r4677; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI8_0@toc@l678; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3679; CHECK-BE-P8-NEXT: vperm v2, v3, v2, v4680; CHECK-BE-P8-NEXT: blr681;682; CHECK-BE-P9-LABEL: test_v4i32_v16i8:683; CHECK-BE-P9: # %bb.0: # %entry684; CHECK-BE-P9-NEXT: mtfprwz f0, r3685; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI8_0@toc@ha686; CHECK-BE-P9-NEXT: mtvsrwz v2, r4687; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI8_0@toc@l688; CHECK-BE-P9-NEXT: lxv vs1, 0(r3)689; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs1690; CHECK-BE-P9-NEXT: blr691;692; CHECK-AIX-64-P8-LABEL: test_v4i32_v16i8:693; CHECK-AIX-64-P8: # %bb.0: # %entry694; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r3695; CHECK-AIX-64-P8-NEXT: ld r3, L..C8(r2) # %const.0696; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r4697; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3698; CHECK-AIX-64-P8-NEXT: vperm v2, v3, v2, v4699; CHECK-AIX-64-P8-NEXT: blr700;701; CHECK-AIX-64-P9-LABEL: test_v4i32_v16i8:702; CHECK-AIX-64-P9: # %bb.0: # %entry703; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3704; CHECK-AIX-64-P9-NEXT: ld r3, L..C6(r2) # %const.0705; CHECK-AIX-64-P9-NEXT: mtvsrwz v2, r4706; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3)707; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs1708; CHECK-AIX-64-P9-NEXT: blr709;710; CHECK-AIX-32-P8-LABEL: test_v4i32_v16i8:711; CHECK-AIX-32-P8: # %bb.0: # %entry712; CHECK-AIX-32-P8-NEXT: stb r4, -32(r1)713; CHECK-AIX-32-P8-NEXT: addi r4, r1, -32714; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r4715; CHECK-AIX-32-P8-NEXT: stw r3, -16(r1)716; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16717; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3718; CHECK-AIX-32-P8-NEXT: vmrghh v2, v3, v2719; CHECK-AIX-32-P8-NEXT: blr720;721; CHECK-AIX-32-P9-LABEL: test_v4i32_v16i8:722; CHECK-AIX-32-P9: # %bb.0: # %entry723; CHECK-AIX-32-P9-NEXT: stb r4, -32(r1)724; CHECK-AIX-32-P9-NEXT: stw r3, -16(r1)725; CHECK-AIX-32-P9-NEXT: lxv v2, -32(r1)726; CHECK-AIX-32-P9-NEXT: lxv v3, -16(r1)727; CHECK-AIX-32-P9-NEXT: vmrghh v2, v3, v2728; CHECK-AIX-32-P9-NEXT: blr729entry:730 %rhs = insertelement <16 x i8> undef, i8 %arg1, i32 0731 %lhs.tmp = insertelement <4 x i32> undef, i32 %arg, i32 0732 %lhs = bitcast <4 x i32> %lhs.tmp to <16 x i8>733 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>734 ret <16 x i8> %shuffle735}736 737define <4 x i32> @test_none_v4i32(<4 x i32> %a, i64 %b) {738; CHECK-LE-P8-LABEL: test_none_v4i32:739; CHECK-LE-P8: # %bb.0: # %entry740; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI9_0@toc@ha741; CHECK-LE-P8-NEXT: mtvsrwz v4, r5742; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI9_0@toc@l743; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r3744; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI9_1@toc@ha745; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI9_1@toc@l746; CHECK-LE-P8-NEXT: xxswapd v3, vs0747; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r3748; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v3749; CHECK-LE-P8-NEXT: xxswapd v3, vs0750; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v3751; CHECK-LE-P8-NEXT: blr752;753; CHECK-LE-P9-LABEL: test_none_v4i32:754; CHECK-LE-P9: # %bb.0: # %entry755; CHECK-LE-P9-NEXT: mtfprwz f0, r5756; CHECK-LE-P9-NEXT: xxinsertw v2, vs0, 8757; CHECK-LE-P9-NEXT: xxinsertw v2, vs0, 0758; CHECK-LE-P9-NEXT: blr759;760; CHECK-BE-P8-LABEL: test_none_v4i32:761; CHECK-BE-P8: # %bb.0: # %entry762; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI9_0@toc@ha763; CHECK-BE-P8-NEXT: mtvsrwz v4, r5764; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI9_0@toc@l765; CHECK-BE-P8-NEXT: lxvw4x v3, 0, r3766; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI9_1@toc@ha767; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI9_1@toc@l768; CHECK-BE-P8-NEXT: vperm v2, v2, v4, v3769; CHECK-BE-P8-NEXT: lxvw4x v3, 0, r3770; CHECK-BE-P8-NEXT: vperm v2, v2, v4, v3771; CHECK-BE-P8-NEXT: blr772;773; CHECK-BE-P9-LABEL: test_none_v4i32:774; CHECK-BE-P9: # %bb.0: # %entry775; CHECK-BE-P9-NEXT: mtfprwz f0, r5776; CHECK-BE-P9-NEXT: xxinsertw v2, vs0, 4777; CHECK-BE-P9-NEXT: xxinsertw v2, vs0, 12778; CHECK-BE-P9-NEXT: blr779;780; CHECK-AIX-64-P8-LABEL: test_none_v4i32:781; CHECK-AIX-64-P8: # %bb.0: # %entry782; CHECK-AIX-64-P8-NEXT: ld r4, L..C9(r2) # %const.0783; CHECK-AIX-64-P8-NEXT: mtvsrwz v4, r3784; CHECK-AIX-64-P8-NEXT: ld r3, L..C10(r2) # %const.1785; CHECK-AIX-64-P8-NEXT: lxvw4x v3, 0, r4786; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v4, v3787; CHECK-AIX-64-P8-NEXT: lxvw4x v3, 0, r3788; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v4, v3789; CHECK-AIX-64-P8-NEXT: blr790;791; CHECK-AIX-64-P9-LABEL: test_none_v4i32:792; CHECK-AIX-64-P9: # %bb.0: # %entry793; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3794; CHECK-AIX-64-P9-NEXT: xxinsertw v2, vs0, 4795; CHECK-AIX-64-P9-NEXT: xxinsertw v2, vs0, 12796; CHECK-AIX-64-P9-NEXT: blr797;798; CHECK-AIX-32-P8-LABEL: test_none_v4i32:799; CHECK-AIX-32-P8: # %bb.0: # %entry800; CHECK-AIX-32-P8-NEXT: lwz r3, L..C3(r2) # %const.0801; CHECK-AIX-32-P8-NEXT: stw r4, -16(r1)802; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3803; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16804; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3805; CHECK-AIX-32-P8-NEXT: lwz r3, L..C4(r2) # %const.1806; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v4, v3807; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3808; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v4, v3809; CHECK-AIX-32-P8-NEXT: blr810;811; CHECK-AIX-32-P9-LABEL: test_none_v4i32:812; CHECK-AIX-32-P9: # %bb.0: # %entry813; CHECK-AIX-32-P9-NEXT: mtfprwz f0, r4814; CHECK-AIX-32-P9-NEXT: xxinsertw v2, vs0, 4815; CHECK-AIX-32-P9-NEXT: xxinsertw v2, vs0, 12816; CHECK-AIX-32-P9-NEXT: blr817entry:818 %conv = trunc i64 %b to i32819 %vecins = insertelement <4 x i32> %a, i32 %conv, i32 1820 %vecins2 = insertelement <4 x i32> %vecins, i32 %conv, i32 3821 ret <4 x i32> %vecins2822}823 824define <16 x i8> @test_v4i32_none(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {825; CHECK-LE-P8-LABEL: test_v4i32_none:826; CHECK-LE-P8: # %bb.0: # %entry827; CHECK-LE-P8-NEXT: lbzx r4, 0, r4828; CHECK-LE-P8-NEXT: lxsiwzx v4, 0, r3829; CHECK-LE-P8-NEXT: mtvsrwz v2, r4830; CHECK-LE-P8-NEXT: addis r4, r2, .LCPI10_0@toc@ha831; CHECK-LE-P8-NEXT: addi r4, r4, .LCPI10_0@toc@l832; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r4833; CHECK-LE-P8-NEXT: vspltb v2, v2, 7834; CHECK-LE-P8-NEXT: xxswapd v3, vs0835; CHECK-LE-P8-NEXT: vperm v2, v2, v4, v3836; CHECK-LE-P8-NEXT: blr837;838; CHECK-LE-P9-LABEL: test_v4i32_none:839; CHECK-LE-P9: # %bb.0: # %entry840; CHECK-LE-P9-NEXT: lxsiwzx v2, 0, r3841; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI10_0@toc@ha842; CHECK-LE-P9-NEXT: lxsibzx v3, 0, r4843; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI10_0@toc@l844; CHECK-LE-P9-NEXT: lxv vs0, 0(r3)845; CHECK-LE-P9-NEXT: vspltb v3, v3, 7846; CHECK-LE-P9-NEXT: xxperm v2, v3, vs0847; CHECK-LE-P9-NEXT: blr848;849; CHECK-BE-P8-LABEL: test_v4i32_none:850; CHECK-BE-P8: # %bb.0: # %entry851; CHECK-BE-P8-NEXT: lbzx r4, 0, r4852; CHECK-BE-P8-NEXT: lxsiwzx v3, 0, r3853; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI10_0@toc@ha854; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI10_0@toc@l855; CHECK-BE-P8-NEXT: mtvsrwz v2, r4856; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3857; CHECK-BE-P8-NEXT: vspltb v2, v2, 7858; CHECK-BE-P8-NEXT: vperm v2, v3, v2, v4859; CHECK-BE-P8-NEXT: blr860;861; CHECK-BE-P9-LABEL: test_v4i32_none:862; CHECK-BE-P9: # %bb.0: # %entry863; CHECK-BE-P9-NEXT: lfiwzx f0, 0, r3864; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI10_0@toc@ha865; CHECK-BE-P9-NEXT: lxsibzx v2, 0, r4866; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI10_0@toc@l867; CHECK-BE-P9-NEXT: lxv vs1, 0(r3)868; CHECK-BE-P9-NEXT: vspltb v2, v2, 7869; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs1870; CHECK-BE-P9-NEXT: blr871;872; CHECK-AIX-64-P8-LABEL: test_v4i32_none:873; CHECK-AIX-64-P8: # %bb.0: # %entry874; CHECK-AIX-64-P8-NEXT: lbzx r4, 0, r4875; CHECK-AIX-64-P8-NEXT: lxsiwzx v3, 0, r3876; CHECK-AIX-64-P8-NEXT: ld r3, L..C11(r2) # %const.0877; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r4878; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3879; CHECK-AIX-64-P8-NEXT: vspltb v2, v2, 7880; CHECK-AIX-64-P8-NEXT: vperm v2, v3, v2, v4881; CHECK-AIX-64-P8-NEXT: blr882;883; CHECK-AIX-64-P9-LABEL: test_v4i32_none:884; CHECK-AIX-64-P9: # %bb.0: # %entry885; CHECK-AIX-64-P9-NEXT: lfiwzx f0, 0, r3886; CHECK-AIX-64-P9-NEXT: ld r3, L..C7(r2) # %const.0887; CHECK-AIX-64-P9-NEXT: lxsibzx v2, 0, r4888; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3)889; CHECK-AIX-64-P9-NEXT: vspltb v2, v2, 7890; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs1891; CHECK-AIX-64-P9-NEXT: blr892;893; CHECK-AIX-32-P8-LABEL: test_v4i32_none:894; CHECK-AIX-32-P8: # %bb.0: # %entry895; CHECK-AIX-32-P8-NEXT: lbzx r4, 0, r4896; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r3897; CHECK-AIX-32-P8-NEXT: lwz r3, L..C5(r2) # %const.0898; CHECK-AIX-32-P8-NEXT: mtvsrwz v2, r4899; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r3900; CHECK-AIX-32-P8-NEXT: vspltb v2, v2, 7901; CHECK-AIX-32-P8-NEXT: vperm v2, v3, v2, v4902; CHECK-AIX-32-P8-NEXT: blr903;904; CHECK-AIX-32-P9-LABEL: test_v4i32_none:905; CHECK-AIX-32-P9: # %bb.0: # %entry906; CHECK-AIX-32-P9-NEXT: lfiwzx f0, 0, r3907; CHECK-AIX-32-P9-NEXT: lwz r3, L..C1(r2) # %const.0908; CHECK-AIX-32-P9-NEXT: lxsibzx v2, 0, r4909; CHECK-AIX-32-P9-NEXT: lxv vs1, 0(r3)910; CHECK-AIX-32-P9-NEXT: vspltb v2, v2, 7911; CHECK-AIX-32-P9-NEXT: xxperm v2, vs0, vs1912; CHECK-AIX-32-P9-NEXT: blr913entry:914 %0 = load <4 x i8>, ptr %a, align 4915 %bc1 = bitcast <4 x i8> %0 to i32916 %vecinit3 = insertelement <4 x i32> poison, i32 %bc1, i64 0917 %1 = load <1 x i8>, ptr %b, align 8918 %bc2 = bitcast <1 x i8> %1 to i8919 %vecinit6 = insertelement <16 x i8> undef, i8 %bc2, i64 0920 %2 = bitcast <4 x i32> %vecinit3 to <16 x i8>921 %3 = bitcast <16 x i8> %vecinit6 to <16 x i8>922 %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>923 ret <16 x i8> %shuffle924}925 926define <16 x i8> @test_v16i8_v2i64(i8 %arg, i64 %arg1, <16 x i8> %a, <2 x i64> %b) {927; CHECK-LE-P8-LABEL: test_v16i8_v2i64:928; CHECK-LE-P8: # %bb.0: # %entry929; CHECK-LE-P8-NEXT: mtvsrd v2, r3930; CHECK-LE-P8-NEXT: mtvsrd v3, r4931; CHECK-LE-P8-NEXT: vmrghb v2, v3, v2932; CHECK-LE-P8-NEXT: blr933;934; CHECK-LE-P9-LABEL: test_v16i8_v2i64:935; CHECK-LE-P9: # %bb.0: # %entry936; CHECK-LE-P9-NEXT: mtvsrd v2, r3937; CHECK-LE-P9-NEXT: mtvsrd v3, r4938; CHECK-LE-P9-NEXT: vmrghb v2, v3, v2939; CHECK-LE-P9-NEXT: blr940;941; CHECK-BE-P8-LABEL: test_v16i8_v2i64:942; CHECK-BE-P8: # %bb.0: # %entry943; CHECK-BE-P8-NEXT: sldi r3, r3, 56944; CHECK-BE-P8-NEXT: mtvsrd v3, r4945; CHECK-BE-P8-NEXT: mtvsrd v2, r3946; CHECK-BE-P8-NEXT: vmrghb v2, v2, v3947; CHECK-BE-P8-NEXT: blr948;949; CHECK-BE-P9-LABEL: test_v16i8_v2i64:950; CHECK-BE-P9: # %bb.0: # %entry951; CHECK-BE-P9-NEXT: sldi r3, r3, 56952; CHECK-BE-P9-NEXT: mtvsrd v3, r4953; CHECK-BE-P9-NEXT: mtvsrd v2, r3954; CHECK-BE-P9-NEXT: vmrghb v2, v2, v3955; CHECK-BE-P9-NEXT: blr956;957; CHECK-AIX-64-P8-LABEL: test_v16i8_v2i64:958; CHECK-AIX-64-P8: # %bb.0: # %entry959; CHECK-AIX-64-P8-NEXT: sldi r3, r3, 56960; CHECK-AIX-64-P8-NEXT: mtvsrd v3, r4961; CHECK-AIX-64-P8-NEXT: mtvsrd v2, r3962; CHECK-AIX-64-P8-NEXT: vmrghb v2, v2, v3963; CHECK-AIX-64-P8-NEXT: blr964;965; CHECK-AIX-64-P9-LABEL: test_v16i8_v2i64:966; CHECK-AIX-64-P9: # %bb.0: # %entry967; CHECK-AIX-64-P9-NEXT: sldi r3, r3, 56968; CHECK-AIX-64-P9-NEXT: mtvsrd v3, r4969; CHECK-AIX-64-P9-NEXT: mtvsrd v2, r3970; CHECK-AIX-64-P9-NEXT: vmrghb v2, v2, v3971; CHECK-AIX-64-P9-NEXT: blr972;973; CHECK-AIX-32-P8-LABEL: test_v16i8_v2i64:974; CHECK-AIX-32-P8: # %bb.0: # %entry975; CHECK-AIX-32-P8-NEXT: stb r3, -16(r1)976; CHECK-AIX-32-P8-NEXT: addi r3, r1, -16977; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r3978; CHECK-AIX-32-P8-NEXT: addi r3, r1, -32979; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)980; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r3981; CHECK-AIX-32-P8-NEXT: vmrghb v2, v2, v3982; CHECK-AIX-32-P8-NEXT: blr983;984; CHECK-AIX-32-P9-LABEL: test_v16i8_v2i64:985; CHECK-AIX-32-P9: # %bb.0: # %entry986; CHECK-AIX-32-P9-NEXT: stb r3, -16(r1)987; CHECK-AIX-32-P9-NEXT: stw r4, -32(r1)988; CHECK-AIX-32-P9-NEXT: lxv v2, -16(r1)989; CHECK-AIX-32-P9-NEXT: lxv v3, -32(r1)990; CHECK-AIX-32-P9-NEXT: vmrghb v2, v2, v3991; CHECK-AIX-32-P9-NEXT: blr992entry:993 %lhs.tmp = insertelement <16 x i8> %a, i8 %arg, i32 0994 %lhs = bitcast <16 x i8> %lhs.tmp to <16 x i8>995 %rhs.tmp = insertelement <2 x i64> %b, i64 %arg1, i32 0996 %rhs = bitcast <2 x i64> %rhs.tmp to <16 x i8>997 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 16, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>998 ret <16 x i8> %shuffle999}1000 1001define <16 x i8> @test_v2i64_v16i8(i64 %arg, i8 %arg1) {1002; CHECK-LE-P8-LABEL: test_v2i64_v16i8:1003; CHECK-LE-P8: # %bb.0: # %entry1004; CHECK-LE-P8-NEXT: mtvsrd v2, r41005; CHECK-LE-P8-NEXT: mtvsrd v3, r31006; CHECK-LE-P8-NEXT: vmrghh v2, v2, v31007; CHECK-LE-P8-NEXT: blr1008;1009; CHECK-LE-P9-LABEL: test_v2i64_v16i8:1010; CHECK-LE-P9: # %bb.0: # %entry1011; CHECK-LE-P9-NEXT: mtvsrd v2, r41012; CHECK-LE-P9-NEXT: mtvsrd v3, r31013; CHECK-LE-P9-NEXT: vmrghh v2, v2, v31014; CHECK-LE-P9-NEXT: blr1015;1016; CHECK-BE-P8-LABEL: test_v2i64_v16i8:1017; CHECK-BE-P8: # %bb.0: # %entry1018; CHECK-BE-P8-NEXT: sldi r4, r4, 561019; CHECK-BE-P8-NEXT: mtvsrd v3, r31020; CHECK-BE-P8-NEXT: mtvsrd v2, r41021; CHECK-BE-P8-NEXT: vmrghh v2, v3, v21022; CHECK-BE-P8-NEXT: blr1023;1024; CHECK-BE-P9-LABEL: test_v2i64_v16i8:1025; CHECK-BE-P9: # %bb.0: # %entry1026; CHECK-BE-P9-NEXT: sldi r4, r4, 561027; CHECK-BE-P9-NEXT: mtvsrd v3, r31028; CHECK-BE-P9-NEXT: mtvsrd v2, r41029; CHECK-BE-P9-NEXT: vmrghh v2, v3, v21030; CHECK-BE-P9-NEXT: blr1031;1032; CHECK-AIX-64-P8-LABEL: test_v2i64_v16i8:1033; CHECK-AIX-64-P8: # %bb.0: # %entry1034; CHECK-AIX-64-P8-NEXT: sldi r4, r4, 561035; CHECK-AIX-64-P8-NEXT: mtvsrd v3, r31036; CHECK-AIX-64-P8-NEXT: mtvsrd v2, r41037; CHECK-AIX-64-P8-NEXT: vmrghh v2, v3, v21038; CHECK-AIX-64-P8-NEXT: blr1039;1040; CHECK-AIX-64-P9-LABEL: test_v2i64_v16i8:1041; CHECK-AIX-64-P9: # %bb.0: # %entry1042; CHECK-AIX-64-P9-NEXT: sldi r4, r4, 561043; CHECK-AIX-64-P9-NEXT: mtvsrd v3, r31044; CHECK-AIX-64-P9-NEXT: mtvsrd v2, r41045; CHECK-AIX-64-P9-NEXT: vmrghh v2, v3, v21046; CHECK-AIX-64-P9-NEXT: blr1047;1048; CHECK-AIX-32-P8-LABEL: test_v2i64_v16i8:1049; CHECK-AIX-32-P8: # %bb.0: # %entry1050; CHECK-AIX-32-P8-NEXT: addi r4, r1, -321051; CHECK-AIX-32-P8-NEXT: stb r5, -32(r1)1052; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r41053; CHECK-AIX-32-P8-NEXT: stw r3, -16(r1)1054; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161055; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r31056; CHECK-AIX-32-P8-NEXT: vmrghh v2, v3, v21057; CHECK-AIX-32-P8-NEXT: blr1058;1059; CHECK-AIX-32-P9-LABEL: test_v2i64_v16i8:1060; CHECK-AIX-32-P9: # %bb.0: # %entry1061; CHECK-AIX-32-P9-NEXT: stb r5, -32(r1)1062; CHECK-AIX-32-P9-NEXT: stw r3, -16(r1)1063; CHECK-AIX-32-P9-NEXT: lxv v2, -32(r1)1064; CHECK-AIX-32-P9-NEXT: lxv v3, -16(r1)1065; CHECK-AIX-32-P9-NEXT: vmrghh v2, v3, v21066; CHECK-AIX-32-P9-NEXT: blr1067entry:1068 %rhs = insertelement <16 x i8> undef, i8 %arg1, i32 01069 %lhs.tmp = insertelement <2 x i64> undef, i64 %arg, i32 01070 %lhs = bitcast <2 x i64> %lhs.tmp to <16 x i8>1071 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1072 ret <16 x i8> %shuffle1073}1074 1075define dso_local <16 x i8> @test_1_2(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) local_unnamed_addr {1076; CHECK-LE-P8-LABEL: test_1_2:1077; CHECK-LE-P8: # %bb.0: # %entry1078; CHECK-LE-P8-NEXT: lbzx r3, 0, r31079; CHECK-LE-P8-NEXT: lxsdx v4, 0, r41080; CHECK-LE-P8-NEXT: mtvsrwz v2, r31081; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI13_0@toc@ha1082; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI13_0@toc@l1083; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r31084; CHECK-LE-P8-NEXT: vspltb v2, v2, 71085; CHECK-LE-P8-NEXT: xxswapd v3, vs01086; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v31087; CHECK-LE-P8-NEXT: blr1088;1089; CHECK-LE-P9-LABEL: test_1_2:1090; CHECK-LE-P9: # %bb.0: # %entry1091; CHECK-LE-P9-NEXT: lxsibzx v2, 0, r31092; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI13_0@toc@ha1093; CHECK-LE-P9-NEXT: lfd f0, 0(r4)1094; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI13_0@toc@l1095; CHECK-LE-P9-NEXT: lxv vs1, 0(r3)1096; CHECK-LE-P9-NEXT: vspltb v2, v2, 71097; CHECK-LE-P9-NEXT: xxperm v2, vs0, vs11098; CHECK-LE-P9-NEXT: blr1099;1100; CHECK-BE-P8-LABEL: test_1_2:1101; CHECK-BE-P8: # %bb.0: # %entry1102; CHECK-BE-P8-NEXT: lbzx r3, 0, r31103; CHECK-BE-P8-NEXT: lxsdx v3, 0, r41104; CHECK-BE-P8-NEXT: mtvsrwz v2, r31105; CHECK-BE-P8-NEXT: vspltb v2, v2, 71106; CHECK-BE-P8-NEXT: vmrghh v2, v2, v31107; CHECK-BE-P8-NEXT: blr1108;1109; CHECK-BE-P9-LABEL: test_1_2:1110; CHECK-BE-P9: # %bb.0: # %entry1111; CHECK-BE-P9-NEXT: lxsibzx v2, 0, r31112; CHECK-BE-P9-NEXT: lxsd v3, 0(r4)1113; CHECK-BE-P9-NEXT: vspltb v2, v2, 71114; CHECK-BE-P9-NEXT: vmrghh v2, v2, v31115; CHECK-BE-P9-NEXT: blr1116;1117; CHECK-AIX-64-P8-LABEL: test_1_2:1118; CHECK-AIX-64-P8: # %bb.0: # %entry1119; CHECK-AIX-64-P8-NEXT: lbzx r3, 0, r31120; CHECK-AIX-64-P8-NEXT: lxsdx v3, 0, r41121; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r31122; CHECK-AIX-64-P8-NEXT: vspltb v2, v2, 71123; CHECK-AIX-64-P8-NEXT: vmrghh v2, v2, v31124; CHECK-AIX-64-P8-NEXT: blr1125;1126; CHECK-AIX-64-P9-LABEL: test_1_2:1127; CHECK-AIX-64-P9: # %bb.0: # %entry1128; CHECK-AIX-64-P9-NEXT: lxsibzx v2, 0, r31129; CHECK-AIX-64-P9-NEXT: lxsd v3, 0(r4)1130; CHECK-AIX-64-P9-NEXT: vspltb v2, v2, 71131; CHECK-AIX-64-P9-NEXT: vmrghh v2, v2, v31132; CHECK-AIX-64-P9-NEXT: blr1133;1134; CHECK-AIX-32-P8-LABEL: test_1_2:1135; CHECK-AIX-32-P8: # %bb.0: # %entry1136; CHECK-AIX-32-P8-NEXT: lbzx r3, 0, r31137; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r41138; CHECK-AIX-32-P8-NEXT: mtvsrwz v2, r31139; CHECK-AIX-32-P8-NEXT: lwz r3, L..C6(r2) # %const.01140; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r31141; CHECK-AIX-32-P8-NEXT: vspltb v2, v2, 71142; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v3, v41143; CHECK-AIX-32-P8-NEXT: blr1144;1145; CHECK-AIX-32-P9-LABEL: test_1_2:1146; CHECK-AIX-32-P9: # %bb.0: # %entry1147; CHECK-AIX-32-P9-NEXT: lxsibzx v2, 0, r31148; CHECK-AIX-32-P9-NEXT: lwz r3, L..C2(r2) # %const.01149; CHECK-AIX-32-P9-NEXT: vspltb v3, v2, 71150; CHECK-AIX-32-P9-NEXT: lxsiwzx v2, 0, r41151; CHECK-AIX-32-P9-NEXT: lxv vs0, 0(r3)1152; CHECK-AIX-32-P9-NEXT: xxperm v2, v3, vs01153; CHECK-AIX-32-P9-NEXT: blr1154entry:1155 %0 = load <1 x i8>, ptr %a, align 41156 %bc1 = bitcast <1 x i8> %0 to i81157 %vecinit3 = insertelement <16 x i8> poison, i8 %bc1, i64 01158 %1 = load <2 x i8>, ptr %b, align 81159 %bc2 = bitcast <2 x i8> %1 to i161160 %vecinit6 = insertelement <8 x i16> undef, i16 %bc2, i64 01161 %2 = bitcast <16 x i8> %vecinit3 to <16 x i8>1162 %3 = bitcast <8 x i16> %vecinit6 to <16 x i8>1163 %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1164 ret <16 x i8> %shuffle1165}1166 1167define <16 x i8> @test_none_v2i64(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {1168; CHECK-LE-P8-LABEL: test_none_v2i64:1169; CHECK-LE-P8: # %bb.0: # %entry1170; CHECK-LE-P8-NEXT: lbzx r3, 0, r31171; CHECK-LE-P8-NEXT: lxsdx v4, 0, r41172; CHECK-LE-P8-NEXT: mtvsrwz v2, r31173; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI14_0@toc@ha1174; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI14_0@toc@l1175; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r31176; CHECK-LE-P8-NEXT: vspltb v2, v2, 71177; CHECK-LE-P8-NEXT: xxswapd v3, vs01178; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v31179; CHECK-LE-P8-NEXT: blr1180;1181; CHECK-LE-P9-LABEL: test_none_v2i64:1182; CHECK-LE-P9: # %bb.0: # %entry1183; CHECK-LE-P9-NEXT: lxsibzx v2, 0, r31184; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI14_0@toc@ha1185; CHECK-LE-P9-NEXT: lfd f0, 0(r4)1186; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI14_0@toc@l1187; CHECK-LE-P9-NEXT: lxv vs1, 0(r3)1188; CHECK-LE-P9-NEXT: vspltb v2, v2, 71189; CHECK-LE-P9-NEXT: xxperm v2, vs0, vs11190; CHECK-LE-P9-NEXT: blr1191;1192; CHECK-BE-P8-LABEL: test_none_v2i64:1193; CHECK-BE-P8: # %bb.0: # %entry1194; CHECK-BE-P8-NEXT: lbzx r3, 0, r31195; CHECK-BE-P8-NEXT: lxsdx v3, 0, r41196; CHECK-BE-P8-NEXT: mtvsrwz v2, r31197; CHECK-BE-P8-NEXT: vspltb v2, v2, 71198; CHECK-BE-P8-NEXT: vmrghh v2, v2, v31199; CHECK-BE-P8-NEXT: blr1200;1201; CHECK-BE-P9-LABEL: test_none_v2i64:1202; CHECK-BE-P9: # %bb.0: # %entry1203; CHECK-BE-P9-NEXT: lxsibzx v2, 0, r31204; CHECK-BE-P9-NEXT: lxsd v3, 0(r4)1205; CHECK-BE-P9-NEXT: vspltb v2, v2, 71206; CHECK-BE-P9-NEXT: vmrghh v2, v2, v31207; CHECK-BE-P9-NEXT: blr1208;1209; CHECK-AIX-64-P8-LABEL: test_none_v2i64:1210; CHECK-AIX-64-P8: # %bb.0: # %entry1211; CHECK-AIX-64-P8-NEXT: lbzx r3, 0, r31212; CHECK-AIX-64-P8-NEXT: lxsdx v3, 0, r41213; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r31214; CHECK-AIX-64-P8-NEXT: vspltb v2, v2, 71215; CHECK-AIX-64-P8-NEXT: vmrghh v2, v2, v31216; CHECK-AIX-64-P8-NEXT: blr1217;1218; CHECK-AIX-64-P9-LABEL: test_none_v2i64:1219; CHECK-AIX-64-P9: # %bb.0: # %entry1220; CHECK-AIX-64-P9-NEXT: lxsibzx v2, 0, r31221; CHECK-AIX-64-P9-NEXT: lxsd v3, 0(r4)1222; CHECK-AIX-64-P9-NEXT: vspltb v2, v2, 71223; CHECK-AIX-64-P9-NEXT: vmrghh v2, v2, v31224; CHECK-AIX-64-P9-NEXT: blr1225;1226; CHECK-AIX-32-P8-LABEL: test_none_v2i64:1227; CHECK-AIX-32-P8: # %bb.0: # %entry1228; CHECK-AIX-32-P8-NEXT: lbzx r3, 0, r31229; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r41230; CHECK-AIX-32-P8-NEXT: mtvsrwz v2, r31231; CHECK-AIX-32-P8-NEXT: lwz r3, L..C7(r2) # %const.01232; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r31233; CHECK-AIX-32-P8-NEXT: vspltb v2, v2, 71234; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v3, v41235; CHECK-AIX-32-P8-NEXT: blr1236;1237; CHECK-AIX-32-P9-LABEL: test_none_v2i64:1238; CHECK-AIX-32-P9: # %bb.0: # %entry1239; CHECK-AIX-32-P9-NEXT: lxsibzx v2, 0, r31240; CHECK-AIX-32-P9-NEXT: lwz r3, L..C3(r2) # %const.01241; CHECK-AIX-32-P9-NEXT: vspltb v3, v2, 71242; CHECK-AIX-32-P9-NEXT: lxsiwzx v2, 0, r41243; CHECK-AIX-32-P9-NEXT: lxv vs0, 0(r3)1244; CHECK-AIX-32-P9-NEXT: xxperm v2, v3, vs01245; CHECK-AIX-32-P9-NEXT: blr1246entry:1247 %0 = load <1 x i8>, ptr %a, align 41248 %bc1 = bitcast <1 x i8> %0 to i81249 %vecinit3 = insertelement <16 x i8> poison, i8 %bc1, i64 01250 %1 = load <2 x i8>, ptr %b, align 81251 %bc2 = bitcast <2 x i8> %1 to i161252 %vecinit6 = insertelement <8 x i16> undef, i16 %bc2, i64 01253 %2 = bitcast <16 x i8> %vecinit3 to <16 x i8>1254 %3 = bitcast <8 x i16> %vecinit6 to <16 x i8>1255 %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1256 ret <16 x i8> %shuffle1257}1258 1259define <16 x i8> @test_v2i64_none(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {1260; CHECK-LE-P8-LABEL: test_v2i64_none:1261; CHECK-LE-P8: # %bb.0: # %entry1262; CHECK-LE-P8-NEXT: lbzx r4, 0, r41263; CHECK-LE-P8-NEXT: lxsdx v4, 0, r31264; CHECK-LE-P8-NEXT: mtvsrwz v2, r41265; CHECK-LE-P8-NEXT: addis r4, r2, .LCPI15_0@toc@ha1266; CHECK-LE-P8-NEXT: addi r4, r4, .LCPI15_0@toc@l1267; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r41268; CHECK-LE-P8-NEXT: vspltb v2, v2, 71269; CHECK-LE-P8-NEXT: xxswapd v3, vs01270; CHECK-LE-P8-NEXT: vperm v2, v2, v4, v31271; CHECK-LE-P8-NEXT: blr1272;1273; CHECK-LE-P9-LABEL: test_v2i64_none:1274; CHECK-LE-P9: # %bb.0: # %entry1275; CHECK-LE-P9-NEXT: lxsd v2, 0(r3)1276; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI15_0@toc@ha1277; CHECK-LE-P9-NEXT: lxsibzx v3, 0, r41278; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI15_0@toc@l1279; CHECK-LE-P9-NEXT: lxv vs0, 0(r3)1280; CHECK-LE-P9-NEXT: vspltb v3, v3, 71281; CHECK-LE-P9-NEXT: xxperm v2, v3, vs01282; CHECK-LE-P9-NEXT: blr1283;1284; CHECK-BE-P8-LABEL: test_v2i64_none:1285; CHECK-BE-P8: # %bb.0: # %entry1286; CHECK-BE-P8-NEXT: lbzx r4, 0, r41287; CHECK-BE-P8-NEXT: lxsdx v3, 0, r31288; CHECK-BE-P8-NEXT: mtvsrwz v2, r41289; CHECK-BE-P8-NEXT: vspltb v2, v2, 71290; CHECK-BE-P8-NEXT: vmrghh v2, v3, v21291; CHECK-BE-P8-NEXT: blr1292;1293; CHECK-BE-P9-LABEL: test_v2i64_none:1294; CHECK-BE-P9: # %bb.0: # %entry1295; CHECK-BE-P9-NEXT: lxsibzx v3, 0, r41296; CHECK-BE-P9-NEXT: lxsd v2, 0(r3)1297; CHECK-BE-P9-NEXT: vspltb v3, v3, 71298; CHECK-BE-P9-NEXT: vmrghh v2, v2, v31299; CHECK-BE-P9-NEXT: blr1300;1301; CHECK-AIX-64-P8-LABEL: test_v2i64_none:1302; CHECK-AIX-64-P8: # %bb.0: # %entry1303; CHECK-AIX-64-P8-NEXT: lbzx r4, 0, r41304; CHECK-AIX-64-P8-NEXT: lxsdx v3, 0, r31305; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r41306; CHECK-AIX-64-P8-NEXT: vspltb v2, v2, 71307; CHECK-AIX-64-P8-NEXT: vmrghh v2, v3, v21308; CHECK-AIX-64-P8-NEXT: blr1309;1310; CHECK-AIX-64-P9-LABEL: test_v2i64_none:1311; CHECK-AIX-64-P9: # %bb.0: # %entry1312; CHECK-AIX-64-P9-NEXT: lxsibzx v3, 0, r41313; CHECK-AIX-64-P9-NEXT: lxsd v2, 0(r3)1314; CHECK-AIX-64-P9-NEXT: vspltb v3, v3, 71315; CHECK-AIX-64-P9-NEXT: vmrghh v2, v2, v31316; CHECK-AIX-64-P9-NEXT: blr1317;1318; CHECK-AIX-32-P8-LABEL: test_v2i64_none:1319; CHECK-AIX-32-P8: # %bb.0: # %entry1320; CHECK-AIX-32-P8-NEXT: lfiwzx f0, 0, r31321; CHECK-AIX-32-P8-NEXT: lbzx r3, 0, r41322; CHECK-AIX-32-P8-NEXT: mtvsrwz v3, r31323; CHECK-AIX-32-P8-NEXT: xxspltw v2, vs0, 11324; CHECK-AIX-32-P8-NEXT: vspltb v3, v3, 71325; CHECK-AIX-32-P8-NEXT: vmrghh v2, v2, v31326; CHECK-AIX-32-P8-NEXT: blr1327;1328; CHECK-AIX-32-P9-LABEL: test_v2i64_none:1329; CHECK-AIX-32-P9: # %bb.0: # %entry1330; CHECK-AIX-32-P9-NEXT: lxsibzx v3, 0, r41331; CHECK-AIX-32-P9-NEXT: lxvwsx v2, 0, r31332; CHECK-AIX-32-P9-NEXT: vspltb v3, v3, 71333; CHECK-AIX-32-P9-NEXT: vmrghh v2, v2, v31334; CHECK-AIX-32-P9-NEXT: blr1335entry:1336 %0 = load <8 x i8>, ptr %a, align 41337 %bc1 = bitcast <8 x i8> %0 to i641338 %vecinit3 = insertelement <2 x i64> poison, i64 %bc1, i64 01339 %1 = load <1 x i8>, ptr %b, align 81340 %bc2 = bitcast <1 x i8> %1 to i81341 %vecinit6 = insertelement <16 x i8> undef, i8 %bc2, i64 01342 %2 = bitcast <2 x i64> %vecinit3 to <16 x i8>1343 %3 = bitcast <16 x i8> %vecinit6 to <16 x i8>1344 %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1345 ret <16 x i8> %shuffle1346}1347 1348define <16 x i8> @test_v8i16_v8i16rhs(i16 %arg, i16 %arg1) {1349; CHECK-LE-P8-LABEL: test_v8i16_v8i16rhs:1350; CHECK-LE-P8: # %bb.0: # %entry1351; CHECK-LE-P8-NEXT: mtvsrd v2, r31352; CHECK-LE-P8-NEXT: mtvsrd v3, r41353; CHECK-LE-P8-NEXT: vmrghh v2, v3, v21354; CHECK-LE-P8-NEXT: blr1355;1356; CHECK-LE-P9-LABEL: test_v8i16_v8i16rhs:1357; CHECK-LE-P9: # %bb.0: # %entry1358; CHECK-LE-P9-NEXT: mtvsrd v2, r31359; CHECK-LE-P9-NEXT: mtvsrd v3, r41360; CHECK-LE-P9-NEXT: vmrghh v2, v3, v21361; CHECK-LE-P9-NEXT: blr1362;1363; CHECK-BE-P8-LABEL: test_v8i16_v8i16rhs:1364; CHECK-BE-P8: # %bb.0: # %entry1365; CHECK-BE-P8-NEXT: addis r5, r2, .LCPI16_0@toc@ha1366; CHECK-BE-P8-NEXT: mtvsrwz v3, r41367; CHECK-BE-P8-NEXT: mtvsrwz v4, r31368; CHECK-BE-P8-NEXT: addi r5, r5, .LCPI16_0@toc@l1369; CHECK-BE-P8-NEXT: lxvw4x v2, 0, r51370; CHECK-BE-P8-NEXT: vperm v2, v4, v3, v21371; CHECK-BE-P8-NEXT: blr1372;1373; CHECK-BE-P9-LABEL: test_v8i16_v8i16rhs:1374; CHECK-BE-P9: # %bb.0: # %entry1375; CHECK-BE-P9-NEXT: addis r5, r2, .LCPI16_0@toc@ha1376; CHECK-BE-P9-NEXT: mtvsrwz v2, r41377; CHECK-BE-P9-NEXT: mtfprwz f1, r31378; CHECK-BE-P9-NEXT: addi r5, r5, .LCPI16_0@toc@l1379; CHECK-BE-P9-NEXT: lxv vs0, 0(r5)1380; CHECK-BE-P9-NEXT: xxperm v2, vs1, vs01381; CHECK-BE-P9-NEXT: blr1382;1383; CHECK-AIX-64-P8-LABEL: test_v8i16_v8i16rhs:1384; CHECK-AIX-64-P8: # %bb.0: # %entry1385; CHECK-AIX-64-P8-NEXT: ld r5, L..C12(r2) # %const.01386; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r41387; CHECK-AIX-64-P8-NEXT: mtvsrwz v4, r31388; CHECK-AIX-64-P8-NEXT: lxvw4x v2, 0, r51389; CHECK-AIX-64-P8-NEXT: vperm v2, v4, v3, v21390; CHECK-AIX-64-P8-NEXT: blr1391;1392; CHECK-AIX-64-P9-LABEL: test_v8i16_v8i16rhs:1393; CHECK-AIX-64-P9: # %bb.0: # %entry1394; CHECK-AIX-64-P9-NEXT: ld r5, L..C8(r2) # %const.01395; CHECK-AIX-64-P9-NEXT: mtvsrwz v2, r41396; CHECK-AIX-64-P9-NEXT: mtfprwz f1, r31397; CHECK-AIX-64-P9-NEXT: lxv vs0, 0(r5)1398; CHECK-AIX-64-P9-NEXT: xxperm v2, vs1, vs01399; CHECK-AIX-64-P9-NEXT: blr1400;1401; CHECK-AIX-32-P8-LABEL: test_v8i16_v8i16rhs:1402; CHECK-AIX-32-P8: # %bb.0: # %entry1403; CHECK-AIX-32-P8-NEXT: sth r3, -32(r1)1404; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161405; CHECK-AIX-32-P8-NEXT: sth r4, -16(r1)1406; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r31407; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321408; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r31409; CHECK-AIX-32-P8-NEXT: vmrghh v2, v3, v21410; CHECK-AIX-32-P8-NEXT: blr1411;1412; CHECK-AIX-32-P9-LABEL: test_v8i16_v8i16rhs:1413; CHECK-AIX-32-P9: # %bb.0: # %entry1414; CHECK-AIX-32-P9-NEXT: sth r4, -16(r1)1415; CHECK-AIX-32-P9-NEXT: sth r3, -32(r1)1416; CHECK-AIX-32-P9-NEXT: lxv v2, -16(r1)1417; CHECK-AIX-32-P9-NEXT: lxv v3, -32(r1)1418; CHECK-AIX-32-P9-NEXT: vmrghh v2, v3, v21419; CHECK-AIX-32-P9-NEXT: blr1420entry:1421 %rhs.tmp = insertelement <8 x i16> undef, i16 %arg1, i32 01422 %rhs = bitcast <8 x i16> %rhs.tmp to <16 x i8>1423 %lhs.tmp = insertelement <8 x i16> undef, i16 %arg, i32 01424 %lhs = bitcast <8 x i16> %lhs.tmp to <16 x i8>1425 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1426 ret <16 x i8> %shuffle1427}1428 1429define <16 x i8> @test_v8i16_v4i32(<8 x i16> %a, <4 x i32> %b, i16 %arg, i32 %arg1) {1430; CHECK-LE-P8-LABEL: test_v8i16_v4i32:1431; CHECK-LE-P8: # %bb.0: # %entry1432; CHECK-LE-P8-NEXT: mtvsrd v2, r71433; CHECK-LE-P8-NEXT: mtvsrwz v3, r81434; CHECK-LE-P8-NEXT: vmrghb v2, v3, v21435; CHECK-LE-P8-NEXT: blr1436;1437; CHECK-LE-P9-LABEL: test_v8i16_v4i32:1438; CHECK-LE-P9: # %bb.0: # %entry1439; CHECK-LE-P9-NEXT: mtvsrd v2, r71440; CHECK-LE-P9-NEXT: mtvsrwz v3, r81441; CHECK-LE-P9-NEXT: vmrghb v2, v3, v21442; CHECK-LE-P9-NEXT: blr1443;1444; CHECK-BE-P8-LABEL: test_v8i16_v4i32:1445; CHECK-BE-P8: # %bb.0: # %entry1446; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI17_0@toc@ha1447; CHECK-BE-P8-NEXT: mtvsrwz v2, r71448; CHECK-BE-P8-NEXT: mtvsrwz v3, r81449; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI17_0@toc@l1450; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r31451; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v41452; CHECK-BE-P8-NEXT: blr1453;1454; CHECK-BE-P9-LABEL: test_v8i16_v4i32:1455; CHECK-BE-P9: # %bb.0: # %entry1456; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI17_0@toc@ha1457; CHECK-BE-P9-NEXT: mtfprwz f0, r71458; CHECK-BE-P9-NEXT: mtvsrwz v2, r81459; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI17_0@toc@l1460; CHECK-BE-P9-NEXT: lxv vs1, 0(r3)1461; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs11462; CHECK-BE-P9-NEXT: blr1463;1464; CHECK-AIX-64-P8-LABEL: test_v8i16_v4i32:1465; CHECK-AIX-64-P8: # %bb.0: # %entry1466; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r31467; CHECK-AIX-64-P8-NEXT: ld r3, L..C13(r2) # %const.01468; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r41469; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r31470; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v41471; CHECK-AIX-64-P8-NEXT: blr1472;1473; CHECK-AIX-64-P9-LABEL: test_v8i16_v4i32:1474; CHECK-AIX-64-P9: # %bb.0: # %entry1475; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r31476; CHECK-AIX-64-P9-NEXT: ld r3, L..C9(r2) # %const.01477; CHECK-AIX-64-P9-NEXT: mtvsrwz v2, r41478; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3)1479; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs11480; CHECK-AIX-64-P9-NEXT: blr1481;1482; CHECK-AIX-32-P8-LABEL: test_v8i16_v4i32:1483; CHECK-AIX-32-P8: # %bb.0: # %entry1484; CHECK-AIX-32-P8-NEXT: sth r3, -16(r1)1485; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161486; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r31487; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321488; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)1489; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r31490; CHECK-AIX-32-P8-NEXT: vmrghb v2, v2, v31491; CHECK-AIX-32-P8-NEXT: blr1492;1493; CHECK-AIX-32-P9-LABEL: test_v8i16_v4i32:1494; CHECK-AIX-32-P9: # %bb.0: # %entry1495; CHECK-AIX-32-P9-NEXT: sth r3, -16(r1)1496; CHECK-AIX-32-P9-NEXT: stw r4, -32(r1)1497; CHECK-AIX-32-P9-NEXT: lxv v2, -16(r1)1498; CHECK-AIX-32-P9-NEXT: lxv v3, -32(r1)1499; CHECK-AIX-32-P9-NEXT: vmrghb v2, v2, v31500; CHECK-AIX-32-P9-NEXT: blr1501entry:1502 %lhs.tmp = insertelement <8 x i16> %a, i16 %arg, i32 01503 %lhs = bitcast <8 x i16> %lhs.tmp to <16 x i8>1504 %rhs.tmp = insertelement <4 x i32> %b, i32 %arg1, i32 01505 %rhs = bitcast <4 x i32> %rhs.tmp to <16 x i8>1506 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 16, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1507 ret <16 x i8> %shuffle1508}1509 1510define <16 x i8> @test_v8i16_v2i64(<8 x i16> %a, <2 x i64> %b, i16 %arg, i64 %arg1) {1511; CHECK-LE-P8-LABEL: test_v8i16_v2i64:1512; CHECK-LE-P8: # %bb.0: # %entry1513; CHECK-LE-P8-NEXT: mtvsrd v2, r71514; CHECK-LE-P8-NEXT: mtvsrd v3, r81515; CHECK-LE-P8-NEXT: vmrghb v2, v3, v21516; CHECK-LE-P8-NEXT: blr1517;1518; CHECK-LE-P9-LABEL: test_v8i16_v2i64:1519; CHECK-LE-P9: # %bb.0: # %entry1520; CHECK-LE-P9-NEXT: mtvsrd v2, r71521; CHECK-LE-P9-NEXT: mtvsrd v3, r81522; CHECK-LE-P9-NEXT: vmrghb v2, v3, v21523; CHECK-LE-P9-NEXT: blr1524;1525; CHECK-BE-P8-LABEL: test_v8i16_v2i64:1526; CHECK-BE-P8: # %bb.0: # %entry1527; CHECK-BE-P8-NEXT: sldi r3, r7, 481528; CHECK-BE-P8-NEXT: mtvsrd v3, r81529; CHECK-BE-P8-NEXT: mtvsrd v2, r31530; CHECK-BE-P8-NEXT: vmrghb v2, v2, v31531; CHECK-BE-P8-NEXT: blr1532;1533; CHECK-BE-P9-LABEL: test_v8i16_v2i64:1534; CHECK-BE-P9: # %bb.0: # %entry1535; CHECK-BE-P9-NEXT: sldi r3, r7, 481536; CHECK-BE-P9-NEXT: mtvsrd v3, r81537; CHECK-BE-P9-NEXT: mtvsrd v2, r31538; CHECK-BE-P9-NEXT: vmrghb v2, v2, v31539; CHECK-BE-P9-NEXT: blr1540;1541; CHECK-AIX-64-P8-LABEL: test_v8i16_v2i64:1542; CHECK-AIX-64-P8: # %bb.0: # %entry1543; CHECK-AIX-64-P8-NEXT: sldi r3, r3, 481544; CHECK-AIX-64-P8-NEXT: mtvsrd v3, r41545; CHECK-AIX-64-P8-NEXT: mtvsrd v2, r31546; CHECK-AIX-64-P8-NEXT: vmrghb v2, v2, v31547; CHECK-AIX-64-P8-NEXT: blr1548;1549; CHECK-AIX-64-P9-LABEL: test_v8i16_v2i64:1550; CHECK-AIX-64-P9: # %bb.0: # %entry1551; CHECK-AIX-64-P9-NEXT: sldi r3, r3, 481552; CHECK-AIX-64-P9-NEXT: mtvsrd v3, r41553; CHECK-AIX-64-P9-NEXT: mtvsrd v2, r31554; CHECK-AIX-64-P9-NEXT: vmrghb v2, v2, v31555; CHECK-AIX-64-P9-NEXT: blr1556;1557; CHECK-AIX-32-P8-LABEL: test_v8i16_v2i64:1558; CHECK-AIX-32-P8: # %bb.0: # %entry1559; CHECK-AIX-32-P8-NEXT: sth r3, -16(r1)1560; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161561; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r31562; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321563; CHECK-AIX-32-P8-NEXT: stw r4, -32(r1)1564; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r31565; CHECK-AIX-32-P8-NEXT: vmrghb v2, v2, v31566; CHECK-AIX-32-P8-NEXT: blr1567;1568; CHECK-AIX-32-P9-LABEL: test_v8i16_v2i64:1569; CHECK-AIX-32-P9: # %bb.0: # %entry1570; CHECK-AIX-32-P9-NEXT: sth r3, -16(r1)1571; CHECK-AIX-32-P9-NEXT: stw r4, -32(r1)1572; CHECK-AIX-32-P9-NEXT: lxv v2, -16(r1)1573; CHECK-AIX-32-P9-NEXT: lxv v3, -32(r1)1574; CHECK-AIX-32-P9-NEXT: vmrghb v2, v2, v31575; CHECK-AIX-32-P9-NEXT: blr1576entry:1577 %lhs.tmp = insertelement <8 x i16> %a, i16 %arg, i32 01578 %lhs = bitcast <8 x i16> %lhs.tmp to <16 x i8>1579 %rhs.tmp = insertelement <2 x i64> %b, i64 %arg1, i32 01580 %rhs = bitcast <2 x i64> %rhs.tmp to <16 x i8>1581 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 16, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1582 ret <16 x i8> %shuffle1583}1584 1585define <16 x i8> @test_v4i32_v4i32(i32 %arg, i32 %arg1, <4 x i32> %a, <4 x i32> %b) {1586; CHECK-LE-P8-LABEL: test_v4i32_v4i32:1587; CHECK-LE-P8: # %bb.0: # %entry1588; CHECK-LE-P8-NEXT: mtfprwz f0, r31589; CHECK-LE-P8-NEXT: mtfprwz f1, r41590; CHECK-LE-P8-NEXT: xxmrghw v2, vs1, vs01591; CHECK-LE-P8-NEXT: blr1592;1593; CHECK-LE-P9-LABEL: test_v4i32_v4i32:1594; CHECK-LE-P9: # %bb.0: # %entry1595; CHECK-LE-P9-NEXT: mtfprwz f0, r31596; CHECK-LE-P9-NEXT: mtfprwz f1, r41597; CHECK-LE-P9-NEXT: xxmrghw v2, vs1, vs01598; CHECK-LE-P9-NEXT: blr1599;1600; CHECK-BE-P8-LABEL: test_v4i32_v4i32:1601; CHECK-BE-P8: # %bb.0: # %entry1602; CHECK-BE-P8-NEXT: mtvsrwz v2, r41603; CHECK-BE-P8-NEXT: mtvsrwz v3, r31604; CHECK-BE-P8-NEXT: vmrgow v2, v3, v21605; CHECK-BE-P8-NEXT: blr1606;1607; CHECK-BE-P9-LABEL: test_v4i32_v4i32:1608; CHECK-BE-P9: # %bb.0: # %entry1609; CHECK-BE-P9-NEXT: mtvsrwz v2, r41610; CHECK-BE-P9-NEXT: mtvsrwz v3, r31611; CHECK-BE-P9-NEXT: vmrgow v2, v3, v21612; CHECK-BE-P9-NEXT: blr1613;1614; CHECK-AIX-64-P8-LABEL: test_v4i32_v4i32:1615; CHECK-AIX-64-P8: # %bb.0: # %entry1616; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r41617; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r31618; CHECK-AIX-64-P8-NEXT: vmrgow v2, v3, v21619; CHECK-AIX-64-P8-NEXT: blr1620;1621; CHECK-AIX-64-P9-LABEL: test_v4i32_v4i32:1622; CHECK-AIX-64-P9: # %bb.0: # %entry1623; CHECK-AIX-64-P9-NEXT: mtvsrwz v2, r41624; CHECK-AIX-64-P9-NEXT: mtvsrwz v3, r31625; CHECK-AIX-64-P9-NEXT: vmrgow v2, v3, v21626; CHECK-AIX-64-P9-NEXT: blr1627;1628; CHECK-AIX-32-P8-LABEL: test_v4i32_v4i32:1629; CHECK-AIX-32-P8: # %bb.0: # %entry1630; CHECK-AIX-32-P8-NEXT: stw r3, -32(r1)1631; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161632; CHECK-AIX-32-P8-NEXT: stw r4, -16(r1)1633; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r31634; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321635; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r31636; CHECK-AIX-32-P8-NEXT: xxmrghw v2, vs1, vs01637; CHECK-AIX-32-P8-NEXT: blr1638;1639; CHECK-AIX-32-P9-LABEL: test_v4i32_v4i32:1640; CHECK-AIX-32-P9: # %bb.0: # %entry1641; CHECK-AIX-32-P9-NEXT: stw r4, -16(r1)1642; CHECK-AIX-32-P9-NEXT: stw r3, -32(r1)1643; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)1644; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)1645; CHECK-AIX-32-P9-NEXT: xxmrghw v2, vs1, vs01646; CHECK-AIX-32-P9-NEXT: blr1647entry:1648 %lhs.tmp = insertelement <4 x i32> %a, i32 %arg, i32 01649 %lhs = bitcast <4 x i32> %lhs.tmp to <16 x i8>1650 %rhs.tmp = insertelement <4 x i32> %b, i32 %arg1, i32 01651 %rhs = bitcast <4 x i32> %rhs.tmp to <16 x i8>1652 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1653 ret <16 x i8> %shuffle1654}1655 1656define <16 x i8> @test_v4i32_v8i16(i32 %arg, i16 %arg1) {1657; CHECK-LE-P8-LABEL: test_v4i32_v8i16:1658; CHECK-LE-P8: # %bb.0: # %entry1659; CHECK-LE-P8-NEXT: mtvsrwz v2, r31660; CHECK-LE-P8-NEXT: mtvsrd v3, r41661; CHECK-LE-P8-NEXT: vmrghh v2, v3, v21662; CHECK-LE-P8-NEXT: blr1663;1664; CHECK-LE-P9-LABEL: test_v4i32_v8i16:1665; CHECK-LE-P9: # %bb.0: # %entry1666; CHECK-LE-P9-NEXT: mtvsrwz v2, r31667; CHECK-LE-P9-NEXT: mtvsrd v3, r41668; CHECK-LE-P9-NEXT: vmrghh v2, v3, v21669; CHECK-LE-P9-NEXT: blr1670;1671; CHECK-BE-P8-LABEL: test_v4i32_v8i16:1672; CHECK-BE-P8: # %bb.0: # %entry1673; CHECK-BE-P8-NEXT: mtvsrwz v2, r31674; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI20_0@toc@ha1675; CHECK-BE-P8-NEXT: mtvsrwz v3, r41676; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI20_0@toc@l1677; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r31678; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v41679; CHECK-BE-P8-NEXT: blr1680;1681; CHECK-BE-P9-LABEL: test_v4i32_v8i16:1682; CHECK-BE-P9: # %bb.0: # %entry1683; CHECK-BE-P9-NEXT: mtfprwz f0, r31684; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI20_0@toc@ha1685; CHECK-BE-P9-NEXT: mtvsrwz v2, r41686; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI20_0@toc@l1687; CHECK-BE-P9-NEXT: lxv vs1, 0(r3)1688; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs11689; CHECK-BE-P9-NEXT: blr1690;1691; CHECK-AIX-64-P8-LABEL: test_v4i32_v8i16:1692; CHECK-AIX-64-P8: # %bb.0: # %entry1693; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r31694; CHECK-AIX-64-P8-NEXT: ld r3, L..C14(r2) # %const.01695; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r41696; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r31697; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v41698; CHECK-AIX-64-P8-NEXT: blr1699;1700; CHECK-AIX-64-P9-LABEL: test_v4i32_v8i16:1701; CHECK-AIX-64-P9: # %bb.0: # %entry1702; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r31703; CHECK-AIX-64-P9-NEXT: ld r3, L..C10(r2) # %const.01704; CHECK-AIX-64-P9-NEXT: mtvsrwz v2, r41705; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3)1706; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs11707; CHECK-AIX-64-P9-NEXT: blr1708;1709; CHECK-AIX-32-P8-LABEL: test_v4i32_v8i16:1710; CHECK-AIX-32-P8: # %bb.0: # %entry1711; CHECK-AIX-32-P8-NEXT: stw r3, -16(r1)1712; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161713; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r31714; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321715; CHECK-AIX-32-P8-NEXT: sth r4, -32(r1)1716; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r31717; CHECK-AIX-32-P8-NEXT: vmrghh v2, v2, v31718; CHECK-AIX-32-P8-NEXT: blr1719;1720; CHECK-AIX-32-P9-LABEL: test_v4i32_v8i16:1721; CHECK-AIX-32-P9: # %bb.0: # %entry1722; CHECK-AIX-32-P9-NEXT: stw r3, -16(r1)1723; CHECK-AIX-32-P9-NEXT: sth r4, -32(r1)1724; CHECK-AIX-32-P9-NEXT: lxv v2, -16(r1)1725; CHECK-AIX-32-P9-NEXT: lxv v3, -32(r1)1726; CHECK-AIX-32-P9-NEXT: vmrghh v2, v2, v31727; CHECK-AIX-32-P9-NEXT: blr1728entry:1729 %lhs.tmp = insertelement <4 x i32> undef, i32 %arg, i32 01730 %lhs = bitcast <4 x i32> %lhs.tmp to <16 x i8>1731 %rhs.tmp = insertelement <8 x i16> undef, i16 %arg1, i32 01732 %rhs = bitcast <8 x i16> %rhs.tmp to <16 x i8>1733 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1734 ret <16 x i8> %shuffle1735}1736 1737define <16 x i8> @test_v2i64_v2i64(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {1738; CHECK-LE-P8-LABEL: test_v2i64_v2i64:1739; CHECK-LE-P8: # %bb.0: # %entry1740; CHECK-LE-P8-NEXT: lxsdx v2, 0, r31741; CHECK-LE-P8-NEXT: lxsdx v3, 0, r41742; CHECK-LE-P8-NEXT: vmrghh v2, v3, v21743; CHECK-LE-P8-NEXT: blr1744;1745; CHECK-LE-P9-LABEL: test_v2i64_v2i64:1746; CHECK-LE-P9: # %bb.0: # %entry1747; CHECK-LE-P9-NEXT: lxsd v2, 0(r3)1748; CHECK-LE-P9-NEXT: lxsd v3, 0(r4)1749; CHECK-LE-P9-NEXT: vmrghh v2, v3, v21750; CHECK-LE-P9-NEXT: blr1751;1752; CHECK-BE-P8-LABEL: test_v2i64_v2i64:1753; CHECK-BE-P8: # %bb.0: # %entry1754; CHECK-BE-P8-NEXT: lxsdx v2, 0, r31755; CHECK-BE-P8-NEXT: lxsdx v3, 0, r41756; CHECK-BE-P8-NEXT: vmrghh v2, v2, v31757; CHECK-BE-P8-NEXT: blr1758;1759; CHECK-BE-P9-LABEL: test_v2i64_v2i64:1760; CHECK-BE-P9: # %bb.0: # %entry1761; CHECK-BE-P9-NEXT: lxsd v2, 0(r3)1762; CHECK-BE-P9-NEXT: lxsd v3, 0(r4)1763; CHECK-BE-P9-NEXT: vmrghh v2, v2, v31764; CHECK-BE-P9-NEXT: blr1765;1766; CHECK-AIX-64-P8-LABEL: test_v2i64_v2i64:1767; CHECK-AIX-64-P8: # %bb.0: # %entry1768; CHECK-AIX-64-P8-NEXT: lxsdx v2, 0, r31769; CHECK-AIX-64-P8-NEXT: lxsdx v3, 0, r41770; CHECK-AIX-64-P8-NEXT: vmrghh v2, v2, v31771; CHECK-AIX-64-P8-NEXT: blr1772;1773; CHECK-AIX-64-P9-LABEL: test_v2i64_v2i64:1774; CHECK-AIX-64-P9: # %bb.0: # %entry1775; CHECK-AIX-64-P9-NEXT: lxsd v2, 0(r3)1776; CHECK-AIX-64-P9-NEXT: lxsd v3, 0(r4)1777; CHECK-AIX-64-P9-NEXT: vmrghh v2, v2, v31778; CHECK-AIX-64-P9-NEXT: blr1779;1780; CHECK-AIX-32-P8-LABEL: test_v2i64_v2i64:1781; CHECK-AIX-32-P8: # %bb.0: # %entry1782; CHECK-AIX-32-P8-NEXT: lfiwzx f0, 0, r31783; CHECK-AIX-32-P8-NEXT: lwz r3, L..C8(r2) # %const.01784; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r41785; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r31786; CHECK-AIX-32-P8-NEXT: xxspltw v2, vs0, 11787; CHECK-AIX-32-P8-NEXT: vperm v2, v2, v3, v41788; CHECK-AIX-32-P8-NEXT: blr1789;1790; CHECK-AIX-32-P9-LABEL: test_v2i64_v2i64:1791; CHECK-AIX-32-P9: # %bb.0: # %entry1792; CHECK-AIX-32-P9-NEXT: lxvwsx vs0, 0, r31793; CHECK-AIX-32-P9-NEXT: lwz r3, L..C4(r2) # %const.01794; CHECK-AIX-32-P9-NEXT: lxsiwzx v2, 0, r41795; CHECK-AIX-32-P9-NEXT: lxv vs1, 0(r3)1796; CHECK-AIX-32-P9-NEXT: xxperm v2, vs0, vs11797; CHECK-AIX-32-P9-NEXT: blr1798entry:1799 %0 = load <8 x i8>, ptr %a, align 41800 %bc1 = bitcast <8 x i8> %0 to i641801 %vecinit3 = insertelement <2 x i64> poison, i64 %bc1, i64 01802 %1 = load <2 x i8>, ptr %b, align 81803 %bc2 = bitcast <2 x i8> %1 to i161804 %vecinit6 = insertelement <8 x i16> undef, i16 %bc2, i64 01805 %2 = bitcast <2 x i64> %vecinit3 to <16 x i8>1806 %3 = bitcast <8 x i16> %vecinit6 to <16 x i8>1807 %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1808 ret <16 x i8> %shuffle1809}1810 1811define <16 x i8> @test_v2i64_v4i32(i64 %arg, i32 %arg1, <2 x i64> %a, <4 x i32> %b) {1812; CHECK-LE-P8-LABEL: test_v2i64_v4i32:1813; CHECK-LE-P8: # %bb.0: # %entry1814; CHECK-LE-P8-NEXT: mtfprd f0, r31815; CHECK-LE-P8-NEXT: mtfprwz f1, r41816; CHECK-LE-P8-NEXT: xxmrghw v2, vs1, vs01817; CHECK-LE-P8-NEXT: blr1818;1819; CHECK-LE-P9-LABEL: test_v2i64_v4i32:1820; CHECK-LE-P9: # %bb.0: # %entry1821; CHECK-LE-P9-NEXT: mtfprd f0, r31822; CHECK-LE-P9-NEXT: mtfprwz f1, r41823; CHECK-LE-P9-NEXT: xxmrghw v2, vs1, vs01824; CHECK-LE-P9-NEXT: blr1825;1826; CHECK-BE-P8-LABEL: test_v2i64_v4i32:1827; CHECK-BE-P8: # %bb.0: # %entry1828; CHECK-BE-P8-NEXT: mtfprd f0, r31829; CHECK-BE-P8-NEXT: sldi r3, r4, 321830; CHECK-BE-P8-NEXT: mtfprd f1, r31831; CHECK-BE-P8-NEXT: xxmrghw v2, vs0, vs11832; CHECK-BE-P8-NEXT: blr1833;1834; CHECK-BE-P9-LABEL: test_v2i64_v4i32:1835; CHECK-BE-P9: # %bb.0: # %entry1836; CHECK-BE-P9-NEXT: mtvsrws vs1, r41837; CHECK-BE-P9-NEXT: mtfprd f0, r31838; CHECK-BE-P9-NEXT: xxmrghw v2, vs0, vs11839; CHECK-BE-P9-NEXT: blr1840;1841; CHECK-AIX-64-P8-LABEL: test_v2i64_v4i32:1842; CHECK-AIX-64-P8: # %bb.0: # %entry1843; CHECK-AIX-64-P8-NEXT: mtfprd f0, r31844; CHECK-AIX-64-P8-NEXT: sldi r3, r4, 321845; CHECK-AIX-64-P8-NEXT: mtfprd f1, r31846; CHECK-AIX-64-P8-NEXT: xxmrghw v2, vs0, vs11847; CHECK-AIX-64-P8-NEXT: blr1848;1849; CHECK-AIX-64-P9-LABEL: test_v2i64_v4i32:1850; CHECK-AIX-64-P9: # %bb.0: # %entry1851; CHECK-AIX-64-P9-NEXT: mtvsrws vs1, r41852; CHECK-AIX-64-P9-NEXT: mtfprd f0, r31853; CHECK-AIX-64-P9-NEXT: xxmrghw v2, vs0, vs11854; CHECK-AIX-64-P9-NEXT: blr1855;1856; CHECK-AIX-32-P8-LABEL: test_v2i64_v4i32:1857; CHECK-AIX-32-P8: # %bb.0: # %entry1858; CHECK-AIX-32-P8-NEXT: stw r3, -32(r1)1859; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161860; CHECK-AIX-32-P8-NEXT: stw r5, -16(r1)1861; CHECK-AIX-32-P8-NEXT: lxvw4x vs0, 0, r31862; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321863; CHECK-AIX-32-P8-NEXT: lxvw4x vs1, 0, r31864; CHECK-AIX-32-P8-NEXT: xxmrghw v2, vs1, vs01865; CHECK-AIX-32-P8-NEXT: blr1866;1867; CHECK-AIX-32-P9-LABEL: test_v2i64_v4i32:1868; CHECK-AIX-32-P9: # %bb.0: # %entry1869; CHECK-AIX-32-P9-NEXT: stw r5, -16(r1)1870; CHECK-AIX-32-P9-NEXT: stw r3, -32(r1)1871; CHECK-AIX-32-P9-NEXT: lxv vs0, -16(r1)1872; CHECK-AIX-32-P9-NEXT: lxv vs1, -32(r1)1873; CHECK-AIX-32-P9-NEXT: xxmrghw v2, vs1, vs01874; CHECK-AIX-32-P9-NEXT: blr1875entry:1876 %lhs.tmp = insertelement <2 x i64> %a, i64 %arg, i32 01877 %lhs = bitcast <2 x i64> %lhs.tmp to <16 x i8>1878 %rhs.tmp = insertelement <4 x i32> %b, i32 %arg1, i32 01879 %rhs = bitcast <4 x i32> %rhs.tmp to <16 x i8>1880 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1881 ret <16 x i8> %shuffle1882}1883 1884define <16 x i8> @test_v2i64_v8i16(i64 %arg, i16 %arg1) {1885; CHECK-LE-P8-LABEL: test_v2i64_v8i16:1886; CHECK-LE-P8: # %bb.0: # %entry1887; CHECK-LE-P8-NEXT: mtvsrd v2, r31888; CHECK-LE-P8-NEXT: mtvsrd v3, r41889; CHECK-LE-P8-NEXT: vmrghh v2, v3, v21890; CHECK-LE-P8-NEXT: blr1891;1892; CHECK-LE-P9-LABEL: test_v2i64_v8i16:1893; CHECK-LE-P9: # %bb.0: # %entry1894; CHECK-LE-P9-NEXT: mtvsrd v2, r31895; CHECK-LE-P9-NEXT: mtvsrd v3, r41896; CHECK-LE-P9-NEXT: vmrghh v2, v3, v21897; CHECK-LE-P9-NEXT: blr1898;1899; CHECK-BE-P8-LABEL: test_v2i64_v8i16:1900; CHECK-BE-P8: # %bb.0: # %entry1901; CHECK-BE-P8-NEXT: mtvsrd v2, r31902; CHECK-BE-P8-NEXT: sldi r3, r4, 481903; CHECK-BE-P8-NEXT: mtvsrd v3, r31904; CHECK-BE-P8-NEXT: vmrghh v2, v2, v31905; CHECK-BE-P8-NEXT: blr1906;1907; CHECK-BE-P9-LABEL: test_v2i64_v8i16:1908; CHECK-BE-P9: # %bb.0: # %entry1909; CHECK-BE-P9-NEXT: mtvsrd v2, r31910; CHECK-BE-P9-NEXT: sldi r3, r4, 481911; CHECK-BE-P9-NEXT: mtvsrd v3, r31912; CHECK-BE-P9-NEXT: vmrghh v2, v2, v31913; CHECK-BE-P9-NEXT: blr1914;1915; CHECK-AIX-64-P8-LABEL: test_v2i64_v8i16:1916; CHECK-AIX-64-P8: # %bb.0: # %entry1917; CHECK-AIX-64-P8-NEXT: mtvsrd v2, r31918; CHECK-AIX-64-P8-NEXT: sldi r3, r4, 481919; CHECK-AIX-64-P8-NEXT: mtvsrd v3, r31920; CHECK-AIX-64-P8-NEXT: vmrghh v2, v2, v31921; CHECK-AIX-64-P8-NEXT: blr1922;1923; CHECK-AIX-64-P9-LABEL: test_v2i64_v8i16:1924; CHECK-AIX-64-P9: # %bb.0: # %entry1925; CHECK-AIX-64-P9-NEXT: mtvsrd v2, r31926; CHECK-AIX-64-P9-NEXT: sldi r3, r4, 481927; CHECK-AIX-64-P9-NEXT: mtvsrd v3, r31928; CHECK-AIX-64-P9-NEXT: vmrghh v2, v2, v31929; CHECK-AIX-64-P9-NEXT: blr1930;1931; CHECK-AIX-32-P8-LABEL: test_v2i64_v8i16:1932; CHECK-AIX-32-P8: # %bb.0: # %entry1933; CHECK-AIX-32-P8-NEXT: stw r3, -16(r1)1934; CHECK-AIX-32-P8-NEXT: addi r3, r1, -161935; CHECK-AIX-32-P8-NEXT: lxvw4x v2, 0, r31936; CHECK-AIX-32-P8-NEXT: addi r3, r1, -321937; CHECK-AIX-32-P8-NEXT: sth r5, -32(r1)1938; CHECK-AIX-32-P8-NEXT: lxvw4x v3, 0, r31939; CHECK-AIX-32-P8-NEXT: vmrghh v2, v2, v31940; CHECK-AIX-32-P8-NEXT: blr1941;1942; CHECK-AIX-32-P9-LABEL: test_v2i64_v8i16:1943; CHECK-AIX-32-P9: # %bb.0: # %entry1944; CHECK-AIX-32-P9-NEXT: stw r3, -16(r1)1945; CHECK-AIX-32-P9-NEXT: sth r5, -32(r1)1946; CHECK-AIX-32-P9-NEXT: lxv v2, -16(r1)1947; CHECK-AIX-32-P9-NEXT: lxv v3, -32(r1)1948; CHECK-AIX-32-P9-NEXT: vmrghh v2, v2, v31949; CHECK-AIX-32-P9-NEXT: blr1950entry:1951 %lhs.tmp = insertelement <2 x i64> undef, i64 %arg, i32 01952 %lhs = bitcast <2 x i64> %lhs.tmp to <16 x i8>1953 %rhs.tmp = insertelement <8 x i16> undef, i16 %arg1, i32 01954 %rhs = bitcast <8 x i16> %rhs.tmp to <16 x i8>1955 %shuffle = shufflevector <16 x i8> %lhs, <16 x i8> %rhs, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>1956 ret <16 x i8> %shuffle1957}1958 1959define <16 x i8> @test_v4i32_v2i64(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b) {1960; CHECK-LE-P8-LABEL: test_v4i32_v2i64:1961; CHECK-LE-P8: # %bb.0: # %entry1962; CHECK-LE-P8-NEXT: addis r5, r2, .LCPI24_0@toc@ha1963; CHECK-LE-P8-NEXT: lxsiwzx v3, 0, r31964; CHECK-LE-P8-NEXT: lxsdx v4, 0, r41965; CHECK-LE-P8-NEXT: addi r5, r5, .LCPI24_0@toc@l1966; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r51967; CHECK-LE-P8-NEXT: xxswapd v2, vs01968; CHECK-LE-P8-NEXT: vperm v2, v4, v3, v21969; CHECK-LE-P8-NEXT: blr1970;1971; CHECK-LE-P9-LABEL: test_v4i32_v2i64:1972; CHECK-LE-P9: # %bb.0: # %entry1973; CHECK-LE-P9-NEXT: lxsiwzx v2, 0, r31974; CHECK-LE-P9-NEXT: addis r3, r2, .LCPI24_0@toc@ha1975; CHECK-LE-P9-NEXT: lfd f0, 0(r4)1976; CHECK-LE-P9-NEXT: addi r3, r3, .LCPI24_0@toc@l1977; CHECK-LE-P9-NEXT: lxv vs1, 0(r3)1978; CHECK-LE-P9-NEXT: xxperm v2, vs0, vs11979; CHECK-LE-P9-NEXT: blr1980;1981; CHECK-BE-P8-LABEL: test_v4i32_v2i64:1982; CHECK-BE-P8: # %bb.0: # %entry1983; CHECK-BE-P8-NEXT: lfiwzx f0, 0, r31984; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI24_0@toc@ha1985; CHECK-BE-P8-NEXT: lxsdx v3, 0, r41986; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI24_0@toc@l1987; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r31988; CHECK-BE-P8-NEXT: xxsldwi v2, f0, f0, 11989; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v41990; CHECK-BE-P8-NEXT: blr1991;1992; CHECK-BE-P9-LABEL: test_v4i32_v2i64:1993; CHECK-BE-P9: # %bb.0: # %entry1994; CHECK-BE-P9-NEXT: lfiwzx f0, 0, r31995; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI24_0@toc@ha1996; CHECK-BE-P9-NEXT: lxsd v2, 0(r4)1997; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI24_0@toc@l1998; CHECK-BE-P9-NEXT: lxv vs1, 0(r3)1999; CHECK-BE-P9-NEXT: xxsldwi vs0, f0, f0, 12000; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs12001; CHECK-BE-P9-NEXT: blr2002;2003; CHECK-AIX-64-P8-LABEL: test_v4i32_v2i64:2004; CHECK-AIX-64-P8: # %bb.0: # %entry2005; CHECK-AIX-64-P8-NEXT: lfiwzx f0, 0, r32006; CHECK-AIX-64-P8-NEXT: ld r3, L..C15(r2) # %const.02007; CHECK-AIX-64-P8-NEXT: lxsdx v3, 0, r42008; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r32009; CHECK-AIX-64-P8-NEXT: xxsldwi v2, f0, f0, 12010; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v42011; CHECK-AIX-64-P8-NEXT: blr2012;2013; CHECK-AIX-64-P9-LABEL: test_v4i32_v2i64:2014; CHECK-AIX-64-P9: # %bb.0: # %entry2015; CHECK-AIX-64-P9-NEXT: lfiwzx f0, 0, r32016; CHECK-AIX-64-P9-NEXT: ld r3, L..C11(r2) # %const.02017; CHECK-AIX-64-P9-NEXT: lxsd v2, 0(r4)2018; CHECK-AIX-64-P9-NEXT: xxsldwi vs0, f0, f0, 12019; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3)2020; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs12021; CHECK-AIX-64-P9-NEXT: blr2022;2023; CHECK-AIX-32-P8-LABEL: test_v4i32_v2i64:2024; CHECK-AIX-32-P8: # %bb.0: # %entry2025; CHECK-AIX-32-P8-NEXT: li r5, 42026; CHECK-AIX-32-P8-NEXT: lfiwzx f1, 0, r42027; CHECK-AIX-32-P8-NEXT: lxsiwzx v3, 0, r32028; CHECK-AIX-32-P8-NEXT: lwz r3, L..C9(r2) # %const.02029; CHECK-AIX-32-P8-NEXT: lfiwzx f0, r4, r52030; CHECK-AIX-32-P8-NEXT: lxvw4x v4, 0, r32031; CHECK-AIX-32-P8-NEXT: xxspltw vs1, vs1, 12032; CHECK-AIX-32-P8-NEXT: xxspltw vs0, vs0, 12033; CHECK-AIX-32-P8-NEXT: xxmrghw v2, vs1, vs02034; CHECK-AIX-32-P8-NEXT: vperm v2, v3, v2, v42035; CHECK-AIX-32-P8-NEXT: blr2036;2037; CHECK-AIX-32-P9-LABEL: test_v4i32_v2i64:2038; CHECK-AIX-32-P9: # %bb.0: # %entry2039; CHECK-AIX-32-P9-NEXT: lfiwzx f0, 0, r32040; CHECK-AIX-32-P9-NEXT: li r3, 42041; CHECK-AIX-32-P9-NEXT: lxvwsx vs2, 0, r42042; CHECK-AIX-32-P9-NEXT: lxvwsx vs1, r4, r32043; CHECK-AIX-32-P9-NEXT: lwz r3, L..C5(r2) # %const.02044; CHECK-AIX-32-P9-NEXT: xxmrghw v2, vs2, vs12045; CHECK-AIX-32-P9-NEXT: lxv vs1, 0(r3)2046; CHECK-AIX-32-P9-NEXT: xxperm v2, vs0, vs12047; CHECK-AIX-32-P9-NEXT: blr2048entry:2049 %0 = load <4 x i8>, ptr %a, align 42050 %bc1 = bitcast <4 x i8> %0 to i322051 %vecinit3 = insertelement <4 x i32> poison, i32 %bc1, i64 02052 %1 = load <8 x i8>, ptr %b, align 82053 %bc2 = bitcast <8 x i8> %1 to i642054 %vecinit6 = insertelement <2 x i64> undef, i64 %bc2, i64 02055 %2 = bitcast <4 x i32> %vecinit3 to <16 x i8>2056 %3 = bitcast <2 x i64> %vecinit6 to <16 x i8>2057 %shuffle = shufflevector <16 x i8> %2, <16 x i8> %3, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>2058 ret <16 x i8> %shuffle2059}2060