[Hexagon] Make sure duplexed dealloc_returns are checked for double jumps

Patch by Colin LeMahieu.

llvm-svn: 301951
This commit is contained in:
Krzysztof Parzyszek 2017-05-02 18:03:08 +00:00
parent 9ac7d6be3c
commit b0af1ef741
2 changed files with 15 additions and 0 deletions

View File

@ -336,6 +336,14 @@ bool HexagonShuffler::check() {
++jumps; ++jumps;
foundBranches.push_back(ISJ); foundBranches.push_back(ISJ);
} }
if (HexagonMCInstrInfo::getDesc(MCII, Inst0).isReturn()) {
++deallocs, ++jumps, ++jump1; // DEALLOC_RETURN is of type LD.
foundBranches.push_back(ISJ);
}
if (HexagonMCInstrInfo::getDesc(MCII, Inst1).isReturn()) {
++deallocs, ++jumps, ++jump1; // DEALLOC_RETURN is of type LD.
foundBranches.push_back(ISJ);
}
break; break;
} }
} }

View File

@ -0,0 +1,7 @@
# RUN: not llvm-mc -arch=hexagon -mcpu=hexagonv62 -filetype=obj -o - %s
# Check that a duplex involving dealloc_return is correctly checked
# dealloc_return cannot be involved in a double jump packet
{ r0=add(r0,#-1)
p0=cmp.eq(r0,r0); if (p0.new) jump:nt 0
if (p0) dealloc_return }