Skip to content

Commit d7124ce

Browse files
atrosinenkoakiramenai
authored andcommitted
[EraVM] Remove RETURN and REVERT pseudos
1 parent 628e115 commit d7124ce

File tree

2 files changed

+14
-30
lines changed

2 files changed

+14
-30
lines changed

llvm/lib/Target/EraVM/EraVMAsmPrinter.cpp

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,7 @@ void EraVMAsmPrinter::emitInstruction(const MachineInstr *MI) {
102102

103103
// Do some manual expansion
104104
unsigned Opc = MI->getOpcode();
105-
switch (Opc) {
106-
default:
107-
// Change nothing by default
108-
break;
109-
case EraVM::J_s: {
105+
if (Opc == EraVM::J_s) {
110106
MCOperand MCOp;
111107
TmpInst.setOpcode(EraVM::JCs);
112108
// Operand: dest
@@ -121,27 +117,6 @@ void EraVMAsmPrinter::emitInstruction(const MachineInstr *MI) {
121117
EmitToStreamer(*OutStreamer, TmpInst);
122118
return;
123119
}
124-
case EraVM::DEFAULT_FAR_REVERT:
125-
case EraVM::DEFAULT_FAR_RETURN: {
126-
bool IsRevert = Opc == EraVM::DEFAULT_FAR_REVERT;
127-
MCSymbol *DefaultFarReturnSym = OutContext.getOrCreateSymbol(
128-
IsRevert ? "DEFAULT_FAR_REVERT" : "DEFAULT_FAR_RETURN");
129-
// Expand to: ret/revert.to_label $rs0, @DEFAULT_FAR_RETURN
130-
MCOperand MCOp;
131-
TmpInst.setOpcode(IsRevert ? EraVM::REVERTrl : EraVM::RETrl);
132-
// Operand: rs0
133-
lowerOperand(MI->getOperand(0), MCOp);
134-
TmpInst.addOperand(MCOp);
135-
// Operand: default dest
136-
TmpInst.addOperand(MCOperand::createExpr(
137-
MCSymbolRefExpr::create(DefaultFarReturnSym, OutContext)));
138-
// Operand: cc
139-
lowerOperand(MI->getOperand(1), MCOp);
140-
TmpInst.addOperand(MCOp);
141-
EmitToStreamer(*OutStreamer, TmpInst);
142-
return;
143-
}
144-
}
145120

146121
if (MI->isPseudo()) {
147122
#ifndef NDEBUG

llvm/lib/Target/EraVM/EraVMInstrInfo.td

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,17 @@ def constant_pool : SDNodeXForm<imm, [{
120120
return CurDAG->getTargetConstantPool(N->getConstantIntValue(), PtrVT);
121121
}]>;
122122

123+
def default_far_return : SDNodeXForm<imm, [{
124+
(void)N;
125+
MVT PtrVT = getTargetLowering()->getPointerTy(CurDAG->getDataLayout());
126+
return CurDAG->getExternalSymbol("DEFAULT_FAR_RETURN", PtrVT);
127+
}]>;
128+
def default_far_revert : SDNodeXForm<imm, [{
129+
(void)N;
130+
MVT PtrVT = getTargetLowering()->getPointerTy(CurDAG->getDataLayout());
131+
return CurDAG->getExternalSymbol("DEFAULT_FAR_REVERT", PtrVT);
132+
}]>;
133+
123134
//===----------------------------------------------------------------------===//
124135
// Complex Pattern Definitions.
125136
//===----------------------------------------------------------------------===//
@@ -1040,10 +1051,8 @@ def : InstAlias<"ret.ok.to_label${cc} $dest", (RETrl R1, jmptarget:$dest, pred:$
10401051
def : InstAlias<"ret.revert.to_label${cc} $dest", (REVERTrl R1, jmptarget:$dest, pred:$cc)>;
10411052
}
10421053

1043-
let isTerminator = 1, isBarrier = 1, isReturn = 1 in {
1044-
def DEFAULT_FAR_RETURN : Pseudo<(outs), (ins GR256:$rs0, pred:$cc), [(EraVMreturn GR256:$rs0)]>;
1045-
def DEFAULT_FAR_REVERT : Pseudo<(outs), (ins GR256:$rs0, pred:$cc), [(EraVMrevert GR256:$rs0)]>;
1046-
}
1054+
def : Pat<(EraVMreturn GR256:$rs0), (RETrl GR256:$rs0, (default_far_return 0))>;
1055+
def : Pat<(EraVMrevert GR256:$rs0), (REVERTrl GR256:$rs0, (default_far_revert 0))>;
10471056

10481057
//===----------------------------------------------------------------------===//
10491058
// Constants materialization

0 commit comments

Comments
 (0)