| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
There is no inline asm in a .s file. Therefore, there should be no logic to
handle it in the streamer. Inline asm only exists in bitcode files, so the
logic can live in the (long misnamed) AsmPrinter class.
llvm-svn: 200011
|
| |
|
|
| |
llvm-svn: 199978
|
| |
|
|
|
|
| |
With this change, all supported tests in test/ExecutionEngine pass in sparcv9.
llvm-svn: 199977
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This commit teaches the X86 backend to create the same X86 instructions when it
lowers an sadd/ssub with overflow intrinsic and a conditional branch that uses
that overflow result. This allows SelectionDAG to recognize and remove one of
the redundant operations.
This fixes <rdar://problem/15874016> and <rdar://problem/15661073>.
Reviewed by Nadav
llvm-svn: 199976
|
| |
|
|
|
|
| |
These all use the compare-and-swap CASA/CASXA instructions.
llvm-svn: 199975
|
| |
|
|
|
|
| |
Add test cases to check parsing of v9 double registers and their aliased quad registers.
llvm-svn: 199974
|
| |
|
|
| |
llvm-svn: 199955
|
| |
|
|
|
|
|
|
|
| |
registers in memory addresses that do not match the index register. As it does
for .att_syntax.
rdar://15887380
llvm-svn: 199948
|
| |
|
|
|
|
|
|
|
|
|
| |
scale factors in memory addresses. As it does for .att_syntax.
It was producing:
Assertion failed: (((Scale == 1 || Scale == 2 || Scale == 4 || Scale == 8)) && "Invalid scale!"), function CreateMem, file /Volumes/SandBox/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp, line 1133.
rdar://14967214
llvm-svn: 199942
|
| |
|
|
|
|
|
| |
code this looks correct, but could use review. The previous
was definitely not correct.
llvm-svn: 199940
|
| |
|
|
| |
llvm-svn: 199938
|
| |
|
|
|
|
|
| |
loops. Writing back to the accumulator (231-type) allows the coalescer to
eliminate an extra copy.
llvm-svn: 199933
|
| |
|
|
|
|
|
|
|
| |
Originally, BLX was passed as operand #0 in MachineInstr and as operand
#2 in MCInst. But now, it's operand #2 in both cases.
This patch also removes unnecessary FileCheck in the test case added by r199127.
llvm-svn: 199928
|
| |
|
|
|
|
|
|
|
|
|
| |
This patch adds the target analysis passes (usually TargetTransformInfo) to the
codgen pipeline. We also expose now the AddAnalysisPasses method through the C
API, because the optimizer passes would also benefit from better target-specific
cost models.
Reviewed by Andrew Kaylor
llvm-svn: 199926
|
| |
|
|
| |
llvm-svn: 199925
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This fixes a crash in the OpenCV OpenCL test suite.
There is no lit test for this, because the test would be very large
and could easily be invalidated by changes to the scheduler
or other parts of the compiler.
Patch by: Vincent Lejeune
llvm-svn: 199919
|
| |
|
|
|
|
|
|
|
|
| |
This pattern uses an SDNodeXForm, which isn't being emitted for some
reason. I can get it to work by attaching the PatLeaf that has the
XForm to the argument in the output pattern, but this results in an
immediate being used in a register operand, which the backend can't
handle yet.
llvm-svn: 199918
|
| |
|
|
|
|
|
|
| |
The control flow finalizer would sometimes use an ALU_POP_AFTER
instruction before the vetex fetch clause instead of using a POP
instruction after it.
llvm-svn: 199917
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Implement the getUnrollingPreferences() function for
AMDGPUTargetTransformInfo so that loops that do address calculations
on pointers derived from alloca are unconditionally unrolled.
Unrolling these loops makes it more likely that SROA will be able to
eliminate the allocas, which is a big win for R600 since memory
allocated by alloca (private memory) is really slow.
llvm-svn: 199916
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The unit test is now disabled on non-asserts builds.
The CF stack can be corrupted if you use CF_ALU_PUSH_BEFORE,
CF_ALU_ELSE_AFTER, CF_ALU_BREAK, or CF_ALU_CONTINUE when the number of
sub-entries on the stack is greater than or equal to the stack entry
size and sub-entries modulo 4 is either 0 or 3 (on cedar the bug is
present when number of sub-entries module 8 is either 7 or 0)
We choose to be conservative and always apply the work-around when the
number of sub-enries is greater than or equal to the stack entry size,
so that we can safely over-allocate the stack when we are unsure of the
stack allocation rules.
reviewed-by: Vincent Lejeune <vljn at ovi.com>
llvm-svn: 199905
|
| |
|
|
|
|
| |
they give better sequences than VPERMI
llvm-svn: 199893
|
| |
|
|
|
|
|
|
|
| |
With constant-sharing, litpool loads consume 4 + N*2 bytes of code, but
movw/movt pairs consume 8*N. This means litpools are better than movw/movt even
with just one use. Other materialisation strategies can still be better though,
so the logic is a little odd.
llvm-svn: 199891
|
| |
|
|
|
|
| |
No functional change since the InstrItinData's have been duplicated.
llvm-svn: 199876
|
| |
|
|
|
|
|
|
|
|
|
|
| |
e.g. linkonce, to TargetMachine and set it when we've done so
for ELF targets currently. This involved making TargetMachine
non-const in a TLOF use and propagating that change around - I'm
open to other ideas.
This will be used in a future commit to handle emitting debug
information with ranges.
llvm-svn: 199871
|
| |
|
|
|
|
| |
backend.
llvm-svn: 199858
|
| |
|
|
| |
llvm-svn: 199855
|
| |
|
|
| |
llvm-svn: 199853
|
| |
|
|
|
|
|
|
|
|
| |
This patch updates .set mips16 support which
affects the ELF ABI and its flags. In addition the patch uses
a common interface for both the MipsTargetSteamer and
MipsObjectStreamer that the assembler uses for
both ELF and ASCII output for these directives.
llvm-svn: 199851
|
| |
|
|
|
|
|
|
|
| |
This reverts commit 35b8331cad6eb512a2506adbc394201181da94ba.
The -debug-only flag for llc doesn't appear to be available in
all build configurations.
llvm-svn: 199845
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The CF stack can be corrupted if you use CF_ALU_PUSH_BEFORE,
CF_ALU_ELSE_AFTER, CF_ALU_BREAK, or CF_ALU_CONTINUE when the number of
sub-entries on the stack is greater than or equal to the stack entry
size and sub-entries modulo 4 is either 0 or 3 (on cedar the bug is
present when number of sub-entries module 8 is either 7 or 0)
We choose to be conservative and always apply the work-around when the
number of sub-enries is greater than or equal to the stack entry size,
so that we can safely over-allocate the stack when we are unsure of the
stack allocation rules.
reviewed-by: Vincent Lejeune <vljn at ovi.com>
llvm-svn: 199842
|
| |
|
|
|
| |
reviewed-by: Vincent Lejeune <vljn at ovi.com>
llvm-svn: 199841
|
| |
|
|
|
| |
reviewed-by: Vincent Lejeune <vljn at ovi.com>
llvm-svn: 199840
|
| |
|
|
|
| |
reviewed-by: Vincent Lejeune <vljn at ovi.com>
llvm-svn: 199839
|
| |
|
|
|
|
|
|
| |
v2:
- Initialize wavefront size to 0
reviewed-by: Vincent Lejeune <vljn at ovi.com>
llvm-svn: 199838
|
| |
|
|
|
| |
reviewed-by: Vincent Lejeune <vljn at ovi.com>
llvm-svn: 199837
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
My understanding (from reading just the llvm code) is that
* most ppc cpus have a "sync n" instruction and an msync alias that is "sync 0".
* "book e" cpus instead have a msync instruction and not the more
general "sync n"
This patch reflects that in the .td files, allowing a single codepath for
asm ond obj streamer and incidentelly fixes a crash when EmitRawText was
called on a obj streamer.
llvm-svn: 199832
|
| |
|
|
| |
llvm-svn: 199827
|
| |
|
|
| |
llvm-svn: 199826
|
| |
|
|
| |
llvm-svn: 199825
|
| |
|
|
|
|
|
| |
This way private memory does not over-write work group information
stored in GPRs 0 and 1.
llvm-svn: 199824
|
| |
|
|
| |
llvm-svn: 199823
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch restores the ARM mode if the user's inline assembly
does not. In the object streamer, it ensures that instructions
following the inline assembly are encoded correctly and that
correct mapping symbols are emitted. For the asm streamer, it
emits a .arm or .thumb directive.
This patch does not ensure that the inline assembly contains
the ADR instruction to switch modes at runtime.
The problem we need to solve is code like this:
int foo(int a, int b) {
int r = a + b;
asm volatile(
".align 2 \n"
".arm \n"
"add r0,r0,r0 \n"
: : "r"(r));
return r+1;
}
If we compile this function in thumb mode then the inline assembly
will switch to arm mode. We need to make sure that we switch back to
thumb mode after emitting the inline assembly or we will incorrectly
encode the instructions that follow (i.e. the assembly instructions
for return r+1).
Based on patch by David Peixotto
Change-Id: Ib57f6d2d78a22afad5de8693fba6230ff56ba48b
llvm-svn: 199818
|
| |
|
|
|
|
| |
Found by -Wdocumentation.
llvm-svn: 199814
|
| |
|
|
| |
llvm-svn: 199812
|
| |
|
|
| |
llvm-svn: 199811
|
| |
|
|
| |
llvm-svn: 199810
|
| |
|
|
| |
llvm-svn: 199809
|
| |
|
|
| |
llvm-svn: 199808
|
| |
|
|
| |
llvm-svn: 199807
|
| |
|
|
| |
llvm-svn: 199806
|