diff options
author | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-02-20 14:31:27 +0000 |
---|---|---|
committer | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-02-20 14:31:27 +0000 |
commit | b41ce2b392c6e267bed8c00b4ac39aa0d4e2c8ea (patch) | |
tree | 3508f8e1c42ad2f68cd80fa3e6535c36bd1d86cf | |
parent | fda32d266a076af4512c5f10148933a109c4864d (diff) | |
download | bcm5719-llvm-b41ce2b392c6e267bed8c00b4ac39aa0d4e2c8ea.tar.gz bcm5719-llvm-b41ce2b392c6e267bed8c00b4ac39aa0d4e2c8ea.zip |
[globalisel] Separate the SelectionDAG importer from the emitter. NFC
Summary:
In the near future the rules will be sorted between these two steps to
ensure that more important rules are not prevented by less important ones.
Reviewers: t.p.northover, ab, rovka, qcolombet, aditya_nandakumar
Reviewed By: ab
Subscribers: dberris, kristof.beyls, llvm-commits
Differential Revision: https://reviews.llvm.org/D29709
llvm-svn: 295661
-rw-r--r-- | llvm/utils/TableGen/GlobalISelEmitter.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/llvm/utils/TableGen/GlobalISelEmitter.cpp b/llvm/utils/TableGen/GlobalISelEmitter.cpp index a31fba7f212..d867aac8c00 100644 --- a/llvm/utils/TableGen/GlobalISelEmitter.cpp +++ b/llvm/utils/TableGen/GlobalISelEmitter.cpp @@ -45,7 +45,8 @@ using namespace llvm; #define DEBUG_TYPE "gisel-emitter" STATISTIC(NumPatternTotal, "Total number of patterns"); -STATISTIC(NumPatternSkipped, "Number of patterns skipped"); +STATISTIC(NumPatternImported, "Number of patterns imported from SelectionDAG"); +STATISTIC(NumPatternImportsSkipped, "Number of SelectionDAG imports skipped"); STATISTIC(NumPatternEmitted, "Number of patterns emitted"); static cl::opt<bool> WarnOnSkippedPatterns( @@ -55,7 +56,6 @@ static cl::opt<bool> WarnOnSkippedPatterns( cl::init(false)); namespace { -class RuleMatcher; //===- Helper functions ---------------------------------------------------===// @@ -322,7 +322,7 @@ public: return *static_cast<Kind *>(Actions.back().get()); } - void emit(raw_ostream &OS) { + void emit(raw_ostream &OS) const { if (Matchers.empty()) llvm_unreachable("Unexpected empty matcher!"); @@ -516,6 +516,7 @@ Expected<RuleMatcher> GlobalISelEmitter::runOnPattern(const PatternToMatch &P) { } // We're done with this pattern! It's eligible for GISel emission; return it. + ++NumPatternImported; return std::move(M); } @@ -530,6 +531,7 @@ void GlobalISelEmitter::run(raw_ostream &OS) { "(MachineInstr &I) const {\n const MachineRegisterInfo &MRI = " "I.getParent()->getParent()->getRegInfo();\n\n"; + std::vector<RuleMatcher> Rules; // Look through the SelectionDAG patterns we found, possibly emitting some. for (const PatternToMatch &Pat : CGP.ptms()) { ++NumPatternTotal; @@ -544,11 +546,15 @@ void GlobalISelEmitter::run(raw_ostream &OS) { } else { consumeError(std::move(Err)); } - ++NumPatternSkipped; + ++NumPatternImportsSkipped; continue; } - MatcherOrErr->emit(OS); + Rules.push_back(std::move(MatcherOrErr.get())); + } + + for (const auto &Rule : Rules) { + Rule.emit(OS); ++NumPatternEmitted; } |