mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-26 07:24:25 +00:00
Move expression visitation logic up to MCStreamer.
Remove the duplicate from MCRecordStreamer. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211714 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -21,7 +21,7 @@ class MCAssembler;
|
|||||||
class MCContext;
|
class MCContext;
|
||||||
class MCSection;
|
class MCSection;
|
||||||
class MCSectionData;
|
class MCSectionData;
|
||||||
class MCObjectStreamer;
|
class MCStreamer;
|
||||||
class MCSymbol;
|
class MCSymbol;
|
||||||
class MCValue;
|
class MCValue;
|
||||||
class raw_ostream;
|
class raw_ostream;
|
||||||
@ -525,7 +525,7 @@ public:
|
|||||||
virtual void PrintImpl(raw_ostream &OS) const = 0;
|
virtual void PrintImpl(raw_ostream &OS) const = 0;
|
||||||
virtual bool EvaluateAsRelocatableImpl(MCValue &Res,
|
virtual bool EvaluateAsRelocatableImpl(MCValue &Res,
|
||||||
const MCAsmLayout *Layout) const = 0;
|
const MCAsmLayout *Layout) const = 0;
|
||||||
virtual void visitUsedExpr(MCObjectStreamer& Streamer) const = 0;
|
virtual void visitUsedExpr(MCStreamer& Streamer) const = 0;
|
||||||
virtual const MCSection *FindAssociatedSection() const = 0;
|
virtual const MCSection *FindAssociatedSection() const = 0;
|
||||||
|
|
||||||
virtual void fixELFSymbolsInTLSFixups(MCAssembler &) const = 0;
|
virtual void fixELFSymbolsInTLSFixups(MCAssembler &) const = 0;
|
||||||
|
@ -79,8 +79,7 @@ protected:
|
|||||||
MCDataFragment *getOrCreateDataFragment() const;
|
MCDataFragment *getOrCreateDataFragment() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void visitUsedExpr(const MCExpr &Expr);
|
void visitUsedSymbol(const MCSymbol &Sym) override;
|
||||||
void visitUsedSymbol(const MCSymbol &Sym);
|
|
||||||
|
|
||||||
MCAssembler &getAssembler() { return *Assembler; }
|
MCAssembler &getAssembler() { return *Assembler; }
|
||||||
|
|
||||||
|
@ -214,6 +214,9 @@ protected:
|
|||||||
public:
|
public:
|
||||||
virtual ~MCStreamer();
|
virtual ~MCStreamer();
|
||||||
|
|
||||||
|
void visitUsedExpr(const MCExpr &Expr);
|
||||||
|
virtual void visitUsedSymbol(const MCSymbol &Sym);
|
||||||
|
|
||||||
void setTargetStreamer(MCTargetStreamer *TS) {
|
void setTargetStreamer(MCTargetStreamer *TS) {
|
||||||
TargetStreamer.reset(TS);
|
TargetStreamer.reset(TS);
|
||||||
}
|
}
|
||||||
|
@ -605,31 +605,8 @@ namespace {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: mostly copied for the obj streamer.
|
void visitUsedSymbol(const MCSymbol &Sym) override {
|
||||||
void AddValueSymbols(const MCExpr *Value) {
|
markUsed(Sym);
|
||||||
switch (Value->getKind()) {
|
|
||||||
case MCExpr::Target:
|
|
||||||
// FIXME: What should we do in here?
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MCExpr::Constant:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MCExpr::Binary: {
|
|
||||||
const MCBinaryExpr *BE = cast<MCBinaryExpr>(Value);
|
|
||||||
AddValueSymbols(BE->getLHS());
|
|
||||||
AddValueSymbols(BE->getRHS());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case MCExpr::SymbolRef:
|
|
||||||
markUsed(cast<MCSymbolRefExpr>(Value)->getSymbol());
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MCExpr::Unary:
|
|
||||||
AddValueSymbols(cast<MCUnaryExpr>(Value)->getSubExpr());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -650,7 +627,7 @@ namespace {
|
|||||||
// Scan for values.
|
// Scan for values.
|
||||||
for (unsigned i = Inst.getNumOperands(); i--; )
|
for (unsigned i = Inst.getNumOperands(); i--; )
|
||||||
if (Inst.getOperand(i).isExpr())
|
if (Inst.getOperand(i).isExpr())
|
||||||
AddValueSymbols(Inst.getOperand(i).getExpr());
|
visitUsedExpr(*Inst.getOperand(i).getExpr());
|
||||||
}
|
}
|
||||||
void EmitLabel(MCSymbol *Symbol) override {
|
void EmitLabel(MCSymbol *Symbol) override {
|
||||||
MCStreamer::EmitLabel(Symbol);
|
MCStreamer::EmitLabel(Symbol);
|
||||||
@ -659,7 +636,7 @@ namespace {
|
|||||||
void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override {
|
void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override {
|
||||||
// FIXME: should we handle aliases?
|
// FIXME: should we handle aliases?
|
||||||
markDefined(*Symbol);
|
markDefined(*Symbol);
|
||||||
AddValueSymbols(Value);
|
visitUsedExpr(*Value);
|
||||||
}
|
}
|
||||||
bool EmitSymbolAttribute(MCSymbol *Symbol,
|
bool EmitSymbolAttribute(MCSymbol *Symbol,
|
||||||
MCSymbolAttr Attribute) override {
|
MCSymbolAttr Attribute) override {
|
||||||
|
@ -87,32 +87,6 @@ void MCObjectStreamer::visitUsedSymbol(const MCSymbol &Sym) {
|
|||||||
Assembler->getOrCreateSymbolData(Sym);
|
Assembler->getOrCreateSymbolData(Sym);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCObjectStreamer::visitUsedExpr(const MCExpr &Expr) {
|
|
||||||
switch (Expr.getKind()) {
|
|
||||||
case MCExpr::Target:
|
|
||||||
cast<MCTargetExpr>(Expr).visitUsedExpr(*this);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MCExpr::Constant:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MCExpr::Binary: {
|
|
||||||
const MCBinaryExpr &BE = cast<MCBinaryExpr>(Expr);
|
|
||||||
visitUsedExpr(*BE.getLHS());
|
|
||||||
visitUsedExpr(*BE.getRHS());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case MCExpr::SymbolRef:
|
|
||||||
visitUsedSymbol(cast<MCSymbolRefExpr>(Expr).getSymbol());
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MCExpr::Unary:
|
|
||||||
visitUsedExpr(*cast<MCUnaryExpr>(Expr).getSubExpr());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MCObjectStreamer::EmitCFISections(bool EH, bool Debug) {
|
void MCObjectStreamer::EmitCFISections(bool EH, bool Debug) {
|
||||||
MCStreamer::EmitCFISections(EH, Debug);
|
MCStreamer::EmitCFISections(EH, Debug);
|
||||||
EmitEHFrame = EH;
|
EmitEHFrame = EH;
|
||||||
|
@ -614,6 +614,35 @@ void MCStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
|
|||||||
TS->emitAssignment(Symbol, Value);
|
TS->emitAssignment(Symbol, Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MCStreamer::visitUsedSymbol(const MCSymbol &Sym) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void MCStreamer::visitUsedExpr(const MCExpr &Expr) {
|
||||||
|
switch (Expr.getKind()) {
|
||||||
|
case MCExpr::Target:
|
||||||
|
cast<MCTargetExpr>(Expr).visitUsedExpr(*this);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MCExpr::Constant:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MCExpr::Binary: {
|
||||||
|
const MCBinaryExpr &BE = cast<MCBinaryExpr>(Expr);
|
||||||
|
visitUsedExpr(*BE.getLHS());
|
||||||
|
visitUsedExpr(*BE.getRHS());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case MCExpr::SymbolRef:
|
||||||
|
visitUsedSymbol(cast<MCSymbolRefExpr>(Expr).getSymbol());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MCExpr::Unary:
|
||||||
|
visitUsedExpr(*cast<MCUnaryExpr>(Expr).getSubExpr());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MCStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) {}
|
void MCStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) {}
|
||||||
void MCStreamer::EmitThumbFunc(MCSymbol *Func) {}
|
void MCStreamer::EmitThumbFunc(MCSymbol *Func) {}
|
||||||
void MCStreamer::EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) {}
|
void MCStreamer::EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) {}
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
#include "llvm/MC/MCAssembler.h"
|
#include "llvm/MC/MCAssembler.h"
|
||||||
#include "llvm/MC/MCContext.h"
|
#include "llvm/MC/MCContext.h"
|
||||||
#include "llvm/MC/MCELF.h"
|
#include "llvm/MC/MCELF.h"
|
||||||
#include "llvm/MC/MCObjectStreamer.h"
|
|
||||||
#include "llvm/MC/MCSymbol.h"
|
#include "llvm/MC/MCSymbol.h"
|
||||||
#include "llvm/MC/MCValue.h"
|
#include "llvm/MC/MCValue.h"
|
||||||
#include "llvm/Object/ELF.h"
|
#include "llvm/Object/ELF.h"
|
||||||
@ -82,7 +81,7 @@ void AArch64MCExpr::PrintImpl(raw_ostream &OS) const {
|
|||||||
OS << *Expr;
|
OS << *Expr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AArch64MCExpr::visitUsedExpr(MCObjectStreamer &Streamer) const {
|
void AArch64MCExpr::visitUsedExpr(MCStreamer &Streamer) const {
|
||||||
Streamer.visitUsedExpr(*getSubExpr());
|
Streamer.visitUsedExpr(*getSubExpr());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ public:
|
|||||||
|
|
||||||
void PrintImpl(raw_ostream &OS) const override;
|
void PrintImpl(raw_ostream &OS) const override;
|
||||||
|
|
||||||
void visitUsedExpr(MCObjectStreamer &Streamer) const override;
|
void visitUsedExpr(MCStreamer &Streamer) const override;
|
||||||
|
|
||||||
const MCSection *FindAssociatedSection() const override;
|
const MCSection *FindAssociatedSection() const override;
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
#include "ARMMCExpr.h"
|
#include "ARMMCExpr.h"
|
||||||
#include "llvm/MC/MCAssembler.h"
|
#include "llvm/MC/MCAssembler.h"
|
||||||
#include "llvm/MC/MCContext.h"
|
#include "llvm/MC/MCContext.h"
|
||||||
#include "llvm/MC/MCObjectStreamer.h"
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
#define DEBUG_TYPE "armmcexpr"
|
#define DEBUG_TYPE "armmcexpr"
|
||||||
@ -42,6 +41,6 @@ ARMMCExpr::EvaluateAsRelocatableImpl(MCValue &Res,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ARMMCExpr::visitUsedExpr(MCObjectStreamer &Streamer) const {
|
void ARMMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
|
||||||
Streamer.visitUsedExpr(*getSubExpr());
|
Streamer.visitUsedExpr(*getSubExpr());
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ public:
|
|||||||
void PrintImpl(raw_ostream &OS) const override;
|
void PrintImpl(raw_ostream &OS) const override;
|
||||||
bool EvaluateAsRelocatableImpl(MCValue &Res,
|
bool EvaluateAsRelocatableImpl(MCValue &Res,
|
||||||
const MCAsmLayout *Layout) const override;
|
const MCAsmLayout *Layout) const override;
|
||||||
void visitUsedExpr(MCObjectStreamer &Streamer) const override;
|
void visitUsedExpr(MCStreamer &Streamer) const override;
|
||||||
const MCSection *FindAssociatedSection() const override {
|
const MCSection *FindAssociatedSection() const override {
|
||||||
return getSubExpr()->FindAssociatedSection();
|
return getSubExpr()->FindAssociatedSection();
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,6 @@ MipsMCExpr::EvaluateAsRelocatableImpl(MCValue &Res,
|
|||||||
return getSubExpr()->EvaluateAsRelocatable(Res, Layout);
|
return getSubExpr()->EvaluateAsRelocatable(Res, Layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MipsMCExpr::visitUsedExpr(MCObjectStreamer &Streamer) const {
|
void MipsMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
|
||||||
Streamer.visitUsedExpr(*getSubExpr());
|
Streamer.visitUsedExpr(*getSubExpr());
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ public:
|
|||||||
void PrintImpl(raw_ostream &OS) const override;
|
void PrintImpl(raw_ostream &OS) const override;
|
||||||
bool EvaluateAsRelocatableImpl(MCValue &Res,
|
bool EvaluateAsRelocatableImpl(MCValue &Res,
|
||||||
const MCAsmLayout *Layout) const override;
|
const MCAsmLayout *Layout) const override;
|
||||||
void visitUsedExpr(MCObjectStreamer &Streamer) const override;
|
void visitUsedExpr(MCStreamer &Streamer) const override;
|
||||||
const MCSection *FindAssociatedSection() const override {
|
const MCSection *FindAssociatedSection() const override {
|
||||||
return getSubExpr()->FindAssociatedSection();
|
return getSubExpr()->FindAssociatedSection();
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ public:
|
|||||||
const MCAsmLayout *Layout) const override {
|
const MCAsmLayout *Layout) const override {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
void visitUsedExpr(MCObjectStreamer &Streamer) const override {};
|
void visitUsedExpr(MCStreamer &Streamer) const override {};
|
||||||
const MCSection *FindAssociatedSection() const override {
|
const MCSection *FindAssociatedSection() const override {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -128,6 +128,6 @@ PPCMCExpr::EvaluateAsRelocatableImpl(MCValue &Res,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PPCMCExpr::visitUsedExpr(MCObjectStreamer &Streamer) const {
|
void PPCMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
|
||||||
Streamer.visitUsedExpr(*getSubExpr());
|
Streamer.visitUsedExpr(*getSubExpr());
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ public:
|
|||||||
void PrintImpl(raw_ostream &OS) const override;
|
void PrintImpl(raw_ostream &OS) const override;
|
||||||
bool EvaluateAsRelocatableImpl(MCValue &Res,
|
bool EvaluateAsRelocatableImpl(MCValue &Res,
|
||||||
const MCAsmLayout *Layout) const override;
|
const MCAsmLayout *Layout) const override;
|
||||||
void visitUsedExpr(MCObjectStreamer &Streamer) const override;
|
void visitUsedExpr(MCStreamer &Streamer) const override;
|
||||||
const MCSection *FindAssociatedSection() const override {
|
const MCSection *FindAssociatedSection() const override {
|
||||||
return getSubExpr()->FindAssociatedSection();
|
return getSubExpr()->FindAssociatedSection();
|
||||||
}
|
}
|
||||||
|
@ -220,6 +220,6 @@ void SparcMCExpr::fixELFSymbolsInTLSFixups(MCAssembler &Asm) const {
|
|||||||
fixELFSymbolsInTLSFixupsImpl(getSubExpr(), Asm);
|
fixELFSymbolsInTLSFixupsImpl(getSubExpr(), Asm);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparcMCExpr::visitUsedExpr(MCObjectStreamer &Streamer) const {
|
void SparcMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
|
||||||
Streamer.visitUsedExpr(*getSubExpr());
|
Streamer.visitUsedExpr(*getSubExpr());
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ public:
|
|||||||
void PrintImpl(raw_ostream &OS) const override;
|
void PrintImpl(raw_ostream &OS) const override;
|
||||||
bool EvaluateAsRelocatableImpl(MCValue &Res,
|
bool EvaluateAsRelocatableImpl(MCValue &Res,
|
||||||
const MCAsmLayout *Layout) const override;
|
const MCAsmLayout *Layout) const override;
|
||||||
void visitUsedExpr(MCObjectStreamer &Streamer) const override;
|
void visitUsedExpr(MCStreamer &Streamer) const override;
|
||||||
const MCSection *FindAssociatedSection() const override {
|
const MCSection *FindAssociatedSection() const override {
|
||||||
return getSubExpr()->FindAssociatedSection();
|
return getSubExpr()->FindAssociatedSection();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user