Fix PR11985
- BlockAddress has no support of BA + offset form and there is no way to propagate that offset into machine operand; - Add BA + offset support and a new interface 'getTargetBlockAddress' to simplify target block address forming; - All targets are modified to use new interface and X86 backend is enhanced to support BA + offset addressing. llvm-svn: 163743
This commit is contained in:
@@ -198,7 +198,8 @@ bool MachineOperand::isIdenticalTo(const MachineOperand &Other) const {
|
||||
return !strcmp(getSymbolName(), Other.getSymbolName()) &&
|
||||
getOffset() == Other.getOffset();
|
||||
case MachineOperand::MO_BlockAddress:
|
||||
return getBlockAddress() == Other.getBlockAddress();
|
||||
return getBlockAddress() == Other.getBlockAddress() &&
|
||||
getOffset() == Other.getOffset();
|
||||
case MO_RegisterMask:
|
||||
return getRegMask() == Other.getRegMask();
|
||||
case MachineOperand::MO_MCSymbol:
|
||||
@@ -239,7 +240,7 @@ hash_code llvm::hash_value(const MachineOperand &MO) {
|
||||
MO.getOffset());
|
||||
case MachineOperand::MO_BlockAddress:
|
||||
return hash_combine(MO.getType(), MO.getTargetFlags(),
|
||||
MO.getBlockAddress());
|
||||
MO.getBlockAddress(), MO.getOffset());
|
||||
case MachineOperand::MO_RegisterMask:
|
||||
return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getRegMask());
|
||||
case MachineOperand::MO_Metadata:
|
||||
@@ -362,6 +363,7 @@ void MachineOperand::print(raw_ostream &OS, const TargetMachine *TM) const {
|
||||
case MachineOperand::MO_BlockAddress:
|
||||
OS << '<';
|
||||
WriteAsOperand(OS, getBlockAddress(), /*PrintType=*/false);
|
||||
if (getOffset()) OS << "+" << getOffset();
|
||||
OS << '>';
|
||||
break;
|
||||
case MachineOperand::MO_RegisterMask:
|
||||
|
||||
Reference in New Issue
Block a user