185 Commits

Author SHA1 Message Date
Alkis Evlogimenos
48d20cb328 Modify local register allocator to use the two-address instruction pass.
llvm-svn: 10513
2003-12-18 13:08:52 +00:00
Alkis Evlogimenos
29127b8825 Change interface of MachineOperand as follows:
a) remove opIsUse(), opIsDefOnly(), opIsDefAndUse()
    b) add isUse(), isDef()
    c) rename opHiBits32() to isHiBits32(),
              opLoBits32() to isLoBits32(),
              opHiBits64() to isHiBits64(),
              opLoBits64() to isLoBits64().

This results to much more readable code, for example compare
"op.opIsDef() || op.opIsDefAndUse()" to "op.isDef()" a pattern used
very often in the code.

llvm-svn: 10461
2003-12-14 13:24:17 +00:00
Alkis Evlogimenos
6e511754e5 Remove unecessary if statements when looping on ImplicitDefs.
llvm-svn: 10444
2003-12-13 01:20:58 +00:00
Alkis Evlogimenos
f3373f7bc9 Make assertion stricter. Since the source operands are allocated at
this point, the second operand must be a physical register (it cannot
be a virtual one).

llvm-svn: 10292
2003-12-05 11:31:39 +00:00
Brian Gaeke
d25f86d683 Put all LLVM code into the llvm namespace, as per bug 109.
llvm-svn: 9903
2003-11-11 22:41:34 +00:00
Chris Lattner
d09d070385 standardize command line option names
llvm-svn: 9496
2003-10-24 20:05:58 +00:00
John Criswell
b402729b30 Added LLVM project notice to the top of every C++ source file.
Header files will be on the way.

llvm-svn: 9298
2003-10-20 19:43:21 +00:00
Alkis Evlogimenos
74568bc9d4 Change MRegisterDesc::AliasSet, TargetInstrDescriptor::ImplicitDefs
and TargetInstrDescriptor::ImplicitUses to always point to a null
terminated array and never be null. So there is no need to check for
pointer validity when iterating over those sets. Code that looked
like:

if (const unsigned* AS = TID.ImplicitDefs) {
  for (int i = 0; AS[i]; ++i) {
    // use AS[i]
  }
}

was changed to:

for (const unsigned* AS = TID.ImplicitDefs; *AS; ++AS) {
  // use *AS
}

llvm-svn: 8960
2003-10-08 05:20:08 +00:00
Chris Lattner
82e85c8c5f Fix bug: Jello/2003-08-23-RegisterAllocatePhysReg.ll
llvm-svn: 8095
2003-08-23 23:49:42 +00:00
Chris Lattner
972c03e264 Fix bug: Jello/2003-08-15-AllocaAssertion.ll
llvm-svn: 7916
2003-08-17 18:01:15 +00:00
Brian Gaeke
797d0f0aeb Fix typo in comment
llvm-svn: 7906
2003-08-15 21:19:25 +00:00
Brian Gaeke
77c65be59e Factory methods for FunctionPasses now return type FunctionPass *.
llvm-svn: 7823
2003-08-13 18:18:15 +00:00
Chris Lattner
297f7d2451 Fix bugs handling ESP in alloca references
llvm-svn: 7591
2003-08-05 04:13:58 +00:00
Chris Lattner
6fece1bf61 Revert previous change, and be really anal about what physical registers can do.
llvm-svn: 7588
2003-08-05 00:49:09 +00:00
Chris Lattner
0e8197ad06 Don't bother calculating info unless its needed. May reduce number of stack slots created.
llvm-svn: 7584
2003-08-04 23:42:37 +00:00
Chris Lattner
8934560bd3 * Fix spelling of 'necessary'
* Add a lot more DEBUG output, which is better structured than before
* Fix bug: Jello/2003-08-04-PhysRegLiveFailure.llx

llvm-svn: 7583
2003-08-04 23:36:39 +00:00
Chris Lattner
77691b2c54 Set debug types
llvm-svn: 7533
2003-08-03 21:47:31 +00:00
Chris Lattner
a18bb98cf5 Wrap at 80 columns
llvm-svn: 7503
2003-08-03 13:49:03 +00:00
Chris Lattner
1baa706ab7 Move DEBUG to Debug.h
llvm-svn: 7497
2003-08-01 22:21:34 +00:00
Vikram S. Adve
681b3c77fa (1) Added special register class containing (for now) %fsr.
Fixed spilling of %fcc[0-3] which are part of %fsr.

