Home

[Constant Hoisting] Fix multiple entries for the same basic block in PHI nodes.

Press ? to show keyboard shortcuts.
Committed
ributzkaMar 21 2014, 6:49 PM
Parents
rL204536: [DAG] Fix an assertion failure caused by an invalid cast in method…
Branches
Unknown
Tags
Unknown
Subscribers
None
Projects
None
Description

[Constant Hoisting] Fix multiple entries for the same basic block in PHI nodes.

A PHI node usually has only one value/basic block pair per incoming basic block.
In the case of a switch statement it is possible that a following PHI node may
have more than one such pair per incoming basic block. E.g.:
%0 = phi i64 [ 123456, %case2 ], [ 654321, %Entry ], [ 654321, %Entry ]
This is valid and the verfier doesn't complain, because both values are the
same.

Constant hoisting materializes the constant for each operand separately and the
value is still the same, but the variable names have changed. As a result the
verfier can't recognize anymore that they are the same value and complains.

This fix adds special update code for PHI node in constant hoisting to prevent
this corner case.

This fixes rdar://problem/16394449

rL204537

llvm/trunk/lib/Transforms/Scalar/ConstantHoisting.cpp

Loading...

llvm/trunk/test/Transforms/ConstantHoisting/X86/phi.ll

Loading...

Add Comment