diff options
author | Chris Lattner <sabre@nondot.org> | 2010-04-05 22:14:48 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-04-05 22:14:48 +0000 |
commit | e597f00e1a88847677e04a70ecfc9f21d372fd9d (patch) | |
tree | aa87616f32d00e67a4586f3d718b0943dd2ebda4 /include/llvm/Support/MemoryBuffer.h | |
parent | 9e185800c057dad3d468c78d1d2045826a9f2299 (diff) | |
download | external_llvm-e597f00e1a88847677e04a70ecfc9f21d372fd9d.zip external_llvm-e597f00e1a88847677e04a70ecfc9f21d372fd9d.tar.gz external_llvm-e597f00e1a88847677e04a70ecfc9f21d372fd9d.tar.bz2 |
fix a really nasty bug that Evan was tracking in SCCP. When resolving
undefs in branches/switches, we have two cases: a branch on a literal
undef or a branch on a symbolic value which is undef. If we have a
literal undef, the code was correct: forcing it to a constant is the
right thing to do.
If we have a branch on a symbolic value that is undef, we should force
the symbolic value to a constant, which then makes the successor block
live. Forcing the condition of the branch to being a constant isn't
safe if later paths become live and the value becomes overdefined. This
is the case that 'forcedconstant' is designed to handle, so just use it.
This fixes rdar://7765019 but there is no good testcase for this, the
one I have is too insane to be useful in the future.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100478 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Support/MemoryBuffer.h')
0 files changed, 0 insertions, 0 deletions