diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-08-23 09:47:37 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-08-23 09:47:37 +0000 |
commit | ced008152fca0b7d382786e1fba206474e0f922a (patch) | |
tree | 8c11fed7527550373021c2065557b4482965d0a8 /llvm/utils/TableGen/CodeGenDAGPatterns.cpp | |
parent | b451afb5f2fc3da4d03a4c2c2197c72bb081aace (diff) | |
download | bcm5719-llvm-ced008152fca0b7d382786e1fba206474e0f922a.tar.gz bcm5719-llvm-ced008152fca0b7d382786e1fba206474e0f922a.zip |
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.
Yay:
--
ddunbar@giles:~$ cat ~/llvm.obj.64/lib/Target/*/*.inc | shasum
d1099ff34b21459a5a3e7021c225c080e6017ece -
ddunbar@giles:~$ cat ~/llvm.obj.ppc/lib/Target/*/*.inc | shasum
d1099ff34b21459a5a3e7021c225c080e6017ece -
--
llvm-svn: 79846
Diffstat (limited to 'llvm/utils/TableGen/CodeGenDAGPatterns.cpp')
-rw-r--r-- | llvm/utils/TableGen/CodeGenDAGPatterns.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp index 2f12a6c4cbe..f0a8c4d74ff 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/llvm/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; |