summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86RegisterInfo.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Trim include.Evan Cheng2010-05-051-1/+0
| | | | llvm-svn: 103103
* Update comment.Eric Christopher2010-05-041-1/+1
| | | | llvm-svn: 103057
* Load folding tail call should not use ebp / rbp after it's popped. PEIEvan Cheng2010-04-291-5/+15
| | | | | | should use esp / rsp to reference frame instead. llvm-svn: 102596
* Implement -disable-non-leaf-fp-elim which disable frame pointer eliminationEvan Cheng2010-04-211-1/+1
| | | | | | | optimization for non-leaf functions. This will be hooked up to gcc's -momit-leaf-frame-pointer option. rdar://7886181 llvm-svn: 101984
* rename llvm::llvm_report_error -> llvm::report_fatal_errorChris Lattner2010-04-071-1/+1
| | | | llvm-svn: 100709
* Fix PR6696 and PR6663Jim Grosbach2010-04-061-0/+43
| | | | | | | | | | | | | | | | | 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
* remove the MMI pointer from MachineFrameInfo.Chris Lattner2010-04-051-21/+14
| | | | llvm-svn: 100415
* get MMI out of the label uniquing business, just go to MCContextChris Lattner2010-03-141-4/+4
| | | | | | to get unique assembler temporary labels. llvm-svn: 98489
* Now that DBG_LABEL is updated, we can finally make MachineMove Chris Lattner2010-03-141-22/+18
| | | | | | contain an MCSymbol instead of a label index. llvm-svn: 98482
* change the DBG_LABEL MachineInstr to always be createdChris Lattner2010-03-141-4/+8
| | | | | | with an MCSymbol instead of an immediate. llvm-svn: 98481
* Do not force indirect tailcall through fixed registers: eax, r11. Add ↵Evan Cheng2010-03-141-8/+17
| | | | | | support to allow loads to be folded to tail call instructions. llvm-svn: 98465
* simplify some overly general code. The stack always grows down on x86.Chris Lattner2010-03-131-6/+2
| | | | llvm-svn: 98431
* add support, testcases, and dox for the new GHC callingChris Lattner2010-03-111-1/+10
| | | | | | convention. Patch by David Terei! llvm-svn: 98212
* Change the Value argument to eliminateFrameIndex to a type-tagged value. ThisJim Grosbach2010-03-091-1/+1
| | | | | | | | | | 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
* Lower dynamic stack allocation on mingw32 to separate instruction.Anton Korobeynikov2010-03-061-2/+4
| | | | | | | 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
* Implement XMM subregs.Dan Gohman2010-02-281-0/+6
| | | | | | | | | | | 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
* Add support for the 'alignstack' attribute to the x86 backend. Fixes PR5254.Charles Davis2010-02-191-1/+3
| | | | | | Also, FileCheck'ize a test. llvm-svn: 96686
* Teach MachineFrameInfo to track maximum alignment while stack objects are beingEvan Cheng2010-02-131-5/+1
| | | | | | | | | | 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
* Change TAILJMP's to be varargs and transfer implicit uses over from ↵Evan Cheng2010-01-311-3/+8
| | | | | | TCRETURN's. Otherwise the missing uses can make post-regalloc scheduling do bad things. This fixes 403.gcc. llvm-svn: 94950
* Don't forget to transfer target flag when inserting a tailcall instruction.Evan Cheng2010-01-301-1/+2
| | | | llvm-svn: 94872
* constify a method argument.Chris Lattner2010-01-261-3/+3
| | | | llvm-svn: 94612
* make findDebugLoc a class methodDale Johannesen2010-01-201-2/+2
| | | | llvm-svn: 94032
* Move findDebugLoc somewhere more central. FixDale Johannesen2010-01-201-17/+0
| | | | | | | more cases where debug declarations affect debug line info. llvm-svn: 93953
* Fix a case where debug_value was perturbing theDale Johannesen2010-01-191-4/+19
| | | | | | line number info. llvm-svn: 93937
* For aligned load/store instructions, it's only required to know whether aJim Grosbach2010-01-191-0/+6
| | | | | | | | | | | 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
* Revert 93499. After discussion with Chris we agreedDale Johannesen2010-01-151-9/+0
| | | | | | | | | 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
* Lower FrameIndex operand of DEBUG_VALUE (specially) andDale Johannesen2010-01-151-0/+9
| | | | | | print it as a comment on X86. llvm-svn: 93499
* improve portability to avoid conflicting with std::next in c++'0x.Chris Lattner2009-12-031-3/+3
| | | | | | Patch by Howard Hinnant! llvm-svn: 90365
* Factor the stack alignment calculations out into a target independent pass.Jim Grosbach2009-12-021-61/+1
| | | | | | No functionality change. llvm-svn: 90336
* Minor whitespace fixes.Dan Gohman2009-11-301-1/+1
| | | | llvm-svn: 90166
* Temporary disable the error - it seems to be too conservative.Anton Korobeynikov2009-11-141-3/+4
| | | | llvm-svn: 88800
* The instruction pointer %RIP is a reserved register on x86_64.Jakob Stoklund Olesen2009-11-131-0/+5
| | | | llvm-svn: 88705
* Add a bool flag to StackObjects telling whether they reference spillDavid Greene2009-11-121-5/+7
| | | | | | | | | | | | | 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
* Throw an error when stack realignment stuff fails instead of silentAnton Korobeynikov2009-11-081-3/+7
| | | | | | code miscompilation llvm-svn: 86463
* Remove includes of Support/Compiler.h that are no longer needed after theNick Lewycky2009-10-251-1/+0
| | | | | | VISIBILITY_HIDDEN removal. llvm-svn: 85043
* Remove VISIBILITY_HIDDEN from class/struct found inside anonymous namespaces.Nick Lewycky2009-10-251-1/+1
| | | | | | | 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
* Add register-reuse to frame-index register scavenging. When a target usesJim Grosbach2009-10-071-2/+5
| | | | | | | | | | | | | | | | | | | | 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
* Mark more constants unsigned, as warned about by icc (#68).Duncan Sands2009-09-061-1/+1
| | | | | | Patch by Erick Tryzelaar. llvm-svn: 81116
* If we've pushed registers onto the stack, but aren't adjusting the stack pointerBill Wendling2009-09-031-2/+2
| | | | | | | (i.e., there are no local variables and stuff), we still need to output FDE information for the pushed registers. llvm-svn: 80960
* Rename TargetAsmInfo (and its subclasses) to MCAsmInfo.Chris Lattner2009-08-221-1/+1
| | | | llvm-svn: 79763
* Styalistic and format changes. No functionality change.Bill Wendling2009-08-161-73/+85
| | | | llvm-svn: 79187
* An overhaul of the exception handling code. This is arguably more correct thanBill Wendling2009-08-151-55/+81
| | | | | | | | | | | | | 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
* Split EVT into MVT and EVT, the former representing _just_ a primitive type, ↵Owen Anderson2009-08-111-5/+5
| | | | | | | | while the latter is capable of representing either a primitive or an extended type. llvm-svn: 78713
* Rename MVT to EVT, in preparation for splitting SimpleValueType out into its ↵Owen Anderson2009-08-101-5/+5
| | | | | | own struct type. llvm-svn: 78610
* Enable the new no-SP register classes by default. This is to addressDan Gohman2009-08-051-14/+3
| | | | | | | PR4572. A few tests have some minor code regressions due to different coalescing. llvm-svn: 78217
* Create proper frame index for FPAnton Korobeynikov2009-08-031-1/+3
| | | | llvm-svn: 77966
* Unbreak Win64 CC. Step one: honour register save area, fix some alignment ↵Anton Korobeynikov2009-08-031-14/+22
| | | | | | and provide a different set of call-clobberred registers. llvm-svn: 77962
* The x86 jit doesn't generate a def_cfa_offset unwind instruction after theBill Wendling2009-08-021-1/+1
| | | | | | | | | | | | | 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
* The X86 maximal stack alignment calculator preserves the CFG. Also,Dan Gohman2009-08-011-2/+9
| | | | | | be more careful about the return value of runOnMachineFunction. llvm-svn: 77758
* Add a new register class to describe operands that can't be SP,Dan Gohman2009-07-301-16/+50
| | | | | | | 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
OpenPOWER on IntegriCloud