mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
Convert EXTRACT_SUBREG to COPY when emitting machine instrs.
EXTRACT_SUBREG no longer appears as a machine instruction. Use COPY instead. Add isCopy() checks in many places using isMoveInstr() and isExtractSubreg(). The isMoveInstr hook will be removed later. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107879 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -428,12 +428,9 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
||||
}
|
||||
|
||||
if (Opc == TargetOpcode::EXTRACT_SUBREG) {
|
||||
// EXTRACT_SUBREG is lowered as %dst = COPY %src:sub
|
||||
unsigned SubIdx = cast<ConstantSDNode>(Node->getOperand(1))->getZExtValue();
|
||||
|
||||
// Create the extract_subreg machine instruction.
|
||||
MachineInstr *MI = BuildMI(*MF, Node->getDebugLoc(),
|
||||
TII->get(TargetOpcode::EXTRACT_SUBREG));
|
||||
|
||||
// Figure out the register class to create for the destreg.
|
||||
unsigned VReg = getVR(Node->getOperand(0), VRBaseMap);
|
||||
const TargetRegisterClass *TRC = MRI->getRegClass(VReg);
|
||||
@@ -450,11 +447,16 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
||||
VRBase = MRI->createVirtualRegister(SRC);
|
||||
}
|
||||
|
||||
// Add def, source, and subreg index
|
||||
MI->addOperand(MachineOperand::CreateReg(VRBase, true));
|
||||
// Create the extract_subreg machine instruction.
|
||||
MachineInstr *MI = BuildMI(*MF, Node->getDebugLoc(),
|
||||
TII->get(TargetOpcode::COPY), VRBase);
|
||||
|
||||
// Add source, and subreg index
|
||||
AddOperand(MI, Node->getOperand(0), 0, 0, VRBaseMap, /*IsDebug=*/false,
|
||||
IsClone, IsCloned);
|
||||
MI->addOperand(MachineOperand::CreateImm(SubIdx));
|
||||
assert(TargetRegisterInfo::isVirtualRegister(MI->getOperand(1).getReg()) &&
|
||||
"Cannot yet extract from physregs");
|
||||
MI->getOperand(1).setSubReg(SubIdx);
|
||||
MBB->insert(InsertPos, MI);
|
||||
} else if (Opc == TargetOpcode::INSERT_SUBREG ||
|
||||
Opc == TargetOpcode::SUBREG_TO_REG) {
|
||||
|
||||
Reference in New Issue
Block a user