| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 156662
|
| |
|
|
| |
llvm-svn: 156658
|
| |
|
|
|
|
| |
but it generates int3 on x86 instead of ud2.
llvm-svn: 156593
|
| |
|
|
|
|
|
|
|
|
| |
When a combine twiddles an extract_vector, care should be take to preserve
the type of the index operand. No luck extracting a reasonable testcase,
unfortunately.
rdar://11391009
llvm-svn: 156419
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The getPointerRegClass() hook can return register classes that depend on
the calling convention of the current function (ptr_rc_tailcall).
So far, we have been able to infer the calling convention from the
subtarget alone, but as we add support for multiple calling conventions
per target, that no longer works.
Patch by Yiannis Tsiouris!
llvm-svn: 156328
|
| |
|
|
| |
llvm-svn: 156324
|
| |
|
|
|
|
|
|
|
|
|
| |
This will be used to determine whether it's profitable to turn a select into a
branch when the branch is likely to be predicted.
Currently enabled for everything but Atom on X86 and Cortex-A9 devices on ARM.
I'm not entirely happy with the name of this flag, suggestions welcome ;)
llvm-svn: 156233
|
| |
|
|
|
|
|
|
| |
We want the representative register class to contain the largest
super-registers available. This makes the function less sensitive to the
register class numbering.
llvm-svn: 156220
|
| |
|
|
|
|
|
|
| |
The masks returned by SuperRegClassIterator are computed automatically
by TableGen. This is better than depending on the manually specified
SuperRegClasses.
llvm-svn: 156147
|
| |
|
|
|
|
|
|
|
|
| |
The ensures that virtual registers always belong to an allocatable class.
If your target attempts to create a vreg for an operand that has no
allocatable register subclass, you will crash quickly.
This ensures that targets define register classes as intended.
llvm-svn: 156046
|
| |
|
|
|
|
| |
just like it now knows for FMULs.
llvm-svn: 156029
|
| |
|
|
| |
llvm-svn: 156023
|
| |
|
|
| |
llvm-svn: 155957
|
| |
|
|
|
|
| |
PR10799
llvm-svn: 155954
|
| |
|
|
| |
llvm-svn: 155859
|
| |
|
|
|
|
|
|
|
|
| |
This time, also fix the caller of AddGlue to properly handle
incomplete chains. AddGlue had failure modes, but shamefully hid them
from its caller. It's luck ran out.
Fixes rdar://11314175: BuildSchedUnits assert.
llvm-svn: 155749
|
| |
|
|
|
|
| |
This definitely caused regression with ARM -mno-thumb.
llvm-svn: 155743
|
| |
|
|
|
|
|
|
|
|
|
| |
DAGCombine strangeness may result in multiple loads from the same
offset. They both may try to glue themselves to another load. We could
insist that the redundant loads glue themselves to each other, but the
beter fix is to bail out from bad gluing at the time we detect it.
Fixes rdar://11314175: BuildSchedUnits assert.
llvm-svn: 155668
|
| |
|
|
| |
llvm-svn: 155309
|
| |
|
|
|
|
| |
widening of vectors.
llvm-svn: 155296
|
| |
|
|
|
|
|
|
| |
The X86 target is editing the selection DAG while isel is selecting
nodes following a topological ordering. When the DAG hacking triggers
CSE, nodes can be deleted and bad things happen.
llvm-svn: 155257
|
| |
|
|
|
|
|
|
|
| |
Now that multiple DAGUpdateListeners can be active at the same time,
ISelPosition can become a local variable in DoInstructionSelection.
We simply register an ISelUpdater with CurDAG while ISelPosition exists.
llvm-svn: 155249
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead of passing listener pointers to RAUW, let SelectionDAG itself
keep a linked list of interested listeners.
This makes it possible to have multiple listeners active at once, like
RAUWUpdateListener was already doing. It also makes it possible to
register listeners up the call stack without controlling all RAUW calls
below.
DAGUpdateListener uses an RAII pattern to add itself to the SelectionDAG
list of active listeners.
llvm-svn: 155248
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
transformation:
(X op C1) ^ C2 --> (X op C1) & ~C2 iff (C1&C2) == C2
should be done.
This change has been tested:
Using a debug+asserts build:
on the specific test case that brought this bug to light
make check-all
lnt nt
using this clang to build a release version of clang
Using the release+asserts clang-with-clang build:
on the specific test case that brought this bug to light
make check-all
lnt nt
Checking in because Evan wants it checked in. Test case forthcoming after
scrubbing.
llvm-svn: 154955
|
| |
|
|
| |
llvm-svn: 154786
|
| |
|
|
|
|
| |
to the original type.
llvm-svn: 154764
|
| |
|
|
|
|
|
|
| |
Fix a dagcombine optimization which assumes that the vsetcc result type is always
of the same size as the compared values. This is ture for SSE/AVX/NEON but not
for all targets.
llvm-svn: 154490
|
| |
|
|
| |
llvm-svn: 154479
|
| |
|
|
|
|
| |
intrinsic to an nodetype.
llvm-svn: 154478
|
| |
|
|
|
|
| |
compiled code size a bit.
llvm-svn: 154473
|
| |
|
|
|
|
|
|
| |
one-operand version of getNode() to the two-operand version, since it became a two-operand node at sound point.
Zap a testcase that this allows us to completely fold away.
llvm-svn: 154447
|
| |
|
|
|
|
| |
multiplication by a denormal, and some tests checking that.
llvm-svn: 154431
|
| |
|
|
|
|
|
|
|
| |
don't elide the branch instruction if it's the only one in the block,
otherwise it's ok.
PR9796 and rdar://11215207
llvm-svn: 154417
|
| |
|
|
| |
llvm-svn: 154414
|
| |
|
|
|
|
|
|
|
| |
always
of the same size as the compared values. This is ture for SSE/AVX/NEON but not
for all targets.
llvm-svn: 154397
|
| |
|
|
|
|
| |
This fixes PR12516 and uncovers one weird problem in legalize (workarounded)
llvm-svn: 154394
|
| |
|
|
| |
llvm-svn: 154378
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
legalizer always use the DAG entry node. This is wrong when the libcall is
emitted as a tail call since it effectively folds the return node. If
the return node's input chain is not the entry (i.e. call, load, or store)
use that as the tail call input chain.
PR12419
rdar://9770785
rdar://11195178
llvm-svn: 154370
|
| |
|
|
|
|
| |
not fit in a i64.
llvm-svn: 154364
|
| |
|
|
|
|
| |
GOT if jump table uses 64-bit gp-relative relocation.
llvm-svn: 154341
|
| |
|
|
| |
llvm-svn: 154322
|
| |
|
|
|
|
| |
some checks to allow better early out.
llvm-svn: 154309
|
| |
|
|
| |
llvm-svn: 154308
|
| |
|
|
| |
llvm-svn: 154307
|
| |
|
|
|
|
| |
happen.
llvm-svn: 154305
|
| |
|
|
| |
llvm-svn: 154299
|
| |
|
|
| |
llvm-svn: 154297
|
| |
|
|
|
|
|
|
| |
when -ffast-math, i.e. don't just always do it if the reciprocal can
be formed exactly. There is already an IR level transform that does
that, and it does it more carefully.
llvm-svn: 154296
|
| |
|
|
|
|
| |
width and the input vector widths don't match. No need to check the min and max are in range before calculating the start index. The range check after having the start index is sufficient. Also no need to check for an extract from the beginning differently.
llvm-svn: 154295
|
| |
|
|
|
|
|
|
| |
in TargetLowering. There was already a FIXME about this location being
odd. The interface is simplified as a consequence. This will also make
it easier to change TLS models when compiling with PIE.
llvm-svn: 154292
|