summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-08-31 08:09:09 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-08-31 08:09:09 +0000
commite2ace509fc1205bed97a5114b13534610d4dbf5e (patch)
treecc45bac3595da32dd301fe705ac49fa65a1d2599
parent883f920acb6d347c2be0c937302d621ca21ec9dd (diff)
downloadllvm-e2ace509fc1205bed97a5114b13534610d4dbf5e.tar.gz
llvm-e2ace509fc1205bed97a5114b13534610d4dbf5e.tar.bz2
llvm-e2ace509fc1205bed97a5114b13534610d4dbf5e.tar.xz
llvm-mc: Simplify EmitAssignment ('.set' is identical to '=').
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80577 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/MC/MCStreamer.h6
-rw-r--r--lib/MC/MCAsmStreamer.cpp21
-rw-r--r--lib/MC/MCMachOStreamer.cpp7
-rw-r--r--lib/MC/MCNullStreamer.cpp3
-rw-r--r--test/MC/AsmParser/directive_include.s2
-rw-r--r--test/MC/AsmParser/directive_set.s2
-rw-r--r--test/MC/AsmParser/labels.s8
-rw-r--r--tools/llvm-mc/AsmParser.cpp8
-rw-r--r--tools/llvm-mc/AsmParser.h2
9 files changed, 18 insertions, 41 deletions
diff --git a/include/llvm/MC/MCStreamer.h b/include/llvm/MC/MCStreamer.h
index 09fd68a1cc..8183722fea 100644
--- a/include/llvm/MC/MCStreamer.h
+++ b/include/llvm/MC/MCStreamer.h
@@ -116,11 +116,7 @@ namespace llvm {
///
/// @param Symbol - The symbol being assigned to.
/// @param Value - The value for the symbol.
- /// @param MakeAbsolute - If true, then the symbol should be given the
- /// absolute value of @param Value, even if @param Value would be
- /// relocatable expression. This corresponds to the ".set" directive.
- virtual void EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
- bool MakeAbsolute = false) = 0;
+ virtual void EmitAssignment(MCSymbol *Symbol, const MCValue &Value) = 0;
/// EmitSymbolAttribute - Add the given @param Attribute to @param Symbol.
virtual void EmitSymbolAttribute(MCSymbol *Symbol,
diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp
index d0a2ebbc30..c220b8a902 100644
--- a/lib/MC/MCAsmStreamer.cpp
+++ b/lib/MC/MCAsmStreamer.cpp
@@ -47,8 +47,7 @@ public:
virtual void EmitAssemblerFlag(AssemblerFlag Flag);
- virtual void EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
- bool MakeAbsolute = false);
+ virtual void EmitAssignment(MCSymbol *Symbol, const MCValue &Value);
virtual void EmitSymbolAttribute(MCSymbol *Symbol, SymbolAttr Attribute);
@@ -126,26 +125,12 @@ void MCAsmStreamer::EmitAssemblerFlag(AssemblerFlag Flag) {
OS << '\n';
}
-void MCAsmStreamer::EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
- bool MakeAbsolute) {
+void MCAsmStreamer::EmitAssignment(MCSymbol *Symbol, const MCValue &Value) {
// Only absolute symbols can be redefined.
assert((Symbol->isUndefined() || Symbol->isAbsolute()) &&
"Cannot define a symbol twice!");
- if (MakeAbsolute) {
- OS << ".set " << Symbol << ", " << Value << '\n';
-
- // HACK: If the value isn't already absolute, set the symbol value to
- // itself, we want to use the .set absolute value, not the actual
- // expression.
- if (!Value.isAbsolute())
- getContext().SetSymbolValue(Symbol, MCValue::get(Symbol));
- else
- getContext().SetSymbolValue(Symbol, Value);
- } else {
- OS << Symbol << " = " << Value << '\n';
- getContext().SetSymbolValue(Symbol, Value);
- }
+ OS << Symbol << " = " << Value << '\n';
}
void MCAsmStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
diff --git a/lib/MC/MCMachOStreamer.cpp b/lib/MC/MCMachOStreamer.cpp
index 7a94e98dd2..c92d8a85ea 100644
--- a/lib/MC/MCMachOStreamer.cpp
+++ b/lib/MC/MCMachOStreamer.cpp
@@ -129,8 +129,7 @@ public:
virtual void EmitAssemblerFlag(AssemblerFlag Flag);
- virtual void EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
- bool MakeAbsolute = false);
+ virtual void EmitAssignment(MCSymbol *Symbol, const MCValue &Value);
virtual void EmitSymbolAttribute(MCSymbol *Symbol, SymbolAttr Attribute);
@@ -201,9 +200,7 @@ void MCMachOStreamer::EmitAssemblerFlag(AssemblerFlag Flag) {
assert(0 && "invalid assembler flag!");
}
-void MCMachOStreamer::EmitAssignment(MCSymbol *Symbol,
- const MCValue &Value,
- bool MakeAbsolute) {
+void MCMachOStreamer::EmitAssignment(MCSymbol *Symbol, const MCValue &Value) {
// Only absolute symbols can be redefined.
assert((Symbol->isUndefined() || Symbol->isAbsolute()) &&
"Cannot define a symbol twice!");
diff --git a/lib/MC/MCNullStreamer.cpp b/lib/MC/MCNullStreamer.cpp
index d4ca3d922b..9ccea040e7 100644
--- a/lib/MC/MCNullStreamer.cpp
+++ b/lib/MC/MCNullStreamer.cpp
@@ -34,8 +34,7 @@ namespace {
virtual void EmitAssemblerFlag(AssemblerFlag Flag) {}
- virtual void EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
- bool MakeAbsolute = false) {}
+ virtual void EmitAssignment(MCSymbol *Symbol, const MCValue &Value) {}
virtual void EmitSymbolAttribute(MCSymbol *Symbol, SymbolAttr Attribute) {}
diff --git a/test/MC/AsmParser/directive_include.s b/test/MC/AsmParser/directive_include.s
index c6526eb29a..fabd941d99 100644
--- a/test/MC/AsmParser/directive_include.s
+++ b/test/MC/AsmParser/directive_include.s
@@ -2,7 +2,7 @@
# CHECK: TESTA:
# CHECK: TEST0:
-# CHECK: .set a, 0
+# CHECK: a = 0
# CHECK: TESTB:
TESTA:
.include "directive_set.s"
diff --git a/test/MC/AsmParser/directive_set.s b/test/MC/AsmParser/directive_set.s
index 89085668b8..f1fc30a85d 100644
--- a/test/MC/AsmParser/directive_set.s
+++ b/test/MC/AsmParser/directive_set.s
@@ -1,7 +1,7 @@
# RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
# CHECK: TEST0:
-# CHECK: .set a, 0
+# CHECK: a = 0
TEST0:
.set a, 0
diff --git a/test/MC/AsmParser/labels.s b/test/MC/AsmParser/labels.s
index 172ee8d874..603d050b6c 100644
--- a/test/MC/AsmParser/labels.s
+++ b/test/MC/AsmParser/labels.s
@@ -23,10 +23,10 @@ foo:
// CHECK: addl $"b$c", %eax
addl "b$c", %eax
-// CHECK: set "a 0", 11
+// CHECK: "a 0" = 11
.set "a 0", 11
-// CHECK: .long 11
+// CHECK: .long "a 0"
.long "a 0"
// XXCHCK: .section "a 1,a 2"
@@ -44,7 +44,7 @@ foo:
// CHECK: .comm "a 6",1
.comm "a 6", 1
-// CHECK: .zerofill __DATA,__bss,"a 7",1
+// CHECK: .zerofill __DATA,__bss,"a 7",1,0
.lcomm "a 7", 1
// FIXME: We don't bother to support .lsym.
@@ -52,7 +52,7 @@ foo:
// CHECX: .lsym "a 8",1
// .lsym "a 8", 1
-// CHECK: set "a 9", a - b
+// CHECK: "a 9" = a - b
.set "a 9", a - b
// CHECK: .long "a 9"
diff --git a/tools/llvm-mc/AsmParser.cpp b/tools/llvm-mc/AsmParser.cpp
index 0387857c24..dbceb6b98a 100644
--- a/tools/llvm-mc/AsmParser.cpp
+++ b/tools/llvm-mc/AsmParser.cpp
@@ -431,7 +431,7 @@ bool AsmParser::ParseStatement() {
// identifier '=' ... -> assignment statement
Lexer.Lex();
- return ParseAssignment(IDVal, false);
+ return ParseAssignment(IDVal);
default: // Normal instruction or directive.
break;
@@ -708,7 +708,7 @@ bool AsmParser::ParseStatement() {
return false;
}
-bool AsmParser::ParseAssignment(const StringRef &Name, bool IsDotSet) {
+bool AsmParser::ParseAssignment(const StringRef &Name) {
// FIXME: Use better location, we should use proper tokens.
SMLoc EqualLoc = Lexer.getLoc();
@@ -737,7 +737,7 @@ bool AsmParser::ParseAssignment(const StringRef &Name, bool IsDotSet) {
return Error(EqualLoc, "symbol has already been defined");
// Do the assignment.
- Out.EmitAssignment(Sym, Value, IsDotSet);
+ Out.EmitAssignment(Sym, Value);
return false;
}
@@ -769,7 +769,7 @@ bool AsmParser::ParseDirectiveSet() {
return TokError("unexpected token in '.set'");
Lexer.Lex();
- return ParseAssignment(Name, true);
+ return ParseAssignment(Name);
}
/// ParseDirectiveSection:
diff --git a/tools/llvm-mc/AsmParser.h b/tools/llvm-mc/AsmParser.h
index fda79ca842..7471a901a9 100644
--- a/tools/llvm-mc/AsmParser.h
+++ b/tools/llvm-mc/AsmParser.h
@@ -94,7 +94,7 @@ private:
SMLoc DirectiveLoc);
void EatToEndOfStatement();
- bool ParseAssignment(const StringRef &Name, bool IsDotSet);
+ bool ParseAssignment(const StringRef &Name);
bool ParsePrimaryExpr(const MCExpr *&Res);
bool ParseBinOpRHS(unsigned Precedence, const MCExpr *&Res);