| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
| |
Add a micro-optimization to getNode of CONCAT_VECTORS when both operands are undefs.
Can't find a testcase for this because VECTOR_SHUFFLE already handles undef operands, but Duncan suggested that we add this.
Together with Michael Kuperstein <michael.m.kuperstein@intel.com>
llvm-svn: 160229
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The notable fix is to look at any dependencies attached to the kill
instruction (or other instructions between MI nad the kill) where the
dependencies are specific to the register in question.
The old code implicitly handled this by rejecting the transform if *any*
other uses were found within the block, but after the start point. The
new code directly finds the kill, and has to re-use the existing
dependency scan to check for non-kill uses.
This was caught by self-host, but I found the bug via inspection and use
of absurd assert scaffolding to compute the kills in two ways and
compare them. So I have no useful testcase for this other than
"bootstrap". I'd work harder to reduce a test case if this particular
code were likely to live for a long time.
Thanks to Benjamin Kramer for reviewing the fix itself.
llvm-svn: 160228
|
| |
|
|
|
|
|
|
| |
APInt/APSInt classes.
Part of rdar://11875995
llvm-svn: 160223
|
| |
|
|
|
|
|
|
| |
vector with the same element type as the input vector.
This is needed because of the patterns we have for the VP[SLL/SRA/SRL][W/D/Q] instructions.
llvm-svn: 160222
|
| |
|
|
|
|
|
|
| |
single undef.
The unoptimized concat_vectors isd prevented the canonicalization of the vector_shuffle node.
llvm-svn: 160221
|
| |
|
|
|
|
| |
No test case, there are no in-tree targets that require this.
llvm-svn: 160219
|
| |
|
|
|
|
|
|
|
|
| |
Catch uses of undefined physregs that haven't been added to basic block
live-in lists. Run the verifier to pinpoint the problem.
Also run the verifier when a virtual register use is not jointly
dominated by defs.
llvm-svn: 160207
|
| |
|
|
|
|
|
|
|
|
| |
All SCEV expressions used by LSR formulae must be safe to
expand. i.e. they may not contain UDiv unless we can prove nonzero
denominator.
Fixes PR11356: LSR hoists UDiv.
llvm-svn: 160205
|
| |
|
|
|
|
|
|
|
|
| |
This allows SCEVExpander to run on the IV expressions.
This codifies an assumption made by LSR to complete the fix for
PR11356, but I haven't been able to generate a separate unit test for
this part. I'm adding it as an extra safety check.
llvm-svn: 160204
|
| |
|
|
| |
llvm-svn: 160203
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
intrinsics with target-indepdent intrinsics. The first instruction(s) to be
handled are the vector versions of count leading zeros (ctlz).
The changes here are to clang so that it generates a target independent
vector ctlz when it sees an ARM dependent vector ctlz. The changes in llvm
are to match the target independent vector ctlz and in VMCore/AutoUpgrade.cpp
to update any existing bc files containing ARM dependent vector ctlzs with
target-independent ctlzs. There are also changes to an existing test case in
llvm for ARM vector count instructions and a new test for the bitcode upgrade.
<rdar://problem/11831778>
There is deliberately no test for the change to clang, as so far as I know, no
consensus has been reached regarding how to test neon instructions in clang;
q.v. <rdar://problem/8762292>
llvm-svn: 160200
|
| |
|
|
|
|
|
|
| |
kills.
This is causing miscompiles that I'm working on tracking down.
llvm-svn: 160196
|
| |
|
|
|
|
|
|
|
|
| |
removes the largest scaling problem in the test cases from PR13225 when
ASan is switched to insert basic blocks in the natural CFG order.
It may also solve some scaling problems for more normal code with large
numbers of basic blocks and variables.
llvm-svn: 160194
|
| |
|
|
| |
llvm-svn: 160192
|
| |
|
|
|
|
|
|
| |
Call instructions are no longer required to be variadic, and
variable_ops should only be used for instructions that encode a variable
number of arguments, like the ARM stm/ldm instructions.
llvm-svn: 160189
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Function argument registers are added to the call SDNode, but
InstrEmitter now knows how to make those operands implicit, and the call
instruction doesn't have to be variadic.
Explicit register operands should only be those that are encoded in the
instruction, implicit register operands are for extra dependencies like
call argument and return values.
llvm-svn: 160188
|
| |
|
|
|
|
|
|
|
|
| |
is used in cases where global symbols are
directly represented in the GOT and we use an
offset into the global offset table.
This patch adds direct object support for R_MIPS_GOT_DISP.
llvm-svn: 160183
|
| |
|
|
| |
llvm-svn: 160177
|
| |
|
|
| |
llvm-svn: 160173
|
| |
|
|
| |
llvm-svn: 160170
|
| |
|
|
| |
llvm-svn: 160168
|
| |
|
|
| |
llvm-svn: 160166
|
| |
|
|
| |
llvm-svn: 160163
|
| |
|
|
| |
llvm-svn: 160162
|
| |
|
|
| |
llvm-svn: 160159
|
| |
|
|
|
|
|
|
|
| |
When dumping the DAG for a fatal 'Cannot select' back-end error, also
provide the name of the function the construct is in. Useful when dealing
with large testcases, as the next step is to llvm-extract the function
in question to get a small(er) testcase.
llvm-svn: 160152
|
| |
|
|
|
|
|
|
| |
Fixes PR13303.
Patch by Paul Robinson!
llvm-svn: 160148
|
| |
|
|
|
|
|
|
|
|
| |
Make sure the tblgen'erated asm matcher correctly returns numoperands+1
as the ErrorInfo when the problem was that there weren't enough operands
specified.
rdar://9142751
llvm-svn: 160144
|
| |
|
|
|
|
| |
Patch by Vladimir Medic.
llvm-svn: 160143
|
| |
|
|
| |
llvm-svn: 160142
|
| |
|
|
|
|
|
|
| |
MachineLICM don't touch it.
I already had the necessary things in place for IR-level passes but missed the machine passes.
llvm-svn: 160137
|
| |
|
|
| |
llvm-svn: 160134
|
| |
|
|
|
|
|
|
| |
machines, because we select different instructions such as vbroadcast, new shuffles, etc.
Patch by Michael Liao.
llvm-svn: 160129
|
| |
|
|
| |
llvm-svn: 160128
|
| |
|
|
| |
llvm-svn: 160127
|
| |
|
|
| |
llvm-svn: 160124
|
| |
|
|
| |
llvm-svn: 160123
|
| |
|
|
|
|
| |
builds.
llvm-svn: 160120
|
| |
|
|
|
|
|
|
|
| |
The rdrand/cmov sequence is the same that is emitted by both
GCC and ICC.
Fixes PR13284.
llvm-svn: 160117
|
| |
|
|
|
|
|
|
|
| |
the input vector, it can be bigger (this is helpful for powerpc where <2 x i16>
is a legal vector type but i16 isn't a legal type, IIRC). However this wasn't
being taken into account by ExpandRes_EXTRACT_VECTOR_ELT, causing PR13220.
Lightly tweaked version of a patch by Michael Liao.
llvm-svn: 160116
|
| |
|
|
|
|
| |
myself and Manman Ren.
llvm-svn: 160110
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
%shr = lshr i64 %key, 3
%0 = load i64* %val, align 8
%sub = add i64 %0, -1
%and = and i64 %sub, %shr
ret i64 %and
to:
%shr = lshr i64 %key, 3
%0 = load i64* %val, align 8
%sub = add i64 %0, 2305843009213693951
%and = and i64 %sub, %shr
ret i64 %and
The demanded bit optimization is actually a pessimization because add -1 would
be codegen'ed as a sub 1. Teach the demanded constant shrinking optimization
to check for negated constant to make sure it is actually reducing the width
of the constant.
rdar://11793464
llvm-svn: 160101
|
| |
|
|
|
|
|
|
|
|
|
| |
def Pat<...>;
Results in 'record name is not a string!' diagnostic. Not the best,
but the lack of location information moves it from not very helpful
into completely useless. We're in the Record class when throwing the
error, so just add the location info directly.
llvm-svn: 160098
|
| |
|
|
| |
llvm-svn: 160093
|
| |
|
|
|
|
|
|
| |
It is safe if CPSR is killed or re-defined.
When we are done with the basic block, check whether CPSR is live-out.
Do not optimize away cmp if CPSR is live-out.
llvm-svn: 160090
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When WriteFragmentData() case FT_align called
Asm.getBackend().writeNopData() is called, nothing
is done since Mips implementation of writeNopData just
returned "true".
For some reason this has not caused problems in 32 bit
mode, but in 64 bit mode it caused an assert when processing
multiple function units.
The test case included will assert without this patch. It
runs twice with different flags to prevent false positives
due to changes in code generation over time.
llvm-svn: 160084
|
| |
|
|
| |
llvm-svn: 160082
|
| |
|
|
|
|
|
|
| |
Even though variable in question could not
be initialized before use, the code was such that
the compiler had no way of knowing that.
llvm-svn: 160081
|
| |
|
|
| |
llvm-svn: 160076
|
| |
|
|
|
|
|
|
|
|
|
|
| |
file buffer is null-terminated.
If the file is smaller than we thought, mmap will not allow dereferencing
past the pages that are enough to cover the actual file size,
even though we asked for a larger address range.
rdar://11612916
llvm-svn: 160075
|