[Hexagon] Don't packetize new-value stores with any other stores

llvm-svn: 341409
This commit is contained in:
Krzysztof Parzyszek 2018-09-04 21:07:27 +00:00
parent b55236f522
commit f4ad2cb24f
2 changed files with 32 additions and 0 deletions

View File

@ -1112,6 +1112,10 @@ static bool cannotCoexistAsymm(const MachineInstr &MI, const MachineInstr &MJ,
return MJ.isInlineAsm() || MJ.isBranch() || MJ.isBarrier() ||
MJ.isCall() || MJ.isTerminator();
// New-value stores cannot coexist with any other stores.
if (HII.isNewValueStore(MI) && MJ.mayStore())
return true;
switch (MI.getOpcode()) {
case Hexagon::S2_storew_locked:
case Hexagon::S4_stored_locked:
@ -1654,6 +1658,9 @@ bool HexagonPacketizerList::isLegalToPruneDependencies(SUnit *SUI, SUnit *SUJ) {
return false;
}
if (!Coexist)
return false;
if (ChangedOffset == INT64_MAX && updateOffset(SUI, SUJ)) {
FoundSequentialDependence = false;
Dependence = false;

View File

@ -0,0 +1,25 @@
# RUN: llc -march=hexagon -start-before=hexagon-packetizer -o - %s | FileCheck %s
# This used to generate an invalid packet:
# {
# r1 = #0
# memw(r0++#4) = r1.new // new-value store must be the only store
# memw(r0+#0) = #0
# }
#
# CHECK: memw
# CHECK: }
# CHECK: memw
---
name: f0
tracksRegLiveness: true
stack:
- { id: 0, size: 8, alignment: 8 }
body: |
bb.0:
liveins: $r0
renamable $r1 = A2_tfrsi 0
renamable $r0 = S2_storeri_pi renamable $r0, 4, killed renamable $r1 :: (store 4 into %stack.0)
S4_storeiri_io renamable $r0, 0, 0 :: (store 4 into %stack.0 + 4)
J2_jumpr $r31, implicit-def $pc
...