| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 116883
|
|
|
|
|
|
| |
base register is available. rdar://8525298
llvm-svn: 116729
|
|
|
|
|
|
|
|
| |
offset for stack references. Make sure we take that into account when
deciding whether to reserver an emergency spill slot for the register
scavenger. rdar://8559625
llvm-svn: 116714
|
|
|
|
| |
llvm-svn: 116712
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
functions in ARMBaseInfo.h so it can be used in the MC library as well.
For anything bigger than this, we may want a means to have a small support
library for shared helper functions like this. Cross that bridge when we
come to it.
llvm-svn: 114016
|
|
|
|
|
|
| |
merge the common cases.
llvm-svn: 114013
|
|
|
|
|
|
| |
Re-running some nightly testers w/ it enabled to verify.
llvm-svn: 113399
|
|
|
|
|
|
| |
pointer was intended. rdar://8401980
llvm-svn: 113394
|
|
|
|
|
|
|
| |
option to disable base pointer usage, pay attention to it when deciding
if we can realign (if no base pointer and VLAs, we can't).
llvm-svn: 113366
|
|
|
|
| |
llvm-svn: 113365
|
|
|
|
|
|
| |
related. (attempt deux, complete w/ test update this time)
llvm-svn: 113333
|
|
|
|
| |
llvm-svn: 113332
|
|
|
|
| |
llvm-svn: 113331
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"For ARM stack frames that utilize variable sized objects and have either
large local stack areas or require dynamic stack realignment, allocate a
base register via which to access the local frame. This allows efficient
access to frame indices not accessible via the FP (either due to being out
of range or due to dynamic realignment) or the SP (due to variable sized
object allocation). In particular, this greatly improves efficiency of access
to spill slots in Thumb functions which contain VLAs."
r112986 fixed a latent bug exposed by the above.
llvm-svn: 112989
|
|
|
|
|
|
|
|
|
| |
alignment should be performed. Otherwise dynamic realignment may trigger
when the register allocator has already used the frame pointer as a general
purpose register. That is, we need to make sure that the list of reserved
registers doesn't change after register allocation.
llvm-svn: 112986
|
|
|
|
|
|
|
|
| |
either", it is breaking oggenc with Clang for ARMv6.
This reverts commit 8d6e29cfda270be483abf638850311670829ee65.
llvm-svn: 112962
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
large local stack areas or require dynamic stack realignment, allocate a
base register via which to access the local frame. This allows efficient
access to frame indices not accessible via the FP (either due to being out
of range or due to dynamic realignment) or the SP (due to variable sized
object allocation). In particular, this greatly improves efficiency of access
to spill slots in Thumb functions which contain VLAs.
rdar://7352504
rdar://8374540
rdar://8355680
llvm-svn: 112883
|
|
|
|
| |
llvm-svn: 112852
|
|
|
|
|
|
|
| |
determining if they're likely to be in range of the SP when resolving
frame references.
llvm-svn: 112624
|
|
|
|
|
|
| |
the offset is legally encodable, not actually trying to do the encoding.
llvm-svn: 112622
|
|
|
|
|
|
| |
to try to re-use scavenged frame index reference registers. rdar://8277890
llvm-svn: 112241
|
|
|
|
| |
llvm-svn: 112228
|
|
|
|
|
|
|
|
| |
still having a significant effect. It shouldn't be now that the pre-RA
virtual base reg stuff is in. Assuming that's valididated by the nightly
testers, we can simplify a lot of the PEI frame index code.
llvm-svn: 112220
|
|
|
|
| |
llvm-svn: 112127
|
|
|
|
|
|
|
| |
When doing copy/paste/modify, it's apparently rather important to remember
the 'modify' bit...
llvm-svn: 112075
|
|
|
|
|
|
| |
access. rdar://8277890&7352504
llvm-svn: 111968
|
|
|
|
|
|
|
| |
For now it's still a command line option, but the interface to the generic
code doesn't need to know that.
llvm-svn: 111942
|
|
|
|
|
|
|
| |
Intended to help ease reproducing problems by increasing base register usage
after heuristics for only using the when needed are in place.
llvm-svn: 111930
|
|
|
|
| |
llvm-svn: 111585
|
|
|
|
|
|
| |
rdar://8277890
llvm-svn: 111533
|
|
|
|
|
|
|
|
|
| |
frame index reference to an object in the local block is seen, check if
it's near enough to any previously allocaated base register to re-use.
rdar://8277890
llvm-svn: 111443
|
|
|
|
|
|
|
|
|
|
| |
Nothing fancy, just ask the target if any currently available base reg
is in range for the instruction under consideration and use the first one
that is. Placeholder ARM implementation simply returns false for now.
ongoing saga of rdar://8277890
llvm-svn: 111374
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the local block. Resolve references to those indices to a new base register.
For simplification and testing purposes, a new virtual base register is
allocated for each frame index being resolved. The result is truly horrible,
but correct, code that's good for exercising the new code paths.
Next up is adding thumb1 support, which should be very simple. Following that
will be adding base register re-use and implementing a reasonable ARM
heuristic for when a virtual base register should be generated at all.
llvm-svn: 111315
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
whether to allocate a virtual frame base register to resolve the frame
index reference in it. Implement a simple version for ARM to aid debugging.
In LocalStackSlotAllocation, scan the function for frame index references
to local frame indices and ask the target whether to allocate virtual
frame base registers for any it encounters. Purely infrastructural for
debug output. Next step is to actually allocate base registers, then add
intelligent re-use of them.
rdar://8277890
llvm-svn: 111262
|
|
|
|
|
|
|
|
| |
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 will always be false before PEI:
(DisableFramePointerElim(MF) && MFI->adjustsStack())
Which means it's going to make r11 available as a general purpose register even
if -disable-fp-elim is specified. It's working on Darwin only because r7 is
always reserved. But it's obviously broken for other targets.
llvm-svn: 110614
|
|
|
|
|
|
|
|
|
|
| |
register for local access when it's closer to the stack slot being refererenced
than the stack pointer. Make sure to take into account any argument frame
SP adjustments that are in affect at the time.
rdar://8256090
llvm-svn: 110366
|
|
|
|
|
|
|
| |
preserves the existing behavior, as it seems a concious choice to allow RS to
be null and BigStack marked true.
llvm-svn: 110307
|
|
|
|
| |
llvm-svn: 110269
|
|
|
|
| |
llvm-svn: 110259
|
|
|
|
|
|
|
|
|
|
|
| |
simplify the call frame pseudo instructions. In that situation, the
calculations for estimating the stack size will be way off, leading to
not having an emergency spill slot when we need one. It should be possible
to be more precise about tracking the adjustment values, but not really
necessary for correctness. Upcoming cleanups for PEI in general will
render that moot.
llvm-svn: 110258
|
|
|
|
|
|
|
|
|
| |
VFP is enabled.
Add support for using the FPSCR in conjunction with the vcvtr instruction, for controlling fp to int rounding.
Add support for the FLT_ROUNDS_ node now that the FPSCR is exposed.
llvm-svn: 110152
|
|
|
|
|
|
|
|
|
| |
This is probably not the best way to implement "Force LR to
be spilled if the Thumb function size is > 2048." do this,
it should use the branch shortening infrastructure, but I'm
just preserving functionality here.
llvm-svn: 109165
|
|
|
|
| |
llvm-svn: 108812
|
|
|
|
| |
llvm-svn: 108588
|
|
|
|
|
|
|
|
|
| |
stack realignment on ARM.
Also check for function attributes as we do on X86 as well as
make explicit that we're checking can as well as needs in this function.
llvm-svn: 108582
|
|
|
|
| |
llvm-svn: 108043
|