summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorPetar Avramovic <Petar.Avramovic@rt-rk.com>2019-10-24 13:45:26 +0200
committerPetar Avramovic <Petar.Avramovic@rt-rk.com>2019-10-24 13:45:26 +0200
commite3b49df50e4f463f1b0bed5a0a476eafafd1d426 (patch)
tree20a60da18537df99a5cc6b5259a575d9e0d5ea76 /llvm/lib/Target
parent1ae8e8d25fd87048d3d8d7429308e52b236c79a1 (diff)
downloadbcm5719-llvm-e3b49df50e4f463f1b0bed5a0a476eafafd1d426.tar.gz
bcm5719-llvm-e3b49df50e4f463f1b0bed5a0a476eafafd1d426.zip
[MIPS GlobalISel] Select MSA vector generic and builtin fabs
selectImpl is able to select G_FABS when we set bank for vector operands to fprb. Add detailed tests. Note: G_FABS is generated from llvm-ir intrinsics llvm.fabs.*, and at the moment MIPS is not able to generate this intrinsic for vector type (some targets generate vector llvm.fabs.* from calls to a builtin function). We can handle fabs using __builtin_msa_fmax_a_<format> and passing same vector as both arguments. __builtin_msa_fmax_a_<format> will be directly selected into FMAX_A_<format> in legalizeIntrinsic. Differential Revision: https://reviews.llvm.org/D69346
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/Mips/MipsLegalizerInfo.cpp8
-rw-r--r--llvm/lib/Target/Mips/MipsRegisterBankInfo.cpp2
2 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/Target/Mips/MipsLegalizerInfo.cpp b/llvm/lib/Target/Mips/MipsLegalizerInfo.cpp
index f820da3dbc7..087a41cca6e 100644
--- a/llvm/lib/Target/Mips/MipsLegalizerInfo.cpp
+++ b/llvm/lib/Target/Mips/MipsLegalizerInfo.cpp
@@ -188,10 +188,10 @@ MipsLegalizerInfo::MipsLegalizerInfo(const MipsSubtarget &ST) {
getActionDefinitionsBuilder(G_FCONSTANT)
.legalFor({s32, s64});
- getActionDefinitionsBuilder({G_FABS, G_FSQRT})
+ getActionDefinitionsBuilder(G_FSQRT)
.legalFor({s32, s64});
- getActionDefinitionsBuilder({G_FADD, G_FSUB, G_FMUL, G_FDIV})
+ getActionDefinitionsBuilder({G_FADD, G_FSUB, G_FMUL, G_FDIV, G_FABS})
.legalIf([=, &ST](const LegalityQuery &Query) {
if (CheckTyN(0, Query, {s32, s64}))
return true;
@@ -425,6 +425,10 @@ bool MipsLegalizerInfo::legalizeIntrinsic(MachineInstr &MI,
case Intrinsic::mips_fdiv_w:
case Intrinsic::mips_fdiv_d:
return MSA3OpIntrinsicToGeneric(MI, TargetOpcode::G_FDIV, MIRBuilder, ST);
+ case Intrinsic::mips_fmax_a_w:
+ return SelectMSA3OpIntrinsic(MI, Mips::FMAX_A_W, MIRBuilder, ST);
+ case Intrinsic::mips_fmax_a_d:
+ return SelectMSA3OpIntrinsic(MI, Mips::FMAX_A_D, MIRBuilder, ST);
default:
break;
}
diff --git a/llvm/lib/Target/Mips/MipsRegisterBankInfo.cpp b/llvm/lib/Target/Mips/MipsRegisterBankInfo.cpp
index 8af360a33e3..ab4be5fa102 100644
--- a/llvm/lib/Target/Mips/MipsRegisterBankInfo.cpp
+++ b/llvm/lib/Target/Mips/MipsRegisterBankInfo.cpp
@@ -539,7 +539,6 @@ MipsRegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
&Mips::ValueMappings[Mips::GPRIdx]});
MappingID = CustomMappingID;
break;
- case G_FABS:
case G_FSQRT:
OperandsMapping = getFprbMapping(Op0Size);
break;
@@ -547,6 +546,7 @@ MipsRegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
case G_FSUB:
case G_FMUL:
case G_FDIV:
+ case G_FABS:
OperandsMapping = getFprbMapping(Op0Size);
if (Op0Size == 128)
OperandsMapping = getMSAMapping(MF);
OpenPOWER on IntegriCloud