diff options
author | Chris Lattner <sabre@nondot.org> | 2008-05-31 09:23:55 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-05-31 09:23:55 +0000 |
commit | e56d946a383e3a7330c5fe8a8cf8c409174fb774 (patch) | |
tree | e1c67172f9af9d2162e502238d105fa63a78c70d /lib/Analysis/ValueTracking.cpp | |
parent | 7e2dd6628e398f369a110856ec69455f65d17638 (diff) |
Fix the CBE's handling of instructions whose result is an i1. Previously,
we did not truncate the value down to i1 with (x&1). This caused a problem
when the computation of x was nontrivial, for example, "add i1 1, 1" would
return 2 instead of 0.
This makes the testcase compile into:
...
llvm_cbe_t = (((llvm_cbe_r == 0u) + (llvm_cbe_r == 0u))&1);
llvm_cbe_u = (((unsigned int )(bool )llvm_cbe_t));
...
instead of:
...
llvm_cbe_t = ((llvm_cbe_r == 0u) + (llvm_cbe_r == 0u));
llvm_cbe_u = (((unsigned int )(bool )llvm_cbe_t));
...
This fixes a miscompilation of mediabench/adpcm/rawdaudio/rawdaudio and
403.gcc with the CBE, regressions from LLVM 2.2. Tanya, please pull
this into the release branch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51813 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ValueTracking.cpp')
0 files changed, 0 insertions, 0 deletions