diff options
| author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-06-29 15:55:59 +0000 |
|---|---|---|
| committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-06-29 15:55:59 +0000 |
| commit | 0089419417b9804f8c85dd98d07063313eaaec61 (patch) | |
| tree | e5593beeeeab971a8dfb3934e882cfe04e00ed81 /llvm | |
| parent | 59d7b77b16bf11810091fe75a4348198783d3fbc (diff) | |
| download | bcm5719-llvm-0089419417b9804f8c85dd98d07063313eaaec61.tar.gz bcm5719-llvm-0089419417b9804f8c85dd98d07063313eaaec61.zip | |
[Hexagon] Keep all phi nodes when building DFG in addr-mode-opt
The dead phis are needed for finding correct would-be reaching defs
in register propagation.
llvm-svn: 306690
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp | 10 | ||||
| -rw-r--r-- | llvm/test/CodeGen/Hexagon/addrmode-keepdeadphis.mir | 30 |
2 files changed, 36 insertions, 4 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp b/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp index 27b40f134b1..a331c978f59 100644 --- a/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp +++ b/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp @@ -535,9 +535,9 @@ bool HexagonOptAddrMode::processBlock(NodeAddr<BlockNode *> BA) { !MI->getOperand(1).isGlobal()) continue; - DEBUG(dbgs() << "[Analyzing A2_tfrsi]: " << *MI << "\n"); - DEBUG(dbgs() << "\t[InstrNode]: " << Print<NodeAddr<InstrNode *>>(IA, *DFG) - << "\n"); + DEBUG(dbgs() << "[Analyzing " << HII->getName(MI->getOpcode()) << "]: " + << *MI << "\n\t[InstrNode]: " + << Print<NodeAddr<InstrNode *>>(IA, *DFG) << '\n'); NodeList UNodeList; getAllRealUses(SA, UNodeList); @@ -605,7 +605,9 @@ bool HexagonOptAddrMode::runOnMachineFunction(MachineFunction &MF) { const TargetOperandInfo TOI(*HII); DataFlowGraph G(MF, *HII, TRI, *MDT, MDF, TOI); - G.build(); + // Need to keep dead phis because we can propagate uses of registers into + // nodes dominated by those would-be phis. + G.build(BuildOptions::KeepDeadPhis); DFG = &G; Liveness L(MRI, *DFG); diff --git a/llvm/test/CodeGen/Hexagon/addrmode-keepdeadphis.mir b/llvm/test/CodeGen/Hexagon/addrmode-keepdeadphis.mir new file mode 100644 index 00000000000..b77a7b1bd36 --- /dev/null +++ b/llvm/test/CodeGen/Hexagon/addrmode-keepdeadphis.mir @@ -0,0 +1,30 @@ +# RUN: llc -march=hexagon -run-pass amode-opt %s -o - | FileCheck %s + +# Check that the addasl is not propagated into the addressing mode. +# CHECK-NOT: L4_loadri_ur + +--- | + @g = global i32 zeroinitializer + define void @fred() { ret void } +... + +--- +name: fred +tracksRegLiveness: true + +body: | + bb.0: + liveins: %p0 + %r0 = A2_tfrsi @g + %r1 = A2_tfrsi 1 + %r2 = S2_addasl_rrri %r0, %r1, 1 + J2_jumpt %p0, %bb.2, implicit-def %pc + + bb.1: + liveins: %r0, %r2 + %r1 = A2_tfrsi 2 + + bb.2: + liveins: %r0, %r2 + %r3 = L2_loadri_io %r2, 0 +... |

