| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
immediates. The frontend now checks this when the builtin is used. This will allow the instruction printer to not have to deal with invalid immediates on these instructions.
llvm-svn: 224885
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
llvm-svn: 224884
|
|
|
|
|
|
|
| |
intrinsic header file. Along with r224822, this should restore the build
bots to passing.
llvm-svn: 224883
|
|
|
|
| |
llvm-svn: 224882
|
|
|
|
|
|
|
| |
Don't warn when a selector has an unavailable and an available variant,
and the first also has an implementation.
llvm-svn: 224881
|
|
|
|
| |
llvm-svn: 224880
|
|
|
|
|
|
|
|
|
|
| |
intrinsic files.
This still lower to the same intrinsics as before.
This is preparation for bounds checking the immediate on the avx version of the builtin so we don't pass illegal immediates into the backend. Since SSE uses a smaller size immediate its not possible to bounds check when using a shared builtin. Rather than creating a clang specific builtin for the different immediate, I decided (after consulting with Chandler) that it was better to match gcc.
llvm-svn: 224879
|
|
|
|
| |
llvm-svn: 224878
|
|
|
|
| |
llvm-svn: 224877
|
|
|
|
|
|
|
|
|
|
|
| |
Remove ObjCMethodList::Count, instead store a "has more than one decl" bit in
the low bit of the ObjCMethodDecl pointer, using a PointerIntPair.
Most of this patch is replacing ".Method" with ".getMethod()".
No intended behavior change.
llvm-svn: 224876
|
|
|
|
|
|
|
| |
The behavior looks incorrect to me, but the test is supposed to document
current behavior for now.
llvm-svn: 224875
|
|
|
|
|
|
| |
for the constant parameter.
llvm-svn: 224874
|
|
|
|
|
|
|
| |
I broke this case in a local patch I'm writing, and there was no test to stop
me. Now there is.
llvm-svn: 224873
|
|
|
|
| |
llvm-svn: 224872
|
|
|
|
| |
llvm-svn: 224871
|
|
|
|
| |
llvm-svn: 224870
|
|
|
|
| |
llvm-svn: 224869
|
|
|
|
|
|
| |
unused classes.
llvm-svn: 224868
|
|
|
|
| |
llvm-svn: 224867
|
|
|
|
| |
llvm-svn: 224866
|
|
|
|
| |
llvm-svn: 224865
|
|
|
|
| |
llvm-svn: 224864
|
|
|
|
| |
llvm-svn: 224863
|
|
|
|
|
|
| |
references to them.
llvm-svn: 224862
|
|
|
|
|
|
| |
Similar fix to not fail to disassembler CR9-CR15 references.
llvm-svn: 224861
|
|
|
|
|
|
| |
enabled on Windows
llvm-svn: 224860
|
|
|
|
| |
llvm-svn: 224859
|
|
|
|
| |
llvm-svn: 224858
|
|
|
|
| |
llvm-svn: 224857
|
|
|
|
|
|
| |
to make it easier to debug startup shadow mapping failures
llvm-svn: 224856
|
|
|
|
|
|
|
| |
This increases the limit from 4M locations to 16M, reserving
64Mb virtual memory. Chrome has >5M unique coverage locations with coverage=3.
llvm-svn: 224855
|
|
|
|
| |
llvm-svn: 224854
|
|
|
|
|
|
|
|
| |
This is a re-commit of r224838 + r224839, previously reverted in r224850.
Test failures were likely (still can not reproduce) caused by two lit tests
using the same name for an intermediate build target.
llvm-svn: 224853
|
|
|
|
|
|
| |
This will prevent ASan bots from hanging / timing out
llvm-svn: 224852
|
|
|
|
|
|
| |
Inferring nuw caused some clang tests to change their output.
llvm-svn: 224851
|
|
|
|
|
|
| |
Flaky failures on the build bots.
llvm-svn: 224850
|
|
|
|
|
|
|
| |
A multiply cannot unsigned wrap if there are bitwidth, or more, leading
zero bits between the two operands.
llvm-svn: 224849
|
|
|
|
|
|
|
| |
Constant contains the isAllOnesValue and isNullValue predicates, not
ConstantInt.
llvm-svn: 224848
|
|
|
|
|
|
|
| |
We already utilize this logic for reducing overflow intrinsics, it makes
sense to reuse it for normal multiplies as well.
llvm-svn: 224847
|
|
|
|
|
|
| |
instructions. Instead of rejecting we'll just generate the _alt forms that don't try to alter the mnemonic. While I'm here, merge some common code in the Instruction printers for the condition code replacement and fix the mask on SSE to be 3-bits instead of 4.
llvm-svn: 224846
|
|
|
|
| |
llvm-svn: 224845
|
|
|
|
|
|
|
|
| |
getPrintable has an overload which takes a bool. This means that const
qualified Exprs would get forwarded to the bool overload instead of the
Expr overload.
llvm-svn: 224844
|
|
|
|
| |
llvm-svn: 224843
|
|
|
|
|
|
|
|
|
|
|
| |
When materializing constant i1 values, they must be zero extended. We represent
i1 values as [0, 1], not [0, -1], in i32 registers. As it turns out, this code
path was dead for i1 values prior to r216006 (which is why this did not manifest in
miscompiles until recently).
Fixes -O0 self-hosting on PPC64/Linux.
llvm-svn: 224842
|
|
|
|
| |
llvm-svn: 224841
|
|
|
|
| |
llvm-svn: 224840
|
|
|
|
|
|
| |
Looks like we can't use atexit() during ASan initialization on Windows.
llvm-svn: 224839
|
|
|
|
| |
llvm-svn: 224838
|
|
|
|
| |
llvm-svn: 224837
|
|
|
|
| |
llvm-svn: 224836
|