diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-02-05 06:43:12 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-02-05 06:43:12 +0000 |
commit | e41bf82107eb89b7f97233ee2625f107c056cedf (patch) | |
tree | ad60f47800426691cc8884a48a0f712ccb38ec3e /utils/TableGen/DAGISelEmitter.h | |
parent | 029e844994a1effb2f42cd0ddbac55a92d31bf31 (diff) | |
download | external_llvm-e41bf82107eb89b7f97233ee2625f107c056cedf.zip external_llvm-e41bf82107eb89b7f97233ee2625f107c056cedf.tar.gz external_llvm-e41bf82107eb89b7f97233ee2625f107c056cedf.tar.bz2 |
Allow more loads to be folded which were previously prevented from happening
due to ordering issue. i.e. they were selected for chain use first.
Now at load select time, check if it is being selected for a chain use and if
it has only a single real use. If so, return a HANDLENODE (with the load as
its operand) in its place and record it.
When it is folded or the load is selected for a real use, the isel records it
as the replacement for the HANDLENODE. The replacement is done when all nodes
are selected.
This scheme exposed a couple of problems where cycles can happen. (See comments
in EmitMatchCode() for descriptions of the problems and their workaround /
solutions.) These problems have been resolved with a small compile time
penality.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25995 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/DAGISelEmitter.h')
-rw-r--r-- | utils/TableGen/DAGISelEmitter.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/utils/TableGen/DAGISelEmitter.h b/utils/TableGen/DAGISelEmitter.h index 04a87b7..0cc1dbf 100644 --- a/utils/TableGen/DAGISelEmitter.h +++ b/utils/TableGen/DAGISelEmitter.h @@ -471,7 +471,8 @@ private: std::vector<Record*> &InstImpInputs, std::vector<Record*> &InstImpResults); void GenerateCodeForPattern(PatternToMatch &Pattern, - std::vector<std::pair<bool, std::string> > &GeneratedCode); + std::vector<std::pair<bool, std::string> > &GeneratedCode, + bool UseGoto); void EmitPatterns(std::vector<std::pair<PatternToMatch*, std::vector<std::pair<bool, std::string> > > > &Patterns, unsigned Indent, std::ostream &OS); |