From 0ea80f983d74a6d6b5dc303a72eccb6350c79f1d Mon Sep 17 00:00:00 2001 From: Vladimir Radosavljevic Date: Thu, 6 Feb 2025 17:45:00 +0100 Subject: [PATCH] [EVM] Support immutables in new stackification algorithm Signed-off-by: Vladimir Radosavljevic --- llvm/lib/Target/EVM/EVMStackModel.cpp | 4 +++- llvm/lib/Target/EVM/EVMStackifyCodeEmitter.cpp | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Target/EVM/EVMStackModel.cpp b/llvm/lib/Target/EVM/EVMStackModel.cpp index 1a479859bec8..94459074ca7b 100644 --- a/llvm/lib/Target/EVM/EVMStackModel.cpp +++ b/llvm/lib/Target/EVM/EVMStackModel.cpp @@ -167,6 +167,7 @@ void EVMStackModel::createOperation(MachineInstr &MI, case EVM::DATASIZE: case EVM::DATAOFFSET: case EVM::LINKERSYMBOL: + case EVM::LOADIMMUTABLE: // The copy/data instructions just represent an assignment. This case is // handled below. break; @@ -194,7 +195,8 @@ void EVMStackModel::createOperation(MachineInstr &MI, } break; case EVM::DATASIZE: case EVM::DATAOFFSET: - case EVM::LINKERSYMBOL: { + case EVM::LINKERSYMBOL: + case EVM::LOADIMMUTABLE: { const Register DefReg = MI.getOperand(0).getReg(); MCSymbol *Sym = MI.getOperand(1).getMCSymbol(); Input.push_back(getSymbolSlot(Sym, &MI)); diff --git a/llvm/lib/Target/EVM/EVMStackifyCodeEmitter.cpp b/llvm/lib/Target/EVM/EVMStackifyCodeEmitter.cpp index 2b34e4107185..189a689dc3f5 100644 --- a/llvm/lib/Target/EVM/EVMStackifyCodeEmitter.cpp +++ b/llvm/lib/Target/EVM/EVMStackifyCodeEmitter.cpp @@ -116,7 +116,8 @@ void EVMStackifyCodeEmitter::CodeEmitter::emitSymbol(const MachineInstr *MI, MCSymbol *Symbol) { unsigned Opc = MI->getOpcode(); assert(Opc == EVM::DATASIZE || Opc == EVM::DATAOFFSET || - Opc == EVM::LINKERSYMBOL && "Unexpected symbol instruction"); + Opc == EVM::LINKERSYMBOL || + Opc == EVM::LOADIMMUTABLE && "Unexpected symbol instruction"); StackHeight += 1; // This is codegen-only instruction, that will be converted into PUSH4. auto NewMI = BuildMI(*CurMBB, CurMBB->end(), MI->getDebugLoc(),