|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| | 
| 
| 
| 
| 
| | MSP430, PPC, PTX, Sparc, X86, XCore.
llvm-svn: 150878 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | ARM targets with NEON units have access to aligned vector loads and
stores that are potentially faster than unaligned operations.
Add support for spilling the callee-saved NEON registers to an aligned
stack area using 16-byte aligned NEON loads and store.
This feature is off by default, controlled by an -align-neon-spills
command line option.
llvm-svn: 147211 | 
| | 
| 
| 
| 
| 
| | http://llvm.org/docs/CodingStandards.html#ll_virtual_anch
llvm-svn: 146960 | 
| | 
| 
| 
| | llvm-svn: 125534 | 
| | 
| 
| 
| | llvm-svn: 124570 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | movw    r0, :lower16:(L_foo$non_lazy_ptr-(LPC0_0+4))
        movt    r0, :upper16:(L_foo$non_lazy_ptr-(LPC0_0+4))
LPC0_0:
        add     r0, pc, r0
It's not yet enabled by default as some tests are failing. I suspect bugs in
down stream tools.
llvm-svn: 123619 | 
| | 
| 
| 
| | llvm-svn: 123497 | 
| | 
| 
| 
| 
| 
| | assumptions about stack layout. Specifically, LR must be saved next to FP.
llvm-svn: 118026 | 
| | 
| 
| 
| | llvm-svn: 116863 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | between the high and low registers for prologue/epilogue code. This was
a Darwin-only thing that wasn't providing a realistic benefit anymore.
Combining the save areas simplifies the compiler code and results in better
ARM/Thumb2 codegen.
For example, previously we would generate code like:
        push    {r4, r5, r6, r7, lr}
        add     r7, sp, #12
        stmdb   sp!, {r8, r10, r11}
With this change, we combine the register saves and generate:
        push    {r4, r5, r6, r7, r8, r10, r11, lr}
        add     r7, sp, #12
rdar://8445635
llvm-svn: 114340 | 
| | 
| 
| 
| 
| 
| 
| 
| | function stack frame has a var-sized object.
Also added a test case to check for the added benefit of this patch: it's optimizing away the unnecessary restore of sp from fp for some non-leaf functions.
llvm-svn: 110707 | 
| | 
| 
| 
| 
| 
| | register is", it breaks a couple test-suite tests.
llvm-svn: 110701 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | reserved, not available for general allocation. This eliminates all the
extra checks for Darwin.
This change also fixes the use of FP to access frame indices in leaf
functions and cleaned up some confusing code in epilogue emission.
llvm-svn: 110655 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | - This fixed a number of bugs in if-converter, tail merging, and post-allocation
  scheduler. If-converter now runs branch folding / tail merging first to
  maximize if-conversion opportunities.
- Also changed the t2IT instruction slightly. It now defines the ITSTATE
  register which is read by instructions in the IT block.
- Added Thumb2 specific hazard recognizer to ensure the scheduler doesn't
  change the instruction ordering in the IT block (since IT mask has been
  finalized). It also ensures no other instructions can be scheduled between
  instructions in the IT block.
This is not yet enabled.
llvm-svn: 106344 | 
| | 
| 
| 
| 
| 
| | MachineFunctionInfo subclasses.
llvm-svn: 101634 | 
| | 
| 
| 
| 
| 
| | MachineFunction::Alignment instead.
llvm-svn: 94701 | 
| | 
| 
| 
| | llvm-svn: 83522 | 
| | 
| 
| 
| | llvm-svn: 78666 | 
| | 
| 
| 
| | llvm-svn: 75067 | 
| | 
| 
| 
| | llvm-svn: 74543 | 
| | 
| 
| 
| | llvm-svn: 72969 | 
| | 
| 
| 
| | llvm-svn: 58877 | 
| | 
| 
| 
| | llvm-svn: 46930 | 
| | 
| 
| 
| | llvm-svn: 45418 | 
| | 
| 
| 
| | llvm-svn: 36371 | 
| | 
| 
| 
| 
| 
| | - Some code clean up.
llvm-svn: 34783 | 
| | 
| 
| 
| | llvm-svn: 34781 | 
| | 
| 
| 
| 
| 
| 
| 
| | that is the case, whenever we use it as a scratch register, save it to R12
first and then restore it after the use.
This is a temporary and truly horrible workaround!
llvm-svn: 33999 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | spilled (if it is not already).
- If LR is spilled, use BL to implement far jumps. LR is not used as a GPR
  in thumb mode so it can be clobbered if it is properly spilled / restored
  in prologue / epilogue.
- If LR is force spilled but no far jump has been emitted, try undo'ing the
  spill by:
  push lr -> delete
  pop pc -> bx lr
llvm-svn: 33650 | 
| | 
| 
| 
| | llvm-svn: 33632 | 
| | 
| 
| 
| | llvm-svn: 33496 | 
| | 
| 
| 
| | llvm-svn: 33389 | 
|  | llvm-svn: 33353 |