| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 85335
|
|
|
|
|
|
|
| |
default behind a command line option. This will enable better performance for
vectors on NEON enabled processors.
llvm-svn: 85333
|
|
|
|
| |
llvm-svn: 85049
|
|
|
|
| |
llvm-svn: 84798
|
|
|
|
|
|
| |
for a few bugs.
llvm-svn: 84791
|
|
|
|
| |
llvm-svn: 84669
|
|
|
|
| |
llvm-svn: 84664
|
|
|
|
| |
llvm-svn: 84585
|
|
|
|
| |
llvm-svn: 84563
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
a virtual register to eliminate a frame index, it can return that register
and the constant stored there to PEI to track. When scavenging to allocate
for those registers, PEI then tracks the last-used register and value, and
if it is still available and matches the value for the next index, reuses
the existing value rather and removes the re-materialization instructions.
Fancier tracking and adjustment of scavenger allocations to keep more
values live for longer is possible, but not yet implemented and would likely
be better done via a different, less special-purpose, approach to the
problem.
eliminateFrameIndex() is modified so the target implementations can return
the registers they wish to be tracked for reuse.
ARM Thumb1 implements and utilizes the new mechanism. All other targets are
simply modified to adjust for the changed eliminateFrameIndex() prototype.
llvm-svn: 83467
|
|
|
|
|
|
|
|
| |
spill slot. When frame references are via the frame pointer, they will be
negative, but Thumb1 load/store instructions only allow positive immediate
offsets. Instead, Thumb1 will spill to R12.
llvm-svn: 83336
|
|
|
|
| |
llvm-svn: 83148
|
|
|
|
|
|
| |
the size of the saved frame pointer needs to be taken into account.
llvm-svn: 83136
|
|
|
|
| |
llvm-svn: 83117
|
|
|
|
|
|
| |
slot for the register scavenger when compiling Thumb1 functions.
llvm-svn: 83023
|
|
|
|
| |
llvm-svn: 82773
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
interest for this, as it currently reserves a register rather than using
the scavenger for matierializing constants as needed.
Instead of scavenging registers on the fly while eliminating frame indices,
new virtual registers are created, and then a scavenged collectively in a
post-pass over the function. This isolates the bits that need to interact
with the scavenger, and sets the stage for more intelligent use, and reuse,
of scavenged registers.
For the time being, this is disabled by default. Once the bugs are worked out,
the current scavenging calls in replaceFrameIndices() will be removed and
the post-pass scavenging will be the default. Until then,
-enable-frame-index-scavenging enables the new code. Currently, only the
Thumb1 back end is set up to use it.
llvm-svn: 82734
|
|
|
|
| |
llvm-svn: 82284
|
|
|
|
|
|
| |
static, not runtime.
llvm-svn: 81560
|
|
|
|
|
|
| |
ARM::*RegisterClass names.
llvm-svn: 81556
|
|
|
|
| |
llvm-svn: 80354
|
|
|
|
| |
llvm-svn: 80338
|
|
|
|
|
|
| |
cannot fold any immediate offset.
llvm-svn: 80191
|
|
|
|
|
|
|
|
|
| |
- Drop the Candidates argument and fix all callers. Now that RegScavenger
tracks available registers accurately, there is no need to restict the
search.
- Make sure that no aliases of the found register are in use. This was a potential bug.
llvm-svn: 79369
|
|
|
|
|
|
| |
is frameless.
llvm-svn: 79067
|
|
|
|
|
|
| |
-disable-fp-elim.
llvm-svn: 79039
|
|
|
|
| |
llvm-svn: 78948
|
|
|
|
| |
llvm-svn: 78666
|
|
|
|
| |
llvm-svn: 78556
|
|
|
|
|
|
|
|
|
|
| |
The semantics of such instructions are unpredictable. We have just been lucky that tests have been passing.
This patch takes pain to ensure all the PEI lowering code does the right thing when lowering frame indices, insert code to manipulate stack pointers, etc. It's also custom lowering dynamic stack alloc into pseudo instructions so we can insert the right instructions at scheduling time.
This fixes PR4659 and PR4682.
llvm-svn: 78361
|
|
|
|
|
|
| |
T2_i8 ones. Take that into consideration when determining stack size limit for reserving register scavenging slot.
llvm-svn: 77642
|
|
|
|
|
|
| |
support multiple different pointer register classes.
llvm-svn: 77501
|
|
|
|
| |
llvm-svn: 77350
|
|
|
|
| |
llvm-svn: 77301
|
|
|
|
|
|
|
|
|
|
|
| |
- This change also makes it possible to switch between ARM / Thumb on a
per-function basis.
- Fixed thumb2 routine which expand reg + arbitrary immediate. It was using
using ARM so_imm logic.
- Use movw and movt to do reg + imm when profitable.
- Other code clean ups and minor optimizations.
llvm-svn: 77300
|
|
|
|
| |
llvm-svn: 77227
|
|
|
|
| |
llvm-svn: 77222
|
|
|
|
|
|
| |
This also fixes potential problems in ARMBaseInstrInfo routines not recognizing thumb1 instructions when 32-bit and 16-bit instructions mix.
llvm-svn: 77218
|
|
|
|
|
|
| |
more getOpcode calls.
llvm-svn: 77181
|
|
|
|
| |
llvm-svn: 77164
|
|
|
|
| |
llvm-svn: 77041
|
|
|
|
|
|
| |
thanks to contexts-on-types. More to come.
llvm-svn: 77011
|
|
|
|
|
|
| |
instructions on all sub-targets.
llvm-svn: 76925
|
|
|
|
|
|
| |
elimination more exactly for Thumb-2 to get better code gen.
llvm-svn: 76919
|
|
|
|
|
|
| |
that don't allow negative offsets. During frame elimination convert *i12 opcode to a *i8 when necessary due to a negative offset.
llvm-svn: 76883
|
|
|
|
| |
llvm-svn: 76872
|
|
|
|
| |
llvm-svn: 76725
|
|
|
|
| |
llvm-svn: 76702
|
|
|
|
|
|
|
|
| |
rematerialized instructions.
Avoid remat'ing instructions whose def have sub-register indices for now. It's just really really hard to get all the cases right.
llvm-svn: 75900
|
|
|
|
| |
llvm-svn: 75703
|