Bug 937540 part 3 - Use placement new for GVN ValueNumberData. r=mjrosenb

This commit is contained in:
Jan de Mooij 2013-11-16 10:15:33 +01:00
parent 386698f8bf
commit 3ddbcbd3ee
2 changed files with 11 additions and 4 deletions

View File

@ -20,6 +20,12 @@ ValueNumberer::ValueNumberer(MIRGenerator *mir, MIRGraph &graph, bool optimistic
count_(0)
{ }
TempAllocator &
ValueNumberer::alloc() const
{
return mir->temp();
}
uint32_t
ValueNumberer::lookupValue(MDefinition *ins)
{
@ -51,7 +57,7 @@ ValueNumberer::simplify(MDefinition *def, bool useValueNumbers)
// ensure this instruction has a VN
if (!ins->valueNumberData())
ins->setValueNumberData(new ValueNumberData);
ins->setValueNumberData(new(alloc()) ValueNumberData);
if (!ins->block()) {
// In this case, we made a new def by constant folding, for
// example, we replaced add(#3,#4) with a new const(#7) node.
@ -83,7 +89,7 @@ ValueNumberer::simplifyControlInstruction(MControlInstruction *def)
// Ensure this instruction has a value number.
if (!repl->valueNumberData())
repl->setValueNumberData(new ValueNumberData);
repl->setValueNumberData(new(alloc()) ValueNumberData);
MBasicBlock *block = def->block();
@ -177,9 +183,9 @@ ValueNumberer::computeValueNumbers()
if (mir->shouldCancel("Value Numbering (preparation loop"))
return false;
for (MDefinitionIterator iter(*block); iter; iter++)
iter->setValueNumberData(new ValueNumberData);
iter->setValueNumberData(new(alloc()) ValueNumberData);
MControlInstruction *jump = block->lastIns();
jump->setValueNumberData(new ValueNumberData);
jump->setValueNumberData(new(alloc()) ValueNumberData);
}
// Assign unique value numbers if pessimistic.

View File

@ -50,6 +50,7 @@ class ValueNumberer
IonAllocPolicy> InstructionMap;
protected:
TempAllocator &alloc() const;
uint32_t lookupValue(MDefinition *ins);
MDefinition *findDominatingDef(InstructionMap &defs, MDefinition *ins, size_t index);