mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-10-03 08:55:51 +00:00
Fix nondeterministic behavior.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93093 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4f37978b90
commit
5c1735a4df
@ -45,7 +45,7 @@ AggregateArgsOpt("aggregate-extracted-args", cl::Hidden,
|
|||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
class CodeExtractor {
|
class CodeExtractor {
|
||||||
typedef std::vector<Value*> Values;
|
typedef SetVector<Value*> Values;
|
||||||
SetVector<BasicBlock*> BlocksToExtract;
|
SetVector<BasicBlock*> BlocksToExtract;
|
||||||
DominatorTree* DT;
|
DominatorTree* DT;
|
||||||
bool AggregateArgs;
|
bool AggregateArgs;
|
||||||
@ -216,13 +216,13 @@ void CodeExtractor::findInputsOutputs(Values &inputs, Values &outputs) {
|
|||||||
// instruction is used outside the region, it's an output.
|
// instruction is used outside the region, it's an output.
|
||||||
for (User::op_iterator O = I->op_begin(), E = I->op_end(); O != E; ++O)
|
for (User::op_iterator O = I->op_begin(), E = I->op_end(); O != E; ++O)
|
||||||
if (definedInCaller(*O))
|
if (definedInCaller(*O))
|
||||||
inputs.push_back(*O);
|
inputs.insert(*O);
|
||||||
|
|
||||||
// Consider uses of this instruction (outputs).
|
// Consider uses of this instruction (outputs).
|
||||||
for (Value::use_iterator UI = I->use_begin(), E = I->use_end();
|
for (Value::use_iterator UI = I->use_begin(), E = I->use_end();
|
||||||
UI != E; ++UI)
|
UI != E; ++UI)
|
||||||
if (!definedInRegion(*UI)) {
|
if (!definedInRegion(*UI)) {
|
||||||
outputs.push_back(I);
|
outputs.insert(I);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} // for: insts
|
} // for: insts
|
||||||
@ -235,12 +235,6 @@ void CodeExtractor::findInputsOutputs(Values &inputs, Values &outputs) {
|
|||||||
} // for: basic blocks
|
} // for: basic blocks
|
||||||
|
|
||||||
NumExitBlocks = ExitBlocks.size();
|
NumExitBlocks = ExitBlocks.size();
|
||||||
|
|
||||||
// Eliminate duplicates.
|
|
||||||
std::sort(inputs.begin(), inputs.end());
|
|
||||||
inputs.erase(std::unique(inputs.begin(), inputs.end()), inputs.end());
|
|
||||||
std::sort(outputs.begin(), outputs.end());
|
|
||||||
outputs.erase(std::unique(outputs.begin(), outputs.end()), outputs.end());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// constructFunction - make a function based on inputs and outputs, as follows:
|
/// constructFunction - make a function based on inputs and outputs, as follows:
|
||||||
|
Loading…
Reference in New Issue
Block a user