LanaiMCExpr: Migrate to MCSpecifierExpr
This commit is contained in:
@@ -232,13 +232,13 @@ public:
|
||||
|
||||
// Symbolic reference expression
|
||||
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(Imm.Value))
|
||||
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_HI;
|
||||
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_HI;
|
||||
|
||||
// Binary expression
|
||||
if (const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(Imm.Value))
|
||||
if (const LanaiMCExpr *SymbolRefExpr =
|
||||
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
|
||||
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_HI;
|
||||
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_HI;
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -269,13 +269,13 @@ public:
|
||||
|
||||
// Symbolic reference expression
|
||||
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(Imm.Value))
|
||||
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO;
|
||||
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO;
|
||||
|
||||
// Binary expression
|
||||
if (const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(Imm.Value))
|
||||
if (const LanaiMCExpr *SymbolRefExpr =
|
||||
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
|
||||
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO;
|
||||
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO;
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -293,13 +293,13 @@ public:
|
||||
|
||||
// Symbolic reference expression
|
||||
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(Imm.Value))
|
||||
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO;
|
||||
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO;
|
||||
|
||||
// Binary expression
|
||||
if (const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(Imm.Value))
|
||||
if (const LanaiMCExpr *SymbolRefExpr =
|
||||
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
|
||||
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO;
|
||||
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO;
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -340,7 +340,7 @@ public:
|
||||
|
||||
// Symbolic reference expression
|
||||
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(Imm.Value))
|
||||
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None;
|
||||
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None;
|
||||
if (const MCSymbolRefExpr *SymbolRefExpr =
|
||||
dyn_cast<MCSymbolRefExpr>(Imm.Value)) {
|
||||
return SymbolRefExpr->getKind() == MCSymbolRefExpr::VK_None;
|
||||
@@ -350,7 +350,7 @@ public:
|
||||
if (const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(Imm.Value)) {
|
||||
if (const LanaiMCExpr *SymbolRefExpr =
|
||||
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS()))
|
||||
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None;
|
||||
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None;
|
||||
if (const MCSymbolRefExpr *SymbolRefExpr =
|
||||
dyn_cast<MCSymbolRefExpr>(BinaryExpr->getLHS()))
|
||||
return SymbolRefExpr->getKind() == MCSymbolRefExpr::VK_None;
|
||||
@@ -468,14 +468,14 @@ public:
|
||||
#ifndef NDEBUG
|
||||
const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(getImm());
|
||||
assert(SymbolRefExpr &&
|
||||
SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_LO);
|
||||
SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_LO);
|
||||
#endif
|
||||
Inst.addOperand(MCOperand::createExpr(getImm()));
|
||||
} else if (isa<MCBinaryExpr>(getImm())) {
|
||||
#ifndef NDEBUG
|
||||
const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(getImm());
|
||||
assert(BinaryExpr && isa<LanaiMCExpr>(BinaryExpr->getLHS()) &&
|
||||
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getKind() ==
|
||||
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getSpecifier() ==
|
||||
LanaiMCExpr::VK_Lanai_ABS_LO);
|
||||
#endif
|
||||
Inst.addOperand(MCOperand::createExpr(getImm()));
|
||||
@@ -499,14 +499,14 @@ public:
|
||||
#ifndef NDEBUG
|
||||
const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(getImm());
|
||||
assert(SymbolRefExpr &&
|
||||
SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_ABS_HI);
|
||||
SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_ABS_HI);
|
||||
#endif
|
||||
Inst.addOperand(MCOperand::createExpr(getImm()));
|
||||
} else if (isa<MCBinaryExpr>(getImm())) {
|
||||
#ifndef NDEBUG
|
||||
const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(getImm());
|
||||
assert(BinaryExpr && isa<LanaiMCExpr>(BinaryExpr->getLHS()) &&
|
||||
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getKind() ==
|
||||
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getSpecifier() ==
|
||||
LanaiMCExpr::VK_Lanai_ABS_HI);
|
||||
#endif
|
||||
Inst.addOperand(MCOperand::createExpr(getImm()));
|
||||
@@ -530,7 +530,7 @@ public:
|
||||
#ifndef NDEBUG
|
||||
const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(getImm());
|
||||
assert(SymbolRefExpr &&
|
||||
SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None);
|
||||
SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None);
|
||||
#endif
|
||||
Inst.addOperand(MCOperand::createExpr(getImm()));
|
||||
} else if (isa<MCSymbolRefExpr>(getImm())) {
|
||||
@@ -545,7 +545,7 @@ public:
|
||||
#ifndef NDEBUG
|
||||
const MCBinaryExpr *BinaryExpr = dyn_cast<MCBinaryExpr>(getImm());
|
||||
assert(BinaryExpr && isa<LanaiMCExpr>(BinaryExpr->getLHS()) &&
|
||||
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getKind() ==
|
||||
cast<LanaiMCExpr>(BinaryExpr->getLHS())->getSpecifier() ==
|
||||
LanaiMCExpr::VK_Lanai_None);
|
||||
#endif
|
||||
Inst.addOperand(MCOperand::createExpr(getImm()));
|
||||
@@ -737,7 +737,7 @@ std::unique_ptr<LanaiOperand> LanaiAsmParser::parseIdentifier() {
|
||||
SMLoc Start = Parser.getTok().getLoc();
|
||||
SMLoc End = SMLoc::getFromPointer(Parser.getTok().getLoc().getPointer() - 1);
|
||||
const MCExpr *Res, *RHS = nullptr;
|
||||
LanaiMCExpr::VariantKind Kind = LanaiMCExpr::VK_Lanai_None;
|
||||
LanaiMCExpr::Spec Kind = LanaiMCExpr::VK_Lanai_None;
|
||||
|
||||
if (Lexer.getKind() != AsmToken::Identifier)
|
||||
return nullptr;
|
||||
@@ -866,7 +866,7 @@ bool shouldBeSls(const LanaiOperand &Op) {
|
||||
// The instruction should be encoded as an SLS if the operand is a symbolic
|
||||
// reference with no variant.
|
||||
if (const LanaiMCExpr *SymbolRefExpr = dyn_cast<LanaiMCExpr>(Op.getImm()))
|
||||
return SymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None;
|
||||
return SymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None;
|
||||
// The instruction should be encoded as an SLS if the operand is a binary
|
||||
// expression with the left-hand side being a symbolic reference with no
|
||||
// variant.
|
||||
@@ -874,7 +874,7 @@ bool shouldBeSls(const LanaiOperand &Op) {
|
||||
const LanaiMCExpr *LHSSymbolRefExpr =
|
||||
dyn_cast<LanaiMCExpr>(BinaryExpr->getLHS());
|
||||
return (LHSSymbolRefExpr &&
|
||||
LHSSymbolRefExpr->getKind() == LanaiMCExpr::VK_Lanai_None);
|
||||
LHSSymbolRefExpr->getSpecifier() == LanaiMCExpr::VK_Lanai_None);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ LanaiMCInstLower::GetConstantPoolIndexSymbol(const MachineOperand &MO) const {
|
||||
|
||||
MCOperand LanaiMCInstLower::LowerSymbolOperand(const MachineOperand &MO,
|
||||
MCSymbol *Sym) const {
|
||||
LanaiMCExpr::VariantKind Kind;
|
||||
LanaiMCExpr::Spec Kind;
|
||||
|
||||
switch (MO.getTargetFlags()) {
|
||||
case LanaiII::MO_NO_FLAG:
|
||||
|
||||
@@ -90,7 +90,7 @@ static Lanai::Fixups FixupKind(const MCExpr *Expr) {
|
||||
if (isa<MCSymbolRefExpr>(Expr))
|
||||
return Lanai::FIXUP_LANAI_21;
|
||||
if (const LanaiMCExpr *McExpr = dyn_cast<LanaiMCExpr>(Expr)) {
|
||||
LanaiMCExpr::VariantKind ExprKind = McExpr->getKind();
|
||||
LanaiMCExpr::Spec ExprKind = McExpr->getSpecifier();
|
||||
switch (ExprKind) {
|
||||
case LanaiMCExpr::VK_Lanai_None:
|
||||
return Lanai::FIXUP_LANAI_21;
|
||||
|
||||
@@ -14,9 +14,9 @@ using namespace llvm;
|
||||
|
||||
#define DEBUG_TYPE "lanaimcexpr"
|
||||
|
||||
const LanaiMCExpr *LanaiMCExpr::create(VariantKind Kind, const MCExpr *Expr,
|
||||
const LanaiMCExpr *LanaiMCExpr::create(Spec S, const MCExpr *Expr,
|
||||
MCContext &Ctx) {
|
||||
return new (Ctx) LanaiMCExpr(Kind, Expr);
|
||||
return new (Ctx) LanaiMCExpr(Expr, S);
|
||||
}
|
||||
|
||||
void LanaiMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
|
||||
@@ -41,15 +41,3 @@ void LanaiMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
|
||||
Expr->print(OS, MAI);
|
||||
OS << ')';
|
||||
}
|
||||
|
||||
void LanaiMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
|
||||
Streamer.visitUsedExpr(*getSubExpr());
|
||||
}
|
||||
|
||||
bool LanaiMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
|
||||
const MCAssembler *Asm) const {
|
||||
if (!getSubExpr()->evaluateAsRelocatable(Res, Asm))
|
||||
return false;
|
||||
Res.setSpecifier(specifier);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -14,38 +14,19 @@
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class LanaiMCExpr : public MCTargetExpr {
|
||||
class LanaiMCExpr : public MCSpecifierExpr {
|
||||
public:
|
||||
enum VariantKind { VK_Lanai_None, VK_Lanai_ABS_HI, VK_Lanai_ABS_LO };
|
||||
using Spec = MCSpecifierExpr::Spec;
|
||||
enum { VK_Lanai_None, VK_Lanai_ABS_HI, VK_Lanai_ABS_LO };
|
||||
|
||||
private:
|
||||
const VariantKind specifier;
|
||||
const MCExpr *Expr;
|
||||
|
||||
explicit LanaiMCExpr(VariantKind Kind, const MCExpr *Expr)
|
||||
: specifier(Kind), Expr(Expr) {}
|
||||
explicit LanaiMCExpr(const MCExpr *Expr, Spec S) : MCSpecifierExpr(Expr, S) {}
|
||||
|
||||
public:
|
||||
static const LanaiMCExpr *create(VariantKind Kind, const MCExpr *Expr,
|
||||
static const LanaiMCExpr *create(Spec Kind, const MCExpr *Expr,
|
||||
MCContext &Ctx);
|
||||
|
||||
// Returns the kind of this expression.
|
||||
VariantKind getKind() const { return specifier; }
|
||||
|
||||
// Returns the child of this expression.
|
||||
const MCExpr *getSubExpr() const { return Expr; }
|
||||
|
||||
void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
|
||||
bool evaluateAsRelocatableImpl(MCValue &Res,
|
||||
const MCAssembler *Asm) const override;
|
||||
void visitUsedExpr(MCStreamer &Streamer) const override;
|
||||
MCFragment *findAssociatedFragment() const override {
|
||||
return getSubExpr()->findAssociatedFragment();
|
||||
}
|
||||
|
||||
static bool classof(const MCExpr *E) {
|
||||
return E->getKind() == MCExpr::Target;
|
||||
}
|
||||
};
|
||||
} // end namespace llvm
|
||||
|
||||
|
||||
Reference in New Issue
Block a user