230 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs \3; RUN: -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s | FileCheck %s4; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs \5; RUN: -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s | FileCheck %s \6; RUN: -check-prefix=CHECK-P87 8define void @qp_trunc(ptr nocapture readonly %a, ptr nocapture %res) {9; CHECK-LABEL: qp_trunc:10; CHECK: # %bb.0: # %entry11; CHECK-NEXT: lxv v2, 0(r3)12; CHECK-NEXT: xsrqpi 1, v2, v2, 113; CHECK-NEXT: stxv v2, 0(r4)14; CHECK-NEXT: blr15;16; CHECK-P8-LABEL: qp_trunc:17; CHECK-P8: # %bb.0: # %entry18; CHECK-P8-NEXT: mflr r019; CHECK-P8-NEXT: .cfi_def_cfa_offset 4820; CHECK-P8-NEXT: .cfi_offset lr, 1621; CHECK-P8-NEXT: .cfi_offset r30, -1622; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill23; CHECK-P8-NEXT: stdu r1, -48(r1)24; CHECK-P8-NEXT: std r0, 64(r1)25; CHECK-P8-NEXT: mr r30, r426; CHECK-P8-NEXT: lxvd2x vs0, 0, r327; CHECK-P8-NEXT: xxswapd v2, vs028; CHECK-P8-NEXT: bl truncf12829; CHECK-P8-NEXT: nop30; CHECK-P8-NEXT: xxswapd vs0, v231; CHECK-P8-NEXT: stxvd2x vs0, 0, r3032; CHECK-P8-NEXT: addi r1, r1, 4833; CHECK-P8-NEXT: ld r0, 16(r1)34; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload35; CHECK-P8-NEXT: mtlr r036; CHECK-P8-NEXT: blr37entry:38 %0 = load fp128, ptr %a, align 1639 %1 = tail call fp128 @llvm.trunc.f128(fp128 %0)40 store fp128 %1, ptr %res, align 1641 ret void42}43declare fp128 @llvm.trunc.f128(fp128 %Val)44 45define void @qp_rint(ptr nocapture readonly %a, ptr nocapture %res) {46; CHECK-LABEL: qp_rint:47; CHECK: # %bb.0: # %entry48; CHECK-NEXT: lxv v2, 0(r3)49; CHECK-NEXT: xsrqpix 0, v2, v2, 350; CHECK-NEXT: stxv v2, 0(r4)51; CHECK-NEXT: blr52;53; CHECK-P8-LABEL: qp_rint:54; CHECK-P8: # %bb.0: # %entry55; CHECK-P8-NEXT: mflr r056; CHECK-P8-NEXT: .cfi_def_cfa_offset 4857; CHECK-P8-NEXT: .cfi_offset lr, 1658; CHECK-P8-NEXT: .cfi_offset r30, -1659; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill60; CHECK-P8-NEXT: stdu r1, -48(r1)61; CHECK-P8-NEXT: std r0, 64(r1)62; CHECK-P8-NEXT: mr r30, r463; CHECK-P8-NEXT: lxvd2x vs0, 0, r364; CHECK-P8-NEXT: xxswapd v2, vs065; CHECK-P8-NEXT: bl rintf12866; CHECK-P8-NEXT: nop67; CHECK-P8-NEXT: xxswapd vs0, v268; CHECK-P8-NEXT: stxvd2x vs0, 0, r3069; CHECK-P8-NEXT: addi r1, r1, 4870; CHECK-P8-NEXT: ld r0, 16(r1)71; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload72; CHECK-P8-NEXT: mtlr r073; CHECK-P8-NEXT: blr74entry:75 %0 = load fp128, ptr %a, align 1676 %1 = tail call fp128 @llvm.rint.f128(fp128 %0)77 store fp128 %1, ptr %res, align 1678 ret void79}80declare fp128 @llvm.rint.f128(fp128 %Val)81 82define void @qp_nearbyint(ptr nocapture readonly %a, ptr nocapture %res) {83; CHECK-LABEL: qp_nearbyint:84; CHECK: # %bb.0: # %entry85; CHECK-NEXT: lxv v2, 0(r3)86; CHECK-NEXT: xsrqpi 0, v2, v2, 387; CHECK-NEXT: stxv v2, 0(r4)88; CHECK-NEXT: blr89;90; CHECK-P8-LABEL: qp_nearbyint:91; CHECK-P8: # %bb.0: # %entry92; CHECK-P8-NEXT: mflr r093; CHECK-P8-NEXT: .cfi_def_cfa_offset 4894; CHECK-P8-NEXT: .cfi_offset lr, 1695; CHECK-P8-NEXT: .cfi_offset r30, -1696; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill97; CHECK-P8-NEXT: stdu r1, -48(r1)98; CHECK-P8-NEXT: std r0, 64(r1)99; CHECK-P8-NEXT: mr r30, r4100; CHECK-P8-NEXT: lxvd2x vs0, 0, r3101; CHECK-P8-NEXT: xxswapd v2, vs0102; CHECK-P8-NEXT: bl nearbyintf128103; CHECK-P8-NEXT: nop104; CHECK-P8-NEXT: xxswapd vs0, v2105; CHECK-P8-NEXT: stxvd2x vs0, 0, r30106; CHECK-P8-NEXT: addi r1, r1, 48107; CHECK-P8-NEXT: ld r0, 16(r1)108; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload109; CHECK-P8-NEXT: mtlr r0110; CHECK-P8-NEXT: blr111entry:112 %0 = load fp128, ptr %a, align 16113 %1 = tail call fp128 @llvm.nearbyint.f128(fp128 %0)114 store fp128 %1, ptr %res, align 16115 ret void116}117declare fp128 @llvm.nearbyint.f128(fp128 %Val)118 119define void @qp_round(ptr nocapture readonly %a, ptr nocapture %res) {120; CHECK-LABEL: qp_round:121; CHECK: # %bb.0: # %entry122; CHECK-NEXT: lxv v2, 0(r3)123; CHECK-NEXT: xsrqpi 0, v2, v2, 0124; CHECK-NEXT: stxv v2, 0(r4)125; CHECK-NEXT: blr126;127; CHECK-P8-LABEL: qp_round:128; CHECK-P8: # %bb.0: # %entry129; CHECK-P8-NEXT: mflr r0130; CHECK-P8-NEXT: .cfi_def_cfa_offset 48131; CHECK-P8-NEXT: .cfi_offset lr, 16132; CHECK-P8-NEXT: .cfi_offset r30, -16133; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill134; CHECK-P8-NEXT: stdu r1, -48(r1)135; CHECK-P8-NEXT: std r0, 64(r1)136; CHECK-P8-NEXT: mr r30, r4137; CHECK-P8-NEXT: lxvd2x vs0, 0, r3138; CHECK-P8-NEXT: xxswapd v2, vs0139; CHECK-P8-NEXT: bl roundf128140; CHECK-P8-NEXT: nop141; CHECK-P8-NEXT: xxswapd vs0, v2142; CHECK-P8-NEXT: stxvd2x vs0, 0, r30143; CHECK-P8-NEXT: addi r1, r1, 48144; CHECK-P8-NEXT: ld r0, 16(r1)145; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload146; CHECK-P8-NEXT: mtlr r0147; CHECK-P8-NEXT: blr148entry:149 %0 = load fp128, ptr %a, align 16150 %1 = tail call fp128 @llvm.round.f128(fp128 %0)151 store fp128 %1, ptr %res, align 16152 ret void153}154declare fp128 @llvm.round.f128(fp128 %Val)155 156define void @qp_floor(ptr nocapture readonly %a, ptr nocapture %res) {157; CHECK-LABEL: qp_floor:158; CHECK: # %bb.0: # %entry159; CHECK-NEXT: lxv v2, 0(r3)160; CHECK-NEXT: xsrqpi 1, v2, v2, 3161; CHECK-NEXT: stxv v2, 0(r4)162; CHECK-NEXT: blr163;164; CHECK-P8-LABEL: qp_floor:165; CHECK-P8: # %bb.0: # %entry166; CHECK-P8-NEXT: mflr r0167; CHECK-P8-NEXT: .cfi_def_cfa_offset 48168; CHECK-P8-NEXT: .cfi_offset lr, 16169; CHECK-P8-NEXT: .cfi_offset r30, -16170; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill171; CHECK-P8-NEXT: stdu r1, -48(r1)172; CHECK-P8-NEXT: std r0, 64(r1)173; CHECK-P8-NEXT: mr r30, r4174; CHECK-P8-NEXT: lxvd2x vs0, 0, r3175; CHECK-P8-NEXT: xxswapd v2, vs0176; CHECK-P8-NEXT: bl floorf128177; CHECK-P8-NEXT: nop178; CHECK-P8-NEXT: xxswapd vs0, v2179; CHECK-P8-NEXT: stxvd2x vs0, 0, r30180; CHECK-P8-NEXT: addi r1, r1, 48181; CHECK-P8-NEXT: ld r0, 16(r1)182; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload183; CHECK-P8-NEXT: mtlr r0184; CHECK-P8-NEXT: blr185entry:186 %0 = load fp128, ptr %a, align 16187 %1 = tail call fp128 @llvm.floor.f128(fp128 %0)188 store fp128 %1, ptr %res, align 16189 ret void190}191declare fp128 @llvm.floor.f128(fp128 %Val)192 193define void @qp_ceil(ptr nocapture readonly %a, ptr nocapture %res) {194; CHECK-LABEL: qp_ceil:195; CHECK: # %bb.0: # %entry196; CHECK-NEXT: lxv v2, 0(r3)197; CHECK-NEXT: xsrqpi 1, v2, v2, 2198; CHECK-NEXT: stxv v2, 0(r4)199; CHECK-NEXT: blr200;201; CHECK-P8-LABEL: qp_ceil:202; CHECK-P8: # %bb.0: # %entry203; CHECK-P8-NEXT: mflr r0204; CHECK-P8-NEXT: .cfi_def_cfa_offset 48205; CHECK-P8-NEXT: .cfi_offset lr, 16206; CHECK-P8-NEXT: .cfi_offset r30, -16207; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill208; CHECK-P8-NEXT: stdu r1, -48(r1)209; CHECK-P8-NEXT: std r0, 64(r1)210; CHECK-P8-NEXT: mr r30, r4211; CHECK-P8-NEXT: lxvd2x vs0, 0, r3212; CHECK-P8-NEXT: xxswapd v2, vs0213; CHECK-P8-NEXT: bl ceilf128214; CHECK-P8-NEXT: nop215; CHECK-P8-NEXT: xxswapd vs0, v2216; CHECK-P8-NEXT: stxvd2x vs0, 0, r30217; CHECK-P8-NEXT: addi r1, r1, 48218; CHECK-P8-NEXT: ld r0, 16(r1)219; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload220; CHECK-P8-NEXT: mtlr r0221; CHECK-P8-NEXT: blr222entry:223 %0 = load fp128, ptr %a, align 16224 %1 = tail call fp128 @llvm.ceil.f128(fp128 %0)225 store fp128 %1, ptr %res, align 16226 ret void227}228declare fp128 @llvm.ceil.f128(fp128 %Val)229 230