]> granicus.if.org Git - llvm/commit
[UnreachableBlockElim] Use COPY if PHI input is undef
authorMikael Holmen <mikael.holmen@ericsson.com>
Wed, 4 Oct 2017 06:06:31 +0000 (06:06 +0000)
committerMikael Holmen <mikael.holmen@ericsson.com>
Wed, 4 Oct 2017 06:06:31 +0000 (06:06 +0000)
commit880b83d5900b0ca1ec0a35ec80f04a5fd53377ad
tree7cce0c6f4cd5207f75937d1d95377c3947999437
parent0df2d3e4b69ffba332ca9af832a65c12938e3fb9
[UnreachableBlockElim] Use COPY if PHI input is undef

Summary:
If we have

    %vreg0<def> = PHI %vreg2<undef>, <BB#0>, %vreg3, <BB#2>; GR32:%vreg0,%vreg2,%vreg3
    %vreg3<def,tied1> = ADD32ri8 %vreg0<kill,tied0>, 1, %EFLAGS<imp-def>; GR32:%vreg3,%vreg0

then we can't just change %vreg0 into %vreg3, since %vreg2 is actually
undef. We would have to also copy the undef flag to be able to change the
register.

Instead we deal with this case like other cases where we can't just
replace the register: we insert a COPY. The code creating the COPY already
copied all flags from the PHI input, so the undef flag will be transferred
as it should.

Reviewers: kparzysz

Reviewed By: kparzysz

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D38235

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314879 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/UnreachableBlockElim.cpp
test/CodeGen/MIR/X86/unreachable-mbb-undef-phi.mir [new file with mode: 0644]