Add support for parsing ARM symbol variants on ELF targets
authorDavid Peixotto <dpeixott@codeaurora.org>
Wed, 4 Dec 2013 22:43:20 +0000 (22:43 +0000)
committerDavid Peixotto <dpeixott@codeaurora.org>
Wed, 4 Dec 2013 22:43:20 +0000 (22:43 +0000)
commit0fc8c68b11a05aa276a066922d3c076034f1e37a
tree15f325e4c4ef45d1af86a649894de6fa679231a1
parent6b2011a4a3e5dc10af33407b3f2a5c7e53274b49
Add support for parsing ARM symbol variants on ELF targets

ARM symbol variants are written with parens instead of @ like this:

  .word __GLOBAL_I_a(target1)

This commit adds support for parsing these symbol variants in
expressions. We introduce a new flag to MCAsmInfo that indicates the
parser should use parens to parse the symbol variant. The expression
parser is modified to look for symbol variants using parens instead
of @ when the corresponding MCAsmInfo flag is true.

The MCAsmInfo parens flag is enabled only for ARM on ELF.

By adding this flag to MCAsmInfo, we are able to get rid of
redundant ARM-specific symbol variants and use the generic variants
instead (e.g. VK_GOT instead of VK_ARM_GOT). We use the new
UseParensForSymbolVariant attribute in MCAsmInfo to correctly print
the symbol variants for arm.

To achive this we need to keep a handle to the MCAsmInfo in the
MCSymbolRefExpr class that we can check when printing the symbol
variant.

Updated Tests:
  Changed case of symbol variant to match the generic kind.
  test/CodeGen/ARM/tls-models.ll
  test/CodeGen/ARM/tls1.ll
  test/CodeGen/ARM/tls2.ll
  test/CodeGen/Thumb2/tls1.ll
  test/CodeGen/Thumb2/tls2.ll

PR18080

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196424 91177308-0d34-0410-b5e6-96231b3b80d8
17 files changed:
include/llvm/MC/MCAsmInfo.h
include/llvm/MC/MCExpr.h
lib/MC/MCAsmInfo.cpp
lib/MC/MCELFStreamer.cpp
lib/MC/MCExpr.cpp
lib/MC/MCParser/AsmParser.cpp
lib/Target/ARM/ARMAsmPrinter.cpp
lib/Target/ARM/ARMMCInstLower.cpp
lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
test/CodeGen/ARM/tls-models.ll
test/CodeGen/ARM/tls1.ll
test/CodeGen/ARM/tls2.ll
test/CodeGen/Thumb2/tls1.ll
test/CodeGen/Thumb2/tls2.ll
test/MC/ARM/symbol-variants-errors.s [new file with mode: 0644]
test/MC/ARM/symbol-variants.s [new file with mode: 0644]