diff options
author | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2013-06-20 16:23:52 +0000 |
---|---|---|
committer | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2013-06-20 16:23:52 +0000 |
commit | 027e94479c9e69eb3c3c5536fa9990d0b96e9510 (patch) | |
tree | e0ff894ae7806fba4e5872840cba830ff5daa4eb /lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h | |
parent | 0db5379fe643cbe738b4831e337251819cc5dc5d (diff) | |
download | external_llvm-027e94479c9e69eb3c3c5536fa9990d0b96e9510.zip external_llvm-027e94479c9e69eb3c3c5536fa9990d0b96e9510.tar.gz external_llvm-027e94479c9e69eb3c3c5536fa9990d0b96e9510.tar.bz2 |
[PowerPC] Optimize @ha/@l constructs
This patch adds support for having the assembler optimize fixups
to constructs like "symbol@ha" or "symbol@l" if "symbol" can be
resolved at assembler time.
This optimization is already present in the PPCMCExpr.cpp code
for handling PPC_HA16/PPC_LO16 target expressions. However,
those target expression were used only on Darwin targets.
This patch changes target expression code so that they are
usable also with the GNU assembler (using the @ha / @l syntax
instead of the ha16() / lo16() syntax), and changes the
MCInst lowering code to generate those target expressions
where appropriate.
It also changes the asm parser to generate HA16/LO16 target
expressions when parsing assembler source that uses the
@ha / @l modifiers. The effect is that now the above-
mentioned optimization automatically becomes available
for those situations too.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184436 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h')
-rw-r--r-- | lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h b/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h index a080537..1b57687 100644 --- a/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h +++ b/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h @@ -27,9 +27,11 @@ public: private: const VariantKind Kind; const MCExpr *Expr; + const int AssemblerDialect; - explicit PPCMCExpr(VariantKind _Kind, const MCExpr *_Expr) - : Kind(_Kind), Expr(_Expr) {} + explicit PPCMCExpr(VariantKind _Kind, const MCExpr *_Expr, + int _AssemblerDialect) + : Kind(_Kind), Expr(_Expr), AssemblerDialect(_AssemblerDialect) {} public: /// @name Construction @@ -56,6 +58,10 @@ public: /// getSubExpr - Get the child of this expression. const MCExpr *getSubExpr() const { return Expr; } + /// isDarwinSyntax - True if expression is to be printed using Darwin syntax. + bool isDarwinSyntax() const { return AssemblerDialect == 1; } + + /// @} void PrintImpl(raw_ostream &OS) const; |