| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
taking so long to get to this!
llvm-svn: 73757
|
|
|
|
| |
llvm-svn: 73750
|
|
|
|
| |
llvm-svn: 73738
|
|
|
|
| |
llvm-svn: 73736
|
|
|
|
| |
llvm-svn: 73727
|
|
|
|
|
|
| |
the linker knows it's a new atom. But this is only needed if the jump table is put in a separate section from the function body.
llvm-svn: 73720
|
|
|
|
|
|
|
|
|
| |
target since the hint is target dependent. This is important for ARM register pair hints.
- Register allocator should resolve the second part of the hint (register number) before passing it to the target since it knows virtual register to physical register mapping.
- More fixes to get ARM load / store double word working.
llvm-svn: 73671
|
|
|
|
| |
llvm-svn: 73634
|
|
|
|
| |
llvm-svn: 73483
|
|
|
|
|
|
| |
operations).
llvm-svn: 73480
|
|
|
|
| |
llvm-svn: 73479
|
|
|
|
|
|
|
|
| |
copies off the val# were removed. This causes problem later since the scavenger will see uses of registers without defs. The proper solution is to change the copies into implicit_def's instead.
TurnCopyIntoImpDef turns a copy into implicit_def and remove the val# defined by it. This causes an scavenger assertion later if the def reaches other blocks. Disable the transformation if the value live interval extends beyond its def block.
llvm-svn: 73478
|
|
|
|
|
|
|
|
| |
support for x86, and UMULO/SMULO for many architectures, including PPC
(PR4201), ARM, and Cell. The resulting expansion isn't perfect, but it's
not bad.
llvm-svn: 73477
|
|
|
|
| |
llvm-svn: 73464
|
|
|
|
| |
llvm-svn: 73457
|
|
|
|
|
|
|
|
| |
df_iterator.
Owen Anderson 2009-06-15: Remember to clear out our maps to prevent crashing.
llvm-svn: 73438
|
|
|
|
|
|
| |
unsupported inline asm construct, rather than verifying a code invariant.
llvm-svn: 73435
|
|
|
|
| |
llvm-svn: 73426
|
|
|
|
| |
llvm-svn: 73423
|
|
|
|
|
|
|
|
|
| |
incomming chain of the RETURN node. The incomming chain must
be the outgoing chain of the CALL node. This causes the
backend to identify tail calls that are not tail calls. This
patch fixes this.
llvm-svn: 73387
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Change register allocation hint to a pair of unsigned integers. The hint type is zero (which means prefer the register specified as second part of the pair) or entirely target dependent.
- Allow targets to specify alternative register allocation orders based on allocation hint.
Part 2.
- Use the register allocation hint system to implement more aggressive load / store multiple formation.
- Aggressively form LDRD / STRD. These are formed *before* register allocation. It has to be done this way to shorten live interval of base and offset registers. e.g.
v1025 = LDR v1024, 0
v1026 = LDR v1024, 0
=>
v1025,v1026 = LDRD v1024, 0
If this transformation isn't done before allocation, v1024 will overlap v1025 which means it more difficult to allocate a register pair.
- Even with the register allocation hint, it may not be possible to get the desired allocation. In that case, the post-allocation load / store multiple pass must fix the ldrd / strd instructions. They can either become ldm / stm instructions or back to a pair of ldr / str instructions.
This is work in progress, not yet enabled.
llvm-svn: 73381
|
|
|
|
| |
llvm-svn: 73362
|
|
|
|
|
|
| |
MachineRegisterInfo. This allows more passes to set them.
llvm-svn: 73346
|
|
|
|
|
|
| |
BinaryObject.h by Aaron Gray
llvm-svn: 73333
|
|
|
|
|
|
|
|
|
|
|
| |
consecutive addresses togther. This makes it easier for the post-allocation pass
to form ldm / stm.
This is step 1. We are still missing a lot of ldm / stm opportunities because
of register allocation are not done in the desired order. More enhancements
coming.
llvm-svn: 73291
|
|
|
|
|
|
|
|
| |
in a function. If that happens then any basic block that follows (lexically) the block with regin.end will not have scope info available. LexicalScopeStack relies on processing basic block in CFG order, but this processing order is not guaranteed. Things get complicated when the optimizer gets a chance to optimizer IR with dbg intrinsics.
Apply defensive patch to preserve at least one lexical scope till the end of function.
llvm-svn: 73282
|
|
|
|
| |
llvm-svn: 73258
|
|
|
|
| |
llvm-svn: 73257
|
|
|
|
| |
llvm-svn: 73256
|
|
|
|
|
|
| |
live range may overlap another def of same register.
llvm-svn: 73255
|
|
|
|
| |
llvm-svn: 73244
|
|
|
|
|
|
|
|
| |
Emission for globals, using the correct data sections
Function alignment can be computed for each target using TargetELFWriterInfo
Some small fixes
llvm-svn: 73201
|
|
|
|
| |
llvm-svn: 73174
|
|
|
|
| |
llvm-svn: 73156
|
|
|
|
|
|
|
|
| |
on "Fast Liveness Checking for SSA-form Programs" by Boissinot, et al.
This is still very early, hasn't been tested, and is not yet well documented. More to come soon.
llvm-svn: 73141
|
|
|
|
| |
llvm-svn: 73040
|
|
|
|
| |
llvm-svn: 73039
|
|
|
|
|
|
| |
relocation sections.
llvm-svn: 73038
|
|
|
|
|
|
| |
converting from an MMX vector to an i64.
llvm-svn: 73024
|
|
|
|
|
|
|
|
|
|
|
| |
on x86 to handle more cases. Fix a bug in said code that would cause it
to read past the end of an object. Rewrite the code in
SelectionDAGLegalize::ExpandBUILD_VECTOR to be a bit more general.
Remove PerformBuildVectorCombine, which is no longer necessary with
these changes. In addition to simplifying the code, with this change,
we can now catch a few more cases of consecutive loads.
llvm-svn: 73012
|
|
|
|
|
|
| |
types.
llvm-svn: 72993
|
|
|
|
| |
llvm-svn: 72992
|
|
|
|
|
|
| |
comments added
llvm-svn: 72982
|
|
|
|
|
|
|
| |
integer type to be consistent with normal operation legalization. No visible
change because nothing is actually using this at the moment.
llvm-svn: 72980
|
|
|
|
|
|
|
| |
Update code generator to use this attribute and remove NoImplicitFloat target option.
Update llc to set this attribute when -no-implicit-float command line option is used.
llvm-svn: 72959
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
build vectors with i64 elements will only appear on 32b x86 before legalize.
Since vector widening occurs during legalize, and produces i64 build_vector
elements, the dag combiner is never run on these before legalize splits them
into 32b elements.
Teach the build_vector dag combine in x86 back end to recognize consecutive
loads producing the low part of the vector.
Convert the two uses of TLI's consecutive load recognizer to pass LoadSDNodes
since that was required implicitly.
Add a testcase for the transform.
Old:
subl $28, %esp
movl 32(%esp), %eax
movl 4(%eax), %ecx
movl %ecx, 4(%esp)
movl (%eax), %eax
movl %eax, (%esp)
movaps (%esp), %xmm0
pmovzxwd %xmm0, %xmm0
movl 36(%esp), %eax
movaps %xmm0, (%eax)
addl $28, %esp
ret
New:
movl 4(%esp), %eax
pmovzxwd (%eax), %xmm0
movl 8(%esp), %eax
movaps %xmm0, (%eax)
ret
llvm-svn: 72957
|
|
|
|
| |
llvm-svn: 72948
|
|
|
|
| |
llvm-svn: 72941
|
|
|
|
|
|
|
| |
MachO Writer. This will change with the arrival of ObjectCodeEmitter and
BinaryObject
llvm-svn: 72906
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
integer and floating-point opcodes, introducing
FAdd, FSub, and FMul.
For now, the AsmParser, BitcodeReader, and IRBuilder all preserve
backwards compatability, and the Core LLVM APIs preserve backwards
compatibility for IR producers. Most front-ends won't need to change
immediately.
This implements the first step of the plan outlined here:
http://nondot.org/sabre/LLVMNotes/IntegerOverflow.txt
llvm-svn: 72897
|