summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-02-02 20:21:56 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-02-02 20:21:56 +0000
commite17b0bfb24c88edad59672dd4446a71d15e6a6f5 (patch)
tree067d35b57491d6899128e844be77fbd9344fd447 /llvm/lib/Target
parent89d054fc64612018f6e38a03c29a9593974b47bd (diff)
downloadbcm5719-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.cpp12
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:
OpenPOWER on IntegriCloud