| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
| |
using a long-winded equivalent.
Now that getConstant(-1, MVT::v2i64) works correctly on MIPS32 we can use
SelectionDAG::getNOT() to produce the bitmask.
llvm-svn: 194819
|
| |
|
|
|
|
| |
bootstrap bot
llvm-svn: 194818
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
When getConstant() is called for an expanded vector type, it is split into
multiple scalar constants which are then combined using appropriate build_vector
and bitcast operations.
In addition to the usual big/little endian differences, the case where the
element-order of the vector does not have the same endianness as the elements
themselves is also accounted for. For example, for v4i32 on big-endian MIPS,
the byte-order of the vector is <3210,7654,BA98,FEDC>. For little-endian, it is
<0123,4567,89AB,CDEF>.
Handling this case turns out to be a nop since getConstant() returns a splatted
vector (so reversing the element order doesn't change the value)
This fixes a number of cases in MIPS MSA where calling getConstant() during
operation legalization introduces illegal types (e.g. to legalize v2i64 UNDEF
into a v2i64 BUILD_VECTOR of illegal i64 zeros). It should also handle bigger
differences between illegal and legal types such as legalizing v2i64 into v8i16.
lowerMSASplatImm() in the MIPS backend no longer needs to avoid calling
getConstant() so this function has been updated in the same patch.
For the sake of transparency, the steps I've taken since the review are:
* Added 'virtual' to isVectorEltOrderLittleEndian() as requested. This revealed
that the MIPS tests were falsely passing because a polymorphic function was
not actually polymorphic in the reviewed patch.
* Fixed the tests that were now failing. This involved deleting the code to
handle the MIPS MSA element-order (which was previously doing an byte-order
swap instead of an element-order swap). This left
isVectorEltOrderLittleEndian() unused and it was deleted.
* Fixed build failures caused by rebasing beyond r194467-r194472. These build
failures involved the bset, bneg, and bclr instructions added in these commits
using lowerMSASplatImm() in a way that was no longer valid after this patch.
Some of these were fixed by calling SelectionDAG::getConstant() instead,
others were fixed by a new function getBuildVectorSplat() that provided the
removed functionality of lowerMSASplatImm() in a more sensible way.
Reviewers: bkramer
Reviewed By: bkramer
CC: llvm-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D1973
llvm-svn: 194811
|
| |
|
|
|
|
| |
Using a special machine node is cleaner than an InlineAsm node, and fixes an assertion failure in InstrEmitter
llvm-svn: 194810
|
| |
|
|
| |
llvm-svn: 194808
|
| |
|
|
|
|
| |
bit of code size
llvm-svn: 194800
|
| |
|
|
| |
llvm-svn: 194799
|
| |
|
|
| |
llvm-svn: 194792
|
| |
|
|
|
|
|
|
| |
I was able to successfully run a bootstrapped LTO build of clang with
r194701, so this change does not seem to be the cause of our failing
buildbots.
llvm-svn: 194789
|
| |
|
|
| |
llvm-svn: 194786
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This is to avoid this transformation in some cases:
fold (conv (load x)) -> (load (conv*)x)
On architectures that don't natively support some vector
loads efficiently casting the load to a smaller vector of
larger types and loading is more efficient.
Patch by Micah Villmow.
llvm-svn: 194783
|
| |
|
|
|
|
|
|
|
| |
This reverts commit 194701. Apple's bootstrapped LTO builds have been failing,
and this change (along with compiler-rt 194702-194704) is the only thing on
the blamelist. I will either reappy these changes or help debug the problem,
depending on whether this fixes the buildbots.
llvm-svn: 194780
|
| |
|
|
|
|
| |
LLVMGetTargetFromName used to compare two char* strings directly.
llvm-svn: 194771
|
| |
|
|
| |
llvm-svn: 194770
|
| |
|
|
|
|
|
| |
LLVMGetTargetFromName was not yet present in an LLVM release,
so this does not break compatibility.
llvm-svn: 194769
|
| |
|
|
|
|
|
|
|
|
| |
short form. Constant islands will expand them if they are out of range.
Since there is not direct object emitter at this time, it does not
have any material affect because the assembler sorts this out. But we
need to know for the actual constant island work. We track the difference
by putting # 16 inst in the comments.
llvm-svn: 194766
|
| |
|
|
|
|
|
|
| |
DbgVariable.
No functional change.
llvm-svn: 194761
|
| |
|
|
|
|
| |
Patch by Michele Scandale!
llvm-svn: 194760
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The LDS output queue is accessed via the OQAP register. The OQAP
register cannot be live across clauses, so if value is written to the
output queue, it must be retrieved before the end of the clause.
With the machine scheduler, we cannot statisfy this constraint, because
it lacks proper alias analysis and it will mark some LDS accesses as
having a chain dependency on vertex fetches. Since vertex fetches
require a new clauses, the dependency may end up spiltting OQAP uses and
defs so the end up in different clauses. See the lds-output-queue.ll
test for a more detailed explanation.
To work around this issue, we now combine the LDS read and the OQAP
copy into one instruction and expand it after register allocation.
This patch also adds some checks to the EmitClauseMarker pass, so that
it doesn't end a clause with a value still in the output queue and
removes AR.X and OQAP handling from the scheduler (AR.X uses and defs
were already being expanded post-RA, so the scheduler will never see
them).
Reviewed-by: Vincent Lejeune <vljn at ovi.com>
llvm-svn: 194755
|
| |
|
|
|
|
|
|
| |
Patch by: Alex Deucher
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
llvm-svn: 194752
|
| |
|
|
|
|
|
|
|
|
| |
This comes into play with patchpoint, which can fold multiple
operands. Since the patchpoint is already treated as a call, the
machine mem operands won't affect anything, and there's nothing to
test. But we still want to do the right thing here to be sure that our
MIs obey the rules.
llvm-svn: 194750
|
| |
|
|
| |
llvm-svn: 194749
|
| |
|
|
|
|
| |
This was casuing my release+asserts build on Windows to fail.
llvm-svn: 194747
|
| |
|
|
| |
llvm-svn: 194738
|
| |
|
|
| |
llvm-svn: 194737
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Some machine-type-neutral object files containing only undefined symbols
actually do exist in the Windows standard library. Need to recognize them
as COFF files.
Reviewers: Bigcheese
CC: llvm-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D2164
llvm-svn: 194734
|
| |
|
|
| |
llvm-svn: 194733
|
| |
|
|
|
|
| |
than null.
llvm-svn: 194728
|
| |
|
|
| |
llvm-svn: 194724
|
| |
|
|
|
|
|
|
|
| |
We used to perform an invalid operation on an MVT and crash, which wasn't much
fun.
Patch by Oliver Stannard.
llvm-svn: 194714
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In ELF and COFF an alias is just another offset in a section. There is no way
to represent an alias to something in another file.
In MachO, the spec has the N_INDR type which should allow for exactly that, but
is not currently implemented. Given that it is specified but not implemented,
we error in codegen to avoid miscompiling but don't reject aliases to
declarations in the verifier to leave the option open of implementing it.
In the past we have used alias to declarations as a way of implementing
weakref, which is why it exists in some old tests which this patch updates.
llvm-svn: 194705
|
| |
|
|
| |
llvm-svn: 194701
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
MemorySanitizer.
Indirect call wrapping helps MSanDR (dynamic instrumentation companion tool
for MSan) to catch all cases where execution leaves a compiler-instrumented
module by allowing the tool to rewrite targets of indirect calls.
This change is an optimization that skips wrapping for calls when target is
inside the current module. This relies on the linker providing symbols at the
begin and end of the module code (or code + data, does not really matter).
Gold linker provides such symbols by default. GNU (BFD) linker needs a link
flag: -Wl,--defsym=__executable_start=0.
More info:
https://code.google.com/p/memory-sanitizer/wiki/MSanDR#Native_exec
llvm-svn: 194697
|
| |
|
|
| |
llvm-svn: 194693
|
| |
|
|
| |
llvm-svn: 194692
|
| |
|
|
|
|
| |
Added VMOSHDUP/VMOVSLDUP shuffle instructions.
llvm-svn: 194691
|
| |
|
|
| |
llvm-svn: 194688
|
| |
|
|
| |
llvm-svn: 194684
|
| |
|
|
| |
llvm-svn: 194683
|
| |
|
|
| |
llvm-svn: 194681
|
| |
|
|
| |
llvm-svn: 194680
|
| |
|
|
| |
llvm-svn: 194679
|
| |
|
|
|
|
|
|
| |
If a null call target is provided, don't emit a dummy call. This
allows the runtime to reserve as little nop space as it needs without
the requirement of emitting a call.
llvm-svn: 194676
|
| |
|
|
|
|
|
|
|
|
| |
There is nothing special about quotes and newlines from the object
file point of view, only the assembler has to worry about expanding
the \n and \".
This patch then removes the special handling from the Mangler.
llvm-svn: 194667
|
| |
|
|
| |
llvm-svn: 194662
|
| |
|
|
| |
llvm-svn: 194661
|
| |
|
|
| |
llvm-svn: 194659
|
| |
|
|
| |
llvm-svn: 194656
|
| |
|
|
| |
llvm-svn: 194655
|
| |
|
|
|
|
|
|
|
|
| |
propagation graph via graphviz.
This is useful for debugging issues in the BlockFrequency implementation since
one can easily visualize where probability mass and other errors occur in the
propagation.
llvm-svn: 194654
|