[PATCH] D34640: Create a PHI value when merging with a known undef live-in
Krzysztof Parzyszek via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 26 12:47:28 PDT 2017
kparzysz created this revision.
Herald added a subscriber: qcolombet.
The following snippet illustrates the problem.
During register allocation, the value defined at `868` for `vreg154:isub_hi` (lane mask 0x0001) is extended to the use at `1564` via a single segment. That segment spans over the entry to `BB#6`, which is reachable from two places: the end of `BB#5` (dominated by `868`), and the end of `BB#6`. The value of `vreg154:isub_hi` is undefined when coming from the end of `BB#6`, which causes the verifier to complain.
To fix this, create a PHI when a defined value is merged with an undef value at the entry to a block. Currently, undef values are simply ignored when determining the need for PHIs, which leads to a problem when there is a unique defined value.
704B BB#5: derived from LLVM BB %b17
Predecessors according to CFG: BB#2 BB#4
868B %vreg154<def> = COPY %vreg148; DoubleRegs:%vreg154,%vreg148
Successors according to CFG: BB#6(?%)
1172B BB#6: derived from LLVM BB %b30
Predecessors according to CFG: BB#5 BB#6
1212B %vreg66<def> = C2_cmpgt %vreg152, %vreg154:isub_lo; PredRegs:%vreg66 IntRegs:%vreg152 DoubleRegs:%vreg154
1564B %vreg153<def> = COPY %vreg154; DoubleRegs:%vreg153,%vreg154
1572B %vreg154<def> = COPY %vreg153; DoubleRegs:%vreg154,%vreg153
1856B %vreg154:isub_lo<def,read-undef> = A2_addi %vreg154:isub_lo, 1; DoubleRegs:%vreg154
1984B J2_jump <BB#6>, %PC<imp-def,dead>
Successors according to CFG: BB#6(?%)
# End machine code for function fred.
*** Bad machine code: Register not marked live out of predecessor ***
- function: fred
- basic block: BB#6 b30 (0x50bb8b8) [1172B;1992B)
- liverange: [868r,1564r:1)[1572r,1572d:0) 0 at 1572r 1 at 868r
- v. register: %vreg154
- lanemask: 00000001
- ValNo: 1 (def 868r)
live into BB#6 at 1172B, not live before 1992B
LLVM ERROR: Found 1 machine code errors.
Repository:
rL LLVM
https://reviews.llvm.org/D34640
Files:
lib/CodeGen/LiveRangeCalc.cpp
test/CodeGen/Hexagon/regalloc-liveout-undef.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D34640.104009.patch
Type: text/x-patch
Size: 8517 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170626/216ed31a/attachment.bin>
More information about the llvm-commits
mailing list