brintos

brintos / llvm-project-archived public Read only

0
0
Text · 36.0 KiB · b006c78 Raw
1133 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \3; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names \4; RUN:   -ppc-vsr-nums-as-vr < %s | FileCheck %s5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \6; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names \7; RUN:   -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-BE8; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \9; RUN:   -mcpu=pwr9 -ppc-asm-full-reg-names \10; RUN:   -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-P911; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr \12; RUN:   -ppc-asm-full-reg-names -mtriple=powerpc64-ibm-aix-xcoff < %s | \13; RUN: FileCheck %s --check-prefixes=AIX-P8,AIX-P8-6414; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr \15; RUN:   -ppc-asm-full-reg-names -mtriple=powerpc-ibm-aix-xcoff < %s | \16; RUN: FileCheck %s --check-prefixes=AIX-P8,AIX-P8-3217 18; Byte indexed19 20define <16 x i8> @testByte(<16 x i8> %a, i64 %b, i64 %idx) {21; CHECK-LABEL: testByte:22; CHECK:       # %bb.0: # %entry23; CHECK-NEXT:    vinsbrx v2, r6, r524; CHECK-NEXT:    blr25;26; CHECK-BE-LABEL: testByte:27; CHECK-BE:       # %bb.0: # %entry28; CHECK-BE-NEXT:    vinsblx v2, r6, r529; CHECK-BE-NEXT:    blr30;31; CHECK-P9-LABEL: testByte:32; CHECK-P9:       # %bb.0: # %entry33; CHECK-P9-NEXT:    addi r4, r1, -1634; CHECK-P9-NEXT:    clrldi r3, r6, 6035; CHECK-P9-NEXT:    stxv v2, -16(r1)36; CHECK-P9-NEXT:    stbx r5, r4, r337; CHECK-P9-NEXT:    lxv v2, -16(r1)38; CHECK-P9-NEXT:    blr39;40; AIX-P8-64-LABEL: testByte:41; AIX-P8-64:       # %bb.0: # %entry42; AIX-P8-64-NEXT:    clrldi r4, r4, 6043; AIX-P8-64-NEXT:    addi r5, r1, -1644; AIX-P8-64-NEXT:    stxvw4x v2, 0, r545; AIX-P8-64-NEXT:    stbx r3, r5, r446; AIX-P8-64-NEXT:    lxvw4x v2, 0, r547; AIX-P8-64-NEXT:    blr48;49; AIX-P8-32-LABEL: testByte:50; AIX-P8-32:       # %bb.0: # %entry51; AIX-P8-32-NEXT:    clrlwi r3, r6, 2852; AIX-P8-32-NEXT:    addi r5, r1, -1653; AIX-P8-32-NEXT:    stxvw4x v2, 0, r554; AIX-P8-32-NEXT:    stbx r4, r5, r355; AIX-P8-32-NEXT:    lxvw4x v2, 0, r556; AIX-P8-32-NEXT:    blr57entry:58  %conv = trunc i64 %b to i859  %vecins = insertelement <16 x i8> %a, i8 %conv, i64 %idx60  ret <16 x i8> %vecins61}62 63; Halfword indexed64 65define <8 x i16> @testHalf(<8 x i16> %a, i64 %b, i64 %idx) {66; CHECK-LABEL: testHalf:67; CHECK:       # %bb.0: # %entry68; CHECK-NEXT:    slwi r3, r6, 169; CHECK-NEXT:    vinshrx v2, r3, r570; CHECK-NEXT:    blr71;72; CHECK-BE-LABEL: testHalf:73; CHECK-BE:       # %bb.0: # %entry74; CHECK-BE-NEXT:    slwi r3, r6, 175; CHECK-BE-NEXT:    vinshlx v2, r3, r576; CHECK-BE-NEXT:    blr77;78; CHECK-P9-LABEL: testHalf:79; CHECK-P9:       # %bb.0: # %entry80; CHECK-P9-NEXT:    addi r4, r1, -1681; CHECK-P9-NEXT:    rlwinm r3, r6, 1, 28, 3082; CHECK-P9-NEXT:    stxv v2, -16(r1)83; CHECK-P9-NEXT:    sthx r5, r4, r384; CHECK-P9-NEXT:    lxv v2, -16(r1)85; CHECK-P9-NEXT:    blr86;87; AIX-P8-64-LABEL: testHalf:88; AIX-P8-64:       # %bb.0: # %entry89; AIX-P8-64-NEXT:    rlwinm r4, r4, 1, 28, 3090; AIX-P8-64-NEXT:    addi r5, r1, -1691; AIX-P8-64-NEXT:    stxvw4x v2, 0, r592; AIX-P8-64-NEXT:    sthx r3, r5, r493; AIX-P8-64-NEXT:    lxvw4x v2, 0, r594; AIX-P8-64-NEXT:    blr95;96; AIX-P8-32-LABEL: testHalf:97; AIX-P8-32:       # %bb.0: # %entry98; AIX-P8-32-NEXT:    rlwinm r3, r6, 1, 28, 3099; AIX-P8-32-NEXT:    addi r5, r1, -16100; AIX-P8-32-NEXT:    stxvw4x v2, 0, r5101; AIX-P8-32-NEXT:    sthx r4, r5, r3102; AIX-P8-32-NEXT:    lxvw4x v2, 0, r5103; AIX-P8-32-NEXT:    blr104entry:105  %conv = trunc i64 %b to i16106  %vecins = insertelement <8 x i16> %a, i16 %conv, i64 %idx107  ret <8 x i16> %vecins108}109 110; Word indexed111 112define <4 x i32> @testWord(<4 x i32> %a, i64 %b, i64 %idx) {113; CHECK-LABEL: testWord:114; CHECK:       # %bb.0: # %entry115; CHECK-NEXT:    slwi r3, r6, 2116; CHECK-NEXT:    vinswrx v2, r3, r5117; CHECK-NEXT:    blr118;119; CHECK-BE-LABEL: testWord:120; CHECK-BE:       # %bb.0: # %entry121; CHECK-BE-NEXT:    slwi r3, r6, 2122; CHECK-BE-NEXT:    vinswlx v2, r3, r5123; CHECK-BE-NEXT:    blr124;125; CHECK-P9-LABEL: testWord:126; CHECK-P9:       # %bb.0: # %entry127; CHECK-P9-NEXT:    addi r4, r1, -16128; CHECK-P9-NEXT:    rlwinm r3, r6, 2, 28, 29129; CHECK-P9-NEXT:    stxv v2, -16(r1)130; CHECK-P9-NEXT:    stwx r5, r4, r3131; CHECK-P9-NEXT:    lxv v2, -16(r1)132; CHECK-P9-NEXT:    blr133;134; AIX-P8-64-LABEL: testWord:135; AIX-P8-64:       # %bb.0: # %entry136; AIX-P8-64-NEXT:    rlwinm r4, r4, 2, 28, 29137; AIX-P8-64-NEXT:    addi r5, r1, -16138; AIX-P8-64-NEXT:    stxvw4x v2, 0, r5139; AIX-P8-64-NEXT:    stwx r3, r5, r4140; AIX-P8-64-NEXT:    lxvw4x v2, 0, r5141; AIX-P8-64-NEXT:    blr142;143; AIX-P8-32-LABEL: testWord:144; AIX-P8-32:       # %bb.0: # %entry145; AIX-P8-32-NEXT:    rlwinm r3, r6, 2, 28, 29146; AIX-P8-32-NEXT:    addi r5, r1, -16147; AIX-P8-32-NEXT:    stxvw4x v2, 0, r5148; AIX-P8-32-NEXT:    stwx r4, r5, r3149; AIX-P8-32-NEXT:    lxvw4x v2, 0, r5150; AIX-P8-32-NEXT:    blr151entry:152  %conv = trunc i64 %b to i32153  %vecins = insertelement <4 x i32> %a, i32 %conv, i64 %idx154  ret <4 x i32> %vecins155}156 157; Word immediate158 159define <4 x i32> @testWordImm(<4 x i32> %a, i64 %b) {160; CHECK-LABEL: testWordImm:161; CHECK:       # %bb.0: # %entry162; CHECK-NEXT:    vinsw v2, r5, 8163; CHECK-NEXT:    vinsw v2, r5, 0164; CHECK-NEXT:    blr165;166; CHECK-BE-LABEL: testWordImm:167; CHECK-BE:       # %bb.0: # %entry168; CHECK-BE-NEXT:    vinsw v2, r5, 4169; CHECK-BE-NEXT:    vinsw v2, r5, 12170; CHECK-BE-NEXT:    blr171;172; CHECK-P9-LABEL: testWordImm:173; CHECK-P9:       # %bb.0: # %entry174; CHECK-P9-NEXT:    mtfprwz f0, r5175; CHECK-P9-NEXT:    xxinsertw v2, vs0, 4176; CHECK-P9-NEXT:    xxinsertw v2, vs0, 12177; CHECK-P9-NEXT:    blr178;179; AIX-P8-64-LABEL: testWordImm:180; AIX-P8-64:       # %bb.0: # %entry181; AIX-P8-64-NEXT:    ld r4, L..C0(r2) # %const.0182; AIX-P8-64-NEXT:    mtvsrwz v4, r3183; AIX-P8-64-NEXT:    ld r3, L..C1(r2) # %const.1184; AIX-P8-64-NEXT:    lxvw4x v3, 0, r4185; AIX-P8-64-NEXT:    vperm v2, v2, v4, v3186; AIX-P8-64-NEXT:    lxvw4x v3, 0, r3187; AIX-P8-64-NEXT:    vperm v2, v2, v4, v3188; AIX-P8-64-NEXT:    blr189;190; AIX-P8-32-LABEL: testWordImm:191; AIX-P8-32:       # %bb.0: # %entry192; AIX-P8-32-NEXT:    lwz r3, L..C0(r2) # %const.0193; AIX-P8-32-NEXT:    stw r4, -16(r1)194; AIX-P8-32-NEXT:    lxvw4x v3, 0, r3195; AIX-P8-32-NEXT:    addi r3, r1, -16196; AIX-P8-32-NEXT:    lxvw4x v4, 0, r3197; AIX-P8-32-NEXT:    lwz r3, L..C1(r2) # %const.1198; AIX-P8-32-NEXT:    vperm v2, v2, v4, v3199; AIX-P8-32-NEXT:    lxvw4x v3, 0, r3200; AIX-P8-32-NEXT:    vperm v2, v2, v4, v3201; AIX-P8-32-NEXT:    blr202entry:203  %conv = trunc i64 %b to i32204  %vecins = insertelement <4 x i32> %a, i32 %conv, i32 1205  %vecins2 = insertelement <4 x i32> %vecins, i32 %conv, i32 3206  ret <4 x i32> %vecins2207}208 209; Doubleword indexed210 211define <2 x i64> @testDoubleword(<2 x i64> %a, i64 %b, i64 %idx) {212; CHECK-LABEL: testDoubleword:213; CHECK:       # %bb.0: # %entry214; CHECK-NEXT:    rlwinm r3, r6, 3, 0, 28215; CHECK-NEXT:    vinsdrx v2, r3, r5216; CHECK-NEXT:    blr217;218; CHECK-BE-LABEL: testDoubleword:219; CHECK-BE:       # %bb.0: # %entry220; CHECK-BE-NEXT:    rlwinm r3, r6, 3, 0, 28221; CHECK-BE-NEXT:    vinsdlx v2, r3, r5222; CHECK-BE-NEXT:    blr223;224; CHECK-P9-LABEL: testDoubleword:225; CHECK-P9:       # %bb.0: # %entry226; CHECK-P9-NEXT:    addi r4, r1, -16227; CHECK-P9-NEXT:    rlwinm r3, r6, 3, 28, 28228; CHECK-P9-NEXT:    stxv v2, -16(r1)229; CHECK-P9-NEXT:    stdx r5, r4, r3230; CHECK-P9-NEXT:    lxv v2, -16(r1)231; CHECK-P9-NEXT:    blr232;233; AIX-P8-64-LABEL: testDoubleword:234; AIX-P8-64:       # %bb.0: # %entry235; AIX-P8-64-NEXT:    rlwinm r4, r4, 3, 28, 28236; AIX-P8-64-NEXT:    addi r5, r1, -16237; AIX-P8-64-NEXT:    stxvd2x v2, 0, r5238; AIX-P8-64-NEXT:    stdx r3, r5, r4239; AIX-P8-64-NEXT:    lxvd2x v2, 0, r5240; AIX-P8-64-NEXT:    blr241;242; AIX-P8-32-LABEL: testDoubleword:243; AIX-P8-32:       # %bb.0: # %entry244; AIX-P8-32-NEXT:    add r6, r6, r6245; AIX-P8-32-NEXT:    addi r5, r1, -16246; AIX-P8-32-NEXT:    rlwinm r7, r6, 2, 28, 29247; AIX-P8-32-NEXT:    stxvd2x v2, 0, r5248; AIX-P8-32-NEXT:    stwx r3, r5, r7249; AIX-P8-32-NEXT:    addi r3, r6, 1250; AIX-P8-32-NEXT:    rlwinm r3, r3, 2, 28, 29251; AIX-P8-32-NEXT:    stwx r4, r5, r3252; AIX-P8-32-NEXT:    lxvd2x v2, 0, r5253; AIX-P8-32-NEXT:    blr254entry:255  %vecins = insertelement <2 x i64> %a, i64 %b, i64 %idx256  ret <2 x i64> %vecins257}258 259; Doubleword immediate260 261define <2 x i64> @testDoublewordImm(<2 x i64> %a, i64 %b) {262; CHECK-LABEL: testDoublewordImm:263; CHECK:       # %bb.0: # %entry264; CHECK-NEXT:    vinsd v2, r5, 0265; CHECK-NEXT:    blr266;267; CHECK-BE-LABEL: testDoublewordImm:268; CHECK-BE:       # %bb.0: # %entry269; CHECK-BE-NEXT:    vinsd v2, r5, 8270; CHECK-BE-NEXT:    blr271;272; CHECK-P9-LABEL: testDoublewordImm:273; CHECK-P9:       # %bb.0: # %entry274; CHECK-P9-NEXT:    mtfprd f0, r5275; CHECK-P9-NEXT:    xxmrghd v2, v2, vs0276; CHECK-P9-NEXT:    blr277;278; AIX-P8-64-LABEL: testDoublewordImm:279; AIX-P8-64:       # %bb.0: # %entry280; AIX-P8-64-NEXT:    mtfprd f0, r3281; AIX-P8-64-NEXT:    xxmrghd v2, v2, vs0282; AIX-P8-64-NEXT:    blr283;284; AIX-P8-32-LABEL: testDoublewordImm:285; AIX-P8-32:       # %bb.0: # %entry286; AIX-P8-32-NEXT:    stw r3, -16(r1)287; AIX-P8-32-NEXT:    lwz r3, L..C2(r2) # %const.0288; AIX-P8-32-NEXT:    stw r4, -32(r1)289; AIX-P8-32-NEXT:    lxvw4x v3, 0, r3290; AIX-P8-32-NEXT:    addi r3, r1, -16291; AIX-P8-32-NEXT:    lxvw4x v4, 0, r3292; AIX-P8-32-NEXT:    lwz r3, L..C3(r2) # %const.1293; AIX-P8-32-NEXT:    vperm v2, v2, v4, v3294; AIX-P8-32-NEXT:    lxvw4x v3, 0, r3295; AIX-P8-32-NEXT:    addi r3, r1, -32296; AIX-P8-32-NEXT:    lxvw4x v4, 0, r3297; AIX-P8-32-NEXT:    vperm v2, v2, v4, v3298; AIX-P8-32-NEXT:    blr299entry:300  %vecins = insertelement <2 x i64> %a, i64 %b, i32 1301  ret <2 x i64> %vecins302}303 304define <2 x i64> @testDoublewordImm2(<2 x i64> %a, i64 %b) {305; CHECK-LABEL: testDoublewordImm2:306; CHECK:       # %bb.0: # %entry307; CHECK-NEXT:    vinsd v2, r5, 8308; CHECK-NEXT:    blr309;310; CHECK-BE-LABEL: testDoublewordImm2:311; CHECK-BE:       # %bb.0: # %entry312; CHECK-BE-NEXT:    vinsd v2, r5, 0313; CHECK-BE-NEXT:    blr314;315; CHECK-P9-LABEL: testDoublewordImm2:316; CHECK-P9:       # %bb.0: # %entry317; CHECK-P9-NEXT:    mtfprd f0, r5318; CHECK-P9-NEXT:    xxpermdi v2, vs0, v2, 1319; CHECK-P9-NEXT:    blr320;321; AIX-P8-64-LABEL: testDoublewordImm2:322; AIX-P8-64:       # %bb.0: # %entry323; AIX-P8-64-NEXT:    mtfprd f0, r3324; AIX-P8-64-NEXT:    xxpermdi v2, vs0, v2, 1325; AIX-P8-64-NEXT:    blr326;327; AIX-P8-32-LABEL: testDoublewordImm2:328; AIX-P8-32:       # %bb.0: # %entry329; AIX-P8-32-NEXT:    stw r3, -16(r1)330; AIX-P8-32-NEXT:    lwz r3, L..C4(r2) # %const.0331; AIX-P8-32-NEXT:    stw r4, -32(r1)332; AIX-P8-32-NEXT:    lxvw4x v3, 0, r3333; AIX-P8-32-NEXT:    addi r3, r1, -16334; AIX-P8-32-NEXT:    lxvw4x v4, 0, r3335; AIX-P8-32-NEXT:    lwz r3, L..C5(r2) # %const.1336; AIX-P8-32-NEXT:    vperm v2, v4, v2, v3337; AIX-P8-32-NEXT:    lxvw4x v3, 0, r3338; AIX-P8-32-NEXT:    addi r3, r1, -32339; AIX-P8-32-NEXT:    lxvw4x v4, 0, r3340; AIX-P8-32-NEXT:    vperm v2, v2, v4, v3341; AIX-P8-32-NEXT:    blr342entry:343  %vecins = insertelement <2 x i64> %a, i64 %b, i32 0344  ret <2 x i64> %vecins345}346 347; Float indexed348 349define <4 x float> @testFloat1(<4 x float> %a, float %b, i32 zeroext %idx1) {350; CHECK-LABEL: testFloat1:351; CHECK:       # %bb.0: # %entry352; CHECK-NEXT:    xscvdpspn v3, f1353; CHECK-NEXT:    slwi r3, r6, 2354; CHECK-NEXT:    vinswvrx v2, r3, v3355; CHECK-NEXT:    blr356;357; CHECK-BE-LABEL: testFloat1:358; CHECK-BE:       # %bb.0: # %entry359; CHECK-BE-NEXT:    xscvdpspn v3, f1360; CHECK-BE-NEXT:    slwi r3, r6, 2361; CHECK-BE-NEXT:    vinswvlx v2, r3, v3362; CHECK-BE-NEXT:    blr363;364; CHECK-P9-LABEL: testFloat1:365; CHECK-P9:       # %bb.0: # %entry366; CHECK-P9-NEXT:    addi r4, r1, -16367; CHECK-P9-NEXT:    rlwinm r3, r6, 2, 28, 29368; CHECK-P9-NEXT:    stxv v2, -16(r1)369; CHECK-P9-NEXT:    stfsx f1, r4, r3370; CHECK-P9-NEXT:    lxv v2, -16(r1)371; CHECK-P9-NEXT:    blr372;373; AIX-P8-LABEL: testFloat1:374; AIX-P8:       # %bb.0: # %entry375; AIX-P8-NEXT:    rlwinm r3, r4, 2, 28, 29376; AIX-P8-NEXT:    addi r4, r1, -16377; AIX-P8-NEXT:    stxvw4x v2, 0, r4378; AIX-P8-NEXT:    stfsx f1, r4, r3379; AIX-P8-NEXT:    lxvw4x v2, 0, r4380; AIX-P8-NEXT:    blr381entry:382  %vecins = insertelement <4 x float> %a, float %b, i32 %idx1383  ret <4 x float> %vecins384}385 386define <4 x float> @testFloat2(<4 x float> %a, ptr %b, i32 zeroext %idx1, i32 zeroext %idx2) {387; CHECK-LABEL: testFloat2:388; CHECK:       # %bb.0: # %entry389; CHECK-NEXT:    lwz r3, 0(r5)390; CHECK-NEXT:    slwi r4, r6, 2391; CHECK-NEXT:    vinswrx v2, r4, r3392; CHECK-NEXT:    lwz r3, 1(r5)393; CHECK-NEXT:    slwi r4, r7, 2394; CHECK-NEXT:    vinswrx v2, r4, r3395; CHECK-NEXT:    blr396;397; CHECK-BE-LABEL: testFloat2:398; CHECK-BE:       # %bb.0: # %entry399; CHECK-BE-NEXT:    lwz r3, 0(r5)400; CHECK-BE-NEXT:    slwi r4, r6, 2401; CHECK-BE-NEXT:    vinswlx v2, r4, r3402; CHECK-BE-NEXT:    lwz r3, 1(r5)403; CHECK-BE-NEXT:    slwi r4, r7, 2404; CHECK-BE-NEXT:    vinswlx v2, r4, r3405; CHECK-BE-NEXT:    blr406;407; CHECK-P9-LABEL: testFloat2:408; CHECK-P9:       # %bb.0: # %entry409; CHECK-P9-NEXT:    rlwinm r4, r6, 2, 28, 29410; CHECK-P9-NEXT:    lwz r6, 0(r5)411; CHECK-P9-NEXT:    rlwinm r3, r7, 2, 28, 29412; CHECK-P9-NEXT:    addi r7, r1, -16413; CHECK-P9-NEXT:    stxv v2, -16(r1)414; CHECK-P9-NEXT:    stwx r6, r7, r4415; CHECK-P9-NEXT:    lxv vs0, -16(r1)416; CHECK-P9-NEXT:    lwz r4, 1(r5)417; CHECK-P9-NEXT:    addi r5, r1, -32418; CHECK-P9-NEXT:    stxv vs0, -32(r1)419; CHECK-P9-NEXT:    stwx r4, r5, r3420; CHECK-P9-NEXT:    lxv v2, -32(r1)421; CHECK-P9-NEXT:    blr422;423; AIX-P8-LABEL: testFloat2:424; AIX-P8:       # %bb.0: # %entry425; AIX-P8-NEXT:    lwz r6, 0(r3)426; AIX-P8-NEXT:    lwz r3, 1(r3)427; AIX-P8-NEXT:    addi r7, r1, -16428; AIX-P8-NEXT:    stxvw4x v2, 0, r7429; AIX-P8-NEXT:    rlwinm r5, r5, 2, 28, 29430; AIX-P8-NEXT:    rlwinm r4, r4, 2, 28, 29431; AIX-P8-NEXT:    stwx r6, r7, r4432; AIX-P8-NEXT:    stwx r3, r7, r5433; AIX-P8-NEXT:    lxvw4x v2, 0, r7434; AIX-P8-NEXT:    blr435entry:436  %add.ptr1 = getelementptr inbounds i8, ptr %b, i64 1437  %0 = load float, ptr %b, align 4438  %vecins = insertelement <4 x float> %a, float %0, i32 %idx1439  %1 = load float, ptr %add.ptr1, align 4440  %vecins2 = insertelement <4 x float> %vecins, float %1, i32 %idx2441  ret <4 x float> %vecins2442}443 444define <4 x float> @testFloat3(<4 x float> %a, ptr %b, i32 zeroext %idx1, i32 zeroext %idx2) {445; CHECK-LABEL: testFloat3:446; CHECK:       # %bb.0: # %entry447; CHECK-NEXT:    plwz r3, 65536(r5), 0448; CHECK-NEXT:    slwi r4, r6, 2449; CHECK-NEXT:    vinswrx v2, r4, r3450; CHECK-NEXT:    li r3, 1451; CHECK-NEXT:    slwi r4, r7, 2452; CHECK-NEXT:    rldic r3, r3, 36, 27453; CHECK-NEXT:    lwzx r3, r5, r3454; CHECK-NEXT:    vinswrx v2, r4, r3455; CHECK-NEXT:    blr456;457; CHECK-BE-LABEL: testFloat3:458; CHECK-BE:       # %bb.0: # %entry459; CHECK-BE-NEXT:    plwz r3, 65536(r5), 0460; CHECK-BE-NEXT:    slwi r4, r6, 2461; CHECK-BE-NEXT:    vinswlx v2, r4, r3462; CHECK-BE-NEXT:    li r3, 1463; CHECK-BE-NEXT:    slwi r4, r7, 2464; CHECK-BE-NEXT:    rldic r3, r3, 36, 27465; CHECK-BE-NEXT:    lwzx r3, r5, r3466; CHECK-BE-NEXT:    vinswlx v2, r4, r3467; CHECK-BE-NEXT:    blr468;469; CHECK-P9-LABEL: testFloat3:470; CHECK-P9:       # %bb.0: # %entry471; CHECK-P9-NEXT:    rlwinm r4, r6, 2, 28, 29472; CHECK-P9-NEXT:    lis r6, 1473; CHECK-P9-NEXT:    rlwinm r3, r7, 2, 28, 29474; CHECK-P9-NEXT:    addi r7, r1, -16475; CHECK-P9-NEXT:    lwzx r6, r5, r6476; CHECK-P9-NEXT:    stxv v2, -16(r1)477; CHECK-P9-NEXT:    stwx r6, r7, r4478; CHECK-P9-NEXT:    li r4, 1479; CHECK-P9-NEXT:    lxv vs0, -16(r1)480; CHECK-P9-NEXT:    rldic r4, r4, 36, 27481; CHECK-P9-NEXT:    lwzx r4, r5, r4482; CHECK-P9-NEXT:    addi r5, r1, -32483; CHECK-P9-NEXT:    stxv vs0, -32(r1)484; CHECK-P9-NEXT:    stwx r4, r5, r3485; CHECK-P9-NEXT:    lxv v2, -32(r1)486; CHECK-P9-NEXT:    blr487;488; AIX-P8-64-LABEL: testFloat3:489; AIX-P8-64:       # %bb.0: # %entry490; AIX-P8-64-NEXT:    li r7, 1491; AIX-P8-64-NEXT:    lis r6, 1492; AIX-P8-64-NEXT:    rlwinm r5, r5, 2, 28, 29493; AIX-P8-64-NEXT:    rlwinm r4, r4, 2, 28, 29494; AIX-P8-64-NEXT:    rldic r7, r7, 36, 27495; AIX-P8-64-NEXT:    lwzx r6, r3, r6496; AIX-P8-64-NEXT:    lwzx r3, r3, r7497; AIX-P8-64-NEXT:    addi r7, r1, -16498; AIX-P8-64-NEXT:    stxvw4x v2, 0, r7499; AIX-P8-64-NEXT:    stwx r6, r7, r4500; AIX-P8-64-NEXT:    stwx r3, r7, r5501; AIX-P8-64-NEXT:    lxvw4x v2, 0, r7502; AIX-P8-64-NEXT:    blr503;504; AIX-P8-32-LABEL: testFloat3:505; AIX-P8-32:       # %bb.0: # %entry506; AIX-P8-32-NEXT:    lis r6, 1507; AIX-P8-32-NEXT:    rlwinm r5, r5, 2, 28, 29508; AIX-P8-32-NEXT:    rlwinm r4, r4, 2, 28, 29509; AIX-P8-32-NEXT:    addi r7, r1, -16510; AIX-P8-32-NEXT:    lwzx r6, r3, r6511; AIX-P8-32-NEXT:    lwz r3, 0(r3)512; AIX-P8-32-NEXT:    stxvw4x v2, 0, r7513; AIX-P8-32-NEXT:    stwx r6, r7, r4514; AIX-P8-32-NEXT:    stwx r3, r7, r5515; AIX-P8-32-NEXT:    lxvw4x v2, 0, r7516; AIX-P8-32-NEXT:    blr517entry:518  %add.ptr = getelementptr inbounds i8, ptr %b, i64 65536519  %add.ptr1 = getelementptr inbounds i8, ptr %b, i64 68719476736520  %0 = load float, ptr %add.ptr, align 4521  %vecins = insertelement <4 x float> %a, float %0, i32 %idx1522  %1 = load float, ptr %add.ptr1, align 4523  %vecins2 = insertelement <4 x float> %vecins, float %1, i32 %idx2524  ret <4 x float> %vecins2525}526 527; Float immediate528 529define <4 x float> @testFloatImm1(<4 x float> %a, float %b) {530; CHECK-LABEL: testFloatImm1:531; CHECK:       # %bb.0: # %entry532; CHECK-NEXT:    xscvdpspn vs0, f1533; CHECK-NEXT:    xxinsertw v2, vs0, 12534; CHECK-NEXT:    xxinsertw v2, vs0, 4535; CHECK-NEXT:    blr536;537; CHECK-BE-LABEL: testFloatImm1:538; CHECK-BE:       # %bb.0: # %entry539; CHECK-BE-NEXT:    xscvdpspn vs0, f1540; CHECK-BE-NEXT:    xxinsertw v2, vs0, 0541; CHECK-BE-NEXT:    xxinsertw v2, vs0, 8542; CHECK-BE-NEXT:    blr543;544; CHECK-P9-LABEL: testFloatImm1:545; CHECK-P9:       # %bb.0: # %entry546; CHECK-P9-NEXT:    xscvdpspn vs0, f1547; CHECK-P9-NEXT:    xxinsertw v2, vs0, 0548; CHECK-P9-NEXT:    xxinsertw v2, vs0, 8549; CHECK-P9-NEXT:    blr550;551; AIX-P8-64-LABEL: testFloatImm1:552; AIX-P8-64:       # %bb.0: # %entry553; AIX-P8-64-NEXT:    ld r3, L..C2(r2) # %const.0554; AIX-P8-64-NEXT:    xscvdpspn v4, f1555; AIX-P8-64-NEXT:    lxvw4x v3, 0, r3556; AIX-P8-64-NEXT:    ld r3, L..C3(r2) # %const.1557; AIX-P8-64-NEXT:    vperm v2, v4, v2, v3558; AIX-P8-64-NEXT:    lxvw4x v3, 0, r3559; AIX-P8-64-NEXT:    vperm v2, v2, v4, v3560; AIX-P8-64-NEXT:    blr561;562; AIX-P8-32-LABEL: testFloatImm1:563; AIX-P8-32:       # %bb.0: # %entry564; AIX-P8-32-NEXT:    lwz r3, L..C6(r2) # %const.0565; AIX-P8-32-NEXT:    xscvdpspn v4, f1566; AIX-P8-32-NEXT:    lxvw4x v3, 0, r3567; AIX-P8-32-NEXT:    lwz r3, L..C7(r2) # %const.1568; AIX-P8-32-NEXT:    vperm v2, v4, v2, v3569; AIX-P8-32-NEXT:    lxvw4x v3, 0, r3570; AIX-P8-32-NEXT:    vperm v2, v2, v4, v3571; AIX-P8-32-NEXT:    blr572entry:573  %vecins = insertelement <4 x float> %a, float %b, i32 0574  %vecins1 = insertelement <4 x float> %vecins, float %b, i32 2575  ret <4 x float> %vecins1576}577 578define <4 x float> @testFloatImm2(<4 x float> %a, ptr %b) {579; CHECK-LABEL: testFloatImm2:580; CHECK:       # %bb.0: # %entry581; CHECK-NEXT:    lwz r3, 0(r5)582; CHECK-NEXT:    vinsw v2, r3, 12583; CHECK-NEXT:    lwz r3, 4(r5)584; CHECK-NEXT:    vinsw v2, r3, 4585; CHECK-NEXT:    blr586;587; CHECK-BE-LABEL: testFloatImm2:588; CHECK-BE:       # %bb.0: # %entry589; CHECK-BE-NEXT:    lwz r3, 0(r5)590; CHECK-BE-NEXT:    vinsw v2, r3, 0591; CHECK-BE-NEXT:    lwz r3, 4(r5)592; CHECK-BE-NEXT:    vinsw v2, r3, 8593; CHECK-BE-NEXT:    blr594;595; CHECK-P9-LABEL: testFloatImm2:596; CHECK-P9:       # %bb.0: # %entry597; CHECK-P9-NEXT:    lwz r3, 0(r5)598; CHECK-P9-NEXT:    mtfprwz f0, r3599; CHECK-P9-NEXT:    lwz r3, 4(r5)600; CHECK-P9-NEXT:    xxinsertw v2, vs0, 0601; CHECK-P9-NEXT:    mtfprwz f0, r3602; CHECK-P9-NEXT:    xxinsertw v2, vs0, 8603; CHECK-P9-NEXT:    blr604;605; AIX-P8-64-LABEL: testFloatImm2:606; AIX-P8-64:       # %bb.0: # %entry607; AIX-P8-64-NEXT:    ld r4, L..C4(r2) # %const.0608; AIX-P8-64-NEXT:    lxsiwzx v4, 0, r3609; AIX-P8-64-NEXT:    lxvw4x v3, 0, r4610; AIX-P8-64-NEXT:    li r4, 4611; AIX-P8-64-NEXT:    vperm v2, v4, v2, v3612; AIX-P8-64-NEXT:    lxsiwzx v3, r3, r4613; AIX-P8-64-NEXT:    ld r3, L..C5(r2) # %const.1614; AIX-P8-64-NEXT:    lxvw4x v4, 0, r3615; AIX-P8-64-NEXT:    vperm v2, v2, v3, v4616; AIX-P8-64-NEXT:    blr617;618; AIX-P8-32-LABEL: testFloatImm2:619; AIX-P8-32:       # %bb.0: # %entry620; AIX-P8-32-NEXT:    lwz r4, L..C8(r2) # %const.0621; AIX-P8-32-NEXT:    lxsiwzx v4, 0, r3622; AIX-P8-32-NEXT:    lxvw4x v3, 0, r4623; AIX-P8-32-NEXT:    li r4, 4624; AIX-P8-32-NEXT:    vperm v2, v4, v2, v3625; AIX-P8-32-NEXT:    lxsiwzx v3, r3, r4626; AIX-P8-32-NEXT:    lwz r3, L..C9(r2) # %const.1627; AIX-P8-32-NEXT:    lxvw4x v4, 0, r3628; AIX-P8-32-NEXT:    vperm v2, v2, v3, v4629; AIX-P8-32-NEXT:    blr630entry:631  %add.ptr1 = getelementptr inbounds i32, ptr %b, i64 1632  %0 = load float, ptr %b, align 4633  %vecins = insertelement <4 x float> %a, float %0, i32 0634  %1 = load float, ptr %add.ptr1, align 4635  %vecins2 = insertelement <4 x float> %vecins, float %1, i32 2636  ret <4 x float> %vecins2637}638 639define <4 x float> @testFloatImm3(<4 x float> %a, ptr %b) {640; CHECK-LABEL: testFloatImm3:641; CHECK:       # %bb.0: # %entry642; CHECK-NEXT:    plwz r3, 262144(r5), 0643; CHECK-NEXT:    vinsw v2, r3, 12644; CHECK-NEXT:    li r3, 1645; CHECK-NEXT:    rldic r3, r3, 38, 25646; CHECK-NEXT:    lwzx r3, r5, r3647; CHECK-NEXT:    vinsw v2, r3, 4648; CHECK-NEXT:    blr649;650; CHECK-BE-LABEL: testFloatImm3:651; CHECK-BE:       # %bb.0: # %entry652; CHECK-BE-NEXT:    plwz r3, 262144(r5), 0653; CHECK-BE-NEXT:    vinsw v2, r3, 0654; CHECK-BE-NEXT:    li r3, 1655; CHECK-BE-NEXT:    rldic r3, r3, 38, 25656; CHECK-BE-NEXT:    lwzx r3, r5, r3657; CHECK-BE-NEXT:    vinsw v2, r3, 8658; CHECK-BE-NEXT:    blr659;660; CHECK-P9-LABEL: testFloatImm3:661; CHECK-P9:       # %bb.0: # %entry662; CHECK-P9-NEXT:    lis r3, 4663; CHECK-P9-NEXT:    lwzx r3, r5, r3664; CHECK-P9-NEXT:    mtfprwz f0, r3665; CHECK-P9-NEXT:    li r3, 1666; CHECK-P9-NEXT:    rldic r3, r3, 38, 25667; CHECK-P9-NEXT:    xxinsertw v2, vs0, 0668; CHECK-P9-NEXT:    lwzx r3, r5, r3669; CHECK-P9-NEXT:    mtfprwz f0, r3670; CHECK-P9-NEXT:    xxinsertw v2, vs0, 8671; CHECK-P9-NEXT:    blr672;673; AIX-P8-64-LABEL: testFloatImm3:674; AIX-P8-64:       # %bb.0: # %entry675; AIX-P8-64-NEXT:    lis r4, 4676; AIX-P8-64-NEXT:    lxsiwzx v3, r3, r4677; AIX-P8-64-NEXT:    ld r4, L..C6(r2) # %const.0678; AIX-P8-64-NEXT:    lxvw4x v4, 0, r4679; AIX-P8-64-NEXT:    li r4, 1680; AIX-P8-64-NEXT:    rldic r4, r4, 38, 25681; AIX-P8-64-NEXT:    vperm v2, v3, v2, v4682; AIX-P8-64-NEXT:    lxsiwzx v3, r3, r4683; AIX-P8-64-NEXT:    ld r3, L..C7(r2) # %const.1684; AIX-P8-64-NEXT:    lxvw4x v4, 0, r3685; AIX-P8-64-NEXT:    vperm v2, v2, v3, v4686; AIX-P8-64-NEXT:    blr687;688; AIX-P8-32-LABEL: testFloatImm3:689; AIX-P8-32:       # %bb.0: # %entry690; AIX-P8-32-NEXT:    lis r4, 4691; AIX-P8-32-NEXT:    lxsiwzx v3, r3, r4692; AIX-P8-32-NEXT:    lwz r4, L..C10(r2) # %const.0693; AIX-P8-32-NEXT:    lxvw4x v4, 0, r4694; AIX-P8-32-NEXT:    lwz r4, L..C11(r2) # %const.1695; AIX-P8-32-NEXT:    vperm v2, v3, v2, v4696; AIX-P8-32-NEXT:    lxvw4x v3, 0, r4697; AIX-P8-32-NEXT:    lxsiwzx v4, 0, r3698; AIX-P8-32-NEXT:    vperm v2, v2, v4, v3699; AIX-P8-32-NEXT:    blr700entry:701  %add.ptr = getelementptr inbounds i32, ptr %b, i64 65536702  %add.ptr1 = getelementptr inbounds i32, ptr %b, i64 68719476736703  %0 = load float, ptr %add.ptr, align 4704  %vecins = insertelement <4 x float> %a, float %0, i32 0705  %1 = load float, ptr %add.ptr1, align 4706  %vecins2 = insertelement <4 x float> %vecins, float %1, i32 2707  ret <4 x float> %vecins2708}709 710; Double indexed711 712define <2 x double> @testDouble1(<2 x double> %a, double %b, i32 zeroext %idx1) {713; CHECK-LABEL: testDouble1:714; CHECK:       # %bb.0: # %entry715; CHECK-NEXT:    mffprd r3, f1716; CHECK-NEXT:    rlwinm r4, r6, 3, 0, 28717; CHECK-NEXT:    vinsdrx v2, r4, r3718; CHECK-NEXT:    blr719;720; CHECK-BE-LABEL: testDouble1:721; CHECK-BE:       # %bb.0: # %entry722; CHECK-BE-NEXT:    mffprd r3, f1723; CHECK-BE-NEXT:    rlwinm r4, r6, 3, 0, 28724; CHECK-BE-NEXT:    vinsdlx v2, r4, r3725; CHECK-BE-NEXT:    blr726;727; CHECK-P9-LABEL: testDouble1:728; CHECK-P9:       # %bb.0: # %entry729; CHECK-P9-NEXT:    addi r4, r1, -16730; CHECK-P9-NEXT:    rlwinm r3, r6, 3, 28, 28731; CHECK-P9-NEXT:    stxv v2, -16(r1)732; CHECK-P9-NEXT:    stfdx f1, r4, r3733; CHECK-P9-NEXT:    lxv v2, -16(r1)734; CHECK-P9-NEXT:    blr735;736; AIX-P8-64-LABEL: testDouble1:737; AIX-P8-64:       # %bb.0: # %entry738; AIX-P8-64-NEXT:    rlwinm r3, r4, 3, 28, 28739; AIX-P8-64-NEXT:    addi r4, r1, -16740; AIX-P8-64-NEXT:    stxvd2x v2, 0, r4741; AIX-P8-64-NEXT:    stfdx f1, r4, r3742; AIX-P8-64-NEXT:    lxvd2x v2, 0, r4743; AIX-P8-64-NEXT:    blr744;745; AIX-P8-32-LABEL: testDouble1:746; AIX-P8-32:       # %bb.0: # %entry747; AIX-P8-32-NEXT:    rlwinm r3, r5, 3, 28, 28748; AIX-P8-32-NEXT:    addi r4, r1, -16749; AIX-P8-32-NEXT:    stxvd2x v2, 0, r4750; AIX-P8-32-NEXT:    stfdx f1, r4, r3751; AIX-P8-32-NEXT:    lxvd2x v2, 0, r4752; AIX-P8-32-NEXT:    blr753entry:754  %vecins = insertelement <2 x double> %a, double %b, i32 %idx1755  ret <2 x double> %vecins756}757 758define <2 x double> @testDouble2(<2 x double> %a, ptr %b, i32 zeroext %idx1, i32 zeroext %idx2) {759; CHECK-LABEL: testDouble2:760; CHECK:       # %bb.0: # %entry761; CHECK-NEXT:    ld r3, 0(r5)762; CHECK-NEXT:    rlwinm r4, r6, 3, 0, 28763; CHECK-NEXT:    vinsdrx v2, r4, r3764; CHECK-NEXT:    pld r3, 1(r5), 0765; CHECK-NEXT:    rlwinm r4, r7, 3, 0, 28766; CHECK-NEXT:    vinsdrx v2, r4, r3767; CHECK-NEXT:    blr768;769; CHECK-BE-LABEL: testDouble2:770; CHECK-BE:       # %bb.0: # %entry771; CHECK-BE-NEXT:    ld r3, 0(r5)772; CHECK-BE-NEXT:    rlwinm r4, r6, 3, 0, 28773; CHECK-BE-NEXT:    vinsdlx v2, r4, r3774; CHECK-BE-NEXT:    pld r3, 1(r5), 0775; CHECK-BE-NEXT:    rlwinm r4, r7, 3, 0, 28776; CHECK-BE-NEXT:    vinsdlx v2, r4, r3777; CHECK-BE-NEXT:    blr778;779; CHECK-P9-LABEL: testDouble2:780; CHECK-P9:       # %bb.0: # %entry781; CHECK-P9-NEXT:    rlwinm r4, r6, 3, 28, 28782; CHECK-P9-NEXT:    ld r6, 0(r5)783; CHECK-P9-NEXT:    rlwinm r3, r7, 3, 28, 28784; CHECK-P9-NEXT:    addi r7, r1, -32785; CHECK-P9-NEXT:    stxv v2, -32(r1)786; CHECK-P9-NEXT:    stdx r6, r7, r4787; CHECK-P9-NEXT:    li r4, 1788; CHECK-P9-NEXT:    lxv vs0, -32(r1)789; CHECK-P9-NEXT:    ldx r4, r5, r4790; CHECK-P9-NEXT:    addi r5, r1, -16791; CHECK-P9-NEXT:    stxv vs0, -16(r1)792; CHECK-P9-NEXT:    stdx r4, r5, r3793; CHECK-P9-NEXT:    lxv v2, -16(r1)794; CHECK-P9-NEXT:    blr795;796; AIX-P8-64-LABEL: testDouble2:797; AIX-P8-64:       # %bb.0: # %entry798; AIX-P8-64-NEXT:    ld r6, 0(r3)799; AIX-P8-64-NEXT:    rlwinm r4, r4, 3, 28, 28800; AIX-P8-64-NEXT:    addi r7, r1, -32801; AIX-P8-64-NEXT:    stxvd2x v2, 0, r7802; AIX-P8-64-NEXT:    rlwinm r5, r5, 3, 28, 28803; AIX-P8-64-NEXT:    stdx r6, r7, r4804; AIX-P8-64-NEXT:    li r4, 1805; AIX-P8-64-NEXT:    lxvd2x vs0, 0, r7806; AIX-P8-64-NEXT:    ldx r3, r3, r4807; AIX-P8-64-NEXT:    addi r4, r1, -16808; AIX-P8-64-NEXT:    stxvd2x vs0, 0, r4809; AIX-P8-64-NEXT:    stdx r3, r4, r5810; AIX-P8-64-NEXT:    lxvd2x v2, 0, r4811; AIX-P8-64-NEXT:    blr812;813; AIX-P8-32-LABEL: testDouble2:814; AIX-P8-32:       # %bb.0: # %entry815; AIX-P8-32-NEXT:    lfd f0, 0(r3)816; AIX-P8-32-NEXT:    rlwinm r4, r4, 3, 28, 28817; AIX-P8-32-NEXT:    addi r6, r1, -32818; AIX-P8-32-NEXT:    rlwinm r5, r5, 3, 28, 28819; AIX-P8-32-NEXT:    stxvd2x v2, 0, r6820; AIX-P8-32-NEXT:    stfdx f0, r6, r4821; AIX-P8-32-NEXT:    lxvd2x vs0, 0, r6822; AIX-P8-32-NEXT:    lfd f1, 1(r3)823; AIX-P8-32-NEXT:    addi r3, r1, -16824; AIX-P8-32-NEXT:    stxvd2x vs0, 0, r3825; AIX-P8-32-NEXT:    stfdx f1, r3, r5826; AIX-P8-32-NEXT:    lxvd2x v2, 0, r3827; AIX-P8-32-NEXT:    blr828entry:829  %add.ptr1 = getelementptr inbounds i8, ptr %b, i64 1830  %0 = load double, ptr %b, align 8831  %vecins = insertelement <2 x double> %a, double %0, i32 %idx1832  %1 = load double, ptr %add.ptr1, align 8833  %vecins2 = insertelement <2 x double> %vecins, double %1, i32 %idx2834  ret <2 x double> %vecins2835}836 837define <2 x double> @testDouble3(<2 x double> %a, ptr %b, i32 zeroext %idx1, i32 zeroext %idx2) {838; CHECK-LABEL: testDouble3:839; CHECK:       # %bb.0: # %entry840; CHECK-NEXT:    pld r3, 65536(r5), 0841; CHECK-NEXT:    rlwinm r4, r6, 3, 0, 28842; CHECK-NEXT:    vinsdrx v2, r4, r3843; CHECK-NEXT:    li r3, 1844; CHECK-NEXT:    rlwinm r4, r7, 3, 0, 28845; CHECK-NEXT:    rldic r3, r3, 36, 27846; CHECK-NEXT:    ldx r3, r5, r3847; CHECK-NEXT:    vinsdrx v2, r4, r3848; CHECK-NEXT:    blr849;850; CHECK-BE-LABEL: testDouble3:851; CHECK-BE:       # %bb.0: # %entry852; CHECK-BE-NEXT:    pld r3, 65536(r5), 0853; CHECK-BE-NEXT:    rlwinm r4, r6, 3, 0, 28854; CHECK-BE-NEXT:    vinsdlx v2, r4, r3855; CHECK-BE-NEXT:    li r3, 1856; CHECK-BE-NEXT:    rlwinm r4, r7, 3, 0, 28857; CHECK-BE-NEXT:    rldic r3, r3, 36, 27858; CHECK-BE-NEXT:    ldx r3, r5, r3859; CHECK-BE-NEXT:    vinsdlx v2, r4, r3860; CHECK-BE-NEXT:    blr861;862; CHECK-P9-LABEL: testDouble3:863; CHECK-P9:       # %bb.0: # %entry864; CHECK-P9-NEXT:    rlwinm r4, r6, 3, 28, 28865; CHECK-P9-NEXT:    lis r6, 1866; CHECK-P9-NEXT:    rlwinm r3, r7, 3, 28, 28867; CHECK-P9-NEXT:    addi r7, r1, -32868; CHECK-P9-NEXT:    ldx r6, r5, r6869; CHECK-P9-NEXT:    stxv v2, -32(r1)870; CHECK-P9-NEXT:    stdx r6, r7, r4871; CHECK-P9-NEXT:    li r4, 1872; CHECK-P9-NEXT:    lxv vs0, -32(r1)873; CHECK-P9-NEXT:    rldic r4, r4, 36, 27874; CHECK-P9-NEXT:    ldx r4, r5, r4875; CHECK-P9-NEXT:    addi r5, r1, -16876; CHECK-P9-NEXT:    stxv vs0, -16(r1)877; CHECK-P9-NEXT:    stdx r4, r5, r3878; CHECK-P9-NEXT:    lxv v2, -16(r1)879; CHECK-P9-NEXT:    blr880;881; AIX-P8-64-LABEL: testDouble3:882; AIX-P8-64:       # %bb.0: # %entry883; AIX-P8-64-NEXT:    lis r6, 1884; AIX-P8-64-NEXT:    rlwinm r4, r4, 3, 28, 28885; AIX-P8-64-NEXT:    addi r7, r1, -32886; AIX-P8-64-NEXT:    rlwinm r5, r5, 3, 28, 28887; AIX-P8-64-NEXT:    ldx r6, r3, r6888; AIX-P8-64-NEXT:    stxvd2x v2, 0, r7889; AIX-P8-64-NEXT:    stdx r6, r7, r4890; AIX-P8-64-NEXT:    li r4, 1891; AIX-P8-64-NEXT:    lxvd2x vs0, 0, r7892; AIX-P8-64-NEXT:    rldic r4, r4, 36, 27893; AIX-P8-64-NEXT:    ldx r3, r3, r4894; AIX-P8-64-NEXT:    addi r4, r1, -16895; AIX-P8-64-NEXT:    stxvd2x vs0, 0, r4896; AIX-P8-64-NEXT:    stdx r3, r4, r5897; AIX-P8-64-NEXT:    lxvd2x v2, 0, r4898; AIX-P8-64-NEXT:    blr899;900; AIX-P8-32-LABEL: testDouble3:901; AIX-P8-32:       # %bb.0: # %entry902; AIX-P8-32-NEXT:    lis r6, 1903; AIX-P8-32-NEXT:    rlwinm r4, r4, 3, 28, 28904; AIX-P8-32-NEXT:    rlwinm r5, r5, 3, 28, 28905; AIX-P8-32-NEXT:    lfdx f0, r3, r6906; AIX-P8-32-NEXT:    addi r6, r1, -32907; AIX-P8-32-NEXT:    stxvd2x v2, 0, r6908; AIX-P8-32-NEXT:    stfdx f0, r6, r4909; AIX-P8-32-NEXT:    lxvd2x vs0, 0, r6910; AIX-P8-32-NEXT:    lfd f1, 0(r3)911; AIX-P8-32-NEXT:    addi r3, r1, -16912; AIX-P8-32-NEXT:    stxvd2x vs0, 0, r3913; AIX-P8-32-NEXT:    stfdx f1, r3, r5914; AIX-P8-32-NEXT:    lxvd2x v2, 0, r3915; AIX-P8-32-NEXT:    blr916entry:917  %add.ptr = getelementptr inbounds i8, ptr %b, i64 65536918  %add.ptr1 = getelementptr inbounds i8, ptr %b, i64 68719476736919  %0 = load double, ptr %add.ptr, align 8920  %vecins = insertelement <2 x double> %a, double %0, i32 %idx1921  %1 = load double, ptr %add.ptr1, align 8922  %vecins2 = insertelement <2 x double> %vecins, double %1, i32 %idx2923  ret <2 x double> %vecins2924}925 926; Double immediate927 928define <2 x double> @testDoubleImm1(<2 x double> %a, double %b) {929; CHECK-LABEL: testDoubleImm1:930; CHECK:       # %bb.0: # %entry931; CHECK-NEXT:    xxmrghd v2, v2, vs1932; CHECK-NEXT:    blr933;934; CHECK-BE-LABEL: testDoubleImm1:935; CHECK-BE:       # %bb.0: # %entry936; CHECK-BE-NEXT:    xxpermdi v2, vs1, v2, 1937; CHECK-BE-NEXT:    blr938;939; CHECK-P9-LABEL: testDoubleImm1:940; CHECK-P9:       # %bb.0: # %entry941; CHECK-P9-NEXT:    xxpermdi v2, vs1, v2, 1942; CHECK-P9-NEXT:    blr943;944; AIX-P8-LABEL: testDoubleImm1:945; AIX-P8:       # %bb.0: # %entry946; AIX-P8-NEXT:    xxpermdi v2, vs1, v2, 1947; AIX-P8-NEXT:    blr948entry:949  %vecins = insertelement <2 x double> %a, double %b, i32 0950  ret <2 x double> %vecins951}952 953define <2 x double> @testDoubleImm2(<2 x double> %a, ptr %b) {954; CHECK-LABEL: testDoubleImm2:955; CHECK:       # %bb.0: # %entry956; CHECK-NEXT:    lfd f0, 0(r5)957; CHECK-NEXT:    xxmrghd v2, v2, vs0958; CHECK-NEXT:    blr959;960; CHECK-BE-LABEL: testDoubleImm2:961; CHECK-BE:       # %bb.0: # %entry962; CHECK-BE-NEXT:    lfd f0, 0(r5)963; CHECK-BE-NEXT:    xxpermdi v2, vs0, v2, 1964; CHECK-BE-NEXT:    blr965;966; CHECK-P9-LABEL: testDoubleImm2:967; CHECK-P9:       # %bb.0: # %entry968; CHECK-P9-NEXT:    lfd f0, 0(r5)969; CHECK-P9-NEXT:    xxpermdi v2, vs0, v2, 1970; CHECK-P9-NEXT:    blr971;972; AIX-P8-LABEL: testDoubleImm2:973; AIX-P8:       # %bb.0: # %entry974; AIX-P8-NEXT:    lfd f0, 0(r3)975; AIX-P8-NEXT:    xxpermdi v2, vs0, v2, 1976; AIX-P8-NEXT:    blr977entry:978  %0 = load double, ptr %b, align 8979  %vecins = insertelement <2 x double> %a, double %0, i32 0980  ret <2 x double> %vecins981}982 983define <2 x double> @testDoubleImm3(<2 x double> %a, ptr %b) {984; CHECK-LABEL: testDoubleImm3:985; CHECK:       # %bb.0: # %entry986; CHECK-NEXT:    lfd f0, 4(r5)987; CHECK-NEXT:    xxmrghd v2, v2, vs0988; CHECK-NEXT:    blr989;990; CHECK-BE-LABEL: testDoubleImm3:991; CHECK-BE:       # %bb.0: # %entry992; CHECK-BE-NEXT:    lfd f0, 4(r5)993; CHECK-BE-NEXT:    xxpermdi v2, vs0, v2, 1994; CHECK-BE-NEXT:    blr995;996; CHECK-P9-LABEL: testDoubleImm3:997; CHECK-P9:       # %bb.0: # %entry998; CHECK-P9-NEXT:    lfd f0, 4(r5)999; CHECK-P9-NEXT:    xxpermdi v2, vs0, v2, 11000; CHECK-P9-NEXT:    blr1001;1002; AIX-P8-LABEL: testDoubleImm3:1003; AIX-P8:       # %bb.0: # %entry1004; AIX-P8-NEXT:    lfd f0, 4(r3)1005; AIX-P8-NEXT:    xxpermdi v2, vs0, v2, 11006; AIX-P8-NEXT:    blr1007entry:1008  %add.ptr = getelementptr inbounds i32, ptr %b, i64 11009  %0 = load double, ptr %add.ptr, align 81010  %vecins = insertelement <2 x double> %a, double %0, i32 01011  ret <2 x double> %vecins1012}1013 1014define <2 x double> @testDoubleImm4(<2 x double> %a, ptr %b) {1015; CHECK-LABEL: testDoubleImm4:1016; CHECK:       # %bb.0: # %entry1017; CHECK-NEXT:    plfd f0, 262144(r5), 01018; CHECK-NEXT:    xxmrghd v2, v2, vs01019; CHECK-NEXT:    blr1020;1021; CHECK-BE-LABEL: testDoubleImm4:1022; CHECK-BE:       # %bb.0: # %entry1023; CHECK-BE-NEXT:    plfd f0, 262144(r5), 01024; CHECK-BE-NEXT:    xxpermdi v2, vs0, v2, 11025; CHECK-BE-NEXT:    blr1026;1027; CHECK-P9-LABEL: testDoubleImm4:1028; CHECK-P9:       # %bb.0: # %entry1029; CHECK-P9-NEXT:    lis r3, 41030; CHECK-P9-NEXT:    lfdx f0, r5, r31031; CHECK-P9-NEXT:    xxpermdi v2, vs0, v2, 11032; CHECK-P9-NEXT:    blr1033;1034; AIX-P8-LABEL: testDoubleImm4:1035; AIX-P8:       # %bb.0: # %entry1036; AIX-P8-NEXT:    lis r4, 41037; AIX-P8-NEXT:    lfdx f0, r3, r41038; AIX-P8-NEXT:    xxpermdi v2, vs0, v2, 11039; AIX-P8-NEXT:    blr1040entry:1041  %add.ptr = getelementptr inbounds i32, ptr %b, i64 655361042  %0 = load double, ptr %add.ptr, align 81043  %vecins = insertelement <2 x double> %a, double %0, i32 01044  ret <2 x double> %vecins1045}1046 1047define <2 x double> @testDoubleImm5(<2 x double> %a, ptr %b) {1048; CHECK-LABEL: testDoubleImm5:1049; CHECK:       # %bb.0: # %entry1050; CHECK-NEXT:    li r3, 11051; CHECK-NEXT:    rldic r3, r3, 38, 251052; CHECK-NEXT:    lfdx f0, r5, r31053; CHECK-NEXT:    xxmrghd v2, v2, vs01054; CHECK-NEXT:    blr1055;1056; CHECK-BE-LABEL: testDoubleImm5:1057; CHECK-BE:       # %bb.0: # %entry1058; CHECK-BE-NEXT:    li r3, 11059; CHECK-BE-NEXT:    rldic r3, r3, 38, 251060; CHECK-BE-NEXT:    lfdx f0, r5, r31061; CHECK-BE-NEXT:    xxpermdi v2, vs0, v2, 11062; CHECK-BE-NEXT:    blr1063;1064; CHECK-P9-LABEL: testDoubleImm5:1065; CHECK-P9:       # %bb.0: # %entry1066; CHECK-P9-NEXT:    li r3, 11067; CHECK-P9-NEXT:    rldic r3, r3, 38, 251068; CHECK-P9-NEXT:    lfdx f0, r5, r31069; CHECK-P9-NEXT:    xxpermdi v2, vs0, v2, 11070; CHECK-P9-NEXT:    blr1071;1072; AIX-P8-64-LABEL: testDoubleImm5:1073; AIX-P8-64:       # %bb.0: # %entry1074; AIX-P8-64-NEXT:    li r4, 11075; AIX-P8-64-NEXT:    rldic r4, r4, 38, 251076; AIX-P8-64-NEXT:    lfdx f0, r3, r41077; AIX-P8-64-NEXT:    xxpermdi v2, vs0, v2, 11078; AIX-P8-64-NEXT:    blr1079;1080; AIX-P8-32-LABEL: testDoubleImm5:1081; AIX-P8-32:       # %bb.0: # %entry1082; AIX-P8-32-NEXT:    lfd f0, 0(r3)1083; AIX-P8-32-NEXT:    xxpermdi v2, vs0, v2, 11084; AIX-P8-32-NEXT:    blr1085entry:1086  %add.ptr = getelementptr inbounds i32, ptr %b, i64 687194767361087  %0 = load double, ptr %add.ptr, align 81088  %vecins = insertelement <2 x double> %a, double %0, i32 01089  ret <2 x double> %vecins1090}1091 1092define dso_local <4 x float> @testInsertDoubleToFloat(<4 x float> %a, double %b) local_unnamed_addr #0 {1093; CHECK-LABEL: testInsertDoubleToFloat:1094; CHECK:       # %bb.0: # %entry1095; CHECK-NEXT:    xscvdpsp f0, f11096; CHECK-NEXT:    xxinsertw v2, vs0, 81097; CHECK-NEXT:    blr1098;1099; CHECK-BE-LABEL: testInsertDoubleToFloat:1100; CHECK-BE:       # %bb.0: # %entry1101; CHECK-BE-NEXT:    xscvdpsp f0, f11102; CHECK-BE-NEXT:    xxinsertw v2, vs0, 41103; CHECK-BE-NEXT:    blr1104;1105; CHECK-P9-LABEL: testInsertDoubleToFloat:1106; CHECK-P9:       # %bb.0: # %entry1107; CHECK-P9-NEXT:    xscvdpsp f0, f11108; CHECK-P9-NEXT:    xxinsertw v2, vs0, 41109; CHECK-P9-NEXT:    blr1110;1111; AIX-P8-64-LABEL: testInsertDoubleToFloat:1112; AIX-P8-64:       # %bb.0: # %entry1113; AIX-P8-64-NEXT:    xsrsp f0, f11114; AIX-P8-64-NEXT:    ld r3, L..C8(r2) # %const.01115; AIX-P8-64-NEXT:    lxvw4x v3, 0, r31116; AIX-P8-64-NEXT:    xscvdpspn v4, f01117; AIX-P8-64-NEXT:    vperm v2, v2, v4, v31118; AIX-P8-64-NEXT:    blr1119;1120; AIX-P8-32-LABEL: testInsertDoubleToFloat:1121; AIX-P8-32:       # %bb.0: # %entry1122; AIX-P8-32-NEXT:    xsrsp f0, f11123; AIX-P8-32-NEXT:    lwz r3, L..C12(r2) # %const.01124; AIX-P8-32-NEXT:    lxvw4x v3, 0, r31125; AIX-P8-32-NEXT:    xscvdpspn v4, f01126; AIX-P8-32-NEXT:    vperm v2, v2, v4, v31127; AIX-P8-32-NEXT:    blr1128entry:1129  %conv = fptrunc double %b to float1130  %vecins = insertelement <4 x float> %a, float %conv, i32 11131  ret <4 x float> %vecins1132}1133