forked from OSchip/llvm-project
Make MachineRegisterInfo::getVRegDef more efficient by aiming the keep the def of the vreg at the start of the list, so the list doesn't need to be traversed.
llvm-svn: 45483
This commit is contained in:
parent
0cb9dd7aa2
commit
caaf8aae4d
|
@ -42,17 +42,23 @@ void MachineOperand::AddRegOperandToRegInfo(MachineRegisterInfo *RegInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, add this operand to the head of the registers use/def list.
|
// Otherwise, add this operand to the head of the registers use/def list.
|
||||||
MachineOperand *&Head = RegInfo->getRegUseDefListHead(getReg());
|
MachineOperand **Head = &RegInfo->getRegUseDefListHead(getReg());
|
||||||
|
|
||||||
Contents.Reg.Next = Head;
|
// For SSA values, we prefer to keep the definition at the start of the list.
|
||||||
|
// we do this by skipping over the definition if it is at the head of the
|
||||||
|
// list.
|
||||||
|
if (*Head && (*Head)->isDef())
|
||||||
|
Head = &(*Head)->Contents.Reg.Next;
|
||||||
|
|
||||||
|
Contents.Reg.Next = *Head;
|
||||||
if (Contents.Reg.Next) {
|
if (Contents.Reg.Next) {
|
||||||
assert(getReg() == Contents.Reg.Next->getReg() &&
|
assert(getReg() == Contents.Reg.Next->getReg() &&
|
||||||
"Different regs on the same list!");
|
"Different regs on the same list!");
|
||||||
Contents.Reg.Next->Contents.Reg.Prev = &Contents.Reg.Next;
|
Contents.Reg.Next->Contents.Reg.Prev = &Contents.Reg.Next;
|
||||||
}
|
}
|
||||||
|
|
||||||
Contents.Reg.Prev = &Head;
|
Contents.Reg.Prev = Head;
|
||||||
Head = this;
|
*Head = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MachineOperand::setReg(unsigned Reg) {
|
void MachineOperand::setReg(unsigned Reg) {
|
||||||
|
|
Loading…
Reference in New Issue