forked from OSchip/llvm-project
Refactor DAGCombinerInfo. Change the different booleans that indicate if we are before or after different runs of DAGCo, with the CombineLevel enum.
Also, added a new API for checking if we are running before or after the LegalizeVectorOps phase. llvm-svn: 171142
This commit is contained in:
parent
09ce4b9efe
commit
b1dd52450e
|
@ -0,0 +1,25 @@
|
|||
//===-- llvm/CodeGen/DAGCombine.h ------- SelectionDAG Nodes ---*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
|
||||
#ifndef LLVM_CODEGEN_DAGCOMBINE_H
|
||||
#define LLVM_CODEGEN_DAGCOMBINE_H
|
||||
|
||||
namespace llvm {
|
||||
|
||||
enum CombineLevel {
|
||||
BeforeLegalizeTypes,
|
||||
AfterLegalizeTypes,
|
||||
AfterLegalizeVectorOps,
|
||||
AfterLegalizeDAG
|
||||
};
|
||||
|
||||
} // end llvm namespace
|
||||
|
||||
#endif
|
|
@ -18,6 +18,7 @@
|
|||
#include "llvm/ADT/DenseSet.h"
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include "llvm/ADT/ilist.h"
|
||||
#include "llvm/CodeGen/DAGCombine.h"
|
||||
#include "llvm/CodeGen/SelectionDAGNodes.h"
|
||||
#include "llvm/Support/RecyclingAllocator.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
|
@ -111,13 +112,6 @@ public:
|
|||
DbgIterator ByvalParmDbgEnd() { return ByvalParmDbgValues.end(); }
|
||||
};
|
||||
|
||||
enum CombineLevel {
|
||||
BeforeLegalizeTypes,
|
||||
AfterLegalizeTypes,
|
||||
AfterLegalizeVectorOps,
|
||||
AfterLegalizeDAG
|
||||
};
|
||||
|
||||
class SelectionDAG;
|
||||
void checkForCycles(const SDNode *N);
|
||||
void checkForCycles(const SelectionDAG *DAG);
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "llvm/AddressingMode.h"
|
||||
#include "llvm/Attributes.h"
|
||||
#include "llvm/CallingConv.h"
|
||||
#include "llvm/CodeGen/DAGCombine.h"
|
||||
#include "llvm/CodeGen/RuntimeLibcalls.h"
|
||||
#include "llvm/CodeGen/SelectionDAGNodes.h"
|
||||
#include "llvm/InlineAsm.h"
|
||||
|
@ -963,18 +964,19 @@ public:
|
|||
|
||||
struct DAGCombinerInfo {
|
||||
void *DC; // The DAG Combiner object.
|
||||
bool BeforeLegalize;
|
||||
bool BeforeLegalizeOps;
|
||||
CombineLevel Level;
|
||||
bool CalledByLegalizer;
|
||||
public:
|
||||
SelectionDAG &DAG;
|
||||
|
||||
DAGCombinerInfo(SelectionDAG &dag, bool bl, bool blo, bool cl, void *dc)
|
||||
: DC(dc), BeforeLegalize(bl), BeforeLegalizeOps(blo),
|
||||
CalledByLegalizer(cl), DAG(dag) {}
|
||||
DAGCombinerInfo(SelectionDAG &dag, CombineLevel level, bool cl, void *dc)
|
||||
: DC(dc), Level(level), CalledByLegalizer(cl), DAG(dag) {}
|
||||
|
||||
bool isBeforeLegalize() const { return BeforeLegalize; }
|
||||
bool isBeforeLegalizeOps() const { return BeforeLegalizeOps; }
|
||||
bool isBeforeLegalize() const { return Level == BeforeLegalizeTypes; }
|
||||
bool isBeforeLegalizeOps() const { return Level < AfterLegalizeVectorOps; }
|
||||
bool isAfterLegalizeVectorOps() const {
|
||||
return Level == AfterLegalizeDAG;
|
||||
}
|
||||
bool isCalledByLegalizer() const { return CalledByLegalizer; }
|
||||
|
||||
void AddToWorklist(SDNode *N);
|
||||
|
|
|
@ -1183,7 +1183,7 @@ SDValue DAGCombiner::combine(SDNode *N) {
|
|||
|
||||
// Expose the DAG combiner to the target combiner impls.
|
||||
TargetLowering::DAGCombinerInfo
|
||||
DagCombineInfo(DAG, !LegalTypes, !LegalOperations, false, this);
|
||||
DagCombineInfo(DAG, Level, false, this);
|
||||
|
||||
RV = TLI.PerformDAGCombine(N, DagCombineInfo);
|
||||
}
|
||||
|
@ -9647,7 +9647,7 @@ SDValue DAGCombiner::SimplifySetCC(EVT VT, SDValue N0,
|
|||
SDValue N1, ISD::CondCode Cond,
|
||||
DebugLoc DL, bool foldBooleans) {
|
||||
TargetLowering::DAGCombinerInfo
|
||||
DagCombineInfo(DAG, !LegalTypes, !LegalOperations, false, this);
|
||||
DagCombineInfo(DAG, Level, false, this);
|
||||
return TLI.SimplifySetCC(VT, N0, N1, Cond, foldBooleans, DagCombineInfo, DL);
|
||||
}
|
||||
|
||||
|
|
|
@ -2549,7 +2549,7 @@ void DAGTypeLegalizer::IntegerExpandSetCCOperands(SDValue &NewLHS,
|
|||
|
||||
// NOTE: on targets without efficient SELECT of bools, we can always use
|
||||
// this identity: (B1 ? B2 : B3) --> (B1 & B2)|(!B1&B3)
|
||||
TargetLowering::DAGCombinerInfo DagCombineInfo(DAG, false, true, true, NULL);
|
||||
TargetLowering::DAGCombinerInfo DagCombineInfo(DAG, AfterLegalizeTypes, true, NULL);
|
||||
SDValue Tmp1, Tmp2;
|
||||
Tmp1 = TLI.SimplifySetCC(TLI.getSetCCResultType(LHSLo.getValueType()),
|
||||
LHSLo, RHSLo, LowCC, false, DagCombineInfo, dl);
|
||||
|
|
Loading…
Reference in New Issue