From 42f1fb12523c72fda30af51c64d2055bba3a9bae Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Thu, 2 Feb 2017 20:21:56 +0000 Subject: [PATCH] [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 --- .../Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp | 12 +++++++----- test/MC/Hexagon/ext-callt-rel.s | 6 ++++++ 2 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 test/MC/Hexagon/ext-callt-rel.s 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 + -- 2.50.1