Index: src/IceInstX8664.cpp |
diff --git a/src/IceInstX8664.cpp b/src/IceInstX8664.cpp |
index cb765ae9630fe4858a6f6a66a9b9437be2a02e67..60f10c6236bc2e87d0c795c2f0aeef85dc093340 100644 |
--- a/src/IceInstX8664.cpp |
+++ b/src/IceInstX8664.cpp |
@@ -106,9 +106,10 @@ void MachineTraits<TargetX8664>::X86OperandMem::emit(const Cfg *Func) const { |
llvm_unreachable("Invalid offset type for x86 mem operand"); |
} |
- if (Base) { |
+ if (Base || Index) { |
Str << "("; |
- Base->emit(Func); |
+ if (Base) |
+ Base->emit(Func); |
if (Index) { |
Str << ","; |
Index->emit(Func); |
@@ -133,8 +134,8 @@ void MachineTraits<TargetX8664>::X86OperandMem::dump(const Cfg *Func, |
Dumped = true; |
} |
if (Index) { |
- assert(Base); |
- Str << "+"; |
+ if (Base) |
+ Str << "+"; |
if (Shift > 0) |
Str << (1u << Shift) << "*"; |
if (Func) |
@@ -190,18 +191,16 @@ MachineTraits<TargetX8664>::X86OperandMem::toAsmAddress( |
return X8664::Traits::Address( |
RegX8664::getEncodedGPR(getBase()->getRegNum()), |
RegX8664::getEncodedGPR(getIndex()->getRegNum()), |
- X8664::Traits::ScaleFactor(getShift()), Disp); |
+ X8664::Traits::ScaleFactor(getShift()), Disp, Fixup); |
} else if (getBase()) { |
return X8664::Traits::Address( |
- RegX8664::getEncodedGPR(getBase()->getRegNum()), Disp); |
+ RegX8664::getEncodedGPR(getBase()->getRegNum()), Disp, Fixup); |
} else if (getIndex()) { |
return X8664::Traits::Address( |
RegX8664::getEncodedGPR(getIndex()->getRegNum()), |
- X8664::Traits::ScaleFactor(getShift()), Disp); |
- } else if (Fixup) { |
- return X8664::Traits::Address::Absolute(Disp, Fixup); |
+ X8664::Traits::ScaleFactor(getShift()), Disp, Fixup); |
} else { |
- return X8664::Traits::Address::Absolute(Disp); |
+ return X8664::Traits::Address(Disp, Fixup); |
} |
} |
@@ -211,8 +210,9 @@ MachineTraits<TargetX8664>::VariableSplit::toAsmAddress(const Cfg *Func) const { |
const ::Ice::TargetLowering *Target = Func->getTarget(); |
int32_t Offset = |
Var->getStackOffset() + Target->getStackAdjustment() + getOffset(); |
+ static constexpr AssemblerFixup *Fixup = nullptr; |
return X8664::Traits::Address( |
- RegX8664::getEncodedGPR(Target->getFrameOrStackReg()), Offset); |
+ RegX8664::getEncodedGPR(Target->getFrameOrStackReg()), Offset, Fixup); |
} |
void MachineTraits<TargetX8664>::VariableSplit::emit(const Cfg *Func) const { |