summaryrefslogtreecommitdiff
path: root/lib/MC
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-06-25 15:29:54 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-06-25 15:29:54 +0000
commitd4feaf82bcfb1f18f625f1cf8d57d9f912cf30bc (patch)
treedabff752e87884f40f6de6c9fa7419ebf6e52ff7 /lib/MC
parentb4840d7a4d357b3f79071cccdeaadefe278b912a (diff)
downloadllvm-d4feaf82bcfb1f18f625f1cf8d57d9f912cf30bc.tar.gz
llvm-d4feaf82bcfb1f18f625f1cf8d57d9f912cf30bc.tar.bz2
llvm-d4feaf82bcfb1f18f625f1cf8d57d9f912cf30bc.tar.xz
Simplify the visitation of target expressions. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211707 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC')
-rw-r--r--lib/MC/MCObjectStreamer.cpp26
1 files changed, 15 insertions, 11 deletions
diff --git a/lib/MC/MCObjectStreamer.cpp b/lib/MC/MCObjectStreamer.cpp
index 1b5033a3a2..2692c3df67 100644
--- a/lib/MC/MCObjectStreamer.cpp
+++ b/lib/MC/MCObjectStreamer.cpp
@@ -83,28 +83,32 @@ MCDataFragment *MCObjectStreamer::getOrCreateDataFragment() const {
return F;
}
-void MCObjectStreamer::AddValueSymbols(const MCExpr *Value) {
- switch (Value->getKind()) {
+void MCObjectStreamer::visitUsedSymbol(const MCSymbol &Sym) {
+ Assembler->getOrCreateSymbolData(Sym);
+}
+
+void MCObjectStreamer::visitUsedExpr(const MCExpr &Expr) {
+ switch (Expr.getKind()) {
case MCExpr::Target:
- cast<MCTargetExpr>(Value)->AddValueSymbols(Assembler);
+ cast<MCTargetExpr>(Expr).visitUsedExpr(*this);
break;
case MCExpr::Constant:
break;
case MCExpr::Binary: {
- const MCBinaryExpr *BE = cast<MCBinaryExpr>(Value);
- AddValueSymbols(BE->getLHS());
- AddValueSymbols(BE->getRHS());
+ const MCBinaryExpr &BE = cast<MCBinaryExpr>(Expr);
+ visitUsedExpr(*BE.getLHS());
+ visitUsedExpr(*BE.getRHS());
break;
}
case MCExpr::SymbolRef:
- Assembler->getOrCreateSymbolData(cast<MCSymbolRefExpr>(Value)->getSymbol());
+ visitUsedSymbol(cast<MCSymbolRefExpr>(Expr).getSymbol());
break;
case MCExpr::Unary:
- AddValueSymbols(cast<MCUnaryExpr>(Value)->getSubExpr());
+ visitUsedExpr(*cast<MCUnaryExpr>(Expr).getSubExpr());
break;
}
}
@@ -123,7 +127,7 @@ void MCObjectStreamer::EmitValueImpl(const MCExpr *Value, unsigned Size,
// Avoid fixups when possible.
int64_t AbsValue;
- AddValueSymbols(Value);
+ visitUsedExpr(*Value);
if (Value->EvaluateAsAbsolute(AbsValue, getAssembler())) {
EmitIntValue(AbsValue, Size);
return;
@@ -203,7 +207,7 @@ void MCObjectStreamer::ChangeSection(const MCSection *Section,
void MCObjectStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
getAssembler().getOrCreateSymbolData(*Symbol);
- AddValueSymbols(Value);
+ visitUsedExpr(*Value);
MCStreamer::EmitAssignment(Symbol, Value);
}
@@ -211,7 +215,7 @@ void MCObjectStreamer::EmitInstruction(const MCInst &Inst, const MCSubtargetInfo
// Scan for values.
for (unsigned i = Inst.getNumOperands(); i--; )
if (Inst.getOperand(i).isExpr())
- AddValueSymbols(Inst.getOperand(i).getExpr());
+ visitUsedExpr(*Inst.getOperand(i).getExpr());
MCSectionData *SD = getCurrentSectionData();
SD->setHasInstructions(true);