OSDN Git Service

[mips] [IAS] Fix LW with relative label operands.
authorToma Tabacu <toma.tabacu@imgtec.com>
Wed, 17 Jun 2015 10:43:45 +0000 (10:43 +0000)
committerToma Tabacu <toma.tabacu@imgtec.com>
Wed, 17 Jun 2015 10:43:45 +0000 (10:43 +0000)
commite7684db38f3f4961bf0e6a8ab870ec3d2d008fff
tree53647fa1c620ded0a987f03fe297e5dfc72c23c6
parenta06697060521b6de35444ab6359825ac60d72b07
[mips] [IAS] Fix LW with relative label operands.

Summary:
Previously, MCSymbolRefExpr::create() was called with a StringRef of the symbol
name, which it would then search for in the Symbols StringMap (from MCContext).

However, relative labels (which are temporary symbols) are apparently not stored
in the Symbols StringMap, so we end up creating a new {$,.L}tmp symbol
({$,.L}tmp00, {$,.L}tmp10 etc.) each time we create an MCSymbolRefExpr by
passing in the symbol name as a StringRef.

Fortunately, there is a version of MCSymbolRefExpr::create() which takes an
MCSymbol* and we already have an MCSymbol* at that point, so we can just pass
that in instead of the StringRef.

I also removed the local StringRef calls to MCSymbolRefExpr::create() from
expandMemInst(), as those cases can be handled by evaluateRelocExpr() anyway.

Reviewers: dsanders

Reviewed By: dsanders

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D9938

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239897 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/Mips/AsmParser/MipsAsmParser.cpp
test/MC/Mips/mips-expansions.s