[llvm] e90110e - [NFC][CodeGen] Use ArrayRef in TargetLowering functions
Shao-Ce SUN via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 12 09:46:25 PDT 2022
Author: Shao-Ce SUN
Date: 2022-04-13T00:46:05+08:00
New Revision: e90110e696c72e5f1f72df6d11a71acf38e4e400
URL: https://github.com/llvm/llvm-project/commit/e90110e696c72e5f1f72df6d11a71acf38e4e400
DIFF: https://github.com/llvm/llvm-project/commit/e90110e696c72e5f1f72df6d11a71acf38e4e400.diff
LOG: [NFC][CodeGen] Use ArrayRef in TargetLowering functions
This patch is similar to D122557, adding an `ArrayRef` version for `setOperationAction`, `setLoadExtAction`, `setCondCodeAction`, `setLibcallName`.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D123467
Added:
Modified:
llvm/include/llvm/CodeGen/TargetLowering.h
llvm/lib/CodeGen/TargetLoweringBase.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h
index 8b7904b5e60f2..5a383244fef98 100644
--- a/llvm/include/llvm/CodeGen/TargetLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetLowering.h
@@ -2249,21 +2249,33 @@ class TargetLoweringBase {
/// Indicate that the specified operation does not work with the specified
/// type and indicate what to do about it. Note that VT may refer to either
/// the type of a result or that of an operand of Op.
- void setOperationAction(unsigned Op, MVT VT, LegalizeAction Action) {
- assert(Op < array_lengthof(OpActions[0]) && "Table isn't big enough!");
- OpActions[(unsigned)VT.SimpleTy][Op] = Action;
+ void setOperationAction(ArrayRef<unsigned> Ops, MVT VT,
+ LegalizeAction Action) {
+ for (auto Op : Ops) {
+ assert(Op < array_lengthof(OpActions[0]) && "Table isn't big enough!");
+ OpActions[(unsigned)VT.SimpleTy][Op] = Action;
+ }
+ }
+ void setOperationAction(ArrayRef<unsigned> Ops, ArrayRef<MVT> VTs,
+ LegalizeAction Action) {
+ for (auto VT : VTs)
+ setOperationAction(Ops, VT, Action);
}
/// Indicate that the specified load with extension does not work with the
/// specified type and indicate what to do about it.
- void setLoadExtAction(unsigned ExtType, MVT ValVT, MVT MemVT,
+ void setLoadExtAction(ArrayRef<unsigned> ExtTypes, MVT ValVT, MVT MemVT,
LegalizeAction Action) {
- assert(ExtType < ISD::LAST_LOADEXT_TYPE && ValVT.isValid() &&
- MemVT.isValid() && "Table isn't big enough!");
- assert((unsigned)Action < 0x10 && "too many bits for bitfield array");
- unsigned Shift = 4 * ExtType;
- LoadExtActions[ValVT.SimpleTy][MemVT.SimpleTy] &= ~((uint16_t)0xF << Shift);
- LoadExtActions[ValVT.SimpleTy][MemVT.SimpleTy] |= (uint16_t)Action << Shift;
+ for (auto ExtType : ExtTypes) {
+ assert(ExtType < ISD::LAST_LOADEXT_TYPE && ValVT.isValid() &&
+ MemVT.isValid() && "Table isn't big enough!");
+ assert((unsigned)Action < 0x10 && "too many bits for bitfield array");
+ unsigned Shift = 4 * ExtType;
+ LoadExtActions[ValVT.SimpleTy][MemVT.SimpleTy] &=
+ ~((uint16_t)0xF << Shift);
+ LoadExtActions[ValVT.SimpleTy][MemVT.SimpleTy] |= (uint16_t)Action
+ << Shift;
+ }
}
/// Indicate that the specified truncating store does not work with the
@@ -2313,17 +2325,24 @@ class TargetLoweringBase {
/// Indicate that the specified condition code is or isn't supported on the
/// target and indicate what to do about it.
- void setCondCodeAction(ISD::CondCode CC, MVT VT,
+ void setCondCodeAction(ArrayRef<ISD::CondCode> CCs, MVT VT,
LegalizeAction Action) {
- assert(VT.isValid() && (unsigned)CC < array_lengthof(CondCodeActions) &&
- "Table isn't big enough!");
- assert((unsigned)Action < 0x10 && "too many bits for bitfield array");
- /// The lower 3 bits of the SimpleTy index into Nth 4bit set from the 32-bit
- /// value and the upper 29 bits index into the second dimension of the array
- /// to select what 32-bit value to use.
- uint32_t Shift = 4 * (VT.SimpleTy & 0x7);
- CondCodeActions[CC][VT.SimpleTy >> 3] &= ~((uint32_t)0xF << Shift);
- CondCodeActions[CC][VT.SimpleTy >> 3] |= (uint32_t)Action << Shift;
+ for (auto CC : CCs) {
+ assert(VT.isValid() && (unsigned)CC < array_lengthof(CondCodeActions) &&
+ "Table isn't big enough!");
+ assert((unsigned)Action < 0x10 && "too many bits for bitfield array");
+ /// The lower 3 bits of the SimpleTy index into Nth 4bit set from the
+ /// 32-bit value and the upper 29 bits index into the second dimension of
+ /// the array to select what 32-bit value to use.
+ uint32_t Shift = 4 * (VT.SimpleTy & 0x7);
+ CondCodeActions[CC][VT.SimpleTy >> 3] &= ~((uint32_t)0xF << Shift);
+ CondCodeActions[CC][VT.SimpleTy >> 3] |= (uint32_t)Action << Shift;
+ }
+ }
+ void setCondCodeAction(ArrayRef<ISD::CondCode> CCs, ArrayRef<MVT> VTs,
+ LegalizeAction Action) {
+ for (auto VT : VTs)
+ setCondCodeAction(CCs, VT, Action);
}
/// If Opc/OrigVT is specified as being promoted, the promotion code defaults
@@ -2344,14 +2363,11 @@ class TargetLoweringBase {
/// Targets should invoke this method for each target independent node that
/// they want to provide a custom DAG combiner for by implementing the
/// PerformDAGCombine virtual method.
- void setTargetDAGCombine(ISD::NodeType NT) {
- assert(unsigned(NT >> 3) < array_lengthof(TargetDAGCombineArray));
- TargetDAGCombineArray[NT >> 3] |= 1 << (NT&7);
- }
-
void setTargetDAGCombine(ArrayRef<ISD::NodeType> NTs) {
- for (auto NT : NTs)
- setTargetDAGCombine(NT);
+ for (auto NT : NTs) {
+ assert(unsigned(NT >> 3) < array_lengthof(TargetDAGCombineArray));
+ TargetDAGCombineArray[NT >> 3] |= 1 << (NT & 7);
+ }
}
/// Set the target's minimum function alignment.
@@ -2979,8 +2995,9 @@ class TargetLoweringBase {
//
/// Rename the default libcall routine name for the specified libcall.
- void setLibcallName(RTLIB::Libcall Call, const char *Name) {
- LibcallRoutineNames[Call] = Name;
+ void setLibcallName(ArrayRef<RTLIB::Libcall> Calls, const char *Name) {
+ for (auto Call : Calls)
+ LibcallRoutineNames[Call] = Name;
}
/// Get the libcall routine name for the specified libcall.
diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp
index 063f36f9f3b14..ffefce59b46f1 100644
--- a/llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -762,91 +762,62 @@ void TargetLoweringBase::initActions() {
setOperationAction(ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS, VT, Expand);
// These operations default to expand.
- setOperationAction(ISD::FGETSIGN, VT, Expand);
- setOperationAction(ISD::CONCAT_VECTORS, VT, Expand);
- setOperationAction(ISD::FMINNUM, VT, Expand);
- setOperationAction(ISD::FMAXNUM, VT, Expand);
- setOperationAction(ISD::FMINNUM_IEEE, VT, Expand);
- setOperationAction(ISD::FMAXNUM_IEEE, VT, Expand);
- setOperationAction(ISD::FMINIMUM, VT, Expand);
- setOperationAction(ISD::FMAXIMUM, VT, Expand);
- setOperationAction(ISD::FMAD, VT, Expand);
- setOperationAction(ISD::SMIN, VT, Expand);
- setOperationAction(ISD::SMAX, VT, Expand);
- setOperationAction(ISD::UMIN, VT, Expand);
- setOperationAction(ISD::UMAX, VT, Expand);
- setOperationAction(ISD::ABS, VT, Expand);
- setOperationAction(ISD::FSHL, VT, Expand);
- setOperationAction(ISD::FSHR, VT, Expand);
- setOperationAction(ISD::SADDSAT, VT, Expand);
- setOperationAction(ISD::UADDSAT, VT, Expand);
- setOperationAction(ISD::SSUBSAT, VT, Expand);
- setOperationAction(ISD::USUBSAT, VT, Expand);
- setOperationAction(ISD::SSHLSAT, VT, Expand);
- setOperationAction(ISD::USHLSAT, VT, Expand);
- setOperationAction(ISD::SMULFIX, VT, Expand);
- setOperationAction(ISD::SMULFIXSAT, VT, Expand);
- setOperationAction(ISD::UMULFIX, VT, Expand);
- setOperationAction(ISD::UMULFIXSAT, VT, Expand);
- setOperationAction(ISD::SDIVFIX, VT, Expand);
- setOperationAction(ISD::SDIVFIXSAT, VT, Expand);
- setOperationAction(ISD::UDIVFIX, VT, Expand);
- setOperationAction(ISD::UDIVFIXSAT, VT, Expand);
- setOperationAction(ISD::FP_TO_SINT_SAT, VT, Expand);
- setOperationAction(ISD::FP_TO_UINT_SAT, VT, Expand);
+ setOperationAction({ISD::FGETSIGN, ISD::CONCAT_VECTORS,
+ ISD::FMINNUM, ISD::FMAXNUM,
+ ISD::FMINNUM_IEEE, ISD::FMAXNUM_IEEE,
+ ISD::FMINIMUM, ISD::FMAXIMUM,
+ ISD::FMAD, ISD::SMIN,
+ ISD::SMAX, ISD::UMIN,
+ ISD::UMAX, ISD::ABS,
+ ISD::FSHL, ISD::FSHR,
+ ISD::SADDSAT, ISD::UADDSAT,
+ ISD::SSUBSAT, ISD::USUBSAT,
+ ISD::SSHLSAT, ISD::USHLSAT,
+ ISD::SMULFIX, ISD::SMULFIXSAT,
+ ISD::UMULFIX, ISD::UMULFIXSAT,
+ ISD::SDIVFIX, ISD::SDIVFIXSAT,
+ ISD::UDIVFIX, ISD::UDIVFIXSAT,
+ ISD::FP_TO_SINT_SAT, ISD::FP_TO_UINT_SAT},
+ VT, Expand);
// Overflow operations default to expand
- setOperationAction(ISD::SADDO, VT, Expand);
- setOperationAction(ISD::SSUBO, VT, Expand);
- setOperationAction(ISD::UADDO, VT, Expand);
- setOperationAction(ISD::USUBO, VT, Expand);
- setOperationAction(ISD::SMULO, VT, Expand);
- setOperationAction(ISD::UMULO, VT, Expand);
+ setOperationAction({ISD::SADDO, ISD::SSUBO, ISD::UADDO, ISD::USUBO,
+ ISD::SMULO, ISD::UMULO},
+ VT, Expand);
// ADDCARRY operations default to expand
- setOperationAction(ISD::ADDCARRY, VT, Expand);
- setOperationAction(ISD::SUBCARRY, VT, Expand);
- setOperationAction(ISD::SETCCCARRY, VT, Expand);
- setOperationAction(ISD::SADDO_CARRY, VT, Expand);
- setOperationAction(ISD::SSUBO_CARRY, VT, Expand);
+ setOperationAction({ISD::ADDCARRY, ISD::SUBCARRY, ISD::SETCCCARRY,
+ ISD::SADDO_CARRY, ISD::SSUBO_CARRY},
+ VT, Expand);
// ADDC/ADDE/SUBC/SUBE default to expand.
- setOperationAction(ISD::ADDC, VT, Expand);
- setOperationAction(ISD::ADDE, VT, Expand);
- setOperationAction(ISD::SUBC, VT, Expand);
- setOperationAction(ISD::SUBE, VT, Expand);
+ setOperationAction({ISD::ADDC, ISD::ADDE, ISD::SUBC, ISD::SUBE}, VT,
+ Expand);
// Halving adds
- setOperationAction(ISD::AVGFLOORS, VT, Expand);
- setOperationAction(ISD::AVGFLOORU, VT, Expand);
- setOperationAction(ISD::AVGCEILS, VT, Expand);
- setOperationAction(ISD::AVGCEILU, VT, Expand);
+ setOperationAction(
+ {ISD::AVGFLOORS, ISD::AVGFLOORU, ISD::AVGCEILS, ISD::AVGCEILU}, VT,
+ Expand);
// Absolute
diff erence
- setOperationAction(ISD::ABDS, VT, Expand);
- setOperationAction(ISD::ABDU, VT, Expand);
+ setOperationAction({ISD::ABDS, ISD::ABDU}, VT, Expand);
// These default to Expand so they will be expanded to CTLZ/CTTZ by default.
- setOperationAction(ISD::CTLZ_ZERO_UNDEF, VT, Expand);
- setOperationAction(ISD::CTTZ_ZERO_UNDEF, VT, Expand);
+ setOperationAction({ISD::CTLZ_ZERO_UNDEF, ISD::CTTZ_ZERO_UNDEF}, VT,
+ Expand);
- setOperationAction(ISD::BITREVERSE, VT, Expand);
- setOperationAction(ISD::PARITY, VT, Expand);
+ setOperationAction({ISD::BITREVERSE, ISD::PARITY}, VT, Expand);
// These library functions default to expand.
- setOperationAction(ISD::FROUND, VT, Expand);
- setOperationAction(ISD::FROUNDEVEN, VT, Expand);
- setOperationAction(ISD::FPOWI, VT, Expand);
+ setOperationAction({ISD::FROUND, ISD::FROUNDEVEN, ISD::FPOWI}, VT, Expand);
// These operations default to expand for vector types.
- if (VT.isVector()) {
- setOperationAction(ISD::FCOPYSIGN, VT, Expand);
- setOperationAction(ISD::SIGN_EXTEND_INREG, VT, Expand);
- setOperationAction(ISD::ANY_EXTEND_VECTOR_INREG, VT, Expand);
- setOperationAction(ISD::SIGN_EXTEND_VECTOR_INREG, VT, Expand);
- setOperationAction(ISD::ZERO_EXTEND_VECTOR_INREG, VT, Expand);
- setOperationAction(ISD::SPLAT_VECTOR, VT, Expand);
- }
+ if (VT.isVector())
+ setOperationAction({ISD::FCOPYSIGN, ISD::SIGN_EXTEND_INREG,
+ ISD::ANY_EXTEND_VECTOR_INREG,
+ ISD::SIGN_EXTEND_VECTOR_INREG,
+ ISD::ZERO_EXTEND_VECTOR_INREG, ISD::SPLAT_VECTOR},
+ VT, Expand);
// Constrained floating-point operations default to expand.
#define DAG_INSTRUCTION(NAME, NARG, ROUND_MODE, INTRINSIC, DAGN) \
@@ -857,21 +828,13 @@ void TargetLoweringBase::initActions() {
setOperationAction(ISD::GET_DYNAMIC_AREA_OFFSET, VT, Expand);
// Vector reduction default to expand.
- setOperationAction(ISD::VECREDUCE_FADD, VT, Expand);
- setOperationAction(ISD::VECREDUCE_FMUL, VT, Expand);
- setOperationAction(ISD::VECREDUCE_ADD, VT, Expand);
- setOperationAction(ISD::VECREDUCE_MUL, VT, Expand);
- setOperationAction(ISD::VECREDUCE_AND, VT, Expand);
- setOperationAction(ISD::VECREDUCE_OR, VT, Expand);
- setOperationAction(ISD::VECREDUCE_XOR, VT, Expand);
- setOperationAction(ISD::VECREDUCE_SMAX, VT, Expand);
- setOperationAction(ISD::VECREDUCE_SMIN, VT, Expand);
- setOperationAction(ISD::VECREDUCE_UMAX, VT, Expand);
- setOperationAction(ISD::VECREDUCE_UMIN, VT, Expand);
- setOperationAction(ISD::VECREDUCE_FMAX, VT, Expand);
- setOperationAction(ISD::VECREDUCE_FMIN, VT, Expand);
- setOperationAction(ISD::VECREDUCE_SEQ_FADD, VT, Expand);
- setOperationAction(ISD::VECREDUCE_SEQ_FMUL, VT, Expand);
+ setOperationAction(
+ {ISD::VECREDUCE_FADD, ISD::VECREDUCE_FMUL, ISD::VECREDUCE_ADD,
+ ISD::VECREDUCE_MUL, ISD::VECREDUCE_AND, ISD::VECREDUCE_OR,
+ ISD::VECREDUCE_XOR, ISD::VECREDUCE_SMAX, ISD::VECREDUCE_SMIN,
+ ISD::VECREDUCE_UMAX, ISD::VECREDUCE_UMIN, ISD::VECREDUCE_FMAX,
+ ISD::VECREDUCE_FMIN, ISD::VECREDUCE_SEQ_FADD, ISD::VECREDUCE_SEQ_FMUL},
+ VT, Expand);
// Named vector shuffles default to expand.
setOperationAction(ISD::VECTOR_SPLICE, VT, Expand);
@@ -886,30 +849,16 @@ void TargetLoweringBase::initActions() {
// ConstantFP nodes default to expand. Targets can either change this to
// Legal, in which case all fp constants are legal, or use isFPImmLegal()
// to optimize expansions for certain constants.
- setOperationAction(ISD::ConstantFP, MVT::f16, Expand);
- setOperationAction(ISD::ConstantFP, MVT::f32, Expand);
- setOperationAction(ISD::ConstantFP, MVT::f64, Expand);
- setOperationAction(ISD::ConstantFP, MVT::f80, Expand);
- setOperationAction(ISD::ConstantFP, MVT::f128, Expand);
+ setOperationAction(ISD::ConstantFP,
+ {MVT::f16, MVT::f32, MVT::f64, MVT::f80, MVT::f128},
+ Expand);
// These library functions default to expand.
- for (MVT VT : {MVT::f32, MVT::f64, MVT::f128}) {
- setOperationAction(ISD::FCBRT, VT, Expand);
- setOperationAction(ISD::FLOG , VT, Expand);
- setOperationAction(ISD::FLOG2, VT, Expand);
- setOperationAction(ISD::FLOG10, VT, Expand);
- setOperationAction(ISD::FEXP , VT, Expand);
- setOperationAction(ISD::FEXP2, VT, Expand);
- setOperationAction(ISD::FFLOOR, VT, Expand);
- setOperationAction(ISD::FNEARBYINT, VT, Expand);
- setOperationAction(ISD::FCEIL, VT, Expand);
- setOperationAction(ISD::FRINT, VT, Expand);
- setOperationAction(ISD::FTRUNC, VT, Expand);
- setOperationAction(ISD::LROUND, VT, Expand);
- setOperationAction(ISD::LLROUND, VT, Expand);
- setOperationAction(ISD::LRINT, VT, Expand);
- setOperationAction(ISD::LLRINT, VT, Expand);
- }
+ setOperationAction({ISD::FCBRT, ISD::FLOG, ISD::FLOG2, ISD::FLOG10, ISD::FEXP,
+ ISD::FEXP2, ISD::FFLOOR, ISD::FNEARBYINT, ISD::FCEIL,
+ ISD::FRINT, ISD::FTRUNC, ISD::LROUND, ISD::LLROUND,
+ ISD::LRINT, ISD::LLRINT},
+ {MVT::f32, MVT::f64, MVT::f128}, Expand);
// Default ISD::TRAP to expand (which turns it into abort).
setOperationAction(ISD::TRAP, MVT::Other, Expand);
More information about the llvm-commits
mailing list