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