Index: src/IceInstX86BaseImpl.h |
diff --git a/src/IceInstX86BaseImpl.h b/src/IceInstX86BaseImpl.h |
index cfc36d44a4fb3827d3329385015dc6de47a9631b..e4ac531fceb59e30b30af9cb7a10416c97c29ed6 100644 |
--- a/src/IceInstX86BaseImpl.h |
+++ b/src/IceInstX86BaseImpl.h |
@@ -2025,6 +2025,16 @@ template <typename TraitsType> |
void InstImpl<TraitsType>::InstX86Lea::emit(const Cfg *Func) const { |
if (!BuildDefs::dump()) |
return; |
+ |
+ auto *MemOp = llvm::dyn_cast<X86OperandMem>(this->getSrc(0)); |
+ if (MemOp->getBase()->getRegNum() == this->getDest()->getRegNum() && |
+ MemOp->getIndex() == nullptr && MemOp->getShift() == 0) { |
+ auto *Add = InstImpl<TraitsType>::InstX86Add::create( |
+ const_cast<Cfg *>(Func), this->getDest(), MemOp->getOffset()); |
+ Add->emit(Func); |
+ return; |
+ } |
+ |
Ostream &Str = Func->getContext()->getStrEmit(); |
assert(this->getSrcSize() == 1); |
assert(this->getDest()->hasReg()); |