diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-02-02 20:21:56 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-02-02 20:21:56 +0000 |
commit | 42f1fb12523c72fda30af51c64d2055bba3a9bae (patch) | |
tree | ee2bc5f61bbddce8ae24995b815d4db09b35dee2 | |
parent | 4dfaf938854a844b4194401ad0af78b8cea0d46c (diff) | |
download | llvm-42f1fb12523c72fda30af51c64d2055bba3a9bae.tar.gz |
[Hexagon] Fix relocation kind for extended predicated calls
Patch by Sid Manning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293931 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp | 12 | ||||
-rw-r--r-- | test/MC/Hexagon/ext-callt-rel.s | 6 |
2 files changed, 13 insertions, 5 deletions
diff --git a/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp b/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp index d7159b069c9..cfb5165e590 100644 --- a/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp +++ b/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp @@ -253,14 +253,16 @@ Hexagon::Fixups HexagonMCCodeEmitter::getFixupNoBits( return Hexagon::fixup_Hexagon_B32_PCREL_X; case MCSymbolRefExpr::VK_None: { auto Insts = HexagonMCInstrInfo::bundleInstructions(**CurrentBundle); - for (auto I = Insts.begin(), N = Insts.end(); I != N; ++I) + for (auto I = Insts.begin(), N = Insts.end(); I != N; ++I) { if (I->getInst() == &MI) { - if (HexagonMCInstrInfo::getDesc(MCII, *(I + 1)->getInst()).isBranch() || - (HexagonMCInstrInfo::getType(MCII, *(I + 1)->getInst()) == HexagonII::TypeCR)) + const MCInst &NextI = *(I+1)->getInst(); + const MCInstrDesc &D = HexagonMCInstrInfo::getDesc(MCII, NextI); + if (D.isBranch() || D.isCall() || + HexagonMCInstrInfo::getType(MCII, NextI) == HexagonII::TypeCR) return Hexagon::fixup_Hexagon_B32_PCREL_X; - else - return Hexagon::fixup_Hexagon_32_6_X; + return Hexagon::fixup_Hexagon_32_6_X; } + } raise_relocation_error(0, kind); } default: diff --git a/test/MC/Hexagon/ext-callt-rel.s b/test/MC/Hexagon/ext-callt-rel.s new file mode 100644 index 00000000000..344a8fbc11b --- /dev/null +++ b/test/MC/Hexagon/ext-callt-rel.s @@ -0,0 +1,6 @@ +# RUN: llvm-mc -arch=hexagon -filetype=obj %s -o - | llvm-objdump -r - | FileCheck %s + +if (p0) call foo +#CHECK: R_HEX_B32_PCREL_X +#CHECK: R_HEX_B15_PCREL_X + |