forked from OSchip/llvm-project
[DAGCombiner][TargetLowering] Pass a SmallVector instead of a std::vector to BuildSDIV/BuildUDIV/etc.
The vector contains the SDNodes that these functions create. The number of nodes is always a small number so we should use SmallVector to avoid a heap allocation. llvm-svn: 338329
This commit is contained in:
parent
a2227a3f9a
commit
2f60ef2c78
|
@ -3490,10 +3490,10 @@ public:
|
|||
//
|
||||
SDValue BuildSDIV(SDNode *N, const APInt &Divisor, SelectionDAG &DAG,
|
||||
bool IsAfterLegalization,
|
||||
std::vector<SDNode *> &Created) const;
|
||||
SmallVectorImpl<SDNode *> &Created) const;
|
||||
SDValue BuildUDIV(SDNode *N, const APInt &Divisor, SelectionDAG &DAG,
|
||||
bool IsAfterLegalization,
|
||||
std::vector<SDNode *> &Created) const;
|
||||
SmallVectorImpl<SDNode *> &Created) const;
|
||||
|
||||
/// Targets may override this function to provide custom SDIV lowering for
|
||||
/// power-of-2 denominators. If the target returns an empty SDValue, LLVM
|
||||
|
@ -3501,7 +3501,7 @@ public:
|
|||
/// operations.
|
||||
virtual SDValue BuildSDIVPow2(SDNode *N, const APInt &Divisor,
|
||||
SelectionDAG &DAG,
|
||||
std::vector<SDNode *> &Created) const;
|
||||
SmallVectorImpl<SDNode *> &Created) const;
|
||||
|
||||
/// Indicate whether this target prefers to combine FDIVs with the same
|
||||
/// divisor. If the transform should never be done, return zero. If the
|
||||
|
|
|
@ -72,7 +72,6 @@
|
|||
#include <string>
|
||||
#include <tuple>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
|
@ -18069,7 +18068,7 @@ SDValue DAGCombiner::BuildSDIV(SDNode *N) {
|
|||
if (C->isNullValue())
|
||||
return SDValue();
|
||||
|
||||
std::vector<SDNode *> Built;
|
||||
SmallVector<SDNode *, 8> Built;
|
||||
SDValue S =
|
||||
TLI.BuildSDIV(N, C->getAPIntValue(), DAG, LegalOperations, Built);
|
||||
|
||||
|
@ -18089,7 +18088,7 @@ SDValue DAGCombiner::BuildSDIVPow2(SDNode *N) {
|
|||
if (C->isNullValue())
|
||||
return SDValue();
|
||||
|
||||
std::vector<SDNode *> Built;
|
||||
SmallVector<SDNode *, 8> Built;
|
||||
SDValue S = TLI.BuildSDIVPow2(N, C->getAPIntValue(), DAG, Built);
|
||||
|
||||
for (SDNode *N : Built)
|
||||
|
@ -18115,7 +18114,7 @@ SDValue DAGCombiner::BuildUDIV(SDNode *N) {
|
|||
if (C->isNullValue())
|
||||
return SDValue();
|
||||
|
||||
std::vector<SDNode *> Built;
|
||||
SmallVector<SDNode *, 8> Built;
|
||||
SDValue S =
|
||||
TLI.BuildUDIV(N, C->getAPIntValue(), DAG, LegalOperations, Built);
|
||||
|
||||
|
|
|
@ -3421,7 +3421,7 @@ void TargetLowering::ComputeConstraintToUse(AsmOperandInfo &OpInfo,
|
|||
/// with the multiplicative inverse of the constant.
|
||||
static SDValue BuildExactSDIV(const TargetLowering &TLI, SDValue Op1, APInt d,
|
||||
const SDLoc &dl, SelectionDAG &DAG,
|
||||
std::vector<SDNode *> &Created) {
|
||||
SmallVectorImpl<SDNode *> &Created) {
|
||||
assert(d != 0 && "Division by zero!");
|
||||
|
||||
// Shift the value upfront if it is even, so the LSB is one.
|
||||
|
@ -3450,8 +3450,8 @@ static SDValue BuildExactSDIV(const TargetLowering &TLI, SDValue Op1, APInt d,
|
|||
}
|
||||
|
||||
SDValue TargetLowering::BuildSDIVPow2(SDNode *N, const APInt &Divisor,
|
||||
SelectionDAG &DAG,
|
||||
std::vector<SDNode *> &Created) const {
|
||||
SelectionDAG &DAG,
|
||||
SmallVectorImpl<SDNode *> &Created) const {
|
||||
AttributeList Attr = DAG.getMachineFunction().getFunction().getAttributes();
|
||||
const TargetLowering &TLI = DAG.getTargetLoweringInfo();
|
||||
if (TLI.isIntDivCheap(N->getValueType(0), Attr))
|
||||
|
@ -3465,7 +3465,7 @@ SDValue TargetLowering::BuildSDIVPow2(SDNode *N, const APInt &Divisor,
|
|||
/// Ref: "Hacker's Delight" or "The PowerPC Compiler Writer's Guide".
|
||||
SDValue TargetLowering::BuildSDIV(SDNode *N, const APInt &Divisor,
|
||||
SelectionDAG &DAG, bool IsAfterLegalization,
|
||||
std::vector<SDNode *> &Created) const {
|
||||
SmallVectorImpl<SDNode *> &Created) const {
|
||||
EVT VT = N->getValueType(0);
|
||||
SDLoc dl(N);
|
||||
|
||||
|
@ -3530,7 +3530,7 @@ SDValue TargetLowering::BuildSDIV(SDNode *N, const APInt &Divisor,
|
|||
/// Ref: "Hacker's Delight" or "The PowerPC Compiler Writer's Guide".
|
||||
SDValue TargetLowering::BuildUDIV(SDNode *N, const APInt &Divisor,
|
||||
SelectionDAG &DAG, bool IsAfterLegalization,
|
||||
std::vector<SDNode *> &Created) const {
|
||||
SmallVectorImpl<SDNode *> &Created) const {
|
||||
EVT VT = N->getValueType(0);
|
||||
SDLoc dl(N);
|
||||
auto &DL = DAG.getDataLayout();
|
||||
|
|
|
@ -8580,7 +8580,7 @@ static SDValue performXorCombine(SDNode *N, SelectionDAG &DAG,
|
|||
SDValue
|
||||
AArch64TargetLowering::BuildSDIVPow2(SDNode *N, const APInt &Divisor,
|
||||
SelectionDAG &DAG,
|
||||
std::vector<SDNode *> &Created) const {
|
||||
SmallVectorImpl<SDNode *> &Created) const {
|
||||
AttributeList Attr = DAG.getMachineFunction().getFunction().getAttributes();
|
||||
if (isIntDivCheap(N->getValueType(0), Attr))
|
||||
return SDValue(N,0); // Lower SDIV as SDIV
|
||||
|
|
|
@ -644,7 +644,7 @@ private:
|
|||
SelectionDAG &DAG) const;
|
||||
|
||||
SDValue BuildSDIVPow2(SDNode *N, const APInt &Divisor, SelectionDAG &DAG,
|
||||
std::vector<SDNode *> &Created) const override;
|
||||
SmallVectorImpl<SDNode *> &Created) const override;
|
||||
SDValue getSqrtEstimate(SDValue Operand, SelectionDAG &DAG, int Enabled,
|
||||
int &ExtraSteps, bool &UseOneConst,
|
||||
bool Reciprocal) const override;
|
||||
|
|
|
@ -13104,8 +13104,8 @@ SDValue PPCTargetLowering::PerformDAGCombine(SDNode *N,
|
|||
|
||||
SDValue
|
||||
PPCTargetLowering::BuildSDIVPow2(SDNode *N, const APInt &Divisor,
|
||||
SelectionDAG &DAG,
|
||||
std::vector<SDNode *> &Created) const {
|
||||
SelectionDAG &DAG,
|
||||
SmallVectorImpl<SDNode *> &Created) const {
|
||||
// fold (sdiv X, pow2)
|
||||
EVT VT = N->getValueType(0);
|
||||
if (VT == MVT::i64 && !Subtarget.isPPC64())
|
||||
|
|
|
@ -665,7 +665,7 @@ namespace llvm {
|
|||
SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const override;
|
||||
|
||||
SDValue BuildSDIVPow2(SDNode *N, const APInt &Divisor, SelectionDAG &DAG,
|
||||
std::vector<SDNode *> &Created) const override;
|
||||
SmallVectorImpl<SDNode *> &Created) const override;
|
||||
|
||||
unsigned getRegisterByName(const char* RegName, EVT VT,
|
||||
SelectionDAG &DAG) const override;
|
||||
|
|
Loading…
Reference in New Issue