summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/lib/Support/Unix
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2015-02-07 12:50:33 +0000
committerdim <dim@FreeBSD.org>2015-02-07 12:50:33 +0000
commit69ca00fde386312051373aec87cfaa67d43a4363 (patch)
tree5919a53846e2644d1a4387bc25566320f4c642e9 /contrib/llvm/lib/Support/Unix
parent1cf79465c5d8d32222a13e127bfa324c2f39ff38 (diff)
downloadFreeBSD-src-69ca00fde386312051373aec87cfaa67d43a4363.zip
FreeBSD-src-69ca00fde386312051373aec87cfaa67d43a4363.tar.gz
Pull in r224884 from upstream llvm trunk (by Keno Fischer):
[FastIsel][X86] Fix invalid register replacement for bool args Summary: Consider the following IR: %3 = load i8* undef %4 = trunc i8 %3 to i1 %5 = call %jl_value_t.0* @foo(..., i1 %4, ...) ret %jl_value_t.0* %5 Bools (that are the result of direct truncs) are lowered as whatever the argument to the trunc was and a "and 1", causing the part of the MBB responsible for this argument to look something like this: %vreg8<def,tied1> = AND8ri %vreg7<kill,tied0>, 1, %EFLAGS<imp-def>; GR8:%vreg8,%vreg7 Later, when the load is lowered, it will insert %vreg15<def> = MOV8rm %vreg14, 1, %noreg, 0, %noreg; mem:LD1[undef] GR8:%vreg15 GR64:%vreg14 but remember to (at the end of isel) replace vreg7 by vreg15. Now for the bug. In fast isel lowering, we mistakenly mark vreg8 as the result of the load instead of the trunc. This adds a fixup to have vreg8 replaced by whatever the result of the load is as well, so we end up with %vreg15<def,tied1> = AND8ri %vreg15<kill,tied0>, 1, %EFLAGS<imp-def>; GR8:%vreg15 which is an SSA violation and causes problems later down the road. This fixes PR21557. Test Plan: Test test case from PR21557 is added to the test suite. Reviewers: ributzka Reviewed By: ributzka Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D6245 This fixes a possible assertion failure when compiling toolbox.cxx from LibreOffice 4.3.5. Reported by: kwm
Diffstat (limited to 'contrib/llvm/lib/Support/Unix')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud