diff options
| author | Nirav Dave <niravd@google.com> | 2018-09-17 20:34:26 +0000 |
|---|---|---|
| committer | Nirav Dave <niravd@google.com> | 2018-09-17 20:34:26 +0000 |
| commit | b1f9e4d285c51bf7d11121f310b063d17b330aaa (patch) | |
| tree | 9b67030328c41d50cd3f86e2d77dada8e8c46e8c /llvm | |
| parent | 72435e57019fd2a597b9bab472bc632630ff54d5 (diff) | |
| download | bcm5719-llvm-b1f9e4d285c51bf7d11121f310b063d17b330aaa.tar.gz bcm5719-llvm-b1f9e4d285c51bf7d11121f310b063d17b330aaa.zip | |
[MC] Avoid inlining constant symbols with variants.
Summary:
Defer unnecessary early inlining of constants to symbol
variants. Fixes PR38945.
Reviewers: nickdesaulniers, rnk
Subscribers: nemanjai, hiraditya, llvm-commits
Differential Revision: https://reviews.llvm.org/D52188
llvm-svn: 342412
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/MC/PowerPC/pr38945.s | 21 |
2 files changed, 22 insertions, 1 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index fd226eac4cd..06489622be6 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -1125,7 +1125,7 @@ bool AsmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) { // semantics in the face of reassignment. if (Sym->isVariable()) { auto V = Sym->getVariableValue(/*SetUsed*/ false); - bool DoInline = isa<MCConstantExpr>(V); + bool DoInline = isa<MCConstantExpr>(V) && !Variant; if (auto TV = dyn_cast<MCTargetExpr>(V)) DoInline = TV->inlineAssignedExpr(); if (DoInline) { diff --git a/llvm/test/MC/PowerPC/pr38945.s b/llvm/test/MC/PowerPC/pr38945.s new file mode 100644 index 00000000000..6588b778771 --- /dev/null +++ b/llvm/test/MC/PowerPC/pr38945.s @@ -0,0 +1,21 @@ +// RUN: llvm-mc -triple=powerpc64-pc-linux %s -o - | FileCheck %s + +NUMBER = 0x6ffffff9 + + .text +.globl main +main: + cmpwi 8,(NUMBER)@l + cmpwi 8,-(NUMBER)@l + cmpwi 8,(-NUMBER)@l + cmpwi 8,NUMBER@l + cmpwi 8,-NUMBER@l + + +// CHECK: main: +// CHECK: cmpwi 8, -7 +// CHECK: cmpwi 8, 7 +// CHECK: cmpwi 8, 7 +// CHECK: cmpwi 8, -7 +// CHECK: cmpwi 8, 7 + |

