| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
The LocalStackSlotAllocation pass was creating illegal registers.
llvm-svn: 128687
|
|
|
|
|
|
| |
constpool. Emit unwinding information in case when this load from constpool is used to change the stack pointer in the prologue.
llvm-svn: 127105
|
|
|
|
|
|
| |
because there is no way given the constpool index to examine the actual entry: the reason is clones inserted by constant island pass, which are not tracked at all! The only connection is done during asmprinting time via magic label names which is really gross and needs to be eventually fixed.
llvm-svn: 127104
|
|
|
|
|
|
|
| |
This is just very first approximation how the stuff should be done
(e.g. ARM-only for now). More to follow.
llvm-svn: 127101
|
|
|
|
|
|
|
|
|
| |
set up the source operands. The original instr has an immediate operand that
should be replaced with the frame reg operand rather than just adding the
reg operand. Previously, the instruction ended up with too many operands
causing an assert() when adding the default predicate. rdar://8825456
llvm-svn: 123387
|
|
|
|
|
|
| |
and fixes here and there.
llvm-svn: 123170
|
|
|
|
|
|
|
|
|
| |
to be the one we want to use. bugpoint reduced testcase is a little large,
I'll see if I can simplify it down more.
Fixes part of rdar://8782207
llvm-svn: 122307
|
|
|
|
|
|
|
|
|
| |
respectively.
It may be a bug that these opcodes are getting this far into machine code
generation.
llvm-svn: 121931
|
|
|
|
|
|
| |
Canonicalize on tLDRpci and remove tLDRcp.
llvm-svn: 121920
|
|
|
|
|
|
| |
need to use tLDRi and tSTRi instead of tLDRspi and tSTRspi respectively.
llvm-svn: 121915
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
instruction based on the t_addrmode_s# mode and what it returned. There is some
obvious badness to this. In particular, it's hard to do MC-encoding when the
instruction may change out from underneath you after the t_addrmode_s# variable
is finally resolved.
The solution is to revert a long-ago change that merged the reg/reg and reg/imm
versions. There is the addition of several new addressing modes. They no longer
have extraneous operands associated with them. I.e., if it's reg/reg we don't
have to have a dummy zero immediate tacked on to the SDNode.
There are some obvious cleanups here, which will happen shortly.
llvm-svn: 121747
|
|
|
|
| |
llvm-svn: 119804
|
|
|
|
| |
llvm-svn: 119740
|
|
|
|
|
|
| |
out of TargetRegisterInfo to TargetFrameInfo, which is definitely much better suitable place
llvm-svn: 119097
|
|
|
|
|
|
| |
assumptions about stack layout. Specifically, LR must be saved next to FP.
llvm-svn: 118026
|
|
|
|
|
|
|
| |
setup they require. Use this for ARM/Darwin to rematerialize the base
pointer from the frame pointer when required. rdar://8564268
llvm-svn: 116879
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
to try to re-use scavenged frame index reference registers. rdar://8277890
llvm-svn: 112241
|
|
|
|
|
|
| |
rdar://8277890
llvm-svn: 111533
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 108812
|
|
|
|
| |
llvm-svn: 108094
|
|
|
|
| |
llvm-svn: 107154
|
|
|
|
|
|
| |
eliminateFrameIndex(), leading to llvm_unreachable() assertion failure.
llvm-svn: 102980
|
|
|
|
| |
llvm-svn: 101379
|
|
|
|
| |
llvm-svn: 101334
|
|
|
|
| |
llvm-svn: 100214
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
writebacks to the address register. This gets rid of the hack that the
first register on the list was the magic writeback register operand. There
was an implicit constraint that if that operand was not reg0 it had to match
the base register operand. The post-RA scheduler's antidependency breaker
did not understand that constraint and sometimes changed one without the
other. This also fixes Radar 7495976 and should help the verifier work
better for ARM code.
There are now new ld/st instructions explicit writeback operands and explicit
constraints that tie those registers together.
llvm-svn: 98409
|
|
|
|
| |
llvm-svn: 98182
|
|
|
|
| |
llvm-svn: 98109
|
|
|
|
|
|
|
|
|
|
| |
is preparatory to having PEI's scavenged frame index value reuse logic
properly distinguish types of frame values (e.g., whether the value is
stack-pointer relative or frame-pointer relative).
No functionality change.
llvm-svn: 98086
|
|
|
|
|
|
|
|
| |
register is involved for thumb1. Work around this for the moment by only
re-using SP-relative offsets. This is temporary 'til the code can distinguish
multiple base registers.
llvm-svn: 98071
|
|
|
|
|
|
|
| |
registers may be restored via a pop instruction, not just a tRestore.
This fixes nightly test 471.omnetep for Thumb1.
llvm-svn: 97867
|
|
|
|
| |
llvm-svn: 97013
|
|
|
|
|
|
|
| |
Since the mov is executed unconditionally, make sure that the add didn't have
any predicate.
llvm-svn: 93909
|
|
|
|
|
|
| |
Patch by Howard Hinnant!
llvm-svn: 90365
|
|
|
|
| |
llvm-svn: 86494
|
|
|
|
| |
llvm-svn: 86408
|
|
|
|
|
|
| |
Thumb2.
llvm-svn: 85406
|
|
|
|
| |
llvm-svn: 84832
|
|
|
|
| |
llvm-svn: 84798
|
|
|
|
|
|
| |
functions are not needed.
llvm-svn: 84587
|
|
|
|
| |
llvm-svn: 84563
|
|
|
|
|
|
|
|
|
|
| |
appropriate restore location for the spill as well as perform the actual
save and restore.
The Thumb1 target uses this to make sure R12 is not clobbered while a spilled
scavenger register is live there.
llvm-svn: 84554
|
|
|
|
| |
llvm-svn: 83522
|