diff options
author | Tanya Lattner <tonic@nondot.org> | 2009-08-31 06:12:11 +0000 |
---|---|---|
committer | Tanya Lattner <tonic@nondot.org> | 2009-08-31 06:12:11 +0000 |
commit | 72e4d4b370b44fc02f4bd3370b99393ba8052170 (patch) | |
tree | 7069c65acdf8e1451257b888d4e499a0d94c4b79 /utils/TableGen/CodeGenDAGPatterns.cpp | |
parent | a729daf695c66532793f72d69a7c27404119bd6c (diff) |
Merge from mainline.
Fix non-determinism in DAGISel emitter.
- This manifested as non-determinism in the .inc output in rare cases (when two
distinct patterns ended up being equivalent, which is rather rare). That
meant the pattern matching was non-deterministic, which could eventually mean
the code generator selected different instructions based on the arch.
- It's probably worth making the DAGISel ensure a total ordering (or force the
user to), but the simple fix here is to totally order the Record* maps based
on a unique ID.
- PR4672, PR4711.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_26@80543 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/CodeGenDAGPatterns.cpp')
-rw-r--r-- | utils/TableGen/CodeGenDAGPatterns.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/utils/TableGen/CodeGenDAGPatterns.cpp b/utils/TableGen/CodeGenDAGPatterns.cpp index efa7fe4ae9..9fa6a09202 100644 --- a/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/utils/TableGen/CodeGenDAGPatterns.cpp @@ -100,6 +100,9 @@ bool isExtVectorInVTs(const std::vector<unsigned char> &EVTs) { } // end namespace EEVT. } // end namespace llvm. +bool RecordPtrCmp::operator()(const Record *LHS, const Record *RHS) const { + return LHS->getID() < RHS->getID(); +} /// Dependent variable map for CodeGenDAGPattern variant generation typedef std::map<std::string, int> DepVarMap; |