|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| ... |  | 
| | 
| 
| 
| | llvm-svn: 103103 | 
| | 
| 
| 
| | llvm-svn: 103057 | 
| | 
| 
| 
| 
| 
| | should use esp / rsp to reference frame instead.
llvm-svn: 102596 | 
| | 
| 
| 
| 
| 
| 
| | optimization for non-leaf functions. This will be hooked up to gcc's
-momit-leaf-frame-pointer option. rdar://7886181
llvm-svn: 101984 | 
| | 
| 
| 
| | llvm-svn: 100709 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | When a frame pointer is not otherwise required, and dynamic stack alignment
is necessary solely due to the spilling of a register with larger alignment
requirements than the default stack alignment, the frame pointer can be both
used as a general purpose register and a frame pointer. That goes poorly, for
obvious reasons. This patch brings back a bit of old logic for identifying
the use of such registers and conservatively reserves the frame pointer
during register allocation in such cases.
For now, implement for X86 only since it's 32-bit linux which is hitting this,
and we want a targeted fix for 2.7. As a follow-on, this will be expanded
to handle other targets, as theoretically the problem could arise elsewhere
as well.
llvm-svn: 100559 | 
| | 
| 
| 
| | llvm-svn: 100415 | 
| | 
| 
| 
| 
| 
| | to get unique assembler temporary labels.
llvm-svn: 98489 | 
| | 
| 
| 
| 
| 
| | contain an MCSymbol instead of a label index.
llvm-svn: 98482 | 
| | 
| 
| 
| 
| 
| | with an MCSymbol instead of an immediate.
llvm-svn: 98481 | 
| | 
| 
| 
| 
| 
| | support to allow loads to be folded to tail call instructions.
llvm-svn: 98465 | 
| | 
| 
| 
| | llvm-svn: 98431 | 
| | 
| 
| 
| 
| 
| | convention.  Patch by David Terei!
llvm-svn: 98212 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | 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 | 
| | 
| 
| 
| 
| 
| 
| | We cannot use a normal call here since it has extra unmodelled side
effects (it changes stack pointer). This should fix PR5292.
llvm-svn: 97884 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | Extracting the low element of a vector is now done with EXTRACT_SUBREG,
and the zero-extension performed by load movss is now modeled with
SUBREG_TO_REG, and so on.
Register-to-register movss and movsd are no longer considered copies;
they are two-address instructions which insert a scalar into a vector.
llvm-svn: 97354 | 
| | 
| 
| 
| 
| 
| | Also, FileCheck'ize a test.
llvm-svn: 96686 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | created. This ensures it's updated at all time. It means targets which perform
dynamic stack alignment would know whether it is required and whether frame
pointer register cannot be made available register allocation.
This is a fix for rdar://7625239. Sorry, I can't create a reasonably sized test
case.
llvm-svn: 96069 | 
| | 
| 
| 
| 
| 
| | TCRETURN's. Otherwise the missing uses can make post-regalloc scheduling do bad things. This fixes 403.gcc.
llvm-svn: 94950 | 
| | 
| 
| 
| | llvm-svn: 94872 | 
| | 
| 
| 
| | llvm-svn: 94612 | 
| | 
| 
| 
| | llvm-svn: 94032 | 
| | 
| 
| 
| 
| 
| 
| | more cases where debug declarations affect
debug line info.
llvm-svn: 93953 | 
| | 
| 
| 
| 
| 
| | line number info.
llvm-svn: 93937 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | function can support dynamic stack realignment. That's a much easier question
to answer at instruction selection stage than whether the function actually
will have dynamic alignment prologue. This allows the removal of the
stack alignment heuristic pass, and improves code quality for cases where
the heuristic would result in dynamic alignment code being generated when
it was not strictly necessary.
llvm-svn: 93885 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | FrameIndexes should be lowered, but the same way as
everything else (target dependent) rather than in a
special hacked way.  The lowering needs to be done
for eventual purposes of Dwarf generation.
llvm-svn: 93530 | 
| | 
| 
| 
| 
| 
| | print it as a comment on X86.
llvm-svn: 93499 | 
| | 
| 
| 
| 
| 
| | Patch by Howard Hinnant!
llvm-svn: 90365 | 
| | 
| 
| 
| 
| 
| | No functionality change.
llvm-svn: 90336 | 
| | 
| 
| 
| | llvm-svn: 90166 | 
| | 
| 
| 
| | llvm-svn: 88800 | 
| | 
| 
| 
| | llvm-svn: 88705 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | slots.  The AsmPrinter will use this information to determine whether to
print a spill/reload comment.
Remove default argument values.  It's too easy to pass a wrong argument
value when multiple arguments have default values.  Make everything
explicit to trap bugs early.
Update all targets to adhere to the new interfaces..
llvm-svn: 87022 | 
| | 
| 
| 
| 
| 
| | code miscompilation
llvm-svn: 86463 | 
| | 
| 
| 
| 
| 
| | VISIBILITY_HIDDEN removal.
llvm-svn: 85043 | 
| | 
| 
| 
| 
| 
| 
| | Chris claims we should never have visibility_hidden inside any .cpp file but
that's still not true even after this commit.
llvm-svn: 85042 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | 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 | 
| | 
| 
| 
| 
| 
| | Patch by Erick Tryzelaar.
llvm-svn: 81116 | 
| | 
| 
| 
| 
| 
| 
| | (i.e., there are no local variables and stuff), we still need to output FDE
information for the pushed registers.
llvm-svn: 80960 | 
| | 
| 
| 
| | llvm-svn: 79763 | 
| | 
| 
| 
| | llvm-svn: 79187 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | what was there before. In "no FP mode", we weren't generating labels and unwind
table entries after each "push" instruction. While more than likely "okay", it's
not technically correct. The major thing was that the ordering of when to define
a new CFA register and at what offset wasn't correct. This would cause the
exception handling to fail in ways most miserable to users.
I also cleaned up some code a bit. There's one function which has a "return" at
the beginning, so it's never used. Should I just remove it? :-)
llvm-svn: 79139 | 
| | 
| 
| 
| 
| 
| 
| 
| | while
the latter is capable of representing either a primitive or an extended type.
llvm-svn: 78713 | 
| | 
| 
| 
| 
| 
| | own struct type.
llvm-svn: 78610 | 
| | 
| 
| 
| 
| 
| 
| | PR4572. A few tests have some minor code regressions due to different
coalescing.
llvm-svn: 78217 | 
| | 
| 
| 
| | llvm-svn: 77966 | 
| | 
| 
| 
| 
| 
| | and provide a different set of call-clobberred registers.
llvm-svn: 77962 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | pushes in the function prolog if the function doesn't have any stack space,
i.e. for a prolog like:
0x40011870:     push %r15
0x40011872:     push %r14
0x40011874:     push %rbx
Patch by Zoltan!
llvm-svn: 77919 | 
| | 
| 
| 
| 
| 
| | be more careful about the return value of runOnMachineFunction.
llvm-svn: 77758 | 
| | 
| 
| 
| 
| 
| 
| | due to x86 encoding restrictions. This is currently off by default
because it may cause code quality regressions. This is for PR4572.
llvm-svn: 77565 |