| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
| |
These pointers are really just offsets and they will always be
less than 16-bits. Using AssertZExt allows us to use computeKnownBits
to prove that these values are positive. We will use this information
in a later commit.
llvm-svn: 216277
|
| |
|
|
|
|
|
| |
DS_1A uses a single offset encoding, so offset1 wasn't being
encoded.
llvm-svn: 216276
|
| |
|
|
|
|
|
|
|
| |
instruction from ARMInstrInfo to ARMBaseInstrInfo.
That way, thumb mode can also benefit from the advanced copy optimization.
<rdar://problem/12702965>
llvm-svn: 216274
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Consider:
%add = add nuw i32 %a, -16777216
%and = and i32 %add, 255
Regardless of whether or not we demand the sign bit of %add, we cannot
replace -16777216 with 2130706432 without also removing 'nuw' from the
instruction.
llvm-svn: 216273
|
| |
|
|
|
|
| |
We can preserve nsw during this transform if -C won't overflow.
llvm-svn: 216269
|
| |
|
|
|
|
|
|
| |
calling convention if FP is 64-bit and +nooddspreg is used.
Differential Revision: http://reviews.llvm.org/D4981.diff
llvm-svn: 216262
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Consider:
%add = add nsw i32 %a, -16777216
%and = and i32 %add, 255
Regardless of whether or not we demand the sign bit of %add, we cannot
replace -16777216 with 2130706432 without also removing 'nsw' from the
instruction.
This fixes PR20377.
llvm-svn: 216261
|
| |
|
|
|
|
|
|
|
|
|
|
| |
instructions.
In unreachable blocks it's legal to have instructions like "%x = op %x".
Such instuctions are not schedulable. Therefore the SLPVectorizer has to check for
unreachable blocks and ignore them.
Fixes bug 20646.
llvm-svn: 216256
|
| |
|
|
|
|
|
| |
We now use a std::vector instead of a DenseSet to store the list of
label checks so that we can iterate over it deterministically.
llvm-svn: 216255
|
| |
|
|
|
|
|
|
|
| |
Given something like X01XX + X01XX, we know that the result must look
like X1XXX.
Adapted from a patch by Richard Smith, test-case written by me.
llvm-svn: 216250
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In this case, we are creating an x86_fp80 slice for a union from C where
the padding bytes may contain real data. An x86_fp80 alloca is 16 bytes,
and that's just fine. We can't, however, use regular loads and stores to
access the slice, because the store size is only 10 bytes / 80 bits.
Instead, use memcpy and memset.
Fixes PR18726.
Reviewed By: chandlerc
Differential Revision: http://reviews.llvm.org/D5012
llvm-svn: 216248
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This (mostly) reverts commit r216119.
Somewhere during the review Reid committed r214980 which fixed this
another way, and I neglected to check that the testcase still failed
before committing.
I've left test/CodeGen/X86/aligned-variadic.ll around in case it adds
extra coverage.
llvm-svn: 216246
|
| |
|
|
|
|
|
|
| |
This adds the missing variable shift support for value type i8, i16, and i32.
This fixes <rdar://problem/18095685>.
llvm-svn: 216242
|
| |
|
|
|
|
| |
review thread out of order easier.
llvm-svn: 216241
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
changes to ensure discriminator changes don't introduce new DWARF DW_TAG_lexical_blocks.
Somewhat unnoticed in the original implementation of discriminators, but
it could cause instructions to end up in new, small,
DW_TAG_lexical_blocks due to the use of DILexicalBlock to track
discriminator changes.
Instead, use DILexicalBlockFile which we already use to track file
changes without introducing new scopes, so it works well to track
discriminator changes in the same way.
llvm-svn: 216239
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
isPow2DivCheap
That name doesn't specify signed or unsigned.
Lazy as I am, I eventually read the function and variable comments. It turns out that this is strictly about signed div. But I discovered that the comments are wrong:
srl/add/sra
is not the general sequence for signed integer division by power-of-2. We need one more 'sra':
sra/srl/add/sra
That's the sequence produced in DAGCombiner. The first 'sra' may be removed when dividing by exactly '2', but that's a special case.
This patch corrects the comments, changes the name of the flag bit, and changes the name of the accessor methods.
No functional change intended.
Differential Revision: http://reviews.llvm.org/D5010
llvm-svn: 216237
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The advanced copy optimization does not yield any difference on the whole llvm
test-suite + SPECs, either in compile time or runtime (binaries are identical),
but has a big potential when data go back and forth between register files as
demonstrated with test/CodeGen/ARM/adv-copy-opt.ll.
Note: This was measured for both Os and O3 for armv7s, arm64, and x86_64.
<rdar://problem/12702965>
llvm-svn: 216236
|
| |
|
|
|
|
|
|
| |
Patch 2 of 11 in 'Add a "probe-stack" attribute' review thread
Patch by: john.kare.alsaker@gmail.com
llvm-svn: 216235
|
| |
|
|
|
|
|
|
| |
Patch 1 of 11 in 'Add a "probe-stack" attribute' review thread.
Patch by: <john.kare.alsaker@gmail.com>
llvm-svn: 216233
|
| |
|
|
|
|
|
|
|
|
|
| |
AtomicExpandLoadLinked is currently rather ARM-specific. This patch is the first of
a group that aim at making it more target-independent. See
http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-August/075873.html
for details
The command line option is "atomic-expand"
llvm-svn: 216231
|
| |
|
|
|
|
|
|
| |
source of a copy.
<rdar://problem/12702965>
llvm-svn: 216229
|
| |
|
|
| |
llvm-svn: 216228
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
happy.
This is mostly achieved by providing the correct register class manually,
because getRegClassFor always returns the GPR*AllRegClass for MVT::i32 and
MVT::i64.
Also cleanup the code to use the FastEmitInst_* method whenever possible. This
makes sure that the operands' register class is properly constrained. For all
the remaining cases this adds the missing constrainOperandRegClass calls for
each operand.
llvm-svn: 216225
|
| |
|
|
|
|
| |
std::unique_ptr
llvm-svn: 216223
|
| |
|
|
| |
llvm-svn: 216220
|
| |
|
|
|
|
| |
This fixes a crash in an ocl conformance test.
llvm-svn: 216219
|
| |
|
|
| |
llvm-svn: 216218
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This will simplify the SGPR spilling and also allow us to use
MachineFrameInfo for calculating offsets, which should be more
reliable than our custom code.
This fixes a crash in some cases where a register would be spilled
in a branch such that the VGPR defined for spilling did not dominate
all the uses when restoring.
This fixes a crash in an ocl conformance test. The test requries
register spilling and is too big to include.
llvm-svn: 216217
|
| |
|
|
|
|
|
| |
This fixes a crash in an ocl conformance test. The test requries
register spilling and is too big to include.
llvm-svn: 216216
|
| |
|
|
|
|
|
| |
This will avoid code duplication in the next commit which calls it directly
from the gold plugin.
llvm-svn: 216211
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We discussed the issue of generality vs. readability of the AVX512 classes
recently. I proposed this approach to try to hide and centralize the mappings
we commonly perform based on the vector type. A new class X86VectorVTInfo
captures these.
The idea is to pass an instance of this class to classes/multiclasses instead
of the corresponding ValueType. Then the class/multiclass can use its field
for things that derive from the type rather than passing all those as separate
arguments.
I modified avx512_valign to demonstrate this new approach. As you can see
instead of 7 related template parameters we now have one. The downside is
that we have to refer to fields for the derived values. I named the argument
'_' in order to make this as invisible as possible. Please let me know if you
absolutely hate this. (Also once we allow local initializations in
multiclasses we can recover the original version by assigning the fields to
local variables.)
Another possible use-case for this class is to directly map things, e.g.:
RegisterClass KRC = X86VectorVTInfo<32, i16>.KRC
llvm-svn: 216209
|
| |
|
|
|
|
|
|
|
|
| |
The profile data format was recently updated and the new indexing api
requires the code coverage tool to know the function's hash as well
as the function's name to get the execution counts for a function.
Differential Revision: http://reviews.llvm.org/D4994
llvm-svn: 216207
|
| |
|
|
| |
llvm-svn: 216203
|
| |
|
|
| |
llvm-svn: 216201
|
| |
|
|
|
|
|
|
|
| |
The AdvSIMD pass may produce copies that are not coalescer-friendly. The
peephole optimizer knows how to fix that as demonstrated in the test case.
<rdar://problem/12702965>
llvm-svn: 216200
|
| |
|
|
|
|
| |
function. NFCI.
llvm-svn: 216199
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
There are two add-immediate instructions in Thumb1: tADDi8 and tADDi3. Only
the latter supports using different source and destination registers, so
whenever we materialize a new base register (at a certain offset) we'd do
so by moving the base register value to the new register and then adding in
place. This patch changes the code to use a single tADDi3 if the offset is
small enough to fit in 3 bits.
Differential Revision: http://reviews.llvm.org/D5006
llvm-svn: 216193
|
| |
|
|
|
|
|
|
| |
systems
http://reviews.llvm.org/D4984
llvm-svn: 216182
|
| |
|
|
|
|
| |
No functionality change.
llvm-svn: 216178
|
| |
|
|
| |
llvm-svn: 216176
|
| |
|
|
|
|
|
|
| |
with many arguments.
PR20677
llvm-svn: 216175
|
| |
|
|
| |
llvm-svn: 216174
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This bug was introduced in r213006 which makes an assumption that MCSection is COFF for Windows MSVC. This assumption is broken for MCJIT users where ELF is used instead [1]. The fix is to change the MCSection cast to a dyn_cast.
[1] http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-December/068407.html.
Reviewers: majnemer
Reviewed By: majnemer
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D4872
llvm-svn: 216173
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The FPv4-SP floating-point unit is generally referred to as
single-precision only, but it does have double-precision registers and
load, store and GPR<->DPR move instructions which operate on them.
This patch enables the use of these registers, the main advantage of
which is that we now comply with the AAPCS-VFP calling convention.
This partially reverts r209650, which added some AAPCS-VFP support,
but did not handle return values or alignment of double arguments in
registers.
This patch also adds tests for Thumb2 code generation for
floating-point instructions and intrinsics, which previously only
existed for ARM.
llvm-svn: 216172
|
| |
|
|
|
|
|
|
|
|
|
| |
This does not require -ffast-math, and it gives CSE/GVN more options to
eliminate duplicate expressions in, e.g.:
return ((x + 0.1234 * y) * (x - 0.1234 * y));
Differential Revision: http://reviews.llvm.org/D4904
llvm-svn: 216169
|
| |
|
|
|
|
| |
While there remove noop casts.
llvm-svn: 216168
|
| |
|
|
| |
llvm-svn: 216164
|
| |
|
|
| |
llvm-svn: 216163
|
| |
|
|
| |
llvm-svn: 216162
|
| |
|
|
|
|
|
|
| |
Added FeatureSMAP.
Broadwell ISA includes Haswell ISA + ADX + RDSEED + SMAP
llvm-svn: 216161
|