diff options
| author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-02-06 23:30:17 +0000 |
|---|---|---|
| committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-02-06 23:30:17 +0000 |
| commit | becf0a362a030e59f4a78621931342ea8aecd5e1 (patch) | |
| tree | 3b8e3790677592e3f3704300a7ed8c04deff4e05 /llvm/lib | |
| parent | 5b4a6b67c577b394647be4f9a3abf0f547433433 (diff) | |
| download | bcm5719-llvm-becf0a362a030e59f4a78621931342ea8aecd5e1.tar.gz bcm5719-llvm-becf0a362a030e59f4a78621931342ea8aecd5e1.zip | |
Revert "[Hexagon] Address ASAN and UBSAN failures after r294226"
This reverts commit r294256. It seems to be causing more problems instead
of solving them.
llvm-svn: 294259
Diffstat (limited to 'llvm/lib')
3 files changed, 13 insertions, 15 deletions
diff --git a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp index 35f59c67ece..d756d1bd45c 100644 --- a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp +++ b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp @@ -78,7 +78,7 @@ bool HexagonMCInstrInfo::canonicalizePacket(MCInstrInfo const &MCII, } // Examines packet and pad the packet, if needed, when an // end-loop is in the bundle. - HexagonMCInstrInfo::padEndloop(MCB, Context); + HexagonMCInstrInfo::padEndloop(MCB); // If compounding and duplexing didn't reduce the size below // 4 or less we have a packet that is too big. if (HexagonMCInstrInfo::bundleSize(MCB) > HEXAGON_PACKET_SIZE) @@ -273,8 +273,9 @@ int HexagonMCInstrInfo::getMaxValue(MCInstrInfo const &MCII, HexagonMCInstrInfo::isExtended(MCII, MCI)); if (S) // if value is signed - return (1 << (HexagonMCInstrInfo::getExtentBits(MCII, MCI) - 1)) - 1; - return (1 << HexagonMCInstrInfo::getExtentBits(MCII, MCI)) - 1; + return ~(-1 << (HexagonMCInstrInfo::getExtentBits(MCII, MCI) - 1)); + else + return ~(-1 << HexagonMCInstrInfo::getExtentBits(MCII, MCI)); } /// Return the minimum value of an extendable operand. @@ -287,8 +288,9 @@ int HexagonMCInstrInfo::getMinValue(MCInstrInfo const &MCII, HexagonMCInstrInfo::isExtended(MCII, MCI)); if (S) // if value is signed - return -(1 << (HexagonMCInstrInfo::getExtentBits(MCII, MCI) - 1)); - return 0; + return -1 << (HexagonMCInstrInfo::getExtentBits(MCII, MCI) - 1); + else + return 0; } StringRef HexagonMCInstrInfo::getName(MCInstrInfo const &MCII, @@ -745,7 +747,7 @@ bool HexagonMCInstrInfo::s23_2_reloc(MCExpr const &Expr) { return HExpr->s23_2_reloc(); } -void HexagonMCInstrInfo::padEndloop(MCInst &MCB, MCContext &Context) { +void HexagonMCInstrInfo::padEndloop(MCInst &MCB) { MCInst Nop; Nop.setOpcode(Hexagon::A2_nop); assert(isBundle(MCB)); @@ -753,7 +755,7 @@ void HexagonMCInstrInfo::padEndloop(MCInst &MCB, MCContext &Context) { (HexagonMCInstrInfo::bundleSize(MCB) < HEXAGON_PACKET_INNER_SIZE)) || ((HexagonMCInstrInfo::isOuterLoop(MCB) && (HexagonMCInstrInfo::bundleSize(MCB) < HEXAGON_PACKET_OUTER_SIZE)))) - MCB.addOperand(MCOperand::createInst(new (Context) MCInst(Nop))); + MCB.addOperand(MCOperand::createInst(new MCInst(Nop))); } bool HexagonMCInstrInfo::prefersSlot3(MCInstrInfo const &MCII, diff --git a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.h b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.h index 2e989adb5cc..83b859af57b 100644 --- a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.h +++ b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.h @@ -256,7 +256,7 @@ bool mustExtend(MCExpr const &Expr); bool mustNotExtend(MCExpr const &Expr); // Pad the bundle with nops to satisfy endloop requirements -void padEndloop(MCInst &MCI, MCContext &Context); +void padEndloop(MCInst &MCI); bool prefersSlot3(MCInstrInfo const &MCII, MCInst const &MCI); // Replace the instructions inside MCB, represented by Candidate diff --git a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonShuffler.cpp b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonShuffler.cpp index 4acf9889adf..1bf04dd9b8e 100644 --- a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonShuffler.cpp +++ b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonShuffler.cpp @@ -80,19 +80,15 @@ public: unsigned HexagonResource::setWeight(unsigned s) { const unsigned SlotWeight = 8; const unsigned MaskWeight = SlotWeight - 1; - unsigned Units = getUnits(); - unsigned Key = ((1u << s) & Units) != 0; + bool Key = (1 << s) & getUnits(); // Calculate relative weight of the insn for the given slot, weighing it the // heavier the more restrictive the insn is and the lowest the slots that the // insn may be executed in. - if (Key == 0 || Units == 0 || (SlotWeight*s > 32)) - return 0; - Weight = - (1u << (SlotWeight * s)) * ((MaskWeight - countPopulation(getUnits())) + (Key << (SlotWeight * s)) * ((MaskWeight - countPopulation(getUnits())) << countTrailingZeros(getUnits())); - return Weight; + return (Weight); } void HexagonCVIResource::SetupTUL(TypeUnitsAndLanes *TUL, StringRef CPU) { |

