parent
c95a7a21b7
commit
321098ebec
|
@ -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