brintos

brintos / llvm-project-archived public Read only

0
0
Text · 52.1 KiB · d98b78d Raw
1384 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 void @test_none_v8i16(ptr %a) {29; CHECK-LE-P8-LABEL: test_none_v8i16:30; CHECK-LE-P8:       # %bb.0: # %entry31; CHECK-LE-P8-NEXT:    lhz r4, 0(r3)32; CHECK-LE-P8-NEXT:    lfdx f1, 0, r333; CHECK-LE-P8-NEXT:    mtfprd f0, r434; CHECK-LE-P8-NEXT:    xxmrghw vs0, vs0, vs135; CHECK-LE-P8-NEXT:    xxswapd vs0, vs036; CHECK-LE-P8-NEXT:    stfdx f0, 0, r337; CHECK-LE-P8-NEXT:    blr38;39; CHECK-LE-P9-LABEL: test_none_v8i16:40; CHECK-LE-P9:       # %bb.0: # %entry41; CHECK-LE-P9-NEXT:    lxsihzx f0, 0, r342; CHECK-LE-P9-NEXT:    lfd f1, 0(r3)43; CHECK-LE-P9-NEXT:    xxmrghw vs0, vs0, vs144; CHECK-LE-P9-NEXT:    xxswapd vs0, vs045; CHECK-LE-P9-NEXT:    stfd f0, 0(r3)46; CHECK-LE-P9-NEXT:    blr47;48; CHECK-BE-P8-LABEL: test_none_v8i16:49; CHECK-BE-P8:       # %bb.0: # %entry50; CHECK-BE-P8-NEXT:    lhz r4, 0(r3)51; CHECK-BE-P8-NEXT:    lfdx f1, 0, r352; CHECK-BE-P8-NEXT:    sldi r4, r4, 4853; CHECK-BE-P8-NEXT:    mtfprd f0, r454; CHECK-BE-P8-NEXT:    xxmrghw vs0, vs1, vs055; CHECK-BE-P8-NEXT:    stfdx f0, 0, r356; CHECK-BE-P8-NEXT:    blr57;58; CHECK-BE-P9-LABEL: test_none_v8i16:59; CHECK-BE-P9:       # %bb.0: # %entry60; CHECK-BE-P9-NEXT:    lxsihzx v2, 0, r361; CHECK-BE-P9-NEXT:    lfd f0, 0(r3)62; CHECK-BE-P9-NEXT:    vsplth v2, v2, 363; CHECK-BE-P9-NEXT:    xxmrghw vs0, vs0, v264; CHECK-BE-P9-NEXT:    stfd f0, 0(r3)65; CHECK-BE-P9-NEXT:    blr66;67; CHECK-AIX-64-P8-LABEL: test_none_v8i16:68; CHECK-AIX-64-P8:       # %bb.0: # %entry69; CHECK-AIX-64-P8-NEXT:    lhz r4, 0(r3)70; CHECK-AIX-64-P8-NEXT:    lfdx f1, 0, r371; CHECK-AIX-64-P8-NEXT:    sldi r4, r4, 4872; CHECK-AIX-64-P8-NEXT:    mtfprd f0, r473; CHECK-AIX-64-P8-NEXT:    xxmrghw vs0, vs1, vs074; CHECK-AIX-64-P8-NEXT:    stfdx f0, 0, r375; CHECK-AIX-64-P8-NEXT:    blr76;77; CHECK-AIX-64-P9-LABEL: test_none_v8i16:78; CHECK-AIX-64-P9:       # %bb.0: # %entry79; CHECK-AIX-64-P9-NEXT:    lxsihzx v2, 0, r380; CHECK-AIX-64-P9-NEXT:    lfd f0, 0(r3)81; CHECK-AIX-64-P9-NEXT:    vsplth v2, v2, 382; CHECK-AIX-64-P9-NEXT:    xxmrghw vs0, vs0, v283; CHECK-AIX-64-P9-NEXT:    stfd f0, 0(r3)84; CHECK-AIX-64-P9-NEXT:    blr85;86; CHECK-AIX-32-P8-LABEL: test_none_v8i16:87; CHECK-AIX-32-P8:       # %bb.0: # %entry88; CHECK-AIX-32-P8-NEXT:    lhz r4, 0(r3)89; CHECK-AIX-32-P8-NEXT:    sth r4, -32(r1)90; CHECK-AIX-32-P8-NEXT:    addi r4, r1, -3291; CHECK-AIX-32-P8-NEXT:    lwz r3, 0(r3)92; CHECK-AIX-32-P8-NEXT:    lxvw4x vs0, 0, r493; CHECK-AIX-32-P8-NEXT:    addi r4, r1, -1694; CHECK-AIX-32-P8-NEXT:    stxvw4x vs0, 0, r495; CHECK-AIX-32-P8-NEXT:    stw r3, 0(r3)96; CHECK-AIX-32-P8-NEXT:    lwz r3, -16(r1)97; CHECK-AIX-32-P8-NEXT:    stw r3, 0(r3)98; CHECK-AIX-32-P8-NEXT:    blr99;100; CHECK-AIX-32-P9-LABEL: test_none_v8i16:101; CHECK-AIX-32-P9:       # %bb.0: # %entry102; CHECK-AIX-32-P9-NEXT:    lhz r4, 0(r3)103; CHECK-AIX-32-P9-NEXT:    sth r4, -32(r1)104; CHECK-AIX-32-P9-NEXT:    lxv vs0, -32(r1)105; CHECK-AIX-32-P9-NEXT:    lwz r3, 0(r3)106; CHECK-AIX-32-P9-NEXT:    stw r3, 0(r3)107; CHECK-AIX-32-P9-NEXT:    stxv vs0, -16(r1)108; CHECK-AIX-32-P9-NEXT:    lwz r3, -16(r1)109; CHECK-AIX-32-P9-NEXT:    stw r3, 0(r3)110; CHECK-AIX-32-P9-NEXT:    blr111entry:112  %0 = load <2 x i8>, ptr undef, align 1113  %tmp0_1 = bitcast <2 x i8> %0 to i16114  %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0115  %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32>116  %1 = load <2 x i32>, ptr %a117  %tmp1_1 = shufflevector <2 x i32> %1, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>118  %2 = shufflevector <4 x i32> %tmp0_3, <4 x i32> %tmp1_1, <2 x i32> <i32 4, i32 0>119  store <2 x i32> %2, ptr undef, align 4120  ret void121}122 123define void @test_v8i16_none(ptr %a) {124; CHECK-LE-P8-LABEL: test_v8i16_none:125; CHECK-LE-P8:       # %bb.0: # %entry126; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r3127; CHECK-LE-P8-NEXT:    addis r3, r2, .LCPI1_0@toc@ha128; CHECK-LE-P8-NEXT:    addi r3, r3, .LCPI1_0@toc@l129; CHECK-LE-P8-NEXT:    xxswapd v2, vs0130; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r3131; CHECK-LE-P8-NEXT:    lhz r3, 0(r3)132; CHECK-LE-P8-NEXT:    mtvsrd v4, r3133; CHECK-LE-P8-NEXT:    xxswapd v3, vs0134; CHECK-LE-P8-NEXT:    vperm v2, v2, v4, v3135; CHECK-LE-P8-NEXT:    xxswapd vs0, v2136; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r3137; CHECK-LE-P8-NEXT:    blr138;139; CHECK-LE-P9-LABEL: test_v8i16_none:140; CHECK-LE-P9:       # %bb.0: # %entry141; CHECK-LE-P9-NEXT:    lxsihzx f0, 0, r3142; CHECK-LE-P9-NEXT:    lxv vs1, 0(r3)143; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI1_0@toc@ha144; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI1_0@toc@l145; CHECK-LE-P9-NEXT:    lxv vs2, 0(r3)146; CHECK-LE-P9-NEXT:    xxperm vs0, vs1, vs2147; CHECK-LE-P9-NEXT:    stxv vs0, 0(r3)148; CHECK-LE-P9-NEXT:    blr149;150; CHECK-BE-P8-LABEL: test_v8i16_none:151; CHECK-BE-P8:       # %bb.0: # %entry152; CHECK-BE-P8-NEXT:    lhz r4, 0(r3)153; CHECK-BE-P8-NEXT:    lxvw4x v3, 0, r3154; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI1_0@toc@ha155; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI1_0@toc@l156; CHECK-BE-P8-NEXT:    mtvsrwz v2, r4157; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3158; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4159; CHECK-BE-P8-NEXT:    stxvw4x v2, 0, r3160; CHECK-BE-P8-NEXT:    blr161;162; CHECK-BE-P9-LABEL: test_v8i16_none:163; CHECK-BE-P9:       # %bb.0: # %entry164; CHECK-BE-P9-NEXT:    lxsihzx f0, 0, r3165; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)166; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI1_0@toc@ha167; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI1_0@toc@l168; CHECK-BE-P9-NEXT:    lxv vs2, 0(r3)169; CHECK-BE-P9-NEXT:    xxperm vs1, vs0, vs2170; CHECK-BE-P9-NEXT:    stxv vs1, 0(r3)171; CHECK-BE-P9-NEXT:    blr172;173; CHECK-AIX-64-P8-LABEL: test_v8i16_none:174; CHECK-AIX-64-P8:       # %bb.0: # %entry175; CHECK-AIX-64-P8-NEXT:    lhz r4, 0(r3)176; CHECK-AIX-64-P8-NEXT:    lxvw4x v3, 0, r3177; CHECK-AIX-64-P8-NEXT:    ld r3, L..C0(r2) # %const.0178; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r4179; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3180; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4181; CHECK-AIX-64-P8-NEXT:    stxvw4x v2, 0, r3182; CHECK-AIX-64-P8-NEXT:    blr183;184; CHECK-AIX-64-P9-LABEL: test_v8i16_none:185; CHECK-AIX-64-P9:       # %bb.0: # %entry186; CHECK-AIX-64-P9-NEXT:    lxsihzx f0, 0, r3187; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)188; CHECK-AIX-64-P9-NEXT:    ld r3, L..C0(r2) # %const.0189; CHECK-AIX-64-P9-NEXT:    lxv vs2, 0(r3)190; CHECK-AIX-64-P9-NEXT:    xxperm vs1, vs0, vs2191; CHECK-AIX-64-P9-NEXT:    stxv vs1, 0(r3)192; CHECK-AIX-64-P9-NEXT:    blr193;194; CHECK-AIX-32-P8-LABEL: test_v8i16_none:195; CHECK-AIX-32-P8:       # %bb.0: # %entry196; CHECK-AIX-32-P8-NEXT:    lhz r4, 0(r3)197; CHECK-AIX-32-P8-NEXT:    lxvw4x v3, 0, r3198; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C0(r2) # %const.0199; CHECK-AIX-32-P8-NEXT:    mtvsrwz v2, r4200; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3201; CHECK-AIX-32-P8-NEXT:    vperm v2, v2, v3, v4202; CHECK-AIX-32-P8-NEXT:    stxvw4x v2, 0, r3203; CHECK-AIX-32-P8-NEXT:    blr204;205; CHECK-AIX-32-P9-LABEL: test_v8i16_none:206; CHECK-AIX-32-P9:       # %bb.0: # %entry207; CHECK-AIX-32-P9-NEXT:    lxsihzx f0, 0, r3208; CHECK-AIX-32-P9-NEXT:    lxv vs1, 0(r3)209; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C0(r2) # %const.0210; CHECK-AIX-32-P9-NEXT:    lxv vs2, 0(r3)211; CHECK-AIX-32-P9-NEXT:    xxperm vs1, vs0, vs2212; CHECK-AIX-32-P9-NEXT:    stxv vs1, 0(r3)213; CHECK-AIX-32-P9-NEXT:    blr214entry:215  %0 = load <2 x i8>, ptr undef, align 1216  %tmp0_1 = bitcast <2 x i8> %0 to i16217  %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0218  %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32>219  %1 = load <4 x i32>, ptr %a, align 1220  %2 = shufflevector <4 x i32> %tmp0_3, <4 x i32> %1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>221  store <4 x i32> %2, ptr undef, align 4222  ret void223}224 225define void @test_none_v4i32(<2 x i32> %vec, ptr %ptr1) {226; CHECK-LE-P8-LABEL: test_none_v4i32:227; CHECK-LE-P8:       # %bb.0: # %entry228; CHECK-LE-P8-NEXT:    addis r3, r2, .LCPI2_0@toc@ha229; CHECK-LE-P8-NEXT:    xxswapd vs0, v2230; CHECK-LE-P8-NEXT:    addi r3, r3, .LCPI2_0@toc@l231; CHECK-LE-P8-NEXT:    lxvd2x vs1, 0, r3232; CHECK-LE-P8-NEXT:    mffprwz r3, f0233; CHECK-LE-P8-NEXT:    mtvsrwz v4, r3234; CHECK-LE-P8-NEXT:    xxswapd v3, vs1235; CHECK-LE-P8-NEXT:    vperm v2, v4, v2, v3236; CHECK-LE-P8-NEXT:    xxswapd vs0, v2237; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r5238; CHECK-LE-P8-NEXT:    blr239;240; CHECK-LE-P9-LABEL: test_none_v4i32:241; CHECK-LE-P9:       # %bb.0: # %entry242; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI2_0@toc@ha243; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI2_0@toc@l244; CHECK-LE-P9-NEXT:    lxv vs0, 0(r3)245; CHECK-LE-P9-NEXT:    xxperm v2, v2, vs0246; CHECK-LE-P9-NEXT:    stxv v2, 0(r5)247; CHECK-LE-P9-NEXT:    blr248;249; CHECK-BE-P8-LABEL: test_none_v4i32:250; CHECK-BE-P8:       # %bb.0: # %entry251; CHECK-BE-P8-NEXT:    xxsldwi vs0, v2, v2, 3252; CHECK-BE-P8-NEXT:    mffprwz r3, f0253; CHECK-BE-P8-NEXT:    mtvsrwz v3, r3254; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI2_0@toc@ha255; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI2_0@toc@l256; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3257; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4258; CHECK-BE-P8-NEXT:    stxvw4x v2, 0, r5259; CHECK-BE-P8-NEXT:    blr260;261; CHECK-BE-P9-LABEL: test_none_v4i32:262; CHECK-BE-P9:       # %bb.0: # %entry263; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI2_0@toc@ha264; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI2_0@toc@l265; CHECK-BE-P9-NEXT:    lxv vs0, 0(r3)266; CHECK-BE-P9-NEXT:    xxperm v2, v2, vs0267; CHECK-BE-P9-NEXT:    stxv v2, 0(r5)268; CHECK-BE-P9-NEXT:    blr269;270; CHECK-AIX-64-P8-LABEL: test_none_v4i32:271; CHECK-AIX-64-P8:       # %bb.0: # %entry272; CHECK-AIX-64-P8-NEXT:    xxsldwi vs0, v2, v2, 3273; CHECK-AIX-64-P8-NEXT:    mffprwz r4, f0274; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r4275; CHECK-AIX-64-P8-NEXT:    ld r4, L..C1(r2) # %const.0276; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r4277; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4278; CHECK-AIX-64-P8-NEXT:    stxvw4x v2, 0, r3279; CHECK-AIX-64-P8-NEXT:    blr280;281; CHECK-AIX-64-P9-LABEL: test_none_v4i32:282; CHECK-AIX-64-P9:       # %bb.0: # %entry283; CHECK-AIX-64-P9-NEXT:    ld r4, L..C1(r2) # %const.0284; CHECK-AIX-64-P9-NEXT:    lxv vs0, 0(r4)285; CHECK-AIX-64-P9-NEXT:    xxperm v2, v2, vs0286; CHECK-AIX-64-P9-NEXT:    stxv v2, 0(r3)287; CHECK-AIX-64-P9-NEXT:    blr288;289; CHECK-AIX-32-P8-LABEL: test_none_v4i32:290; CHECK-AIX-32-P8:       # %bb.0: # %entry291; CHECK-AIX-32-P8-NEXT:    addi r4, r1, -16292; CHECK-AIX-32-P8-NEXT:    stxvw4x v2, 0, r4293; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r4294; CHECK-AIX-32-P8-NEXT:    lwz r4, L..C1(r2) # %const.0295; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r4296; CHECK-AIX-32-P8-NEXT:    vperm v2, v2, v3, v4297; CHECK-AIX-32-P8-NEXT:    stxvw4x v2, 0, r3298; CHECK-AIX-32-P8-NEXT:    blr299;300; CHECK-AIX-32-P9-LABEL: test_none_v4i32:301; CHECK-AIX-32-P9:       # %bb.0: # %entry302; CHECK-AIX-32-P9-NEXT:    lwz r4, L..C1(r2) # %const.0303; CHECK-AIX-32-P9-NEXT:    lxv vs0, 0(r4)304; CHECK-AIX-32-P9-NEXT:    xxperm v2, v2, vs0305; CHECK-AIX-32-P9-NEXT:    stxv v2, 0(r3)306; CHECK-AIX-32-P9-NEXT:    blr307entry:308  %0 = extractelement <2 x i32> %vec, i64 0309  %1 = bitcast i32 %0 to <2 x i16>310  %2 = shufflevector <2 x i16> %1, <2 x i16> %1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>311  %3 = shufflevector <2 x i32> %vec, <2 x i32> %vec, <4 x i32> <i32 0, i32 1, i32 2, i32 3>312  %4 = bitcast <4 x i32> %3 to <8 x i16>313  %5 = shufflevector <8 x i16> %4, <8 x i16> %2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>314  store <8 x i16> %5, ptr %ptr1, align 16315  ret void316}317 318define void @test_v4i32_none(<2 x i32> %vec, ptr %ptr1) {319; CHECK-LE-P8-LABEL: test_v4i32_none:320; CHECK-LE-P8:       # %bb.0: # %entry321; CHECK-LE-P8-NEXT:    addis r3, r2, .LCPI3_0@toc@ha322; CHECK-LE-P8-NEXT:    xxswapd vs0, v2323; CHECK-LE-P8-NEXT:    addi r3, r3, .LCPI3_0@toc@l324; CHECK-LE-P8-NEXT:    lxvd2x vs1, 0, r3325; CHECK-LE-P8-NEXT:    mffprwz r3, f0326; CHECK-LE-P8-NEXT:    mtvsrwz v4, r3327; CHECK-LE-P8-NEXT:    xxswapd v3, vs1328; CHECK-LE-P8-NEXT:    vperm v2, v2, v4, v3329; CHECK-LE-P8-NEXT:    xxswapd vs0, v2330; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r5331; CHECK-LE-P8-NEXT:    blr332;333; CHECK-LE-P9-LABEL: test_v4i32_none:334; CHECK-LE-P9:       # %bb.0: # %entry335; CHECK-LE-P9-NEXT:    li r3, 0336; CHECK-LE-P9-NEXT:    vextuwrx r3, r3, v2337; CHECK-LE-P9-NEXT:    mtfprwz f0, r3338; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI3_0@toc@ha339; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI3_0@toc@l340; CHECK-LE-P9-NEXT:    lxv vs1, 0(r3)341; CHECK-LE-P9-NEXT:    xxperm vs0, v2, vs1342; CHECK-LE-P9-NEXT:    stxv vs0, 0(r5)343; CHECK-LE-P9-NEXT:    blr344;345; CHECK-BE-P8-LABEL: test_v4i32_none:346; CHECK-BE-P8:       # %bb.0: # %entry347; CHECK-BE-P8-NEXT:    xxsldwi vs0, v2, v2, 3348; CHECK-BE-P8-NEXT:    mffprwz r3, f0349; CHECK-BE-P8-NEXT:    mtvsrwz v3, r3350; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI3_0@toc@ha351; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI3_0@toc@l352; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3353; CHECK-BE-P8-NEXT:    vperm v2, v3, v2, v4354; CHECK-BE-P8-NEXT:    stxvw4x v2, 0, r5355; CHECK-BE-P8-NEXT:    blr356;357; CHECK-BE-P9-LABEL: test_v4i32_none:358; CHECK-BE-P9:       # %bb.0: # %entry359; CHECK-BE-P9-NEXT:    li r3, 0360; CHECK-BE-P9-NEXT:    vextuwlx r3, r3, v2361; CHECK-BE-P9-NEXT:    mtfprwz f0, r3362; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI3_0@toc@ha363; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI3_0@toc@l364; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)365; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1366; CHECK-BE-P9-NEXT:    stxv v2, 0(r5)367; CHECK-BE-P9-NEXT:    blr368;369; CHECK-AIX-64-P8-LABEL: test_v4i32_none:370; CHECK-AIX-64-P8:       # %bb.0: # %entry371; CHECK-AIX-64-P8-NEXT:    xxsldwi vs0, v2, v2, 3372; CHECK-AIX-64-P8-NEXT:    mffprwz r4, f0373; CHECK-AIX-64-P8-NEXT:    mtvsrwz v3, r4374; CHECK-AIX-64-P8-NEXT:    ld r4, L..C2(r2) # %const.0375; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r4376; CHECK-AIX-64-P8-NEXT:    vperm v2, v3, v2, v4377; CHECK-AIX-64-P8-NEXT:    stxvw4x v2, 0, r3378; CHECK-AIX-64-P8-NEXT:    blr379;380; CHECK-AIX-64-P9-LABEL: test_v4i32_none:381; CHECK-AIX-64-P9:       # %bb.0: # %entry382; CHECK-AIX-64-P9-NEXT:    li r4, 0383; CHECK-AIX-64-P9-NEXT:    vextuwlx r4, r4, v2384; CHECK-AIX-64-P9-NEXT:    mtfprwz f0, r4385; CHECK-AIX-64-P9-NEXT:    ld r4, L..C2(r2) # %const.0386; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r4)387; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1388; CHECK-AIX-64-P9-NEXT:    stxv v2, 0(r3)389; CHECK-AIX-64-P9-NEXT:    blr390;391; CHECK-AIX-32-P8-LABEL: test_v4i32_none:392; CHECK-AIX-32-P8:       # %bb.0: # %entry393; CHECK-AIX-32-P8-NEXT:    addi r4, r1, -16394; CHECK-AIX-32-P8-NEXT:    stxvw4x v2, 0, r4395; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r4396; CHECK-AIX-32-P8-NEXT:    lwz r4, L..C2(r2) # %const.0397; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r4398; CHECK-AIX-32-P8-NEXT:    vperm v2, v3, v2, v4399; CHECK-AIX-32-P8-NEXT:    stxvw4x v2, 0, r3400; CHECK-AIX-32-P8-NEXT:    blr401;402; CHECK-AIX-32-P9-LABEL: test_v4i32_none:403; CHECK-AIX-32-P9:       # %bb.0: # %entry404; CHECK-AIX-32-P9-NEXT:    addi r4, r1, -16405; CHECK-AIX-32-P9-NEXT:    stxv v2, -16(r1)406; CHECK-AIX-32-P9-NEXT:    lfiwzx f0, 0, r4407; CHECK-AIX-32-P9-NEXT:    lwz r4, L..C2(r2) # %const.0408; CHECK-AIX-32-P9-NEXT:    lxv vs1, 0(r4)409; CHECK-AIX-32-P9-NEXT:    xxperm v2, vs0, vs1410; CHECK-AIX-32-P9-NEXT:    stxv v2, 0(r3)411; CHECK-AIX-32-P9-NEXT:    blr412entry:413  %0 = extractelement <2 x i32> %vec, i64 0414  %1 = bitcast i32 %0 to <2 x i16>415  %2 = shufflevector <2 x i16> %1, <2 x i16> %1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>416  %3 = shufflevector <2 x i32> %vec, <2 x i32> %vec, <4 x i32> <i32 0, i32 1, i32 2, i32 3>417  %4 = bitcast <4 x i32> %3 to <8 x i16>418  %5 = shufflevector <8 x i16> %2, <8 x i16> %4, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13>419  store <8 x i16> %5, ptr %ptr1, align 16420  ret void421}422 423define void @test_none_v2i64(ptr %ptr, i32 %v1, <2 x i32> %vec) local_unnamed_addr #0 {424; CHECK-LE-P8-LABEL: test_none_v2i64:425; CHECK-LE-P8:       # %bb.0: # %entry426; CHECK-LE-P8-NEXT:    addis r5, r2, .LCPI4_0@toc@ha427; CHECK-LE-P8-NEXT:    mtvsrwz v4, r4428; CHECK-LE-P8-NEXT:    addis r4, r2, .LCPI4_1@toc@ha429; CHECK-LE-P8-NEXT:    addi r5, r5, .LCPI4_0@toc@l430; CHECK-LE-P8-NEXT:    addi r4, r4, .LCPI4_1@toc@l431; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r5432; CHECK-LE-P8-NEXT:    xxswapd v3, vs0433; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r4434; CHECK-LE-P8-NEXT:    vperm v2, v2, v4, v3435; CHECK-LE-P8-NEXT:    lxsdx v4, 0, r3436; CHECK-LE-P8-NEXT:    xxswapd v3, vs0437; CHECK-LE-P8-NEXT:    vperm v2, v4, v2, v3438; CHECK-LE-P8-NEXT:    xxswapd vs0, v2439; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r3440;441; CHECK-LE-P9-LABEL: test_none_v2i64:442; CHECK-LE-P9:       # %bb.0: # %entry443; CHECK-LE-P9-NEXT:    lfd f0, 0(r3)444; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI4_0@toc@ha445; CHECK-LE-P9-NEXT:    mtfprwz f1, r4446; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI4_0@toc@l447; CHECK-LE-P9-NEXT:    xxinsertw v2, vs1, 12448; CHECK-LE-P9-NEXT:    lxv vs1, 0(r3)449; CHECK-LE-P9-NEXT:    xxperm v2, vs0, vs1450; CHECK-LE-P9-NEXT:    stxv v2, 0(r3)451;452; CHECK-BE-P8-LABEL: test_none_v2i64:453; CHECK-BE-P8:       # %bb.0: # %entry454; CHECK-BE-P8-NEXT:    addis r5, r2, .LCPI4_0@toc@ha455; CHECK-BE-P8-NEXT:    mtvsrwz v4, r4456; CHECK-BE-P8-NEXT:    addi r5, r5, .LCPI4_0@toc@l457; CHECK-BE-P8-NEXT:    lxvw4x v3, 0, r5458; CHECK-BE-P8-NEXT:    vperm v2, v4, v2, v3459; CHECK-BE-P8-NEXT:    lxsdx v3, 0, r3460; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI4_1@toc@ha461; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI4_1@toc@l462; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3463; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4464; CHECK-BE-P8-NEXT:    stxvw4x v2, 0, r3465;466; CHECK-BE-P9-LABEL: test_none_v2i64:467; CHECK-BE-P9:       # %bb.0: # %entry468; CHECK-BE-P9-NEXT:    lfd f0, 0(r3)469; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI4_0@toc@ha470; CHECK-BE-P9-NEXT:    mtfprwz f1, r4471; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI4_0@toc@l472; CHECK-BE-P9-NEXT:    xxinsertw v2, vs1, 0473; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)474; CHECK-BE-P9-NEXT:    xxperm vs0, v2, vs1475; CHECK-BE-P9-NEXT:    stxv vs0, 0(r3)476;477; CHECK-AIX-64-P8-LABEL: test_none_v2i64:478; CHECK-AIX-64-P8:       # %bb.0: # %entry479; CHECK-AIX-64-P8-NEXT:    ld r5, L..C3(r2) # %const.0480; CHECK-AIX-64-P8-NEXT:    mtvsrwz v4, r4481; CHECK-AIX-64-P8-NEXT:    lxvw4x v3, 0, r5482; CHECK-AIX-64-P8-NEXT:    vperm v2, v4, v2, v3483; CHECK-AIX-64-P8-NEXT:    lxsdx v3, 0, r3484; CHECK-AIX-64-P8-NEXT:    ld r3, L..C4(r2) # %const.1485; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3486; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4487; CHECK-AIX-64-P8-NEXT:    stxvw4x v2, 0, r3488;489; CHECK-AIX-64-P9-LABEL: test_none_v2i64:490; CHECK-AIX-64-P9:       # %bb.0: # %entry491; CHECK-AIX-64-P9-NEXT:    lfd f0, 0(r3)492; CHECK-AIX-64-P9-NEXT:    ld r3, L..C3(r2) # %const.0493; CHECK-AIX-64-P9-NEXT:    mtfprwz f1, r4494; CHECK-AIX-64-P9-NEXT:    xxinsertw v2, vs1, 0495; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)496; CHECK-AIX-64-P9-NEXT:    xxperm vs0, v2, vs1497; CHECK-AIX-64-P9-NEXT:    stxv vs0, 0(r3)498;499; CHECK-AIX-32-P8-LABEL: test_none_v2i64:500; CHECK-AIX-32-P8:       # %bb.0: # %entry501; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r3502; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C3(r2) # %const.0503; CHECK-AIX-32-P8-NEXT:    stw r4, -16(r1)504; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3505; CHECK-AIX-32-P8-NEXT:    addi r3, r1, -16506; CHECK-AIX-32-P8-NEXT:    lxvw4x v5, 0, r3507; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C4(r2) # %const.1508; CHECK-AIX-32-P8-NEXT:    vperm v2, v5, v2, v4509; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3510; CHECK-AIX-32-P8-NEXT:    vperm v2, v2, v3, v4511; CHECK-AIX-32-P8-NEXT:    stxvw4x v2, 0, r3512;513; CHECK-AIX-32-P9-LABEL: test_none_v2i64:514; CHECK-AIX-32-P9:       # %bb.0: # %entry515; CHECK-AIX-32-P9-NEXT:    lfiwzx f0, 0, r3516; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C3(r2) # %const.0517; CHECK-AIX-32-P9-NEXT:    mtfprwz f1, r4518; CHECK-AIX-32-P9-NEXT:    xxinsertw v2, vs1, 0519; CHECK-AIX-32-P9-NEXT:    lxv vs1, 0(r3)520; CHECK-AIX-32-P9-NEXT:    xxperm vs0, v2, vs1521; CHECK-AIX-32-P9-NEXT:    stxv vs0, 0(r3)522entry:523  %0 = load <2 x i32>, ptr %ptr, align 4524  %tmp = insertelement <2 x i32> %vec, i32 %v1, i32 0525  %1 = shufflevector <2 x i32> %0, <2 x i32> %tmp, <4 x i32> <i32 3, i32 2, i32 2, i32 0>526  store <4 x i32> %1, ptr undef, align 4527  unreachable528}529 530define void @test_v2i64_none() {531; CHECK-LE-P8-LABEL: test_v2i64_none:532; CHECK-LE-P8:       # %bb.0: # %entry533; CHECK-LE-P8-NEXT:    lfdx f0, 0, r3534; CHECK-LE-P8-NEXT:    xxmrghw vs0, vs0, vs0535; CHECK-LE-P8-NEXT:    xxswapd vs0, vs0536; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r3537; CHECK-LE-P8-NEXT:    blr538;539; CHECK-LE-P9-LABEL: test_v2i64_none:540; CHECK-LE-P9:       # %bb.0: # %entry541; CHECK-LE-P9-NEXT:    lfd f0, 0(r3)542; CHECK-LE-P9-NEXT:    xxmrghw vs0, vs0, vs0543; CHECK-LE-P9-NEXT:    stxv vs0, 0(r3)544; CHECK-LE-P9-NEXT:    blr545;546; CHECK-BE-P8-LABEL: test_v2i64_none:547; CHECK-BE-P8:       # %bb.0: # %entry548; CHECK-BE-P8-NEXT:    lfdx f0, 0, r3549; CHECK-BE-P8-NEXT:    xxmrghw vs0, vs0, vs0550; CHECK-BE-P8-NEXT:    stxvw4x vs0, 0, r3551; CHECK-BE-P8-NEXT:    blr552;553; CHECK-BE-P9-LABEL: test_v2i64_none:554; CHECK-BE-P9:       # %bb.0: # %entry555; CHECK-BE-P9-NEXT:    lfd f0, 0(r3)556; CHECK-BE-P9-NEXT:    xxmrghw vs0, vs0, vs0557; CHECK-BE-P9-NEXT:    stxv vs0, 0(r3)558; CHECK-BE-P9-NEXT:    blr559;560; CHECK-AIX-64-P8-LABEL: test_v2i64_none:561; CHECK-AIX-64-P8:       # %bb.0: # %entry562; CHECK-AIX-64-P8-NEXT:    lfdx f0, 0, r3563; CHECK-AIX-64-P8-NEXT:    xxmrghw vs0, vs0, vs0564; CHECK-AIX-64-P8-NEXT:    stxvw4x vs0, 0, r3565; CHECK-AIX-64-P8-NEXT:    blr566;567; CHECK-AIX-64-P9-LABEL: test_v2i64_none:568; CHECK-AIX-64-P9:       # %bb.0: # %entry569; CHECK-AIX-64-P9-NEXT:    lfd f0, 0(r3)570; CHECK-AIX-64-P9-NEXT:    xxmrghw vs0, vs0, vs0571; CHECK-AIX-64-P9-NEXT:    stxv vs0, 0(r3)572; CHECK-AIX-64-P9-NEXT:    blr573;574; CHECK-AIX-32-P8-LABEL: test_v2i64_none:575; CHECK-AIX-32-P8:       # %bb.0: # %entry576; CHECK-AIX-32-P8-NEXT:    lfiwzx f0, 0, r3577; CHECK-AIX-32-P8-NEXT:    xxspltw vs0, vs0, 1578; CHECK-AIX-32-P8-NEXT:    stxvw4x vs0, 0, r3579; CHECK-AIX-32-P8-NEXT:    blr580;581; CHECK-AIX-32-P9-LABEL: test_v2i64_none:582; CHECK-AIX-32-P9:       # %bb.0: # %entry583; CHECK-AIX-32-P9-NEXT:    lxvwsx vs0, 0, r3584; CHECK-AIX-32-P9-NEXT:    stxv vs0, 0(r3)585; CHECK-AIX-32-P9-NEXT:    blr586entry:587  %0 = load <2 x i32>, ptr undef, align 4588  %1 = shufflevector <2 x i32> %0, <2 x i32> undef, <4 x i32> <i32 0, i32 2, i32 1, i32 3>589  store <4 x i32> %1, ptr undef, align 4590  ret void591}592 593define void @test_v8i16_v8i16(ptr %a) {594; CHECK-LE-P8-LABEL: test_v8i16_v8i16:595; CHECK-LE-P8:       # %bb.0: # %entry596; CHECK-LE-P8-NEXT:    lhz r4, 0(r3)597; CHECK-LE-P8-NEXT:    lhz r3, 0(r3)598; CHECK-LE-P8-NEXT:    mtfprd f0, r4599; CHECK-LE-P8-NEXT:    mtfprd f1, r3600; CHECK-LE-P8-NEXT:    xxmrghw vs0, vs1, vs0601; CHECK-LE-P8-NEXT:    xxswapd vs0, vs0602; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r3603; CHECK-LE-P8-NEXT:    blr604;605; CHECK-LE-P9-LABEL: test_v8i16_v8i16:606; CHECK-LE-P9:       # %bb.0: # %entry607; CHECK-LE-P9-NEXT:    lxsihzx f0, 0, r3608; CHECK-LE-P9-NEXT:    lxsihzx f1, 0, r3609; CHECK-LE-P9-NEXT:    xxmrghw vs0, vs1, vs0610; CHECK-LE-P9-NEXT:    stxv vs0, 0(r3)611; CHECK-LE-P9-NEXT:    blr612;613; CHECK-BE-P8-LABEL: test_v8i16_v8i16:614; CHECK-BE-P8:       # %bb.0: # %entry615; CHECK-BE-P8-NEXT:    lhz r4, 0(r3)616; CHECK-BE-P8-NEXT:    lhz r3, 0(r3)617; CHECK-BE-P8-NEXT:    mtfprwz f0, r4618; CHECK-BE-P8-NEXT:    mtfprwz f1, r3619; CHECK-BE-P8-NEXT:    xxmrglw vs0, vs0, vs1620; CHECK-BE-P8-NEXT:    stxvw4x vs0, 0, r3621; CHECK-BE-P8-NEXT:    blr622;623; CHECK-BE-P9-LABEL: test_v8i16_v8i16:624; CHECK-BE-P9:       # %bb.0: # %entry625; CHECK-BE-P9-NEXT:    lxsihzx f0, 0, r3626; CHECK-BE-P9-NEXT:    lxsihzx f1, 0, r3627; CHECK-BE-P9-NEXT:    xxmrglw vs0, vs0, vs1628; CHECK-BE-P9-NEXT:    stxv vs0, 0(r3)629; CHECK-BE-P9-NEXT:    blr630;631; CHECK-AIX-64-P8-LABEL: test_v8i16_v8i16:632; CHECK-AIX-64-P8:       # %bb.0: # %entry633; CHECK-AIX-64-P8-NEXT:    lhz r4, 0(r3)634; CHECK-AIX-64-P8-NEXT:    lhz r3, 0(r3)635; CHECK-AIX-64-P8-NEXT:    mtfprwz f0, r4636; CHECK-AIX-64-P8-NEXT:    mtfprwz f1, r3637; CHECK-AIX-64-P8-NEXT:    xxmrglw vs0, vs0, vs1638; CHECK-AIX-64-P8-NEXT:    stxvw4x vs0, 0, r3639; CHECK-AIX-64-P8-NEXT:    blr640;641; CHECK-AIX-64-P9-LABEL: test_v8i16_v8i16:642; CHECK-AIX-64-P9:       # %bb.0: # %entry643; CHECK-AIX-64-P9-NEXT:    lxsihzx f0, 0, r3644; CHECK-AIX-64-P9-NEXT:    lxsihzx f1, 0, r3645; CHECK-AIX-64-P9-NEXT:    xxmrglw vs0, vs0, vs1646; CHECK-AIX-64-P9-NEXT:    stxv vs0, 0(r3)647; CHECK-AIX-64-P9-NEXT:    blr648;649; CHECK-AIX-32-P8-LABEL: test_v8i16_v8i16:650; CHECK-AIX-32-P8:       # %bb.0: # %entry651; CHECK-AIX-32-P8-NEXT:    lhz r4, 0(r3)652; CHECK-AIX-32-P8-NEXT:    lhz r3, 0(r3)653; CHECK-AIX-32-P8-NEXT:    mtfprwz f0, r4654; CHECK-AIX-32-P8-NEXT:    mtfprwz f1, r3655; CHECK-AIX-32-P8-NEXT:    xxmrglw vs0, vs0, vs1656; CHECK-AIX-32-P8-NEXT:    stxvw4x vs0, 0, r3657; CHECK-AIX-32-P8-NEXT:    blr658;659; CHECK-AIX-32-P9-LABEL: test_v8i16_v8i16:660; CHECK-AIX-32-P9:       # %bb.0: # %entry661; CHECK-AIX-32-P9-NEXT:    lxsihzx f0, 0, r3662; CHECK-AIX-32-P9-NEXT:    lxsihzx f1, 0, r3663; CHECK-AIX-32-P9-NEXT:    xxmrglw vs0, vs0, vs1664; CHECK-AIX-32-P9-NEXT:    stxv vs0, 0(r3)665; CHECK-AIX-32-P9-NEXT:    blr666entry:667  %0 = load <2 x i8>, ptr undef, align 1668  %tmp0_1 = bitcast <2 x i8> %0 to i16669  %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0670  %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32>671  %1 = load <2 x i8>, ptr %a, align 1672  %tmp1_1 = bitcast <2 x i8> %1 to i16673  %tmp1_2 = insertelement <8 x i16> undef, i16 %tmp1_1, i32 0674  %tmp1_3 = bitcast <8 x i16> %tmp1_2 to <4 x i32>675  %2 = shufflevector <4 x i32> %tmp0_3, <4 x i32> %tmp1_3, <4 x i32> <i32 0, i32 4, i32 1, i32 5>676  store <4 x i32> %2, ptr undef, align 4677  ret void678}679 680define void @test_v8i16_v4i32(ptr %a) {681; CHECK-LE-P8-LABEL: test_v8i16_v4i32:682; CHECK-LE-P8:       # %bb.0: # %entry683; CHECK-LE-P8-NEXT:    lhz r4, 0(r3)684; CHECK-LE-P8-NEXT:    lfiwzx f1, 0, r3685; CHECK-LE-P8-NEXT:    mtfprd f0, r4686; CHECK-LE-P8-NEXT:    xxmrghw vs0, vs1, vs0687; CHECK-LE-P8-NEXT:    xxswapd vs0, vs0688; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r3689; CHECK-LE-P8-NEXT:    blr690;691; CHECK-LE-P9-LABEL: test_v8i16_v4i32:692; CHECK-LE-P9:       # %bb.0: # %entry693; CHECK-LE-P9-NEXT:    lxsihzx f0, 0, r3694; CHECK-LE-P9-NEXT:    lfiwzx f1, 0, r3695; CHECK-LE-P9-NEXT:    xxmrghw vs0, vs1, vs0696; CHECK-LE-P9-NEXT:    stxv vs0, 0(r3)697; CHECK-LE-P9-NEXT:    blr698;699; CHECK-BE-P8-LABEL: test_v8i16_v4i32:700; CHECK-BE-P8:       # %bb.0: # %entry701; CHECK-BE-P8-NEXT:    lhz r4, 0(r3)702; CHECK-BE-P8-NEXT:    lxsiwzx v3, 0, r3703; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI7_0@toc@ha704; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI7_0@toc@l705; CHECK-BE-P8-NEXT:    mtvsrwz v2, r4706; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3707; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4708; CHECK-BE-P8-NEXT:    stxvw4x v2, 0, r3709; CHECK-BE-P8-NEXT:    blr710;711; CHECK-BE-P9-LABEL: test_v8i16_v4i32:712; CHECK-BE-P9:       # %bb.0: # %entry713; CHECK-BE-P9-NEXT:    lxsihzx f0, 0, r3714; CHECK-BE-P9-NEXT:    lfiwzx f1, 0, r3715; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI7_0@toc@ha716; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI7_0@toc@l717; CHECK-BE-P9-NEXT:    lxv vs2, 0(r3)718; CHECK-BE-P9-NEXT:    xxperm vs1, vs0, vs2719; CHECK-BE-P9-NEXT:    stxv vs1, 0(r3)720; CHECK-BE-P9-NEXT:    blr721;722; CHECK-AIX-64-P8-LABEL: test_v8i16_v4i32:723; CHECK-AIX-64-P8:       # %bb.0: # %entry724; CHECK-AIX-64-P8-NEXT:    lhz r4, 0(r3)725; CHECK-AIX-64-P8-NEXT:    lxsiwzx v3, 0, r3726; CHECK-AIX-64-P8-NEXT:    ld r3, L..C5(r2) # %const.0727; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r4728; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3729; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4730; CHECK-AIX-64-P8-NEXT:    stxvw4x v2, 0, r3731; CHECK-AIX-64-P8-NEXT:    blr732;733; CHECK-AIX-64-P9-LABEL: test_v8i16_v4i32:734; CHECK-AIX-64-P9:       # %bb.0: # %entry735; CHECK-AIX-64-P9-NEXT:    lxsihzx f0, 0, r3736; CHECK-AIX-64-P9-NEXT:    lfiwzx f1, 0, r3737; CHECK-AIX-64-P9-NEXT:    ld r3, L..C4(r2) # %const.0738; CHECK-AIX-64-P9-NEXT:    lxv vs2, 0(r3)739; CHECK-AIX-64-P9-NEXT:    xxperm vs1, vs0, vs2740; CHECK-AIX-64-P9-NEXT:    stxv vs1, 0(r3)741; CHECK-AIX-64-P9-NEXT:    blr742;743; CHECK-AIX-32-P8-LABEL: test_v8i16_v4i32:744; CHECK-AIX-32-P8:       # %bb.0: # %entry745; CHECK-AIX-32-P8-NEXT:    lhz r4, 0(r3)746; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r3747; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C5(r2) # %const.0748; CHECK-AIX-32-P8-NEXT:    mtvsrwz v2, r4749; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3750; CHECK-AIX-32-P8-NEXT:    vperm v2, v2, v3, v4751; CHECK-AIX-32-P8-NEXT:    stxvw4x v2, 0, r3752; CHECK-AIX-32-P8-NEXT:    blr753;754; CHECK-AIX-32-P9-LABEL: test_v8i16_v4i32:755; CHECK-AIX-32-P9:       # %bb.0: # %entry756; CHECK-AIX-32-P9-NEXT:    lxsihzx f0, 0, r3757; CHECK-AIX-32-P9-NEXT:    lfiwzx f1, 0, r3758; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C4(r2) # %const.0759; CHECK-AIX-32-P9-NEXT:    lxv vs2, 0(r3)760; CHECK-AIX-32-P9-NEXT:    xxperm vs1, vs0, vs2761; CHECK-AIX-32-P9-NEXT:    stxv vs1, 0(r3)762; CHECK-AIX-32-P9-NEXT:    blr763entry:764  %0 = load <2 x i8>, ptr undef, align 1765  %tmp0_1 = bitcast <2 x i8> %0 to i16766  %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0767  %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32>768  %1 = load <2 x i16>, ptr %a, align 4769  %tmp1_1 = bitcast <2 x i16> %1 to i32770  %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 0771  %2 = shufflevector <4 x i32> %tmp0_3, <4 x i32> %tmp1_2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>772  store <4 x i32> %2, ptr undef, align 4773  ret void774}775 776define void @test_v8i16_v2i64(ptr %a) {777; CHECK-LE-P8-LABEL: test_v8i16_v2i64:778; CHECK-LE-P8:       # %bb.0: # %entry779; CHECK-LE-P8-NEXT:    lhz r4, 0(r3)780; CHECK-LE-P8-NEXT:    lfdx f1, 0, r3781; CHECK-LE-P8-NEXT:    mtfprd f0, r4782; CHECK-LE-P8-NEXT:    xxmrghw vs0, vs1, vs0783; CHECK-LE-P8-NEXT:    xxswapd vs0, vs0784; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r3785; CHECK-LE-P8-NEXT:    blr786;787; CHECK-LE-P9-LABEL: test_v8i16_v2i64:788; CHECK-LE-P9:       # %bb.0: # %entry789; CHECK-LE-P9-NEXT:    lxsihzx f0, 0, r3790; CHECK-LE-P9-NEXT:    lfd f1, 0(r3)791; CHECK-LE-P9-NEXT:    xxmrghw vs0, vs1, vs0792; CHECK-LE-P9-NEXT:    stxv vs0, 0(r3)793; CHECK-LE-P9-NEXT:    blr794;795; CHECK-BE-P8-LABEL: test_v8i16_v2i64:796; CHECK-BE-P8:       # %bb.0: # %entry797; CHECK-BE-P8-NEXT:    lhz r4, 0(r3)798; CHECK-BE-P8-NEXT:    lfdx f1, 0, r3799; CHECK-BE-P8-NEXT:    sldi r4, r4, 48800; CHECK-BE-P8-NEXT:    mtfprd f0, r4801; CHECK-BE-P8-NEXT:    xxmrghw vs0, vs0, vs1802; CHECK-BE-P8-NEXT:    stxvw4x vs0, 0, r3803; CHECK-BE-P8-NEXT:    blr804;805; CHECK-BE-P9-LABEL: test_v8i16_v2i64:806; CHECK-BE-P9:       # %bb.0: # %entry807; CHECK-BE-P9-NEXT:    lxsihzx v2, 0, r3808; CHECK-BE-P9-NEXT:    lfd f0, 0(r3)809; CHECK-BE-P9-NEXT:    vsplth v2, v2, 3810; CHECK-BE-P9-NEXT:    xxmrghw vs0, v2, vs0811; CHECK-BE-P9-NEXT:    stxv vs0, 0(r3)812; CHECK-BE-P9-NEXT:    blr813;814; CHECK-AIX-64-P8-LABEL: test_v8i16_v2i64:815; CHECK-AIX-64-P8:       # %bb.0: # %entry816; CHECK-AIX-64-P8-NEXT:    lhz r4, 0(r3)817; CHECK-AIX-64-P8-NEXT:    lfdx f1, 0, r3818; CHECK-AIX-64-P8-NEXT:    sldi r4, r4, 48819; CHECK-AIX-64-P8-NEXT:    mtfprd f0, r4820; CHECK-AIX-64-P8-NEXT:    xxmrghw vs0, vs0, vs1821; CHECK-AIX-64-P8-NEXT:    stxvw4x vs0, 0, r3822; CHECK-AIX-64-P8-NEXT:    blr823;824; CHECK-AIX-64-P9-LABEL: test_v8i16_v2i64:825; CHECK-AIX-64-P9:       # %bb.0: # %entry826; CHECK-AIX-64-P9-NEXT:    lxsihzx v2, 0, r3827; CHECK-AIX-64-P9-NEXT:    lfd f0, 0(r3)828; CHECK-AIX-64-P9-NEXT:    vsplth v2, v2, 3829; CHECK-AIX-64-P9-NEXT:    xxmrghw vs0, v2, vs0830; CHECK-AIX-64-P9-NEXT:    stxv vs0, 0(r3)831; CHECK-AIX-64-P9-NEXT:    blr832;833; CHECK-AIX-32-P8-LABEL: test_v8i16_v2i64:834; CHECK-AIX-32-P8:       # %bb.0: # %entry835; CHECK-AIX-32-P8-NEXT:    lhz r4, 0(r3)836; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r3837; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C6(r2) # %const.0838; CHECK-AIX-32-P8-NEXT:    mtvsrwz v2, r4839; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3840; CHECK-AIX-32-P8-NEXT:    vperm v2, v2, v3, v4841; CHECK-AIX-32-P8-NEXT:    stxvw4x v2, 0, r3842; CHECK-AIX-32-P8-NEXT:    blr843;844; CHECK-AIX-32-P9-LABEL: test_v8i16_v2i64:845; CHECK-AIX-32-P9:       # %bb.0: # %entry846; CHECK-AIX-32-P9-NEXT:    lxsihzx f0, 0, r3847; CHECK-AIX-32-P9-NEXT:    lfiwzx f1, 0, r3848; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C5(r2) # %const.0849; CHECK-AIX-32-P9-NEXT:    lxv vs2, 0(r3)850; CHECK-AIX-32-P9-NEXT:    xxperm vs1, vs0, vs2851; CHECK-AIX-32-P9-NEXT:    stxv vs1, 0(r3)852; CHECK-AIX-32-P9-NEXT:    blr853entry:854  %0 = load <2 x i8>, ptr undef, align 1855  %tmp0_1 = bitcast <2 x i8> %0 to i16856  %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 0857  %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32>858  %1 = load <2 x i16>, ptr %a, align 8859  %tmp1_1 = bitcast <2 x i16> %1 to i32860  %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 0861  %2 = shufflevector <4 x i32> %tmp0_3, <4 x i32> %tmp1_2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>862  store <4 x i32> %2, ptr undef, align 4863  ret void864}865 866define <16 x i8> @test_v4i32_v4i32(ptr %a, ptr %b) {867; CHECK-LE-P8-LABEL: test_v4i32_v4i32:868; CHECK-LE-P8:       # %bb.0: # %entry869; CHECK-LE-P8-NEXT:    addis r5, r2, .LCPI9_0@toc@ha870; CHECK-LE-P8-NEXT:    lxsiwzx v3, 0, r3871; CHECK-LE-P8-NEXT:    lxsiwzx v4, 0, r4872; CHECK-LE-P8-NEXT:    addi r5, r5, .LCPI9_0@toc@l873; CHECK-LE-P8-NEXT:    lxvd2x vs0, 0, r5874; CHECK-LE-P8-NEXT:    xxswapd v2, vs0875; CHECK-LE-P8-NEXT:    vperm v2, v4, v3, v2876; CHECK-LE-P8-NEXT:    blr877;878; CHECK-LE-P9-LABEL: test_v4i32_v4i32:879; CHECK-LE-P9:       # %bb.0: # %entry880; CHECK-LE-P9-NEXT:    lxsiwzx v2, 0, r3881; CHECK-LE-P9-NEXT:    addis r3, r2, .LCPI9_0@toc@ha882; CHECK-LE-P9-NEXT:    lfiwzx f0, 0, r4883; CHECK-LE-P9-NEXT:    addi r3, r3, .LCPI9_0@toc@l884; CHECK-LE-P9-NEXT:    lxv vs1, 0(r3)885; CHECK-LE-P9-NEXT:    xxperm v2, vs0, vs1886; CHECK-LE-P9-NEXT:    blr887;888; CHECK-BE-P8-LABEL: test_v4i32_v4i32:889; CHECK-BE-P8:       # %bb.0: # %entry890; CHECK-BE-P8-NEXT:    lxsiwzx v2, 0, r3891; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI9_0@toc@ha892; CHECK-BE-P8-NEXT:    lxsiwzx v3, 0, r4893; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI9_0@toc@l894; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3895; CHECK-BE-P8-NEXT:    vperm v2, v2, v3, v4896; CHECK-BE-P8-NEXT:    blr897;898; CHECK-BE-P9-LABEL: test_v4i32_v4i32:899; CHECK-BE-P9:       # %bb.0: # %entry900; CHECK-BE-P9-NEXT:    lfiwzx f0, 0, r3901; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI9_0@toc@ha902; CHECK-BE-P9-NEXT:    lxsiwzx v2, 0, r4903; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI9_0@toc@l904; CHECK-BE-P9-NEXT:    lxv vs1, 0(r3)905; CHECK-BE-P9-NEXT:    xxperm v2, vs0, vs1906; CHECK-BE-P9-NEXT:    blr907;908; CHECK-AIX-64-P8-LABEL: test_v4i32_v4i32:909; CHECK-AIX-64-P8:       # %bb.0: # %entry910; CHECK-AIX-64-P8-NEXT:    lxsiwzx v2, 0, r3911; CHECK-AIX-64-P8-NEXT:    ld r3, L..C6(r2) # %const.0912; CHECK-AIX-64-P8-NEXT:    lxsiwzx v3, 0, r4913; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r3914; CHECK-AIX-64-P8-NEXT:    vperm v2, v2, v3, v4915; CHECK-AIX-64-P8-NEXT:    blr916;917; CHECK-AIX-64-P9-LABEL: test_v4i32_v4i32:918; CHECK-AIX-64-P9:       # %bb.0: # %entry919; CHECK-AIX-64-P9-NEXT:    lfiwzx f0, 0, r3920; CHECK-AIX-64-P9-NEXT:    ld r3, L..C5(r2) # %const.0921; CHECK-AIX-64-P9-NEXT:    lxsiwzx v2, 0, r4922; CHECK-AIX-64-P9-NEXT:    lxv vs1, 0(r3)923; CHECK-AIX-64-P9-NEXT:    xxperm v2, vs0, vs1924; CHECK-AIX-64-P9-NEXT:    blr925;926; CHECK-AIX-32-P8-LABEL: test_v4i32_v4i32:927; CHECK-AIX-32-P8:       # %bb.0: # %entry928; CHECK-AIX-32-P8-NEXT:    lxsiwzx v2, 0, r3929; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C7(r2) # %const.0930; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r4931; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r3932; CHECK-AIX-32-P8-NEXT:    vperm v2, v2, v3, v4933; CHECK-AIX-32-P8-NEXT:    blr934;935; CHECK-AIX-32-P9-LABEL: test_v4i32_v4i32:936; CHECK-AIX-32-P9:       # %bb.0: # %entry937; CHECK-AIX-32-P9-NEXT:    lfiwzx f0, 0, r3938; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C6(r2) # %const.0939; CHECK-AIX-32-P9-NEXT:    lxsiwzx v2, 0, r4940; CHECK-AIX-32-P9-NEXT:    lxv vs1, 0(r3)941; CHECK-AIX-32-P9-NEXT:    xxperm v2, vs0, vs1942; CHECK-AIX-32-P9-NEXT:    blr943entry:944  %load1 = load <4 x i8>, ptr %a945  %load2 = load <4 x i8>, ptr %b946  %shuffle1 = shufflevector <4 x i8> %load1, <4 x i8> %load2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>947  %shuffle2 = shufflevector <8 x i8> %shuffle1, <8 x i8> %shuffle1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>948  ret <16 x i8> %shuffle2949}950 951define void @test_v4i32_v8i16(ptr %a) {952; CHECK-LE-P8-LABEL: test_v4i32_v8i16:953; CHECK-LE-P8:       # %bb.0: # %entry954; CHECK-LE-P8-NEXT:    lhz r4, 0(r3)955; CHECK-LE-P8-NEXT:    lfiwzx f1, 0, r3956; CHECK-LE-P8-NEXT:    mtfprd f0, r4957; CHECK-LE-P8-NEXT:    xxmrghw vs0, vs0, vs1958; CHECK-LE-P8-NEXT:    xxswapd vs0, vs0959; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r3960; CHECK-LE-P8-NEXT:    blr961;962; CHECK-LE-P9-LABEL: test_v4i32_v8i16:963; CHECK-LE-P9:       # %bb.0: # %entry964; CHECK-LE-P9-NEXT:    lxsihzx f0, 0, r3965; CHECK-LE-P9-NEXT:    lfiwzx f1, 0, r3966; CHECK-LE-P9-NEXT:    xxmrghw vs0, vs0, vs1967; CHECK-LE-P9-NEXT:    stxv vs0, 0(r3)968; CHECK-LE-P9-NEXT:    blr969;970; CHECK-BE-P8-LABEL: test_v4i32_v8i16:971; CHECK-BE-P8:       # %bb.0: # %entry972; CHECK-BE-P8-NEXT:    lhz r4, 0(r3)973; CHECK-BE-P8-NEXT:    lxsiwzx v3, 0, r3974; CHECK-BE-P8-NEXT:    addis r3, r2, .LCPI10_0@toc@ha975; CHECK-BE-P8-NEXT:    addi r3, r3, .LCPI10_0@toc@l976; CHECK-BE-P8-NEXT:    mtvsrwz v2, r4977; CHECK-BE-P8-NEXT:    lxvw4x v4, 0, r3978; CHECK-BE-P8-NEXT:    vperm v2, v3, v2, v4979; CHECK-BE-P8-NEXT:    stxvw4x v2, 0, r3980; CHECK-BE-P8-NEXT:    blr981;982; CHECK-BE-P9-LABEL: test_v4i32_v8i16:983; CHECK-BE-P9:       # %bb.0: # %entry984; CHECK-BE-P9-NEXT:    lxsihzx f0, 0, r3985; CHECK-BE-P9-NEXT:    lfiwzx f1, 0, r3986; CHECK-BE-P9-NEXT:    addis r3, r2, .LCPI10_0@toc@ha987; CHECK-BE-P9-NEXT:    addi r3, r3, .LCPI10_0@toc@l988; CHECK-BE-P9-NEXT:    lxv vs2, 0(r3)989; CHECK-BE-P9-NEXT:    xxperm vs0, vs1, vs2990; CHECK-BE-P9-NEXT:    stxv vs0, 0(r3)991; CHECK-BE-P9-NEXT:    blr992;993; CHECK-AIX-64-P8-LABEL: test_v4i32_v8i16:994; CHECK-AIX-64-P8:       # %bb.0: # %entry995; CHECK-AIX-64-P8-NEXT:    lhz r4, 0(r3)996; CHECK-AIX-64-P8-NEXT:    lxsiwzx v3, 0, r3997; CHECK-AIX-64-P8-NEXT:    ld r3, L..C7(r2) # %const.0998; CHECK-AIX-64-P8-NEXT:    mtvsrwz v2, r4999; CHECK-AIX-64-P8-NEXT:    lxvw4x v4, 0, r31000; CHECK-AIX-64-P8-NEXT:    vperm v2, v3, v2, v41001; CHECK-AIX-64-P8-NEXT:    stxvw4x v2, 0, r31002; CHECK-AIX-64-P8-NEXT:    blr1003;1004; CHECK-AIX-64-P9-LABEL: test_v4i32_v8i16:1005; CHECK-AIX-64-P9:       # %bb.0: # %entry1006; CHECK-AIX-64-P9-NEXT:    lxsihzx f0, 0, r31007; CHECK-AIX-64-P9-NEXT:    lfiwzx f1, 0, r31008; CHECK-AIX-64-P9-NEXT:    ld r3, L..C6(r2) # %const.01009; CHECK-AIX-64-P9-NEXT:    lxv vs2, 0(r3)1010; CHECK-AIX-64-P9-NEXT:    xxperm vs0, vs1, vs21011; CHECK-AIX-64-P9-NEXT:    stxv vs0, 0(r3)1012; CHECK-AIX-64-P9-NEXT:    blr1013;1014; CHECK-AIX-32-P8-LABEL: test_v4i32_v8i16:1015; CHECK-AIX-32-P8:       # %bb.0: # %entry1016; CHECK-AIX-32-P8-NEXT:    lhz r4, 0(r3)1017; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r31018; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C8(r2) # %const.01019; CHECK-AIX-32-P8-NEXT:    mtvsrwz v2, r41020; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r31021; CHECK-AIX-32-P8-NEXT:    vperm v2, v3, v2, v41022; CHECK-AIX-32-P8-NEXT:    stxvw4x v2, 0, r31023; CHECK-AIX-32-P8-NEXT:    blr1024;1025; CHECK-AIX-32-P9-LABEL: test_v4i32_v8i16:1026; CHECK-AIX-32-P9:       # %bb.0: # %entry1027; CHECK-AIX-32-P9-NEXT:    lxsihzx f0, 0, r31028; CHECK-AIX-32-P9-NEXT:    lfiwzx f1, 0, r31029; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C7(r2) # %const.01030; CHECK-AIX-32-P9-NEXT:    lxv vs2, 0(r3)1031; CHECK-AIX-32-P9-NEXT:    xxperm vs0, vs1, vs21032; CHECK-AIX-32-P9-NEXT:    stxv vs0, 0(r3)1033; CHECK-AIX-32-P9-NEXT:    blr1034entry:1035  %0 = load <2 x i8>, ptr undef, align 11036  %tmp0_1 = bitcast <2 x i8> %0 to i161037  %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 01038  %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32>1039  %1 = load <2 x i16>, ptr %a, align 41040  %tmp1_1 = bitcast <2 x i16> %1 to i321041  %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 01042  %2 = shufflevector <4 x i32> %tmp1_2, <4 x i32> %tmp0_3, <4 x i32> <i32 0, i32 4, i32 1, i32 5>1043  store <4 x i32> %2, ptr undef, align 41044  ret void1045}1046 1047define void @test_v4i32_v2i64(ptr %a) {1048; CHECK-LE-P8-LABEL: test_v4i32_v2i64:1049; CHECK-LE-P8:       # %bb.0: # %entry1050; CHECK-LE-P8-NEXT:    lfdx f0, 0, r31051; CHECK-LE-P8-NEXT:    lfiwzx f1, 0, r31052; CHECK-LE-P8-NEXT:    xxmrghw vs0, vs0, vs11053; CHECK-LE-P8-NEXT:    xxswapd vs0, vs01054; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r31055; CHECK-LE-P8-NEXT:    blr1056;1057; CHECK-LE-P9-LABEL: test_v4i32_v2i64:1058; CHECK-LE-P9:       # %bb.0: # %entry1059; CHECK-LE-P9-NEXT:    lfd f0, 0(r3)1060; CHECK-LE-P9-NEXT:    lfiwzx f1, 0, r31061; CHECK-LE-P9-NEXT:    xxmrghw vs0, vs0, vs11062; CHECK-LE-P9-NEXT:    stxv vs0, 0(r3)1063; CHECK-LE-P9-NEXT:    blr1064;1065; CHECK-BE-P8-LABEL: test_v4i32_v2i64:1066; CHECK-BE-P8:       # %bb.0: # %entry1067; CHECK-BE-P8-NEXT:    lfiwzx f0, 0, r31068; CHECK-BE-P8-NEXT:    lfdx f1, 0, r31069; CHECK-BE-P8-NEXT:    xxsldwi vs0, f0, f0, 11070; CHECK-BE-P8-NEXT:    xxmrghw vs0, vs0, vs11071; CHECK-BE-P8-NEXT:    stxvw4x vs0, 0, r31072; CHECK-BE-P8-NEXT:    blr1073;1074; CHECK-BE-P9-LABEL: test_v4i32_v2i64:1075; CHECK-BE-P9:       # %bb.0: # %entry1076; CHECK-BE-P9-NEXT:    lfiwzx f1, 0, r31077; CHECK-BE-P9-NEXT:    lfd f0, 0(r3)1078; CHECK-BE-P9-NEXT:    xxsldwi vs1, f1, f1, 11079; CHECK-BE-P9-NEXT:    xxmrghw vs0, vs1, vs01080; CHECK-BE-P9-NEXT:    stxv vs0, 0(r3)1081; CHECK-BE-P9-NEXT:    blr1082;1083; CHECK-AIX-64-P8-LABEL: test_v4i32_v2i64:1084; CHECK-AIX-64-P8:       # %bb.0: # %entry1085; CHECK-AIX-64-P8-NEXT:    lfiwzx f0, 0, r31086; CHECK-AIX-64-P8-NEXT:    lfdx f1, 0, r31087; CHECK-AIX-64-P8-NEXT:    xxsldwi vs0, f0, f0, 11088; CHECK-AIX-64-P8-NEXT:    xxmrghw vs0, vs0, vs11089; CHECK-AIX-64-P8-NEXT:    stxvw4x vs0, 0, r31090; CHECK-AIX-64-P8-NEXT:    blr1091;1092; CHECK-AIX-64-P9-LABEL: test_v4i32_v2i64:1093; CHECK-AIX-64-P9:       # %bb.0: # %entry1094; CHECK-AIX-64-P9-NEXT:    lfiwzx f1, 0, r31095; CHECK-AIX-64-P9-NEXT:    lfd f0, 0(r3)1096; CHECK-AIX-64-P9-NEXT:    xxsldwi vs1, f1, f1, 11097; CHECK-AIX-64-P9-NEXT:    xxmrghw vs0, vs1, vs01098; CHECK-AIX-64-P9-NEXT:    stxv vs0, 0(r3)1099; CHECK-AIX-64-P9-NEXT:    blr1100;1101; CHECK-AIX-32-P8-LABEL: test_v4i32_v2i64:1102; CHECK-AIX-32-P8:       # %bb.0: # %entry1103; CHECK-AIX-32-P8-NEXT:    lfiwzx f0, 0, r31104; CHECK-AIX-32-P8-NEXT:    lfiwzx f1, 0, r31105; CHECK-AIX-32-P8-NEXT:    xxspltw vs0, vs0, 11106; CHECK-AIX-32-P8-NEXT:    xxspltw vs1, vs1, 11107; CHECK-AIX-32-P8-NEXT:    xxmrghw vs0, vs1, vs01108; CHECK-AIX-32-P8-NEXT:    stxvw4x vs0, 0, r31109; CHECK-AIX-32-P8-NEXT:    blr1110;1111; CHECK-AIX-32-P9-LABEL: test_v4i32_v2i64:1112; CHECK-AIX-32-P9:       # %bb.0: # %entry1113; CHECK-AIX-32-P9-NEXT:    lxvwsx vs0, 0, r31114; CHECK-AIX-32-P9-NEXT:    lxvwsx vs1, 0, r31115; CHECK-AIX-32-P9-NEXT:    xxmrghw vs0, vs1, vs01116; CHECK-AIX-32-P9-NEXT:    stxv vs0, 0(r3)1117; CHECK-AIX-32-P9-NEXT:    blr1118entry:1119  %0 = load <2 x i16>, ptr undef, align 81120  %tmp0_1 = bitcast <2 x i16> %0 to i321121  %tmp0_2 = insertelement <4 x i32> undef, i32 %tmp0_1, i32 01122  %1 = load <2 x i16>, ptr %a, align 41123  %tmp1_1 = bitcast <2 x i16> %1 to i321124  %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 01125  %2 = shufflevector <4 x i32> %tmp1_2, <4 x i32> %tmp0_2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>1126  store <4 x i32> %2, ptr undef, align 41127  ret void1128}1129 1130define void @test_v2i64_v2i64(ptr %a) {1131; CHECK-LE-P8-LABEL: test_v2i64_v2i64:1132; CHECK-LE-P8:       # %bb.0: # %entry1133; CHECK-LE-P8-NEXT:    lfdx f0, 0, r31134; CHECK-LE-P8-NEXT:    lfdx f1, 0, r31135; CHECK-LE-P8-NEXT:    xxmrghw vs0, vs1, vs01136; CHECK-LE-P8-NEXT:    xxswapd vs0, vs01137; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r31138; CHECK-LE-P8-NEXT:    blr1139;1140; CHECK-LE-P9-LABEL: test_v2i64_v2i64:1141; CHECK-LE-P9:       # %bb.0: # %entry1142; CHECK-LE-P9-NEXT:    lfd f0, 0(r3)1143; CHECK-LE-P9-NEXT:    lfd f1, 0(r3)1144; CHECK-LE-P9-NEXT:    xxmrghw vs0, vs1, vs01145; CHECK-LE-P9-NEXT:    stxv vs0, 0(r3)1146; CHECK-LE-P9-NEXT:    blr1147;1148; CHECK-BE-P8-LABEL: test_v2i64_v2i64:1149; CHECK-BE-P8:       # %bb.0: # %entry1150; CHECK-BE-P8-NEXT:    lfdx f0, 0, r31151; CHECK-BE-P8-NEXT:    lfdx f1, 0, r31152; CHECK-BE-P8-NEXT:    xxmrghw vs0, vs0, vs11153; CHECK-BE-P8-NEXT:    stxvw4x vs0, 0, r31154; CHECK-BE-P8-NEXT:    blr1155;1156; CHECK-BE-P9-LABEL: test_v2i64_v2i64:1157; CHECK-BE-P9:       # %bb.0: # %entry1158; CHECK-BE-P9-NEXT:    lfd f0, 0(r3)1159; CHECK-BE-P9-NEXT:    lfd f1, 0(r3)1160; CHECK-BE-P9-NEXT:    xxmrghw vs0, vs0, vs11161; CHECK-BE-P9-NEXT:    stxv vs0, 0(r3)1162; CHECK-BE-P9-NEXT:    blr1163;1164; CHECK-AIX-64-P8-LABEL: test_v2i64_v2i64:1165; CHECK-AIX-64-P8:       # %bb.0: # %entry1166; CHECK-AIX-64-P8-NEXT:    lfdx f0, 0, r31167; CHECK-AIX-64-P8-NEXT:    lfdx f1, 0, r31168; CHECK-AIX-64-P8-NEXT:    xxmrghw vs0, vs0, vs11169; CHECK-AIX-64-P8-NEXT:    stxvw4x vs0, 0, r31170; CHECK-AIX-64-P8-NEXT:    blr1171;1172; CHECK-AIX-64-P9-LABEL: test_v2i64_v2i64:1173; CHECK-AIX-64-P9:       # %bb.0: # %entry1174; CHECK-AIX-64-P9-NEXT:    lfd f0, 0(r3)1175; CHECK-AIX-64-P9-NEXT:    lfd f1, 0(r3)1176; CHECK-AIX-64-P9-NEXT:    xxmrghw vs0, vs0, vs11177; CHECK-AIX-64-P9-NEXT:    stxv vs0, 0(r3)1178; CHECK-AIX-64-P9-NEXT:    blr1179;1180; CHECK-AIX-32-P8-LABEL: test_v2i64_v2i64:1181; CHECK-AIX-32-P8:       # %bb.0: # %entry1182; CHECK-AIX-32-P8-NEXT:    li r4, 41183; CHECK-AIX-32-P8-NEXT:    lfiwzx f1, 0, r31184; CHECK-AIX-32-P8-NEXT:    lfiwzx f0, r3, r41185; CHECK-AIX-32-P8-NEXT:    xxspltw vs1, vs1, 11186; CHECK-AIX-32-P8-NEXT:    xxspltw vs0, vs0, 11187; CHECK-AIX-32-P8-NEXT:    xxmrghw vs0, vs1, vs01188; CHECK-AIX-32-P8-NEXT:    lfiwzx f1, 0, r31189; CHECK-AIX-32-P8-NEXT:    xxspltw vs1, vs1, 11190; CHECK-AIX-32-P8-NEXT:    xxmrghw vs0, vs1, vs01191; CHECK-AIX-32-P8-NEXT:    stxvw4x vs0, 0, r31192; CHECK-AIX-32-P8-NEXT:    blr1193;1194; CHECK-AIX-32-P9-LABEL: test_v2i64_v2i64:1195; CHECK-AIX-32-P9:       # %bb.0: # %entry1196; CHECK-AIX-32-P9-NEXT:    li r4, 41197; CHECK-AIX-32-P9-NEXT:    lxvwsx vs1, 0, r31198; CHECK-AIX-32-P9-NEXT:    lxvwsx vs0, r3, r41199; CHECK-AIX-32-P9-NEXT:    xxmrghw vs0, vs1, vs01200; CHECK-AIX-32-P9-NEXT:    lxvwsx vs1, 0, r31201; CHECK-AIX-32-P9-NEXT:    xxmrghw vs0, vs1, vs01202; CHECK-AIX-32-P9-NEXT:    stxv vs0, 0(r3)1203; CHECK-AIX-32-P9-NEXT:    blr1204entry:1205  %0 = load <2 x i32>, ptr undef, align 41206  %1 = load <2 x i32>, ptr %a, align 41207  %2 = shufflevector <2 x i32> %0, <2 x i32> %1, <4 x i32> <i32 0, i32 2, i32 1, i32 3>1208  store <4 x i32> %2, ptr undef, align 41209  ret void1210}1211 1212define void @test_v2i64_v4i32(ptr %a) {1213; CHECK-LE-P8-LABEL: test_v2i64_v4i32:1214; CHECK-LE-P8:       # %bb.0: # %entry1215; CHECK-LE-P8-NEXT:    lfdx f0, 0, r31216; CHECK-LE-P8-NEXT:    lfiwzx f1, 0, r31217; CHECK-LE-P8-NEXT:    xxmrghw vs0, vs1, vs01218; CHECK-LE-P8-NEXT:    xxswapd vs0, vs01219; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r31220; CHECK-LE-P8-NEXT:    blr1221;1222; CHECK-LE-P9-LABEL: test_v2i64_v4i32:1223; CHECK-LE-P9:       # %bb.0: # %entry1224; CHECK-LE-P9-NEXT:    lfd f0, 0(r3)1225; CHECK-LE-P9-NEXT:    lfiwzx f1, 0, r31226; CHECK-LE-P9-NEXT:    xxmrghw vs0, vs1, vs01227; CHECK-LE-P9-NEXT:    stxv vs0, 0(r3)1228; CHECK-LE-P9-NEXT:    blr1229;1230; CHECK-BE-P8-LABEL: test_v2i64_v4i32:1231; CHECK-BE-P8:       # %bb.0: # %entry1232; CHECK-BE-P8-NEXT:    lfiwzx f0, 0, r31233; CHECK-BE-P8-NEXT:    lfdx f1, 0, r31234; CHECK-BE-P8-NEXT:    xxsldwi vs0, f0, f0, 11235; CHECK-BE-P8-NEXT:    xxmrghw vs0, vs1, vs01236; CHECK-BE-P8-NEXT:    stxvw4x vs0, 0, r31237; CHECK-BE-P8-NEXT:    blr1238;1239; CHECK-BE-P9-LABEL: test_v2i64_v4i32:1240; CHECK-BE-P9:       # %bb.0: # %entry1241; CHECK-BE-P9-NEXT:    lfiwzx f1, 0, r31242; CHECK-BE-P9-NEXT:    lfd f0, 0(r3)1243; CHECK-BE-P9-NEXT:    xxsldwi vs1, f1, f1, 11244; CHECK-BE-P9-NEXT:    xxmrghw vs0, vs0, vs11245; CHECK-BE-P9-NEXT:    stxv vs0, 0(r3)1246; CHECK-BE-P9-NEXT:    blr1247;1248; CHECK-AIX-64-P8-LABEL: test_v2i64_v4i32:1249; CHECK-AIX-64-P8:       # %bb.0: # %entry1250; CHECK-AIX-64-P8-NEXT:    lfiwzx f0, 0, r31251; CHECK-AIX-64-P8-NEXT:    lfdx f1, 0, r31252; CHECK-AIX-64-P8-NEXT:    xxsldwi vs0, f0, f0, 11253; CHECK-AIX-64-P8-NEXT:    xxmrghw vs0, vs1, vs01254; CHECK-AIX-64-P8-NEXT:    stxvw4x vs0, 0, r31255; CHECK-AIX-64-P8-NEXT:    blr1256;1257; CHECK-AIX-64-P9-LABEL: test_v2i64_v4i32:1258; CHECK-AIX-64-P9:       # %bb.0: # %entry1259; CHECK-AIX-64-P9-NEXT:    lfiwzx f1, 0, r31260; CHECK-AIX-64-P9-NEXT:    lfd f0, 0(r3)1261; CHECK-AIX-64-P9-NEXT:    xxsldwi vs1, f1, f1, 11262; CHECK-AIX-64-P9-NEXT:    xxmrghw vs0, vs0, vs11263; CHECK-AIX-64-P9-NEXT:    stxv vs0, 0(r3)1264; CHECK-AIX-64-P9-NEXT:    blr1265;1266; CHECK-AIX-32-P8-LABEL: test_v2i64_v4i32:1267; CHECK-AIX-32-P8:       # %bb.0: # %entry1268; CHECK-AIX-32-P8-NEXT:    lfiwzx f0, 0, r31269; CHECK-AIX-32-P8-NEXT:    lfiwzx f1, 0, r31270; CHECK-AIX-32-P8-NEXT:    xxspltw vs0, vs0, 11271; CHECK-AIX-32-P8-NEXT:    xxspltw vs1, vs1, 11272; CHECK-AIX-32-P8-NEXT:    xxmrghw vs0, vs1, vs01273; CHECK-AIX-32-P8-NEXT:    stxvw4x vs0, 0, r31274; CHECK-AIX-32-P8-NEXT:    blr1275;1276; CHECK-AIX-32-P9-LABEL: test_v2i64_v4i32:1277; CHECK-AIX-32-P9:       # %bb.0: # %entry1278; CHECK-AIX-32-P9-NEXT:    lxvwsx vs0, 0, r31279; CHECK-AIX-32-P9-NEXT:    lxvwsx vs1, 0, r31280; CHECK-AIX-32-P9-NEXT:    xxmrghw vs0, vs1, vs01281; CHECK-AIX-32-P9-NEXT:    stxv vs0, 0(r3)1282; CHECK-AIX-32-P9-NEXT:    blr1283entry:1284  %0 = load <2 x i16>, ptr undef, align 81285  %tmp0_1 = bitcast <2 x i16> %0 to i321286  %tmp0_2 = insertelement <4 x i32> undef, i32 %tmp0_1, i32 01287  %1 = load <2 x i16>, ptr %a, align 41288  %tmp1_1 = bitcast <2 x i16> %1 to i321289  %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 01290  %2 = shufflevector <4 x i32> %tmp0_2, <4 x i32> %tmp1_2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>1291  store <4 x i32> %2, ptr undef, align 41292  ret void1293}1294 1295define void @test_v2i64_v8i16(ptr %a) {1296; CHECK-LE-P8-LABEL: test_v2i64_v8i16:1297; CHECK-LE-P8:       # %bb.0: # %entry1298; CHECK-LE-P8-NEXT:    lhz r4, 0(r3)1299; CHECK-LE-P8-NEXT:    lfdx f1, 0, r31300; CHECK-LE-P8-NEXT:    mtfprd f0, r41301; CHECK-LE-P8-NEXT:    xxmrghw vs0, vs0, vs11302; CHECK-LE-P8-NEXT:    xxswapd vs0, vs01303; CHECK-LE-P8-NEXT:    stxvd2x vs0, 0, r31304; CHECK-LE-P8-NEXT:    blr1305;1306; CHECK-LE-P9-LABEL: test_v2i64_v8i16:1307; CHECK-LE-P9:       # %bb.0: # %entry1308; CHECK-LE-P9-NEXT:    lxsihzx f0, 0, r31309; CHECK-LE-P9-NEXT:    lfd f1, 0(r3)1310; CHECK-LE-P9-NEXT:    xxmrghw vs0, vs0, vs11311; CHECK-LE-P9-NEXT:    stxv vs0, 0(r3)1312; CHECK-LE-P9-NEXT:    blr1313;1314; CHECK-BE-P8-LABEL: test_v2i64_v8i16:1315; CHECK-BE-P8:       # %bb.0: # %entry1316; CHECK-BE-P8-NEXT:    lhz r4, 0(r3)1317; CHECK-BE-P8-NEXT:    lfdx f1, 0, r31318; CHECK-BE-P8-NEXT:    sldi r4, r4, 481319; CHECK-BE-P8-NEXT:    mtfprd f0, r41320; CHECK-BE-P8-NEXT:    xxmrghw vs0, vs1, vs01321; CHECK-BE-P8-NEXT:    stxvw4x vs0, 0, r31322; CHECK-BE-P8-NEXT:    blr1323;1324; CHECK-BE-P9-LABEL: test_v2i64_v8i16:1325; CHECK-BE-P9:       # %bb.0: # %entry1326; CHECK-BE-P9-NEXT:    lxsihzx v2, 0, r31327; CHECK-BE-P9-NEXT:    lfd f0, 0(r3)1328; CHECK-BE-P9-NEXT:    vsplth v2, v2, 31329; CHECK-BE-P9-NEXT:    xxmrghw vs0, vs0, v21330; CHECK-BE-P9-NEXT:    stxv vs0, 0(r3)1331; CHECK-BE-P9-NEXT:    blr1332;1333; CHECK-AIX-64-P8-LABEL: test_v2i64_v8i16:1334; CHECK-AIX-64-P8:       # %bb.0: # %entry1335; CHECK-AIX-64-P8-NEXT:    lhz r4, 0(r3)1336; CHECK-AIX-64-P8-NEXT:    lfdx f1, 0, r31337; CHECK-AIX-64-P8-NEXT:    sldi r4, r4, 481338; CHECK-AIX-64-P8-NEXT:    mtfprd f0, r41339; CHECK-AIX-64-P8-NEXT:    xxmrghw vs0, vs1, vs01340; CHECK-AIX-64-P8-NEXT:    stxvw4x vs0, 0, r31341; CHECK-AIX-64-P8-NEXT:    blr1342;1343; CHECK-AIX-64-P9-LABEL: test_v2i64_v8i16:1344; CHECK-AIX-64-P9:       # %bb.0: # %entry1345; CHECK-AIX-64-P9-NEXT:    lxsihzx v2, 0, r31346; CHECK-AIX-64-P9-NEXT:    lfd f0, 0(r3)1347; CHECK-AIX-64-P9-NEXT:    vsplth v2, v2, 31348; CHECK-AIX-64-P9-NEXT:    xxmrghw vs0, vs0, v21349; CHECK-AIX-64-P9-NEXT:    stxv vs0, 0(r3)1350; CHECK-AIX-64-P9-NEXT:    blr1351;1352; CHECK-AIX-32-P8-LABEL: test_v2i64_v8i16:1353; CHECK-AIX-32-P8:       # %bb.0: # %entry1354; CHECK-AIX-32-P8-NEXT:    lhz r4, 0(r3)1355; CHECK-AIX-32-P8-NEXT:    lxsiwzx v3, 0, r31356; CHECK-AIX-32-P8-NEXT:    lwz r3, L..C9(r2) # %const.01357; CHECK-AIX-32-P8-NEXT:    mtvsrwz v2, r41358; CHECK-AIX-32-P8-NEXT:    lxvw4x v4, 0, r31359; CHECK-AIX-32-P8-NEXT:    vperm v2, v3, v2, v41360; CHECK-AIX-32-P8-NEXT:    stxvw4x v2, 0, r31361; CHECK-AIX-32-P8-NEXT:    blr1362;1363; CHECK-AIX-32-P9-LABEL: test_v2i64_v8i16:1364; CHECK-AIX-32-P9:       # %bb.0: # %entry1365; CHECK-AIX-32-P9-NEXT:    lxsihzx f0, 0, r31366; CHECK-AIX-32-P9-NEXT:    lfiwzx f1, 0, r31367; CHECK-AIX-32-P9-NEXT:    lwz r3, L..C8(r2) # %const.01368; CHECK-AIX-32-P9-NEXT:    lxv vs2, 0(r3)1369; CHECK-AIX-32-P9-NEXT:    xxperm vs0, vs1, vs21370; CHECK-AIX-32-P9-NEXT:    stxv vs0, 0(r3)1371; CHECK-AIX-32-P9-NEXT:    blr1372entry:1373  %0 = load <2 x i8>, ptr undef, align 11374  %tmp0_1 = bitcast <2 x i8> %0 to i161375  %tmp0_2 = insertelement <8 x i16> undef, i16 %tmp0_1, i32 01376  %tmp0_3 = bitcast <8 x i16> %tmp0_2 to <4 x i32>1377  %1 = load <2 x i16>, ptr %a, align 81378  %tmp1_1 = bitcast <2 x i16> %1 to i321379  %tmp1_2 = insertelement <4 x i32> undef, i32 %tmp1_1, i32 01380  %2 = shufflevector <4 x i32> %tmp1_2, <4 x i32> %tmp0_3, <4 x i32> <i32 0, i32 4, i32 1, i32 5>1381  store <4 x i32> %2, ptr undef, align 41382  ret void1383}1384