|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | The getPointerRegClass() hook can return register classes that depend on
the calling convention of the current function (ptr_rc_tailcall).
So far, we have been able to infer the calling convention from the
subtarget alone, but as we add support for multiple calling conventions
per target, that no longer works.
Patch by Yiannis Tsiouris!
llvm-svn: 156328 | 
| | 
| 
| 
| | llvm-svn: 152978 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | register class inflation.
The hook will be used by the register allocator when recomputing register
classes after removing constraints.
Thumb1 code doesn't allow anything larger than tGPR, and x86 needs to ensure
that the spill size doesn't change.
llvm-svn: 130228 | 
| | 
| 
| 
| 
| 
| | The LocalStackSlotAllocation pass was creating illegal registers.
llvm-svn: 128687 | 
| | 
| 
| 
| 
| 
| | 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 | 
| | 
| 
| 
| | llvm-svn: 119740 | 
| | 
| 
| 
| 
| 
| | out of TargetRegisterInfo to TargetFrameInfo, which is definitely much better suitable place
llvm-svn: 119097 | 
| | 
| 
| 
| 
| 
| | to try to re-use scavenged frame index reference registers. rdar://8277890
llvm-svn: 112241 | 
| | 
| 
| 
| 
| 
| | rdar://8277890
llvm-svn: 111533 | 
| | 
| 
| 
| | llvm-svn: 108812 | 
| | 
| 
| 
| | llvm-svn: 108094 | 
| | 
| 
| 
| | llvm-svn: 105350 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | 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 | 
| | 
| 
| 
| | llvm-svn: 86408 | 
| | 
| 
| 
| 
| 
| | Thumb2.
llvm-svn: 85406 | 
| | 
| 
| 
| | llvm-svn: 84798 | 
| | 
| 
| 
| 
| 
| | functions are not needed.
llvm-svn: 84587 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | 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: 83521 | 
| | 
| 
| 
| 
| 
| | what's up.
llvm-svn: 83501 | 
| | 
| 
| 
| | llvm-svn: 83494 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | 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 | 
| | 
| 
| 
| 
| 
| 
| 
| | while
the latter is capable of representing either a primitive or an extended type.
llvm-svn: 78713 | 
| | 
| 
| 
| 
| 
| | own struct type.
llvm-svn: 78610 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | - 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: 77164 | 
| | 
| 
| 
| 
| 
| | elimination more exactly for Thumb-2 to get better code gen.
llvm-svn: 76919 | 
| | 
| 
| 
| 
| 
| 
| 
| | 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: 75036 | 
| | 
| 
| 
| | llvm-svn: 75020 | 
|  | Thumb1InstrInfo, Thumb2InstrInfo, Thumb1RegisterInfo and Thumb2RegisterInfo. Move methods from ARMInstrInfo to ARMBaseInstrInfo to prepare for sharing with Thumb2.
llvm-svn: 74731 |