mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-13 23:18:58 +00:00
Fix sanity-checking in 'maskUnsigned' code to be more precise:
use or def-and-use operands can be substituted after one def-only operand has been substituted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7674 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7d3c5795f9
commit
97a95bdbdd
@ -2859,9 +2859,19 @@ GetInstructionsByRule(InstructionNode* subtreeRoot,
|
||||
|
||||
unsigned numSubst = 0;
|
||||
for (unsigned i=0, N=mvec.size(); i < N; ++i) {
|
||||
|
||||
// Make sure we substitute all occurrences of dest in these instrs.
|
||||
// Otherwise, we will have bogus code.
|
||||
bool someArgsWereIgnored = false;
|
||||
numSubst += mvec[i]->substituteValue(dest, tmpI, /*defsOnly*/ true,
|
||||
/*defsAndUses*/ false,
|
||||
|
||||
// Make sure not to substitute an upwards-exposed use -- that would
|
||||
// introduce a use of `tmpI' with no preceding def. Therefore,
|
||||
// substitute a use or def-and-use operand only if a previous def
|
||||
// operand has already been substituted (i.e., numSusbt > 0).
|
||||
//
|
||||
numSubst += mvec[i]->substituteValue(dest, tmpI,
|
||||
/*defsOnly*/ numSubst == 0,
|
||||
/*notDefsAndUses*/ numSubst > 0,
|
||||
someArgsWereIgnored);
|
||||
assert(!someArgsWereIgnored &&
|
||||
"Operand `dest' exists but not replaced: probably bogus!");
|
||||
|
Loading…
Reference in New Issue
Block a user