diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-06-25 15:29:54 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-06-25 15:29:54 +0000 |
commit | d4feaf82bcfb1f18f625f1cf8d57d9f912cf30bc (patch) | |
tree | dabff752e87884f40f6de6c9fa7419ebf6e52ff7 /lib/MC | |
parent | b4840d7a4d357b3f79071cccdeaadefe278b912a (diff) | |
download | llvm-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.cpp | 26 |
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); |