278 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: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \4; RUN: -mcpu=pwr7 < %s | FileCheck %s --check-prefix=CHECK-LE-P75; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \6; RUN: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \7; RUN: -mcpu=pwr8 < %s | FileCheck %s --check-prefix=CHECK-LE-P88; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \9; RUN: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \10; RUN: -mcpu=pwr9 < %s | FileCheck %s --check-prefix=CHECK-LE-P911; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \12; RUN: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \13; RUN: -mcpu=pwr7 < %s | FileCheck %s --check-prefix=CHECK-BE-P714; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \15; RUN: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \16; RUN: -mcpu=pwr8 < %s | FileCheck %s --check-prefix=CHECK-BE-P817; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \18; RUN: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \19; RUN: -mcpu=pwr9 < %s | FileCheck %s --check-prefix=CHECK-BE-P920; xscvdpsxws and xscvdpsxws is only available on Power7 and above21; Codgen is different for Power7, Power8, and Power9.22 23define dso_local <4 x i32> @test(<4 x i32> %a, double %b) {24; CHECK-LE-P7-LABEL: test:25; CHECK-LE-P7: # %bb.0: # %entry26; CHECK-LE-P7-NEXT: xscvdpsxws f0, f127; CHECK-LE-P7-NEXT: addi r3, r1, -428; CHECK-LE-P7-NEXT: addis r4, r2, .LCPI0_0@toc@ha29; CHECK-LE-P7-NEXT: addi r4, r4, .LCPI0_0@toc@l30; CHECK-LE-P7-NEXT: stfiwx f0, 0, r331; CHECK-LE-P7-NEXT: lxvd2x vs0, 0, r432; CHECK-LE-P7-NEXT: xxswapd v3, vs033; CHECK-LE-P7-NEXT: lfiwzx f0, 0, r334; CHECK-LE-P7-NEXT: xxspltw v4, vs0, 135; CHECK-LE-P7-NEXT: vperm v2, v4, v2, v336; CHECK-LE-P7-NEXT: blr37;38; CHECK-LE-P8-LABEL: test:39; CHECK-LE-P8: # %bb.0: # %entry40; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI0_0@toc@ha41; CHECK-LE-P8-NEXT: xscvdpsxws v4, f142; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI0_0@toc@l43; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r344; CHECK-LE-P8-NEXT: xxswapd v3, vs045; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v346; CHECK-LE-P8-NEXT: blr47;48; CHECK-LE-P9-LABEL: test:49; CHECK-LE-P9: # %bb.0: # %entry50; CHECK-LE-P9-NEXT: xscvdpsxws f0, f151; CHECK-LE-P9-NEXT: xxinsertw v2, vs0, 052; CHECK-LE-P9-NEXT: blr53;54; CHECK-BE-P7-LABEL: test:55; CHECK-BE-P7: # %bb.0: # %entry56; CHECK-BE-P7-NEXT: xscvdpsxws f0, f157; CHECK-BE-P7-NEXT: addi r3, r1, -458; CHECK-BE-P7-NEXT: stfiwx f0, 0, r359; CHECK-BE-P7-NEXT: lfiwzx f0, 0, r360; CHECK-BE-P7-NEXT: addis r3, r2, .LCPI0_0@toc@ha61; CHECK-BE-P7-NEXT: addi r3, r3, .LCPI0_0@toc@l62; CHECK-BE-P7-NEXT: lxvw4x v4, 0, r363; CHECK-BE-P7-NEXT: xxspltw v3, vs0, 164; CHECK-BE-P7-NEXT: vperm v2, v2, v3, v465; CHECK-BE-P7-NEXT: blr66;67; CHECK-BE-P8-LABEL: test:68; CHECK-BE-P8: # %bb.0: # %entry69; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI0_0@toc@ha70; CHECK-BE-P8-NEXT: xscvdpsxws v4, f171; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI0_0@toc@l72; CHECK-BE-P8-NEXT: lxvw4x v3, 0, r373; CHECK-BE-P8-NEXT: vperm v2, v2, v4, v374; CHECK-BE-P8-NEXT: blr75;76; CHECK-BE-P9-LABEL: test:77; CHECK-BE-P9: # %bb.0: # %entry78; CHECK-BE-P9-NEXT: xscvdpsxws f0, f179; CHECK-BE-P9-NEXT: xxinsertw v2, vs0, 1280; CHECK-BE-P9-NEXT: blr81entry:82 %conv = fptosi double %b to i3283 %vecins = insertelement <4 x i32> %a, i32 %conv, i32 384 ret <4 x i32> %vecins85}86 87define dso_local <4 x i32> @test2(<4 x i32> %a, float %b) {88; CHECK-LE-P7-LABEL: test2:89; CHECK-LE-P7: # %bb.0: # %entry90; CHECK-LE-P7-NEXT: xscvdpsxws f0, f191; CHECK-LE-P7-NEXT: addi r3, r1, -492; CHECK-LE-P7-NEXT: addis r4, r2, .LCPI1_0@toc@ha93; CHECK-LE-P7-NEXT: addi r4, r4, .LCPI1_0@toc@l94; CHECK-LE-P7-NEXT: stfiwx f0, 0, r395; CHECK-LE-P7-NEXT: lxvd2x vs0, 0, r496; CHECK-LE-P7-NEXT: xxswapd v3, vs097; CHECK-LE-P7-NEXT: lfiwzx f0, 0, r398; CHECK-LE-P7-NEXT: xxspltw v4, vs0, 199; CHECK-LE-P7-NEXT: vperm v2, v4, v2, v3100; CHECK-LE-P7-NEXT: blr101;102; CHECK-LE-P8-LABEL: test2:103; CHECK-LE-P8: # %bb.0: # %entry104; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI1_0@toc@ha105; CHECK-LE-P8-NEXT: xscvdpsxws v4, f1106; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI1_0@toc@l107; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r3108; CHECK-LE-P8-NEXT: xxswapd v3, vs0109; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v3110; CHECK-LE-P8-NEXT: blr111;112; CHECK-LE-P9-LABEL: test2:113; CHECK-LE-P9: # %bb.0: # %entry114; CHECK-LE-P9-NEXT: xscvdpsxws f0, f1115; CHECK-LE-P9-NEXT: xxinsertw v2, vs0, 0116; CHECK-LE-P9-NEXT: blr117;118; CHECK-BE-P7-LABEL: test2:119; CHECK-BE-P7: # %bb.0: # %entry120; CHECK-BE-P7-NEXT: xscvdpsxws f0, f1121; CHECK-BE-P7-NEXT: addi r3, r1, -4122; CHECK-BE-P7-NEXT: stfiwx f0, 0, r3123; CHECK-BE-P7-NEXT: lfiwzx f0, 0, r3124; CHECK-BE-P7-NEXT: addis r3, r2, .LCPI1_0@toc@ha125; CHECK-BE-P7-NEXT: addi r3, r3, .LCPI1_0@toc@l126; CHECK-BE-P7-NEXT: lxvw4x v4, 0, r3127; CHECK-BE-P7-NEXT: xxspltw v3, vs0, 1128; CHECK-BE-P7-NEXT: vperm v2, v2, v3, v4129; CHECK-BE-P7-NEXT: blr130;131; CHECK-BE-P8-LABEL: test2:132; CHECK-BE-P8: # %bb.0: # %entry133; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI1_0@toc@ha134; CHECK-BE-P8-NEXT: xscvdpsxws v4, f1135; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI1_0@toc@l136; CHECK-BE-P8-NEXT: lxvw4x v3, 0, r3137; CHECK-BE-P8-NEXT: vperm v2, v2, v4, v3138; CHECK-BE-P8-NEXT: blr139;140; CHECK-BE-P9-LABEL: test2:141; CHECK-BE-P9: # %bb.0: # %entry142; CHECK-BE-P9-NEXT: xscvdpsxws f0, f1143; CHECK-BE-P9-NEXT: xxinsertw v2, vs0, 12144; CHECK-BE-P9-NEXT: blr145entry:146 %conv = fptosi float %b to i32147 %vecins = insertelement <4 x i32> %a, i32 %conv, i32 3148 ret <4 x i32> %vecins149}150 151define dso_local <4 x i32> @test3(<4 x i32> %a, double %b) {152; CHECK-LE-P7-LABEL: test3:153; CHECK-LE-P7: # %bb.0: # %entry154; CHECK-LE-P7-NEXT: xscvdpuxws f0, f1155; CHECK-LE-P7-NEXT: addi r3, r1, -4156; CHECK-LE-P7-NEXT: addis r4, r2, .LCPI2_0@toc@ha157; CHECK-LE-P7-NEXT: addi r4, r4, .LCPI2_0@toc@l158; CHECK-LE-P7-NEXT: stfiwx f0, 0, r3159; CHECK-LE-P7-NEXT: lxvd2x vs0, 0, r4160; CHECK-LE-P7-NEXT: xxswapd v3, vs0161; CHECK-LE-P7-NEXT: lfiwzx f0, 0, r3162; CHECK-LE-P7-NEXT: xxspltw v4, vs0, 1163; CHECK-LE-P7-NEXT: vperm v2, v4, v2, v3164; CHECK-LE-P7-NEXT: blr165;166; CHECK-LE-P8-LABEL: test3:167; CHECK-LE-P8: # %bb.0: # %entry168; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI2_0@toc@ha169; CHECK-LE-P8-NEXT: xscvdpuxws v4, f1170; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI2_0@toc@l171; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r3172; CHECK-LE-P8-NEXT: xxswapd v3, vs0173; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v3174; CHECK-LE-P8-NEXT: blr175;176; CHECK-LE-P9-LABEL: test3:177; CHECK-LE-P9: # %bb.0: # %entry178; CHECK-LE-P9-NEXT: xscvdpuxws f0, f1179; CHECK-LE-P9-NEXT: xxinsertw v2, vs0, 0180; CHECK-LE-P9-NEXT: blr181;182; CHECK-BE-P7-LABEL: test3:183; CHECK-BE-P7: # %bb.0: # %entry184; CHECK-BE-P7-NEXT: xscvdpuxws f0, f1185; CHECK-BE-P7-NEXT: addi r3, r1, -4186; CHECK-BE-P7-NEXT: stfiwx f0, 0, r3187; CHECK-BE-P7-NEXT: lfiwzx f0, 0, r3188; CHECK-BE-P7-NEXT: addis r3, r2, .LCPI2_0@toc@ha189; CHECK-BE-P7-NEXT: addi r3, r3, .LCPI2_0@toc@l190; CHECK-BE-P7-NEXT: lxvw4x v4, 0, r3191; CHECK-BE-P7-NEXT: xxspltw v3, vs0, 1192; CHECK-BE-P7-NEXT: vperm v2, v2, v3, v4193; CHECK-BE-P7-NEXT: blr194;195; CHECK-BE-P8-LABEL: test3:196; CHECK-BE-P8: # %bb.0: # %entry197; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI2_0@toc@ha198; CHECK-BE-P8-NEXT: xscvdpuxws v4, f1199; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI2_0@toc@l200; CHECK-BE-P8-NEXT: lxvw4x v3, 0, r3201; CHECK-BE-P8-NEXT: vperm v2, v2, v4, v3202; CHECK-BE-P8-NEXT: blr203;204; CHECK-BE-P9-LABEL: test3:205; CHECK-BE-P9: # %bb.0: # %entry206; CHECK-BE-P9-NEXT: xscvdpuxws f0, f1207; CHECK-BE-P9-NEXT: xxinsertw v2, vs0, 12208; CHECK-BE-P9-NEXT: blr209entry:210 %conv = fptoui double %b to i32211 %vecins = insertelement <4 x i32> %a, i32 %conv, i32 3212 ret <4 x i32> %vecins213}214 215define dso_local <4 x i32> @test4(<4 x i32> %a, float %b) {216; CHECK-LE-P7-LABEL: test4:217; CHECK-LE-P7: # %bb.0: # %entry218; CHECK-LE-P7-NEXT: xscvdpuxws f0, f1219; CHECK-LE-P7-NEXT: addi r3, r1, -4220; CHECK-LE-P7-NEXT: addis r4, r2, .LCPI3_0@toc@ha221; CHECK-LE-P7-NEXT: addi r4, r4, .LCPI3_0@toc@l222; CHECK-LE-P7-NEXT: stfiwx f0, 0, r3223; CHECK-LE-P7-NEXT: lxvd2x vs0, 0, r4224; CHECK-LE-P7-NEXT: xxswapd v3, vs0225; CHECK-LE-P7-NEXT: lfiwzx f0, 0, r3226; CHECK-LE-P7-NEXT: xxspltw v4, vs0, 1227; CHECK-LE-P7-NEXT: vperm v2, v4, v2, v3228; CHECK-LE-P7-NEXT: blr229;230; CHECK-LE-P8-LABEL: test4:231; CHECK-LE-P8: # %bb.0: # %entry232; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI3_0@toc@ha233; CHECK-LE-P8-NEXT: xscvdpuxws v4, f1234; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI3_0@toc@l235; CHECK-LE-P8-NEXT: lxvd2x vs0, 0, r3236; CHECK-LE-P8-NEXT: xxswapd v3, vs0237; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v3238; CHECK-LE-P8-NEXT: blr239;240; CHECK-LE-P9-LABEL: test4:241; CHECK-LE-P9: # %bb.0: # %entry242; CHECK-LE-P9-NEXT: xscvdpuxws f0, f1243; CHECK-LE-P9-NEXT: xxinsertw v2, vs0, 0244; CHECK-LE-P9-NEXT: blr245;246; CHECK-BE-P7-LABEL: test4:247; CHECK-BE-P7: # %bb.0: # %entry248; CHECK-BE-P7-NEXT: xscvdpuxws f0, f1249; CHECK-BE-P7-NEXT: addi r3, r1, -4250; CHECK-BE-P7-NEXT: stfiwx f0, 0, r3251; CHECK-BE-P7-NEXT: lfiwzx f0, 0, r3252; CHECK-BE-P7-NEXT: addis r3, r2, .LCPI3_0@toc@ha253; CHECK-BE-P7-NEXT: addi r3, r3, .LCPI3_0@toc@l254; CHECK-BE-P7-NEXT: lxvw4x v4, 0, r3255; CHECK-BE-P7-NEXT: xxspltw v3, vs0, 1256; CHECK-BE-P7-NEXT: vperm v2, v2, v3, v4257; CHECK-BE-P7-NEXT: blr258;259; CHECK-BE-P8-LABEL: test4:260; CHECK-BE-P8: # %bb.0: # %entry261; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI3_0@toc@ha262; CHECK-BE-P8-NEXT: xscvdpuxws v4, f1263; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI3_0@toc@l264; CHECK-BE-P8-NEXT: lxvw4x v3, 0, r3265; CHECK-BE-P8-NEXT: vperm v2, v2, v4, v3266; CHECK-BE-P8-NEXT: blr267;268; CHECK-BE-P9-LABEL: test4:269; CHECK-BE-P9: # %bb.0: # %entry270; CHECK-BE-P9-NEXT: xscvdpuxws f0, f1271; CHECK-BE-P9-NEXT: xxinsertw v2, vs0, 12272; CHECK-BE-P9-NEXT: blr273entry:274 %conv = fptoui float %b to i32275 %vecins = insertelement <4 x i32> %a, i32 %conv, i32 3276 ret <4 x i32> %vecins277}278