277 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=powerpc64-unknown-unknown -verify-machineinstrs -mcpu=pwr8 \3; RUN: < %s | FileCheck %s --check-prefix=CHECK-BE4; RUN: llc -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs -mcpu=pwr8 \5; RUN: < %s | FileCheck %s --check-prefix=CHECK-LE6 7define noundef <2 x double> @vec_promote_double_zeroed(ptr nocapture noundef readonly %p) {8; CHECK-BE-LABEL: vec_promote_double_zeroed:9; CHECK-BE: # %bb.0: # %entry10; CHECK-BE-NEXT: lfd 0, 0(3)11; CHECK-BE-NEXT: xxlxor 1, 1, 112; CHECK-BE-NEXT: xxmrghd 34, 0, 113; CHECK-BE-NEXT: blr14;15; CHECK-LE-LABEL: vec_promote_double_zeroed:16; CHECK-LE: # %bb.0: # %entry17; CHECK-LE-NEXT: lfd 0, 0(3)18; CHECK-LE-NEXT: xxlxor 1, 1, 119; CHECK-LE-NEXT: xxmrghd 34, 1, 020; CHECK-LE-NEXT: blr21entry:22 %0 = load double, ptr %p, align 823 %vecins.i = insertelement <2 x double> <double poison, double 0.0>, double %0, i64 024 ret <2 x double> %vecins.i25}26 27define noundef <2 x double> @vec_promote_double(ptr nocapture noundef readonly %p) {28; CHECK-BE-LABEL: vec_promote_double:29; CHECK-BE: # %bb.0: # %entry30; CHECK-BE-NEXT: lxvdsx 34, 0, 331; CHECK-BE-NEXT: blr32;33; CHECK-LE-LABEL: vec_promote_double:34; CHECK-LE: # %bb.0: # %entry35; CHECK-LE-NEXT: lxvdsx 34, 0, 336; CHECK-LE-NEXT: blr37entry:38 %0 = load double, ptr %p, align 839 %vecins.i = insertelement <2 x double> poison, double %0, i64 040 ret <2 x double> %vecins.i41}42 43define noundef <4 x float> @vec_promote_float_zeroed(ptr nocapture noundef readonly %p) {44; CHECK-BE-LABEL: vec_promote_float_zeroed:45; CHECK-BE: # %bb.0: # %entry46; CHECK-BE-NEXT: lfs 0, 0(3)47; CHECK-BE-NEXT: xxlxor 1, 1, 148; CHECK-BE-NEXT: xxmrghd 0, 0, 149; CHECK-BE-NEXT: xxspltd 1, 1, 050; CHECK-BE-NEXT: xvcvdpsp 34, 051; CHECK-BE-NEXT: xvcvdpsp 35, 152; CHECK-BE-NEXT: vmrgew 2, 2, 353; CHECK-BE-NEXT: blr54;55; CHECK-LE-LABEL: vec_promote_float_zeroed:56; CHECK-LE: # %bb.0: # %entry57; CHECK-LE-NEXT: lfs 0, 0(3)58; CHECK-LE-NEXT: xxlxor 1, 1, 159; CHECK-LE-NEXT: xxmrghd 0, 1, 060; CHECK-LE-NEXT: xxspltd 1, 1, 061; CHECK-LE-NEXT: xvcvdpsp 34, 062; CHECK-LE-NEXT: xvcvdpsp 35, 163; CHECK-LE-NEXT: vmrgew 2, 3, 264; CHECK-LE-NEXT: blr65entry:66 %0 = load float, ptr %p, align 867 %vecins.i = insertelement <4 x float> <float poison, float 0.0, float 0.0, float 0.0>, float %0, i64 068 ret <4 x float> %vecins.i69}70 71define noundef <4 x float> @vec_promote_float(ptr nocapture noundef readonly %p) {72; CHECK-BE-LABEL: vec_promote_float:73; CHECK-BE: # %bb.0: # %entry74; CHECK-BE-NEXT: lfiwzx 0, 0, 375; CHECK-BE-NEXT: xxspltw 34, 0, 176; CHECK-BE-NEXT: blr77;78; CHECK-LE-LABEL: vec_promote_float:79; CHECK-LE: # %bb.0: # %entry80; CHECK-LE-NEXT: lfiwzx 0, 0, 381; CHECK-LE-NEXT: xxspltw 34, 0, 182; CHECK-LE-NEXT: blr83entry:84 %0 = load float, ptr %p, align 885 %vecins.i = insertelement <4 x float> poison, float %0, i64 086 ret <4 x float> %vecins.i87}88 89define noundef <2 x i64> @vec_promote_long_long_zeroed(ptr nocapture noundef readonly %p) {90; CHECK-BE-LABEL: vec_promote_long_long_zeroed:91; CHECK-BE: # %bb.0: # %entry92; CHECK-BE-NEXT: ld 3, 0(3)93; CHECK-BE-NEXT: li 4, 094; CHECK-BE-NEXT: mtfprd 0, 495; CHECK-BE-NEXT: mtfprd 1, 396; CHECK-BE-NEXT: xxmrghd 34, 1, 097; CHECK-BE-NEXT: blr98;99; CHECK-LE-LABEL: vec_promote_long_long_zeroed:100; CHECK-LE: # %bb.0: # %entry101; CHECK-LE-NEXT: ld 3, 0(3)102; CHECK-LE-NEXT: li 4, 0103; CHECK-LE-NEXT: mtfprd 0, 4104; CHECK-LE-NEXT: mtfprd 1, 3105; CHECK-LE-NEXT: xxmrghd 34, 0, 1106; CHECK-LE-NEXT: blr107entry:108 %0 = load i64, ptr %p, align 8109 %vecins.i = insertelement <2 x i64> <i64 poison, i64 0>, i64 %0, i64 0110 ret <2 x i64> %vecins.i111}112 113define noundef <2 x i64> @vec_promote_long_long(ptr nocapture noundef readonly %p) {114; CHECK-BE-LABEL: vec_promote_long_long:115; CHECK-BE: # %bb.0: # %entry116; CHECK-BE-NEXT: lxvdsx 34, 0, 3117; CHECK-BE-NEXT: blr118;119; CHECK-LE-LABEL: vec_promote_long_long:120; CHECK-LE: # %bb.0: # %entry121; CHECK-LE-NEXT: lxvdsx 34, 0, 3122; CHECK-LE-NEXT: blr123entry:124 %0 = load i64, ptr %p, align 8125 %vecins.i = insertelement <2 x i64> poison, i64 %0, i64 0126 ret <2 x i64> %vecins.i127}128 129define noundef <4 x i32> @vec_promote_int_zeroed(ptr nocapture noundef readonly %p) {130; CHECK-BE-LABEL: vec_promote_int_zeroed:131; CHECK-BE: # %bb.0: # %entry132; CHECK-BE-NEXT: lwz 3, 0(3)133; CHECK-BE-NEXT: li 4, 0134; CHECK-BE-NEXT: li 5, 0135; CHECK-BE-NEXT: rldimi 4, 4, 32, 0136; CHECK-BE-NEXT: rldimi 5, 3, 32, 0137; CHECK-BE-NEXT: mtfprd 1, 4138; CHECK-BE-NEXT: mtfprd 0, 5139; CHECK-BE-NEXT: xxmrghd 34, 0, 1140; CHECK-BE-NEXT: blr141;142; CHECK-LE-LABEL: vec_promote_int_zeroed:143; CHECK-LE: # %bb.0: # %entry144; CHECK-LE-NEXT: lwz 3, 0(3)145; CHECK-LE-NEXT: li 4, 0146; CHECK-LE-NEXT: rldimi 3, 4, 32, 0147; CHECK-LE-NEXT: rldimi 4, 4, 32, 0148; CHECK-LE-NEXT: mtfprd 0, 3149; CHECK-LE-NEXT: mtfprd 1, 4150; CHECK-LE-NEXT: xxmrghd 34, 1, 0151; CHECK-LE-NEXT: blr152entry:153 %0 = load i32, ptr %p, align 4154 %vecins.i = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %0, i64 0155 ret <4 x i32> %vecins.i156}157 158define noundef <4 x i32> @vec_promote_int(ptr nocapture noundef readonly %p) {159; CHECK-BE-LABEL: vec_promote_int:160; CHECK-BE: # %bb.0: # %entry161; CHECK-BE-NEXT: lfiwzx 0, 0, 3162; CHECK-BE-NEXT: xxspltw 34, 0, 1163; CHECK-BE-NEXT: blr164;165; CHECK-LE-LABEL: vec_promote_int:166; CHECK-LE: # %bb.0: # %entry167; CHECK-LE-NEXT: lfiwzx 0, 0, 3168; CHECK-LE-NEXT: xxspltw 34, 0, 1169; CHECK-LE-NEXT: blr170entry:171 %0 = load i32, ptr %p, align 4172 %vecins.i = insertelement <4 x i32> poison, i32 %0, i64 0173 ret <4 x i32> %vecins.i174}175 176define noundef <8 x i16> @vec_promote_short_zeroed(ptr nocapture noundef readonly %p) {177; CHECK-BE-LABEL: vec_promote_short_zeroed:178; CHECK-BE: # %bb.0: # %entry179; CHECK-BE-NEXT: addis 4, 2, .LCPI8_0@toc@ha180; CHECK-BE-NEXT: lhz 3, 0(3)181; CHECK-BE-NEXT: addi 4, 4, .LCPI8_0@toc@l182; CHECK-BE-NEXT: mtvsrwz 36, 3183; CHECK-BE-NEXT: lxvw4x 34, 0, 4184; CHECK-BE-NEXT: li 4, 0185; CHECK-BE-NEXT: mtvsrwz 35, 4186; CHECK-BE-NEXT: vperm 2, 4, 3, 2187; CHECK-BE-NEXT: blr188;189; CHECK-LE-LABEL: vec_promote_short_zeroed:190; CHECK-LE: # %bb.0: # %entry191; CHECK-LE-NEXT: addis 4, 2, .LCPI8_0@toc@ha192; CHECK-LE-NEXT: lhz 3, 0(3)193; CHECK-LE-NEXT: addi 4, 4, .LCPI8_0@toc@l194; CHECK-LE-NEXT: mtvsrd 36, 3195; CHECK-LE-NEXT: lxvd2x 0, 0, 4196; CHECK-LE-NEXT: li 4, 0197; CHECK-LE-NEXT: mtvsrd 35, 4198; CHECK-LE-NEXT: xxswapd 34, 0199; CHECK-LE-NEXT: vperm 2, 3, 4, 2200; CHECK-LE-NEXT: blr201entry:202 %0 = load i16, ptr %p, align 2203 %vecins.i = insertelement <8 x i16> <i16 poison, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, i16 %0, i64 0204 ret <8 x i16> %vecins.i205}206 207define noundef <8 x i16> @vec_promote_short(ptr nocapture noundef readonly %p) {208; CHECK-BE-LABEL: vec_promote_short:209; CHECK-BE: # %bb.0: # %entry210; CHECK-BE-NEXT: lhzx 3, 0, 3211; CHECK-BE-NEXT: mtvsrwz 34, 3212; CHECK-BE-NEXT: vsplth 2, 2, 3213; CHECK-BE-NEXT: blr214;215; CHECK-LE-LABEL: vec_promote_short:216; CHECK-LE: # %bb.0: # %entry217; CHECK-LE-NEXT: lhzx 3, 0, 3218; CHECK-LE-NEXT: mtvsrwz 34, 3219; CHECK-LE-NEXT: vsplth 2, 2, 3220; CHECK-LE-NEXT: blr221entry:222 %0 = load i16, ptr %p, align 2223 %vecins.i = insertelement <8 x i16> poison, i16 %0, i64 0224 ret <8 x i16> %vecins.i225}226 227define noundef <16 x i8> @vec_promote_char_zeroed(ptr nocapture noundef readonly %p) {228; CHECK-BE-LABEL: vec_promote_char_zeroed:229; CHECK-BE: # %bb.0: # %entry230; CHECK-BE-NEXT: addis 4, 2, .LCPI10_0@toc@ha231; CHECK-BE-NEXT: lbz 3, 0(3)232; CHECK-BE-NEXT: addi 4, 4, .LCPI10_0@toc@l233; CHECK-BE-NEXT: mtvsrwz 36, 3234; CHECK-BE-NEXT: lxvw4x 34, 0, 4235; CHECK-BE-NEXT: li 4, 0236; CHECK-BE-NEXT: mtvsrwz 35, 4237; CHECK-BE-NEXT: vperm 2, 4, 3, 2238; CHECK-BE-NEXT: blr239;240; CHECK-LE-LABEL: vec_promote_char_zeroed:241; CHECK-LE: # %bb.0: # %entry242; CHECK-LE-NEXT: addis 4, 2, .LCPI10_0@toc@ha243; CHECK-LE-NEXT: lbz 3, 0(3)244; CHECK-LE-NEXT: addi 4, 4, .LCPI10_0@toc@l245; CHECK-LE-NEXT: mtvsrd 36, 3246; CHECK-LE-NEXT: lxvd2x 0, 0, 4247; CHECK-LE-NEXT: li 4, 0248; CHECK-LE-NEXT: mtvsrd 35, 4249; CHECK-LE-NEXT: xxswapd 34, 0250; CHECK-LE-NEXT: vperm 2, 3, 4, 2251; CHECK-LE-NEXT: blr252entry:253 %0 = load i8, ptr %p, align 1254 %vecins.i = insertelement <16 x i8> <i8 poison, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, i8 %0, i64 0255 ret <16 x i8> %vecins.i256}257 258define noundef <16 x i8> @vec_promote_char(ptr nocapture noundef readonly %p) {259; CHECK-BE-LABEL: vec_promote_char:260; CHECK-BE: # %bb.0: # %entry261; CHECK-BE-NEXT: lbzx 3, 0, 3262; CHECK-BE-NEXT: mtvsrwz 34, 3263; CHECK-BE-NEXT: vspltb 2, 2, 7264; CHECK-BE-NEXT: blr265;266; CHECK-LE-LABEL: vec_promote_char:267; CHECK-LE: # %bb.0: # %entry268; CHECK-LE-NEXT: lbzx 3, 0, 3269; CHECK-LE-NEXT: mtvsrwz 34, 3270; CHECK-LE-NEXT: vspltb 2, 2, 7271; CHECK-LE-NEXT: blr272entry:273 %0 = load i8, ptr %p, align 1274 %vecins.i = insertelement <16 x i8> poison, i8 %0, i64 0275 ret <16 x i8> %vecins.i276}277