mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Mark physregs defined by inline asm as implicit.
This is a bit of a hack to make inline asm look more like call instructions. It would be better to produce correct dead flags during isel. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105749 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -821,14 +821,18 @@ EmitSpecialNode(SDNode *Node, bool IsClone, bool IsCloned,
|
||||
case InlineAsm::Kind_RegDef:
|
||||
for (; NumVals; --NumVals, ++i) {
|
||||
unsigned Reg = cast<RegisterSDNode>(Node->getOperand(i))->getReg();
|
||||
MI->addOperand(MachineOperand::CreateReg(Reg, true));
|
||||
// FIXME: Add dead flags for physical and virtual registers defined.
|
||||
// For now, mark physical register defs as implicit to help fast
|
||||
// regalloc. This makes inline asm look a lot like calls.
|
||||
MI->addOperand(MachineOperand::CreateReg(Reg, true,
|
||||
/*isImp=*/ TargetRegisterInfo::isPhysicalRegister(Reg)));
|
||||
}
|
||||
break;
|
||||
case InlineAsm::Kind_RegDefEarlyClobber:
|
||||
for (; NumVals; --NumVals, ++i) {
|
||||
unsigned Reg = cast<RegisterSDNode>(Node->getOperand(i))->getReg();
|
||||
MI->addOperand(MachineOperand::CreateReg(Reg, /*isDef=*/ true,
|
||||
/*isImp=*/ false,
|
||||
/*isImp=*/ TargetRegisterInfo::isPhysicalRegister(Reg),
|
||||
/*isKill=*/ false,
|
||||
/*isDead=*/ false,
|
||||
/*isUndef=*/false,
|
||||
|
Reference in New Issue
Block a user