forked from OSchip/llvm-project
parent
e7d49862a5
commit
dcb2b83886
|
@ -25,6 +25,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
class AliasAnalysis;
|
||||||
class TargetLowering;
|
class TargetLowering;
|
||||||
class TargetMachine;
|
class TargetMachine;
|
||||||
class MachineDebugInfo;
|
class MachineDebugInfo;
|
||||||
|
@ -116,7 +117,7 @@ public:
|
||||||
/// certain types of nodes together, or eliminating superfluous nodes. When
|
/// certain types of nodes together, or eliminating superfluous nodes. When
|
||||||
/// the AfterLegalize argument is set to 'true', Combine takes care not to
|
/// the AfterLegalize argument is set to 'true', Combine takes care not to
|
||||||
/// generate any nodes that will be illegal on the target.
|
/// generate any nodes that will be illegal on the target.
|
||||||
void Combine(bool AfterLegalize);
|
void Combine(bool AfterLegalize, AliasAnalysis &AA);
|
||||||
|
|
||||||
/// Legalize - This transforms the SelectionDAG into a SelectionDAG that is
|
/// Legalize - This transforms the SelectionDAG into a SelectionDAG that is
|
||||||
/// compatible with the target instruction selector, as indicated by the
|
/// compatible with the target instruction selector, as indicated by the
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
#define DEBUG_TYPE "dagcombine"
|
#define DEBUG_TYPE "dagcombine"
|
||||||
#include "llvm/ADT/Statistic.h"
|
#include "llvm/ADT/Statistic.h"
|
||||||
|
#include "llvm/Analysis/AliasAnalysis.h"
|
||||||
#include "llvm/CodeGen/SelectionDAG.h"
|
#include "llvm/CodeGen/SelectionDAG.h"
|
||||||
#include "llvm/Support/Debug.h"
|
#include "llvm/Support/Debug.h"
|
||||||
#include "llvm/Support/MathExtras.h"
|
#include "llvm/Support/MathExtras.h"
|
||||||
|
@ -60,6 +61,9 @@ namespace {
|
||||||
// Worklist of all of the nodes that need to be simplified.
|
// Worklist of all of the nodes that need to be simplified.
|
||||||
std::vector<SDNode*> WorkList;
|
std::vector<SDNode*> WorkList;
|
||||||
|
|
||||||
|
// AA - Used for DAG load/store alias analysis.
|
||||||
|
AliasAnalysis &AA;
|
||||||
|
|
||||||
/// AddUsersToWorkList - When an instruction is simplified, add all users of
|
/// AddUsersToWorkList - When an instruction is simplified, add all users of
|
||||||
/// the instruction to the work lists because they might get more simplified
|
/// the instruction to the work lists because they might get more simplified
|
||||||
/// now.
|
/// now.
|
||||||
|
@ -262,8 +266,11 @@ namespace {
|
||||||
SDOperand FindBetterChain(SDNode *N, SDOperand Chain);
|
SDOperand FindBetterChain(SDNode *N, SDOperand Chain);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DAGCombiner(SelectionDAG &D)
|
DAGCombiner(SelectionDAG &D, AliasAnalysis &A)
|
||||||
: DAG(D), TLI(D.getTargetLoweringInfo()), AfterLegalize(false) {}
|
: DAG(D),
|
||||||
|
TLI(D.getTargetLoweringInfo()),
|
||||||
|
AfterLegalize(false),
|
||||||
|
AA(A) {}
|
||||||
|
|
||||||
/// Run - runs the dag combiner on all nodes in the work list
|
/// Run - runs the dag combiner on all nodes in the work list
|
||||||
void Run(bool RunningAfterLegalize);
|
void Run(bool RunningAfterLegalize);
|
||||||
|
@ -4133,8 +4140,8 @@ SDOperand DAGCombiner::FindBetterChain(SDNode *N, SDOperand OldChain) {
|
||||||
|
|
||||||
// SelectionDAG::Combine - This is the entry point for the file.
|
// SelectionDAG::Combine - This is the entry point for the file.
|
||||||
//
|
//
|
||||||
void SelectionDAG::Combine(bool RunningAfterLegalize) {
|
void SelectionDAG::Combine(bool RunningAfterLegalize, AliasAnalysis &AA) {
|
||||||
/// run - This is the main entry point to this class.
|
/// run - This is the main entry point to this class.
|
||||||
///
|
///
|
||||||
DAGCombiner(*this).Run(RunningAfterLegalize);
|
DAGCombiner(*this, AA).Run(RunningAfterLegalize);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#define DEBUG_TYPE "isel"
|
#define DEBUG_TYPE "isel"
|
||||||
|
#include "llvm/Analysis/AliasAnalysis.h"
|
||||||
#include "llvm/CodeGen/SelectionDAGISel.h"
|
#include "llvm/CodeGen/SelectionDAGISel.h"
|
||||||
#include "llvm/CodeGen/ScheduleDAG.h"
|
#include "llvm/CodeGen/ScheduleDAG.h"
|
||||||
#include "llvm/CallingConv.h"
|
#include "llvm/CallingConv.h"
|
||||||
|
@ -2951,6 +2952,7 @@ unsigned SelectionDAGISel::MakeReg(MVT::ValueType VT) {
|
||||||
void SelectionDAGISel::getAnalysisUsage(AnalysisUsage &AU) const {
|
void SelectionDAGISel::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||||
// FIXME: we only modify the CFG to split critical edges. This
|
// FIXME: we only modify the CFG to split critical edges. This
|
||||||
// updates dom and loop info.
|
// updates dom and loop info.
|
||||||
|
AU.addRequired<AliasAnalysis>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3546,8 +3548,11 @@ void SelectionDAGISel::BuildSelectionDAG(SelectionDAG &DAG, BasicBlock *LLVMBB,
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectionDAGISel::CodeGenAndEmitDAG(SelectionDAG &DAG) {
|
void SelectionDAGISel::CodeGenAndEmitDAG(SelectionDAG &DAG) {
|
||||||
|
// Get alias analysis for load/store combining.
|
||||||
|
AliasAnalysis &AA = getAnalysis<AliasAnalysis>();
|
||||||
|
|
||||||
// Run the DAG combiner in pre-legalize mode.
|
// Run the DAG combiner in pre-legalize mode.
|
||||||
DAG.Combine(false);
|
DAG.Combine(false, AA);
|
||||||
|
|
||||||
DEBUG(std::cerr << "Lowered selection DAG:\n");
|
DEBUG(std::cerr << "Lowered selection DAG:\n");
|
||||||
DEBUG(DAG.dump());
|
DEBUG(DAG.dump());
|
||||||
|
@ -3560,7 +3565,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG(SelectionDAG &DAG) {
|
||||||
DEBUG(DAG.dump());
|
DEBUG(DAG.dump());
|
||||||
|
|
||||||
// Run the DAG combiner in post-legalize mode.
|
// Run the DAG combiner in post-legalize mode.
|
||||||
DAG.Combine(true);
|
DAG.Combine(true, AA);
|
||||||
|
|
||||||
if (ViewISelDAGs) DAG.viewGraph();
|
if (ViewISelDAGs) DAG.viewGraph();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue