mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[Hexagon] Don't packetize new-value stores with any other stores
llvm-svn: 341409
This commit is contained in:
parent
bce4b693c0
commit
87af4ff655
@ -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;
|
||||
|
25
test/CodeGen/Hexagon/packetize-nvstore.mir
Normal file
25
test/CodeGen/Hexagon/packetize-nvstore.mir
Normal 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
|
||||
...
|
Loading…
x
Reference in New Issue
Block a user