(2) Moved some machine-independent reg-class code to class TargetRegInfo
    from SparcReg{Class,}Info.

(3) Renamed MachienOperand::opIsDef to MachineOperand::opIsDefOnly()
    and related functions and flags.  Fixed several bugs where only
    "isDef" was being checked, not "isDefAndUse".

llvm-svn: 6341
2003-05-27 00:05:23 +00:00
Chris Lattner
738ee6f0fd Fix tab infestation!
llvm-svn: 6109
2003-05-12 03:54:14 +00:00
Misha Brukman
cf277f9143 Debug output should go to cerr, not cout, because that's where bytecode goes.
llvm-svn: 6002
2003-05-04 22:51:30 +00:00
Chris Lattner
3228091a65 Fix problems with empty basic blocks
llvm-svn: 5326
2003-01-16 18:06:43 +00:00
Chris Lattner
b27d60ccf1 Rename MachineInstrInfo -> TargetInstrInfo
llvm-svn: 5272
2003-01-14 22:00:31 +00:00
Chris Lattner
eb2bc51e49 * Convert to use LiveVariable analysis
* Convert to use PHIElimination pass
* Don't spill values which have just been reloaded (big win reducing spills)
* Add experimental support for eliminating spills before TwoAddress
  instructions.  It currently is broken so it is #ifdef'd out.
* Use new "is terminator" flag on instructions instead of looking for
  branches and returns explicitly.

llvm-svn: 5219
2003-01-13 00:25:40 +00:00
Chris Lattner
500e45fe72 Rename FunctionFrameInfo to MachineFrameInfo
llvm-svn: 5200
2002-12-28 21:08:26 +00:00
Chris Lattner
239563061c * Convert to be a MachineFunctionPass instance
* Use new FunctionFrameInfo object to manage stack slots instead of doing
  it directly
* Adjust to new MRegisterInfo API
* Don't take a TM as a ctor argument
* Don't keep track of which callee saved registers are modified
* Don't emit prolog/epilog code or spill/restore code for callee saved regs
* Use new allocation_order_begin/end iterators to simplify dramatically the
  logic for picking registers to allocate
* Machine PHI nodes can no longer contain constant arguments

llvm-svn: 5195
2002-12-28 20:40:43 +00:00
Chris Lattner
3a506e6f14 Adjust to simpler spill interface
Only spill and reload caller saved registers that are actually modified.

llvm-svn: 5145
2002-12-25 05:05:46 +00:00
Chris Lattner
7888f74224 Substantial fixes to live range handling, fixing several problems, getting
strtol to not miscompile, and fixing bug: 2002-12-23-LocalRAProblem.llx

llvm-svn: 5132
2002-12-24 00:04:55 +00:00
Chris Lattner
5ddc4b5f94 * Fix several register aliasing bugs
* Add a new option to eliminate spilling of registers that are only used
  within a basic block.

llvm-svn: 5106
2002-12-18 08:14:26 +00:00
Chris Lattner
c6ac5c70c6 Use new reginfo interface
llvm-svn: 5099
2002-12-17 04:19:40 +00:00
Chris Lattner
e66a7e80c3 Add prolog/epilog spills/reloads to counters
Move X86 specific alignment gunk to X86 files

llvm-svn: 5096
2002-12-17 03:16:10 +00:00
Chris Lattner
8dd15fd26c Fix many bugs, regallocator now saves callee-save registers instead of target
llvm-svn: 5093
2002-12-17 02:50:10 +00:00
Chris Lattner
cdcde16ad0 * Fix a gross X86 hack that was intended to avoid allocating SP and BP
* Implement register alias set support

llvm-svn: 5082
2002-12-16 17:44:42 +00:00
Chris Lattner
d44868a709 Initial checkin of "local" register allocator. Bugs are still present.
llvm-svn: 5078
2002-12-16 16:15:28 +00:00