brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.3 KiB · 0ef0363 Raw
548 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 -ppc-vsr-nums-as-vr < %s | \4; RUN:   FileCheck %s --check-prefixes=CHECK,CHECK-LE5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \6; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \7; RUN:   FileCheck %s --check-prefixes=CHECK,CHECK-LINUXBE8; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O0 \9; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \10; RUN:   FileCheck %s --check-prefixes=CHECK,CHECK-O011; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff \12; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \13; RUN:   FileCheck %s --check-prefixes=CHECK,CHECK-AIXBE14 15; These test cases aims to test the builtins for the Power10 VSX vector16; instructions introduced in ISA 3.1.17 18declare i32 @llvm.ppc.vsx.xvtlsbb(<16 x i8>, i32)19 20define signext i32 @test_vec_test_lsbb_all_ones(<16 x i8> %vuca) {21; CHECK-LABEL: test_vec_test_lsbb_all_ones:22; CHECK:       # %bb.0: # %entry23; CHECK-NEXT:    xvtlsbb cr0, v224; CHECK-NEXT:    mfocrf r3, 12825; CHECK-NEXT:    srwi r3, r3, 3126; CHECK-NEXT:    extsw r3, r327; CHECK-NEXT:    blr28entry:29  %0 = tail call i32 @llvm.ppc.vsx.xvtlsbb(<16 x i8> %vuca, i32 1)30  ret i32 %031}32 33define signext i32 @test_vec_test_lsbb_all_zeros(<16 x i8> %vuca) {34; CHECK-LABEL: test_vec_test_lsbb_all_zeros:35; CHECK:       # %bb.0: # %entry36; CHECK-NEXT:    xvtlsbb cr0, v237; CHECK-NEXT:    mfocrf r3, 12838; CHECK-NEXT:    rlwinm r3, r3, 3, 31, 3139; CHECK-NEXT:    extsw r3, r340; CHECK-NEXT:    blr41entry:42  %0 = tail call i32 @llvm.ppc.vsx.xvtlsbb(<16 x i8> %vuca, i32 0)43  ret i32 %044}45 46define void @vec_xst_trunc_sc(<1 x i128> %__vec, i64 %__offset, ptr nocapture %__ptr) {47; CHECK-LE-LABEL: vec_xst_trunc_sc:48; CHECK-LE:       # %bb.0: # %entry49; CHECK-LE-NEXT:    stxvrbx v2, r6, r550; CHECK-LE-NEXT:    blr51;52; CHECK-LINUXBE-LABEL: vec_xst_trunc_sc:53; CHECK-LINUXBE:       # %bb.0: # %entry54; CHECK-LINUXBE-NEXT:    vsldoi v2, v2, v2, 955; CHECK-LINUXBE-NEXT:    stxsibx v2, r6, r556; CHECK-LINUXBE-NEXT:    blr57;58; CHECK-O0-LABEL: vec_xst_trunc_sc:59; CHECK-O0:       # %bb.0: # %entry60; CHECK-O0-NEXT:    li r3, 061; CHECK-O0-NEXT:    vextubrx r3, r3, v262; CHECK-O0-NEXT:    # kill: def $r3 killed $r3 killed $x363; CHECK-O0-NEXT:    add r4, r6, r564; CHECK-O0-NEXT:    stb r3, 0(r4)65; CHECK-O0-NEXT:    blr66;67; CHECK-AIXBE-LABEL: vec_xst_trunc_sc:68; CHECK-AIXBE:       # %bb.0: # %entry69; CHECK-AIXBE-NEXT:    vsldoi v2, v2, v2, 970; CHECK-AIXBE-NEXT:    stxsibx v2, r4, r371; CHECK-AIXBE-NEXT:    blr72entry:73  %0 = bitcast <1 x i128> %__vec to <16 x i8>74  %conv = extractelement <16 x i8> %0, i32 075  %add.ptr = getelementptr inbounds i8, ptr %__ptr, i64 %__offset76  store i8 %conv, ptr %add.ptr, align 177  ret void78}79 80define void @vec_xst_trunc_uc(<1 x i128> %__vec, i64 %__offset, ptr nocapture %__ptr) {81; CHECK-LE-LABEL: vec_xst_trunc_uc:82; CHECK-LE:       # %bb.0: # %entry83; CHECK-LE-NEXT:    stxvrbx v2, r6, r584; CHECK-LE-NEXT:    blr85;86; CHECK-LINUXBE-LABEL: vec_xst_trunc_uc:87; CHECK-LINUXBE:       # %bb.0: # %entry88; CHECK-LINUXBE-NEXT:    vsldoi v2, v2, v2, 989; CHECK-LINUXBE-NEXT:    stxsibx v2, r6, r590; CHECK-LINUXBE-NEXT:    blr91;92; CHECK-O0-LABEL: vec_xst_trunc_uc:93; CHECK-O0:       # %bb.0: # %entry94; CHECK-O0-NEXT:    li r3, 095; CHECK-O0-NEXT:    vextubrx r3, r3, v296; CHECK-O0-NEXT:    # kill: def $r3 killed $r3 killed $x397; CHECK-O0-NEXT:    add r4, r6, r598; CHECK-O0-NEXT:    stb r3, 0(r4)99; CHECK-O0-NEXT:    blr100;101; CHECK-AIXBE-LABEL: vec_xst_trunc_uc:102; CHECK-AIXBE:       # %bb.0: # %entry103; CHECK-AIXBE-NEXT:    vsldoi v2, v2, v2, 9104; CHECK-AIXBE-NEXT:    stxsibx v2, r4, r3105; CHECK-AIXBE-NEXT:    blr106entry:107  %0 = bitcast <1 x i128> %__vec to <16 x i8>108  %conv = extractelement <16 x i8> %0, i32 0109  %add.ptr = getelementptr inbounds i8, ptr %__ptr, i64 %__offset110  store i8 %conv, ptr %add.ptr, align 1111  ret void112}113 114define void @vec_xst_trunc_ss(<1 x i128> %__vec, i64 %__offset, ptr nocapture %__ptr) {115; CHECK-LE-LABEL: vec_xst_trunc_ss:116; CHECK-LE:       # %bb.0: # %entry117; CHECK-LE-NEXT:    sldi r3, r5, 1118; CHECK-LE-NEXT:    stxvrhx v2, r6, r3119; CHECK-LE-NEXT:    blr120;121; CHECK-LINUXBE-LABEL: vec_xst_trunc_ss:122; CHECK-LINUXBE:       # %bb.0: # %entry123; CHECK-LINUXBE-NEXT:    vsldoi v2, v2, v2, 10124; CHECK-LINUXBE-NEXT:    sldi r3, r5, 1125; CHECK-LINUXBE-NEXT:    stxsihx v2, r6, r3126; CHECK-LINUXBE-NEXT:    blr127;128; CHECK-O0-LABEL: vec_xst_trunc_ss:129; CHECK-O0:       # %bb.0: # %entry130; CHECK-O0-NEXT:    li r3, 0131; CHECK-O0-NEXT:    vextuhrx r3, r3, v2132; CHECK-O0-NEXT:    # kill: def $r3 killed $r3 killed $x3133; CHECK-O0-NEXT:    sldi r4, r5, 1134; CHECK-O0-NEXT:    add r4, r6, r4135; CHECK-O0-NEXT:    sth r3, 0(r4)136; CHECK-O0-NEXT:    blr137;138; CHECK-AIXBE-LABEL: vec_xst_trunc_ss:139; CHECK-AIXBE:       # %bb.0: # %entry140; CHECK-AIXBE-NEXT:    vsldoi v2, v2, v2, 10141; CHECK-AIXBE-NEXT:    sldi r3, r3, 1142; CHECK-AIXBE-NEXT:    stxsihx v2, r4, r3143; CHECK-AIXBE-NEXT:    blr144entry:145  %0 = bitcast <1 x i128> %__vec to <8 x i16>146  %conv = extractelement <8 x i16> %0, i32 0147  %add.ptr = getelementptr inbounds i16, ptr %__ptr, i64 %__offset148  store i16 %conv, ptr %add.ptr, align 2149  ret void150}151 152define void @vec_xst_trunc_us(<1 x i128> %__vec, i64 %__offset, ptr nocapture %__ptr) {153; CHECK-LE-LABEL: vec_xst_trunc_us:154; CHECK-LE:       # %bb.0: # %entry155; CHECK-LE-NEXT:    sldi r3, r5, 1156; CHECK-LE-NEXT:    stxvrhx v2, r6, r3157; CHECK-LE-NEXT:    blr158;159; CHECK-LINUXBE-LABEL: vec_xst_trunc_us:160; CHECK-LINUXBE:       # %bb.0: # %entry161; CHECK-LINUXBE-NEXT:    vsldoi v2, v2, v2, 10162; CHECK-LINUXBE-NEXT:    sldi r3, r5, 1163; CHECK-LINUXBE-NEXT:    stxsihx v2, r6, r3164; CHECK-LINUXBE-NEXT:    blr165;166; CHECK-O0-LABEL: vec_xst_trunc_us:167; CHECK-O0:       # %bb.0: # %entry168; CHECK-O0-NEXT:    li r3, 0169; CHECK-O0-NEXT:    vextuhrx r3, r3, v2170; CHECK-O0-NEXT:    # kill: def $r3 killed $r3 killed $x3171; CHECK-O0-NEXT:    sldi r4, r5, 1172; CHECK-O0-NEXT:    add r4, r6, r4173; CHECK-O0-NEXT:    sth r3, 0(r4)174; CHECK-O0-NEXT:    blr175;176; CHECK-AIXBE-LABEL: vec_xst_trunc_us:177; CHECK-AIXBE:       # %bb.0: # %entry178; CHECK-AIXBE-NEXT:    vsldoi v2, v2, v2, 10179; CHECK-AIXBE-NEXT:    sldi r3, r3, 1180; CHECK-AIXBE-NEXT:    stxsihx v2, r4, r3181; CHECK-AIXBE-NEXT:    blr182entry:183  %0 = bitcast <1 x i128> %__vec to <8 x i16>184  %conv = extractelement <8 x i16> %0, i32 0185  %add.ptr = getelementptr inbounds i16, ptr %__ptr, i64 %__offset186  store i16 %conv, ptr %add.ptr, align 2187  ret void188}189 190define void @vec_xst_trunc_si(<1 x i128> %__vec, i64 %__offset, ptr nocapture %__ptr) {191; CHECK-LE-LABEL: vec_xst_trunc_si:192; CHECK-LE:       # %bb.0: # %entry193; CHECK-LE-NEXT:    sldi r3, r5, 2194; CHECK-LE-NEXT:    stxvrwx v2, r6, r3195; CHECK-LE-NEXT:    blr196;197; CHECK-LINUXBE-LABEL: vec_xst_trunc_si:198; CHECK-LINUXBE:       # %bb.0: # %entry199; CHECK-LINUXBE-NEXT:    xxsldwi vs0, v2, v2, 3200; CHECK-LINUXBE-NEXT:    sldi r3, r5, 2201; CHECK-LINUXBE-NEXT:    stfiwx f0, r6, r3202; CHECK-LINUXBE-NEXT:    blr203;204; CHECK-O0-LABEL: vec_xst_trunc_si:205; CHECK-O0:       # %bb.0: # %entry206; CHECK-O0-NEXT:    li r3, 0207; CHECK-O0-NEXT:    vextuwrx r3, r3, v2208; CHECK-O0-NEXT:    # kill: def $r3 killed $r3 killed $x3209; CHECK-O0-NEXT:    sldi r4, r5, 2210; CHECK-O0-NEXT:    add r4, r6, r4211; CHECK-O0-NEXT:    stw r3, 0(r4)212; CHECK-O0-NEXT:    blr213;214; CHECK-AIXBE-LABEL: vec_xst_trunc_si:215; CHECK-AIXBE:       # %bb.0: # %entry216; CHECK-AIXBE-NEXT:    xxsldwi vs0, v2, v2, 3217; CHECK-AIXBE-NEXT:    sldi r3, r3, 2218; CHECK-AIXBE-NEXT:    stfiwx f0, r4, r3219; CHECK-AIXBE-NEXT:    blr220entry:221  %0 = bitcast <1 x i128> %__vec to <4 x i32>222  %conv = extractelement <4 x i32> %0, i32 0223  %add.ptr = getelementptr inbounds i32, ptr %__ptr, i64 %__offset224  store i32 %conv, ptr %add.ptr, align 4225  ret void226}227 228define void @vec_xst_trunc_ui(<1 x i128> %__vec, i64 %__offset, ptr nocapture %__ptr) {229; CHECK-LE-LABEL: vec_xst_trunc_ui:230; CHECK-LE:       # %bb.0: # %entry231; CHECK-LE-NEXT:    sldi r3, r5, 2232; CHECK-LE-NEXT:    stxvrwx v2, r6, r3233; CHECK-LE-NEXT:    blr234;235; CHECK-LINUXBE-LABEL: vec_xst_trunc_ui:236; CHECK-LINUXBE:       # %bb.0: # %entry237; CHECK-LINUXBE-NEXT:    xxsldwi vs0, v2, v2, 3238; CHECK-LINUXBE-NEXT:    sldi r3, r5, 2239; CHECK-LINUXBE-NEXT:    stfiwx f0, r6, r3240; CHECK-LINUXBE-NEXT:    blr241;242; CHECK-O0-LABEL: vec_xst_trunc_ui:243; CHECK-O0:       # %bb.0: # %entry244; CHECK-O0-NEXT:    li r3, 0245; CHECK-O0-NEXT:    vextuwrx r3, r3, v2246; CHECK-O0-NEXT:    # kill: def $r3 killed $r3 killed $x3247; CHECK-O0-NEXT:    sldi r4, r5, 2248; CHECK-O0-NEXT:    add r4, r6, r4249; CHECK-O0-NEXT:    stw r3, 0(r4)250; CHECK-O0-NEXT:    blr251;252; CHECK-AIXBE-LABEL: vec_xst_trunc_ui:253; CHECK-AIXBE:       # %bb.0: # %entry254; CHECK-AIXBE-NEXT:    xxsldwi vs0, v2, v2, 3255; CHECK-AIXBE-NEXT:    sldi r3, r3, 2256; CHECK-AIXBE-NEXT:    stfiwx f0, r4, r3257; CHECK-AIXBE-NEXT:    blr258entry:259  %0 = bitcast <1 x i128> %__vec to <4 x i32>260  %conv = extractelement <4 x i32> %0, i32 0261  %add.ptr = getelementptr inbounds i32, ptr %__ptr, i64 %__offset262  store i32 %conv, ptr %add.ptr, align 4263  ret void264}265 266define void @vec_xst_trunc_sll(<1 x i128> %__vec, i64 %__offset, ptr nocapture %__ptr)  {267; CHECK-LE-LABEL: vec_xst_trunc_sll:268; CHECK-LE:       # %bb.0: # %entry269; CHECK-LE-NEXT:    sldi r3, r5, 3270; CHECK-LE-NEXT:    stxvrdx v2, r6, r3271; CHECK-LE-NEXT:    blr272;273; CHECK-LINUXBE-LABEL: vec_xst_trunc_sll:274; CHECK-LINUXBE:       # %bb.0: # %entry275; CHECK-LINUXBE-NEXT:    sldi r3, r5, 3276; CHECK-LINUXBE-NEXT:    stxsdx v2, r6, r3277; CHECK-LINUXBE-NEXT:    blr278;279; CHECK-O0-LABEL: vec_xst_trunc_sll:280; CHECK-O0:       # %bb.0: # %entry281; CHECK-O0-NEXT:    mfvsrld r3, v2282; CHECK-O0-NEXT:    sldi r4, r5, 3283; CHECK-O0-NEXT:    add r4, r6, r4284; CHECK-O0-NEXT:    std r3, 0(r4)285; CHECK-O0-NEXT:    blr286;287; CHECK-AIXBE-LABEL: vec_xst_trunc_sll:288; CHECK-AIXBE:       # %bb.0: # %entry289; CHECK-AIXBE-NEXT:    sldi r3, r3, 3290; CHECK-AIXBE-NEXT:    stxsdx v2, r4, r3291; CHECK-AIXBE-NEXT:    blr292entry:293  %0 = bitcast <1 x i128> %__vec to <2 x i64>294  %conv = extractelement <2 x i64> %0, i32 0295  %add.ptr = getelementptr inbounds i64, ptr %__ptr, i64 %__offset296  store i64 %conv, ptr %add.ptr, align 8297  ret void298}299 300define void @vec_xst_trunc_ull(<1 x i128> %__vec, i64 %__offset, ptr nocapture %__ptr)  {301; CHECK-LE-LABEL: vec_xst_trunc_ull:302; CHECK-LE:       # %bb.0: # %entry303; CHECK-LE-NEXT:    sldi r3, r5, 3304; CHECK-LE-NEXT:    stxvrdx v2, r6, r3305; CHECK-LE-NEXT:    blr306;307; CHECK-LINUXBE-LABEL: vec_xst_trunc_ull:308; CHECK-LINUXBE:       # %bb.0: # %entry309; CHECK-LINUXBE-NEXT:    sldi r3, r5, 3310; CHECK-LINUXBE-NEXT:    stxsdx v2, r6, r3311; CHECK-LINUXBE-NEXT:    blr312;313; CHECK-O0-LABEL: vec_xst_trunc_ull:314; CHECK-O0:       # %bb.0: # %entry315; CHECK-O0-NEXT:    mfvsrld r3, v2316; CHECK-O0-NEXT:    sldi r4, r5, 3317; CHECK-O0-NEXT:    add r4, r6, r4318; CHECK-O0-NEXT:    std r3, 0(r4)319; CHECK-O0-NEXT:    blr320;321; CHECK-AIXBE-LABEL: vec_xst_trunc_ull:322; CHECK-AIXBE:       # %bb.0: # %entry323; CHECK-AIXBE-NEXT:    sldi r3, r3, 3324; CHECK-AIXBE-NEXT:    stxsdx v2, r4, r3325; CHECK-AIXBE-NEXT:    blr326entry:327  %0 = bitcast <1 x i128> %__vec to <2 x i64>328  %conv = extractelement <2 x i64> %0, i32 0329  %add.ptr = getelementptr inbounds i64, ptr %__ptr, i64 %__offset330  store i64 %conv, ptr %add.ptr, align 8331  ret void332}333 334define dso_local <1 x i128> @vec_xl_zext(i64 %__offset, ptr nocapture readonly %__pointer) {335; CHECK-LABEL: vec_xl_zext:336; CHECK:       # %bb.0: # %entry337; CHECK-NEXT:    lxvrbx v2, r4, r3338; CHECK-NEXT:    blr339entry:340  %add.ptr = getelementptr inbounds i8, ptr %__pointer, i64 %__offset341  %0 = load i8, ptr %add.ptr, align 1342  %conv = zext i8 %0 to i128343  %splat.splatinsert = insertelement <1 x i128> undef, i128 %conv, i32 0344  ret <1 x i128> %splat.splatinsert345}346 347define dso_local <1 x i128> @vec_xl_zext_short(i64 %__offset, ptr nocapture readonly %__pointer) {348; CHECK-LABEL: vec_xl_zext_short:349; CHECK:       # %bb.0: # %entry350; CHECK-NEXT:    sldi r3, r3, 1351; CHECK-NEXT:    lxvrhx v2, r4, r3352; CHECK-NEXT:    blr353entry:354  %add.ptr = getelementptr inbounds i16, ptr %__pointer, i64 %__offset355  %0 = load i16, ptr %add.ptr, align 2356  %conv = zext i16 %0 to i128357  %splat.splatinsert = insertelement <1 x i128> undef, i128 %conv, i32 0358  ret <1 x i128> %splat.splatinsert359}360 361define dso_local <1 x i128> @vec_xl_zext_word(i64 %__offset, ptr nocapture readonly %__pointer) {362; CHECK-LABEL: vec_xl_zext_word:363; CHECK:       # %bb.0: # %entry364; CHECK-NEXT:    sldi r3, r3, 2365; CHECK-NEXT:    lxvrwx v2, r4, r3366; CHECK-NEXT:    blr367entry:368  %add.ptr = getelementptr inbounds i32, ptr %__pointer, i64 %__offset369  %0 = load i32, ptr %add.ptr, align 4370  %conv = zext i32 %0 to i128371  %splat.splatinsert = insertelement <1 x i128> undef, i128 %conv, i32 0372  ret <1 x i128> %splat.splatinsert373}374 375define dso_local <1 x i128> @vec_xl_zext_dw(i64 %__offset, ptr nocapture readonly %__pointer) {376; CHECK-LABEL: vec_xl_zext_dw:377; CHECK:       # %bb.0: # %entry378; CHECK-NEXT:    sldi r3, r3, 3379; CHECK-NEXT:    lxvrdx v2, r4, r3380; CHECK-NEXT:    blr381entry:382  %add.ptr = getelementptr inbounds i64, ptr %__pointer, i64 %__offset383  %0 = load i64, ptr %add.ptr, align 8384  %conv = zext i64 %0 to i128385  %splat.splatinsert = insertelement <1 x i128> undef, i128 %conv, i32 0386  ret <1 x i128> %splat.splatinsert387}388 389define dso_local <1 x i128> @vec_xl_sext_b(i64 %offset, ptr %p) {390; CHECK-LE-LABEL: vec_xl_sext_b:391; CHECK-LE:       # %bb.0: # %entry392; CHECK-LE-NEXT:    lbzx r3, r4, r3393; CHECK-LE-NEXT:    extsb r3, r3394; CHECK-LE-NEXT:    sradi r4, r3, 63395; CHECK-LE-NEXT:    mtvsrdd v2, r4, r3396; CHECK-LE-NEXT:    blr397;398; CHECK-LINUXBE-LABEL: vec_xl_sext_b:399; CHECK-LINUXBE:       # %bb.0: # %entry400; CHECK-LINUXBE-NEXT:    lbzx r3, r4, r3401; CHECK-LINUXBE-NEXT:    extsb r3, r3402; CHECK-LINUXBE-NEXT:    sradi r4, r3, 63403; CHECK-LINUXBE-NEXT:    mtvsrdd v2, r4, r3404; CHECK-LINUXBE-NEXT:    blr405;406; CHECK-O0-LABEL: vec_xl_sext_b:407; CHECK-O0:       # %bb.0: # %entry408; CHECK-O0-NEXT:    lbzx r3, r4, r3409; CHECK-O0-NEXT:    extsb r4, r3410; CHECK-O0-NEXT:    sradi r3, r4, 63411; CHECK-O0-NEXT:    mtvsrdd v2, r3, r4412; CHECK-O0-NEXT:    blr413;414; CHECK-AIXBE-LABEL: vec_xl_sext_b:415; CHECK-AIXBE:       # %bb.0: # %entry416; CHECK-AIXBE-NEXT:    lbzx r3, r4, r3417; CHECK-AIXBE-NEXT:    extsb r3, r3418; CHECK-AIXBE-NEXT:    sradi r4, r3, 63419; CHECK-AIXBE-NEXT:    mtvsrdd v2, r4, r3420; CHECK-AIXBE-NEXT:    blr421entry:422  %add.ptr = getelementptr inbounds i8, ptr %p, i64 %offset423  %0 = load i8, ptr %add.ptr, align 1424  %conv = sext i8 %0 to i128425  %splat.splatinsert = insertelement <1 x i128> undef, i128 %conv, i32 0426  ret <1 x i128> %splat.splatinsert427}428 429define dso_local <1 x i128> @vec_xl_sext_h(i64 %offset, ptr %p) {430; CHECK-LE-LABEL: vec_xl_sext_h:431; CHECK-LE:       # %bb.0: # %entry432; CHECK-LE-NEXT:    sldi r3, r3, 1433; CHECK-LE-NEXT:    lhax r3, r4, r3434; CHECK-LE-NEXT:    sradi r4, r3, 63435; CHECK-LE-NEXT:    mtvsrdd v2, r4, r3436; CHECK-LE-NEXT:    blr437;438; CHECK-LINUXBE-LABEL: vec_xl_sext_h:439; CHECK-LINUXBE:       # %bb.0: # %entry440; CHECK-LINUXBE-NEXT:    sldi r3, r3, 1441; CHECK-LINUXBE-NEXT:    lhax r3, r4, r3442; CHECK-LINUXBE-NEXT:    sradi r4, r3, 63443; CHECK-LINUXBE-NEXT:    mtvsrdd v2, r4, r3444; CHECK-LINUXBE-NEXT:    blr445;446; CHECK-O0-LABEL: vec_xl_sext_h:447; CHECK-O0:       # %bb.0: # %entry448; CHECK-O0-NEXT:    sldi r3, r3, 1449; CHECK-O0-NEXT:    lhax r4, r4, r3450; CHECK-O0-NEXT:    sradi r3, r4, 63451; CHECK-O0-NEXT:    mtvsrdd v2, r3, r4452; CHECK-O0-NEXT:    blr453;454; CHECK-AIXBE-LABEL: vec_xl_sext_h:455; CHECK-AIXBE:       # %bb.0: # %entry456; CHECK-AIXBE-NEXT:    sldi r3, r3, 1457; CHECK-AIXBE-NEXT:    lhax r3, r4, r3458; CHECK-AIXBE-NEXT:    sradi r4, r3, 63459; CHECK-AIXBE-NEXT:    mtvsrdd v2, r4, r3460; CHECK-AIXBE-NEXT:    blr461entry:462  %add.ptr = getelementptr inbounds i16, ptr %p, i64 %offset463  %0 = load i16, ptr %add.ptr, align 2464  %conv = sext i16 %0 to i128465  %splat.splatinsert = insertelement <1 x i128> undef, i128 %conv, i32 0466  ret <1 x i128> %splat.splatinsert467}468 469define dso_local <1 x i128> @vec_xl_sext_w(i64 %offset, ptr %p) {470; CHECK-LE-LABEL: vec_xl_sext_w:471; CHECK-LE:       # %bb.0: # %entry472; CHECK-LE-NEXT:    sldi r3, r3, 2473; CHECK-LE-NEXT:    lwax r3, r4, r3474; CHECK-LE-NEXT:    sradi r4, r3, 63475; CHECK-LE-NEXT:    mtvsrdd v2, r4, r3476; CHECK-LE-NEXT:    blr477;478; CHECK-LINUXBE-LABEL: vec_xl_sext_w:479; CHECK-LINUXBE:       # %bb.0: # %entry480; CHECK-LINUXBE-NEXT:    sldi r3, r3, 2481; CHECK-LINUXBE-NEXT:    lwax r3, r4, r3482; CHECK-LINUXBE-NEXT:    sradi r4, r3, 63483; CHECK-LINUXBE-NEXT:    mtvsrdd v2, r4, r3484; CHECK-LINUXBE-NEXT:    blr485;486; CHECK-O0-LABEL: vec_xl_sext_w:487; CHECK-O0:       # %bb.0: # %entry488; CHECK-O0-NEXT:    sldi r3, r3, 2489; CHECK-O0-NEXT:    lwax r4, r4, r3490; CHECK-O0-NEXT:    sradi r3, r4, 63491; CHECK-O0-NEXT:    mtvsrdd v2, r3, r4492; CHECK-O0-NEXT:    blr493;494; CHECK-AIXBE-LABEL: vec_xl_sext_w:495; CHECK-AIXBE:       # %bb.0: # %entry496; CHECK-AIXBE-NEXT:    sldi r3, r3, 2497; CHECK-AIXBE-NEXT:    lwax r3, r4, r3498; CHECK-AIXBE-NEXT:    sradi r4, r3, 63499; CHECK-AIXBE-NEXT:    mtvsrdd v2, r4, r3500; CHECK-AIXBE-NEXT:    blr501entry:502  %add.ptr = getelementptr inbounds i32, ptr %p, i64 %offset503  %0 = load i32, ptr %add.ptr, align 4504  %conv = sext i32 %0 to i128505  %splat.splatinsert = insertelement <1 x i128> undef, i128 %conv, i32 0506  ret <1 x i128> %splat.splatinsert507}508 509define dso_local <1 x i128> @vec_xl_sext_d(i64 %offset, ptr %p) {510; CHECK-LE-LABEL: vec_xl_sext_d:511; CHECK-LE:       # %bb.0: # %entry512; CHECK-LE-NEXT:    sldi r3, r3, 3513; CHECK-LE-NEXT:    ldx r3, r4, r3514; CHECK-LE-NEXT:    sradi r4, r3, 63515; CHECK-LE-NEXT:    mtvsrdd v2, r4, r3516; CHECK-LE-NEXT:    blr517;518; CHECK-LINUXBE-LABEL: vec_xl_sext_d:519; CHECK-LINUXBE:       # %bb.0: # %entry520; CHECK-LINUXBE-NEXT:    sldi r3, r3, 3521; CHECK-LINUXBE-NEXT:    ldx r3, r4, r3522; CHECK-LINUXBE-NEXT:    sradi r4, r3, 63523; CHECK-LINUXBE-NEXT:    mtvsrdd v2, r4, r3524; CHECK-LINUXBE-NEXT:    blr525;526; CHECK-O0-LABEL: vec_xl_sext_d:527; CHECK-O0:       # %bb.0: # %entry528; CHECK-O0-NEXT:    sldi r3, r3, 3529; CHECK-O0-NEXT:    ldx r4, r4, r3530; CHECK-O0-NEXT:    sradi r3, r4, 63531; CHECK-O0-NEXT:    mtvsrdd v2, r3, r4532; CHECK-O0-NEXT:    blr533;534; CHECK-AIXBE-LABEL: vec_xl_sext_d:535; CHECK-AIXBE:       # %bb.0: # %entry536; CHECK-AIXBE-NEXT:    sldi r3, r3, 3537; CHECK-AIXBE-NEXT:    ldx r3, r4, r3538; CHECK-AIXBE-NEXT:    sradi r4, r3, 63539; CHECK-AIXBE-NEXT:    mtvsrdd v2, r4, r3540; CHECK-AIXBE-NEXT:    blr541entry:542  %add.ptr = getelementptr inbounds i64, ptr %p, i64 %offset543  %0 = load i64, ptr %add.ptr, align 8544  %conv = sext i64 %0 to i128545  %splat.splatinsert = insertelement <1 x i128> undef, i128 %conv, i32 0546  ret <1 x i128> %splat.splatinsert547}548