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 | e17b0bfb24c88edad59672dd4446a71d15e6a6f5 (patch) | |
tree | 067d35b57491d6899128e844be77fbd9344fd447 /llvm/lib/Target | |
parent | 89d054fc64612018f6e38a03c29a9593974b47bd (diff) | |
download | bcm5719-llvm-e17b0bfb24c88edad59672dd4446a71d15e6a6f5.tar.gz bcm5719-llvm-e17b0bfb24c88edad59672dd4446a71d15e6a6f5.zip |
[Hexagon] Fix relocation kind for extended predicated calls
Patch by Sid Manning.
llvm-svn: 293931
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp index d7159b069c9..cfb5165e590 100644 --- a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp +++ b/llvm/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: |