Commit Graph

563 Commits

Author SHA1 Message Date
Chris Lattner 3c3457ccea We are using std::vector, so remove extraneous namespace prefixes
llvm-svn: 3275
2002-08-09 20:05:34 +00:00
Chris Lattner e08000ac9f Very minor cleanups
llvm-svn: 3271
2002-08-09 18:55:18 +00:00
Chris Lattner f0ed55d1ee - Cleaned up the interface to AnalysisUsage to take analysis class names
instead of ::ID's.
 - Pass::getAnalysis<> now no longer takes an optional argument

llvm-svn: 3265
2002-08-08 19:01:30 +00:00
Chris Lattner 40eb9dafed - Cleaned up the interface to AnalysisUsage to take analysis class names
instead of ::ID's.
 - Pass::getAnalysis<> now no longer takes an optional argument

llvm-svn: 3264
2002-08-08 19:01:28 +00:00
Vikram S. Adve 1a1c3ed56d Add function GetConstantValueAsUnsignedInt.
Fix 2 bugs in FoldGetElemChain so index vector is not modified
when no GEPs are folded in, and so a hasLeadingZero is computed
only for the last folded GEP, not the one after that if any.

llvm-svn: 3244
2002-08-04 20:49:49 +00:00
Chris Lattner 4bc962d1d5 * Move InstructionSelection Pass here instead of living in Sparc.cpp. It
is platform independant afterall.
* Object orientize the functions, cleanup code a bit.  Instead of static
  global functions, the helpers for instruction selection are now part of
  the InstructionSelection Pass class.

llvm-svn: 3147
2002-07-30 03:57:36 +00:00
Chris Lattner 05e148710e Remove unused vector
llvm-svn: 3143
2002-07-30 02:52:40 +00:00
Chris Lattner e38dce72a7 Refix stuff for GCC 2.95, 3.0.4 & 3.1
llvm-svn: 3094
2002-07-25 18:04:48 +00:00
Mehwish Nagda 7a167de851 now removes deleted nops from MachineCodeForInstruction
llvm-svn: 3090
2002-07-25 17:31:05 +00:00
Chris Lattner 10073a9080 *** empty log message ***
llvm-svn: 3075
2002-07-25 06:17:51 +00:00
Chris Lattner 6c21f2454b *** empty log message ***
llvm-svn: 3058
2002-07-24 21:21:33 +00:00
Chris Lattner e583333ec9 Non-standard hash classes are not in the std:: namespace
llvm-svn: 3057
2002-07-24 21:21:33 +00:00
Chris Lattner e98dd5fcac *** empty log message ***
llvm-svn: 3056
2002-07-24 21:21:32 +00:00
Mehwish Nagda c4ffab60d5 moving to the Reoptimizer/Mapping dir
llvm-svn: 2993
2002-07-22 22:10:55 +00:00
Chris Lattner f5cad15a67 *** empty log message ***
llvm-svn: 2985
2002-07-22 02:10:13 +00:00
Mehwish Nagda 0644a84a5f changed size computation
llvm-svn: 2974
2002-07-19 22:54:08 +00:00
Mehwish Nagda 98b9e48981 added check for Function with 0 BB
llvm-svn: 2942
2002-07-17 23:40:33 +00:00
Mehwish Nagda 81264e6bed Now will profile all Basic Blocks
llvm-svn: 2922
2002-07-16 17:48:27 +00:00
Mehwish Nagda 6c9544a2a0 Initial checking : Writes LLVM - MI mappiing to the .s file
llvm-svn: 2911
2002-07-15 23:08:49 +00:00
Anand Shukla 3de6fcfdec added std:: to endl
llvm-svn: 2875
2002-07-11 00:17:17 +00:00
Vikram S. Adve 6a36c8f2b9 Fix print of BB name in dump().
llvm-svn: 2861
2002-07-10 21:45:30 +00:00
Vikram S. Adve f089faa7f6 Add support for marking each operand as a %hh, %hm, %lm or %lo.
Represent previous bools and these ones with flags in a single byte
per operand.

llvm-svn: 2860
2002-07-10 21:45:04 +00:00
Anand Shukla 046fe57511 changed mem_fun to std::mem_fun
llvm-svn: 2847
2002-07-09 19:18:56 +00:00
Vikram S. Adve 7228f0c404 Significant changes to correctly spill CC registers and to correctly
handle conditional move instructions:
-- cpMem<->Reg functions now support CC registers (int and FP) correctly.
-- Scratch registers must be explicitly provided to cpMem<->Reg when
   needed, since CC regs need one to be copied to/from memory.
-- CC regs are saved to a scratch register instead of stack.
-- All regs used by a instruction are now recorded in MachineInstr::regsUsed,
   since regs used to save values *across* an instruction are not obvious
   either from the operands or from the LiveVar sets.
-- An (explicit or implicit) operand may now be both a def and a use.
   This is needed for conditional move operations.
   So an operand may need spill code both before and after the instruction.
-- class MachineCodeForBasicBlock is now an annotation on BasicBlock.

llvm-svn: 2833
2002-07-08 23:15:32 +00:00
Vikram S. Adve 1dfb4079b7 MachineInstr* in vector are not const (and never really were)
because operands may be modified directly to set register.
Also, class MachineCodeForBasicBlock is now an annotation on BasicBlock.

llvm-svn: 2832
2002-07-08 23:07:26 +00:00
Vikram S. Adve 35bac4a658 Rename static struct Initializer to avoid name conflict with BB.
llvm-svn: 2831
2002-07-08 23:04:31 +00:00
Vikram S. Adve 4180fe41c2 Fix printing of BB in dump.
llvm-svn: 2830
2002-07-08 23:03:54 +00:00
Vikram S. Adve 2bd7ae169d Moved class MachineCodeForBasicBlock to MachineCodeForBasicBlock.h.
This class is now an annotation on BasicBlock.

llvm-svn: 2829
2002-07-08 23:03:10 +00:00
Vikram S. Adve a9c93af49f MachineInstr::dump() now takes no arguments.
llvm-svn: 2828
2002-07-08 23:01:46 +00:00
Vikram S. Adve f0b84cefb0 Implementation of class MachineCodeForBasicBlock.
Moved here from MachineInstr.cpp to make it an annotation on BasicBlock.

llvm-svn: 2827
2002-07-08 23:01:11 +00:00
Vikram S. Adve 19c55db0d9 A single MachineInstr operand may now be both a def and a use,
so additional dep. edges have to be added.
This was needed to correctly handle conditional move instructions!
MachineCodeForBasicBlock is now an annotation on BasicBlock.
Renamed "earliestForNode" to "earliestReadyTimeForNode".

llvm-svn: 2826
2002-07-08 22:59:23 +00:00
Vikram S. Adve beb364051b getUsableUniRegAtMI interface simplified slightly.
llvm-svn: 2822
2002-07-08 22:39:36 +00:00
Vikram S. Adve 6c013a9689 Moved class MachineCodeForBasicBlock to MachineCodeForBasicBlock.{cpp,h}.
An (explicit or implicit) operand may now be both a def and a use.
Also add a set of regs used by each instruction.
dump() no longer takes an optional argument, which doesn't work in gdb.

llvm-svn: 2821
2002-07-08 22:38:45 +00:00
Vikram S. Adve ff045b2e18 MachineInstr* in vector are not const (and never really were)
because operands may be modified directly to set register.

llvm-svn: 2820
2002-07-08 22:34:40 +00:00
Chris Lattner dec26513ad Remove tag that just clutters diffs
llvm-svn: 2807
2002-06-30 16:08:25 +00:00
Anand Shukla 458496c060 changes to make it compatible with 64bit gcc
llvm-svn: 2791
2002-06-25 20:55:50 +00:00
Chris Lattner 113f4f4609 MEGAPATCH checkin.
For details, See: docs/2002-06-25-MegaPatchInfo.txt

llvm-svn: 2779
2002-06-25 16:13:24 +00:00
Chris Lattner 7076ff29ed MEGAPATCH checkin.
For details, See: docs/2002-06-25-MegaPatchInfo.txt

llvm-svn: 2778
2002-06-25 16:13:21 +00:00
Chris Lattner abe98198a8 Convert RegClass::IsColorUsedArr from a dynamically allocated array to
a vector.  This makes asserting on array bounds easier.

llvm-svn: 2731
2002-05-23 15:50:03 +00:00
Chris Lattner afc86e9a35 Move debug options out of header files so that the header does not have
to #include CommandLine.h.

llvm-svn: 2712
2002-05-22 17:08:27 +00:00
Chris Lattner d5ed3694ae Avoid #including CommandLine.h
llvm-svn: 2710
2002-05-22 17:06:56 +00:00
Chris Lattner 99bd13b415 Hide debugging options
llvm-svn: 2676
2002-05-20 21:39:10 +00:00
Chris Lattner 9af99f8c74 Don't lose namespace qualifications on previous patch.
llvm-svn: 2664
2002-05-20 17:38:26 +00:00
Vikram S. Adve 5d78db2afb InstrnsBefore and InstrnsAfter are now vectors instead of deques.
May be slightly less efficient but significantly reduces special
cases interfaces in code generation.

llvm-svn: 2649
2002-05-19 15:41:33 +00:00
Vikram S. Adve 16384011d2 Better folding getelementptr operations with mixed
array and struct indexes.
Update operand values in CallArgsDescriptor (a new class)
when replacing constant values with immediates.

llvm-svn: 2645
2002-05-19 15:34:29 +00:00
Vikram S. Adve 069d51612f cpValue2Value now needs a vector of MachineInstr to store return values.
llvm-svn: 2644
2002-05-19 15:31:08 +00:00
Vikram S. Adve 1e45411a31 Annotation class for MachineInstr.
llvm-svn: 2643
2002-05-19 15:30:21 +00:00
Vikram S. Adve 2780d2dacb Numerous bug fixes:
-- passing FP arguments to functions with more than 6 arguments
-- passing FP arguments to varargs functions
-- passing FP arguments to functions with no prototypes
-- incorrect coloring for CC registers (both int and FP): interferences
   were being completely ignored for int CC and were considered but no
   spills were marked for fp CC!

Also some code improvements:
-- better interface to generating machine instr for common cases
   (many places still need to be updated to use this interface)
-- annotations on MachineInstr to communicate information from
   one codegen phase to another (now used to pass information about
   CALL/JMPLCALL operands from selection to register allocation)
-- all sizes and offests in class TargetData are uint64_t instead of uint

llvm-svn: 2642
2002-05-19 15:29:31 +00:00
Chris Lattner 181cc32365 Replace all usages of Type::isPointerType with isa<PointerType>
llvm-svn: 2486
2002-05-06 16:15:30 +00:00
Chris Lattner 70411b074c Add neccesary #include
llvm-svn: 2406
2002-04-29 18:48:55 +00:00
Chris Lattner d5a847057b Eliminate duplicate or unneccesary #include's
llvm-svn: 2397
2002-04-29 17:42:12 +00:00
Chris Lattner 37104aace8 Add new optional getPassName() virtual function that a Pass can override
to make debugging output a lot nicer.

llvm-svn: 2395
2002-04-29 14:57:45 +00:00
Chris Lattner 50cf8f1871 Include appropriate file
llvm-svn: 2379
2002-04-28 20:40:16 +00:00
Chris Lattner ca14237696 Split ConstantVals.h into Constant.h and Constants.h
llvm-svn: 2378
2002-04-28 19:55:58 +00:00
Chris Lattner 78dd56fe62 Eliminate the cfg namespace, moving LoopInfo, Dominators, Interval* classes
to the global namespace

llvm-svn: 2370
2002-04-28 16:21:30 +00:00
Chris Lattner 002958cdbb Remove all contents of the cfg namespace to the global namespace
llvm-svn: 2369
2002-04-28 16:19:42 +00:00
Chris Lattner f998685cd9 s/Method/Function
llvm-svn: 2336
2002-04-27 07:27:19 +00:00
Chris Lattner c8e665431b * Rename MethodPass class to FunctionPass
- Rename runOnMethod to runOnFunction
* Transform getAnalysisUsageInfo into getAnalysisUsage
  - Method is now const
  - It now takes one AnalysisUsage object to fill in instead of 3 vectors
    to fill in
  - Pass's now specify which other passes they _preserve_ not which ones
    they modify (be conservative!)
  - A pass can specify that it preserves all analyses (because it never
    modifies the underlying program)
* s/Method/Function/g in other random places as well

llvm-svn: 2333
2002-04-27 06:56:12 +00:00
Vikram S. Adve 40221aa74c Don't record instructions for copying method arguments in the
AddedInstrns sets for the first machine instruction.  It is hard
to ensure that the right order is preserved, and sure enough, the
order was broken.  Instead, use a separate set for the function entry.

llvm-svn: 2318
2002-04-25 04:46:28 +00:00
Vikram S. Adve 7a4b381f80 Don't record instructions for copying method arguments in the
AddedInstrns sets for the first machine instruction.  It is hard
to ensure that the right order is preserved, and sure enough, the
order was broken.  Instead, use a separate set for the function entry.

llvm-svn: 2312
2002-04-25 04:34:15 +00:00
Vikram S. Adve d79d2c3892 Improve printing during dumps.
llvm-svn: 2311
2002-04-25 04:31:18 +00:00
Vikram S. Adve 7092772475 Optional args are no longer allocated as they are discovered.
(This can be improved to avoid making the initial pass over the method.)
Also, ensure automatic vars and reg. spills areas are not extended
if their sizes are used for computing some other offset.

llvm-svn: 2310
2002-04-25 04:30:43 +00:00
Chris Lattner 75323bc2d2 Only emit message if DEBUG_RA is on
llvm-svn: 2252
2002-04-15 20:36:15 +00:00
Chris Lattner 2e9fa6d101 Move FunctionArgument out of iOther.h into Argument.h and rename class to
be 'Argument' instead of FunctionArgument.

llvm-svn: 2216
2002-04-09 19:48:49 +00:00
Chris Lattner 99ac15d154 No need to reserve space, erasing does not change the size of the container.
llvm-svn: 2201
2002-04-09 18:01:21 +00:00
Chris Lattner e8a1a44dd4 * Add a file header with some information
* Delete the DelaySlotInfo objects created by the SchedulingManager class.
  These leaked objects were accounting for 3/4 of the memory leaked by the
  backend, so this is a relatively major win.
* Reorganize SchedulingManager::getDelaySlotInfoForInstr so that it has
  better code locality (making it easier to read).

llvm-svn: 2197
2002-04-09 05:45:58 +00:00
Chris Lattner 6c1a58d6ba Clean up the ownership model a bit so that nodes actually get deleted more
frequently. This still leaks edges quite a bit, but it leaks no nodes
(I think).

llvm-svn: 2190
2002-04-09 05:15:33 +00:00
Chris Lattner 30e23dacbc Convert AddedInstrMapType to contain AddedInstrns by value instead of by
pointer so that they do not all get leaked!

llvm-svn: 2188
2002-04-09 05:13:04 +00:00
Chris Lattner 3abd752f90 GCC3.0 is reported to die without an alloca definition.
llvm-svn: 2186
2002-04-09 03:37:11 +00:00
Chris Lattner 8690ac124f Don't leak memory like a seive
llvm-svn: 2185
2002-04-08 23:09:07 +00:00
Chris Lattner aca4d447c9 Value cannot be directly instantiated. I think that this code was TRYING to
make a PHI node, although it was badly broken.  This keeps tests passing, so
we'll go with it.

llvm-svn: 2184
2002-04-08 22:05:54 +00:00
Chris Lattner f739fa8541 s/Method/Function
llvm-svn: 2180
2002-04-08 22:03:57 +00:00
Chris Lattner 95f65b6f84 s/method/function
llvm-svn: 2177
2002-04-08 22:01:15 +00:00
Chris Lattner 62b7fd136e Change references to the Method class to be references to the Function
class.  The Method class is obsolete (renamed) and all references to it
are being converted over to Function.

llvm-svn: 2144
2002-04-07 20:49:59 +00:00
Vikram S. Adve c533f04176 Add method clearCallInterference().
llvm-svn: 2071
2002-03-31 18:58:14 +00:00
Vikram S. Adve f434a9ed5f Include temp. values when computing max. size of stack frame!
llvm-svn: 2070
2002-03-31 18:57:49 +00:00
Vikram S. Adve 5bf8890305 Fix a bug in previous bug fix.
llvm-svn: 2069
2002-03-31 18:56:51 +00:00
Vikram S. Adve aa2373d2ed Bug fix: address used by indirect call instruction should also
be marked as having a Call Interference, even though it may not
be live after the call.

llvm-svn: 2068
2002-03-31 18:54:37 +00:00
Chris Lattner 57698e2c0b Change references from Method to Function
change references from MethodARgument to FunctionArgument

llvm-svn: 1991
2002-03-26 18:01:55 +00:00
Vikram S. Adve 7a78ae9dd6 Destroy MethodLiveVarInfo after register allocation.
llvm-svn: 1976
2002-03-24 03:54:03 +00:00
Vikram S. Adve 479126b3d3 Use deterministic iterator for SchedGraphs. This is actually not
useful right now when we only do local scheduling.

llvm-svn: 1975
2002-03-24 03:53:03 +00:00
Vikram S. Adve 9db158f568 Bug fix: nextToTry was not being initialized in one case.
llvm-svn: 1974
2002-03-24 03:46:15 +00:00
Vikram S. Adve e2a0dfad64 Add option to disable scheduling.
llvm-svn: 1973
2002-03-24 03:45:35 +00:00
Vikram S. Adve c228f7a077 Add option to disable scheduling.
Destroy live-variable information after scheduling so it is
recomputed before later phases (e.g., reg. allocation).
Use deterministic iterator to enumerate sched graphs.

llvm-svn: 1972
2002-03-24 03:44:55 +00:00
Vikram S. Adve 90039d0ab9 Minor changes.
llvm-svn: 1971
2002-03-24 03:40:59 +00:00
Vikram S. Adve 31a5d3a475 Re-fix bug: Put back MachineCodeForInstruction::dropAllReferences.
llvm-svn: 1970
2002-03-24 03:40:11 +00:00
Vikram S. Adve 377646fcfd Fix padding for variables allocated on stack.
llvm-svn: 1969
2002-03-24 03:39:26 +00:00
Vikram S. Adve dc96167e00 Major overhaul to FoldGetElemPtr to handle mixed array and struct refs.
llvm-svn: 1968
2002-03-24 03:37:53 +00:00
Vikram S. Adve 8bc420ec6a Use deterministic iterator for treeRoots.
llvm-svn: 1967
2002-03-24 03:36:52 +00:00
Vikram S. Adve 3228f9cc42 Change treeRoots data structure to make enumeration deterministic.
llvm-svn: 1962
2002-03-24 03:24:00 +00:00
Chris Lattner 4e8c4877aa Rename Method to Function
llvm-svn: 1957
2002-03-23 22:51:58 +00:00
Vikram S. Adve 8e01c0b70e Big bug fix: getUsableUniRegAtMI needed to return values in arguments
but did not pass the arguments by reference!

llvm-svn: 1906
2002-03-18 03:37:19 +00:00
Vikram S. Adve 7446b323a7 Added function computeOffsetforLocalVar to check how big the
offset-from-FP will be before allocating space for a local variable.

llvm-svn: 1905
2002-03-18 03:36:30 +00:00
Vikram S. Adve 307916c008 Bug fix in setting CC register.
Also use distinct names for the three types of SetMachineOperand
to avoid painful overloading problems and errors.

llvm-svn: 1904
2002-03-18 03:35:24 +00:00
Vikram S. Adve e5842b527d Constants are now added to the constant pool only when a load
instruction is actually generated for them.
Rename the different versions of SetMachineOperand.

llvm-svn: 1903
2002-03-18 03:33:43 +00:00
Vikram S. Adve d2c71c1d08 Use vector for machine instructions returned by GetInstructionsByRule.
Fix constants in instructions generated for Phi elimination.

llvm-svn: 1902
2002-03-18 03:31:54 +00:00
Vikram S. Adve cecde7122c Big bug fix: getUsableUniRegAtMI needed to return values in arguments
but did not pass the arguments by reference!
Also added a function to get a register class by ID.

llvm-svn: 1901
2002-03-18 03:26:48 +00:00
Anand Shukla ef5631efba Change to make it build with GCC 2.95.3
llvm-svn: 1802
2002-02-26 18:57:15 +00:00
Chris Lattner 7c7930f59c * Make it compile with GCC 3.0.4
llvm-svn: 1788
2002-02-24 23:01:56 +00:00
Chris Lattner 29a5df81e4 * Silence signed/unsigned warnings
* Make it compile with GCC 3.0.4

llvm-svn: 1787
2002-02-24 23:01:50 +00:00
Chris Lattner 83d485b310 * Pull BasicBlock::pred_* and BasicBlock::succ_* out of BasicBlock.h and into
llvm/Support/CFG.h
* Make pred & succ iterators for intervals global functions
* Add #includes that are now neccesary because BasicBlock.h doesn't include
  InstrTypes.h anymore

llvm-svn: 1750
2002-02-12 22:39:50 +00:00
Chris Lattner 60a6591d83 Method.h no longer includes BasicBlock.h
Method::inst_* is now in llvm/Support/InstIterator.h
GraphTraits specializations for BasicBlock and Methods are now in llvm/Support/CFG.h

llvm-svn: 1746
2002-02-12 21:07:25 +00:00
Chris Lattner ea13e0afa0 Convert operand iterator over to work like an STL iterator
llvm-svn: 1720
2002-02-05 06:02:59 +00:00
Chris Lattner 7e5ee4253c Minor change: Methods that return ValueSet's that are guaranteed to be valid
return references instead of pointers.

llvm-svn: 1719
2002-02-05 04:20:12 +00:00
Chris Lattner d30f989cda * Code Cleanups
* Removal dependencies on Type.h & remove uses of getTypeID()

llvm-svn: 1718
2002-02-05 03:52:29 +00:00
Chris Lattner f1223ace96 * Code Cleanups of IGNode.h
* Removal of getTypeID() methods, and dependence on llvm/Type.h, from IGNode & LiveRange

llvm-svn: 1717
2002-02-05 03:51:37 +00:00
Chris Lattner 101a5d9197 Must include SetOperations to do set_*
llvm-svn: 1716
2002-02-05 03:35:53 +00:00
Chris Lattner b0af9cdbda * Eliminate the LiveVarSet class, making applyTranferFuncForMInst a static
function in the one .cpp file that uses it.  Use ValueSet's instead.
* Prepare to delete LiveVarSet.h & LiveVarSet.cpp
* Eliminate the ValueSet class, making all old member functions into global
  templates that will eventually be moved to Support.
* Eliminate some irrelevant const's

llvm-svn: 1712
2002-02-05 02:52:05 +00:00
Chris Lattner b1def732af * Eliminate the LiveVarSet class, making applyTranferFuncForMInst a static
function in the one .cpp file that uses it.  Use ValueSet's instead.
* Prepare to delete LiveVarSet.h & LiveVarSet.cpp
* Eliminate the ValueSet class, making all old member functions into global
  templates that will eventually be moved to Support.

llvm-svn: 1711
2002-02-05 02:51:01 +00:00
Chris Lattner 30e8fb69c5 * Code Cleanups
* Introduce RAV to allow stream I/O instead of using printValue

llvm-svn: 1710
2002-02-05 01:43:49 +00:00
Chris Lattner 3da53ad636 * Add a #include not indirectly included any more
llvm-svn: 1707
2002-02-05 00:35:14 +00:00
Chris Lattner aa7a151874 * RegisterAllocation _uses_ LiveVar analysis, instead of creating it's own copy
llvm-svn: 1701
2002-02-04 20:02:38 +00:00
Chris Lattner 6974172717 * The itf exposed by InstrScheduling is now a single function to create the right pass
* InstructionScheduling is now a real pass
* InstrSched _uses_ LiveVar analysis, instead of creating it's own copy many times
  through a loop.  In this was LiveVarAnalysis is actually even SHARED by Register
  allocation.
* SchedPriorities is now passed the live var information in

llvm-svn: 1700
2002-02-04 20:02:16 +00:00
Chris Lattner 347a23921a Switch register allocator over to using LoopInfo directly instead of indirectly through LoopDepthCalculator
llvm-svn: 1696
2002-02-04 17:48:00 +00:00
Chris Lattner 8a352d597c Make LoopDeptCalculator be an internal artifact of how RegAlloc is implemented,
do not expose it.  Additionally, have it be auto generated by the pass framework
for us.

llvm-svn: 1695
2002-02-04 17:39:42 +00:00
Chris Lattner 669a74ce8a Make #include "llvm/Analysis/LoopDepth.h" be an internal artifact of how register allocation is implemented.
llvm-svn: 1693
2002-02-04 17:38:48 +00:00
Chris Lattner 83a8434eb2 * Add #includes removed from headers
* ValueSet interface converted from add/remove to insert/erase
* Minor cleanups

llvm-svn: 1689
2002-02-04 16:36:59 +00:00
Chris Lattner e630ac9330 Remove dependence on BBLiveVar from InstrScheduling
Minor cleanups

llvm-svn: 1688
2002-02-04 16:35:45 +00:00
Chris Lattner f48173a875 Convert RegisterAllocator interface to opaque pass type, so that users do not
need to know _anything_ about RegAlloc to use it.  Well in the end maybe.

llvm-svn: 1681
2002-02-04 15:54:09 +00:00
Chris Lattner 49562d8442 Add #includes neccesary since they were removed from .h files
llvm-svn: 1675
2002-02-04 05:56:09 +00:00
Chris Lattner a8171dd554 Move instrIsFeasible from InstrScheduling.h
llvm-svn: 1674
2002-02-04 05:55:42 +00:00
Chris Lattner b0da8b2de1 * Minor cleanups
* Reduce number of #includes, sometimes drastically (LiveRangeInfo.h lost _7_)
* Move instrIsFeasible() from InstrScheduling.h to SchedPriorities.h
* Delete blank lines at end of files

llvm-svn: 1672
2002-02-04 05:52:08 +00:00
Chris Lattner 720bc02f18 * Move command line parsing debug stuff to InstrScheduling internal header file
SchedPriorities.h

llvm-svn: 1669
2002-02-04 02:44:20 +00:00
Chris Lattner 36aa542ef0 Split RegisterAllocation stuff OUT of Sparc.cpp into a well defined pass
that has a very minimal interface (like it should have).

llvm-svn: 1667
2002-02-04 00:33:08 +00:00
Chris Lattner eda6bd71a0 Code pulled out of MAchineInstr.(h|cpp)
llvm-svn: 1660
2002-02-03 07:54:50 +00:00
Chris Lattner abafc3bc70 Lots of code cleanups, no functional changes
llvm-svn: 1650
2002-02-03 07:46:34 +00:00
Chris Lattner 4cec147d4e * Prune #includes
* Remove MachineCodeFor(Method|VMInstr) code to their own .cpp files

llvm-svn: 1649
2002-02-03 07:46:01 +00:00
Chris Lattner b86d191dbe * Switch over to cleaner TmpInstruction model
llvm-svn: 1648
2002-02-03 07:39:06 +00:00
Chris Lattner e59929f7b2 * Straighten out #includes
* Switch to MAchineCodeForInstruction model instead of MachineCodeForVMInstr

llvm-svn: 1647
2002-02-03 07:33:46 +00:00
Chris Lattner 0068ea26d7 * Swich to annotation model for MachineCodeForInstruction
llvm-svn: 1646
2002-02-03 07:31:41 +00:00
Chris Lattner 02d8e37cae Remove extraneous #includes
llvm-svn: 1645
2002-02-03 07:30:08 +00:00
Chris Lattner a17c469136 * Straighten out #includes
* Switch from MachineCodeForVMInstr to MachineCodeForInstruction model

llvm-svn: 1644
2002-02-03 07:29:45 +00:00
Chris Lattner 7c9c85947c * Get machine instrs from Instructin's by using MachineCodeForInstruction::get
* Convert a few (*X). to X->

llvm-svn: 1643
2002-02-03 07:28:30 +00:00
Chris Lattner 6316f38c96 Add a class forward decl
llvm-svn: 1637
2002-02-03 07:13:04 +00:00
Chris Lattner 9fcaf328f6 LoopDepth calculation is now in CFG namespace
llvm-svn: 1601
2002-01-31 00:41:13 +00:00
Chris Lattner 447fd86599 Make it build with 2.95.3
llvm-svn: 1554
2002-01-23 05:47:57 +00:00
Chris Lattner 73da1cea60 Oops lost a parenthesis somehow :(
llvm-svn: 1504
2002-01-21 01:33:12 +00:00
Chris Lattner 7f74a56e24 Changes to build successfully with GCC 3.02
llvm-svn: 1503
2002-01-20 22:54:45 +00:00
Ruchira Sasanka bc28455806 Fixed a bug in spill cost estimation
llvm-svn: 1500
2002-01-08 16:29:23 +00:00
Ruchira Sasanka a42a7e78b6 PhyRegAlloc.cpp: Added temp area resetting before every call
llvm-svn: 1499
2002-01-07 21:09:06 +00:00
Ruchira Sasanka 8c2d8256a9 Added destructors and comments.
Added correct spill candidate selection logic.

llvm-svn: 1493
2002-01-07 19:19:18 +00:00
Ruchira Sasanka f20079dfed Added comments, destructors where necessary.
llvm-svn: 1491
2002-01-07 19:16:26 +00:00
Vikram S. Adve cb2335f13f Eliminate all uses of memInst->getIndicesBROKEN().
llvm-svn: 1485
2001-12-15 00:36:32 +00:00
Chris Lattner 2413b160ec Renamed inst_const_iterator -> const_inst_iterator
Renamed op_const_iterator   -> const_op_iterator
Renamed PointerType::getValueType() -> PointerType::getElementType()

llvm-svn: 1408
2001-12-04 00:03:30 +00:00
Chris Lattner 3462ae3ad7 Rename ConstPoolVal -> Constant
Rename ConstPool*   -> Constant*
Rename ConstPoolVals.h -> ConstantVals.h

llvm-svn: 1407
2001-12-03 22:26:30 +00:00
Chris Lattner fb5ae02e1a Split the PHINode class out from the iOther.h file into the iPHINode.h file
llvm-svn: 1405
2001-12-03 18:02:31 +00:00
Chris Lattner 5de2204fe8 Create a new #include "Support/..." directory structure to move things
from "llvm/Support/..." that are not llvm dependant.

Move files and fix #includes

llvm-svn: 1400
2001-11-27 00:03:19 +00:00
Chris Lattner 0c8eea1b6f Stuff after a #endif is not valid CPP input and breaks some compilers
llvm-svn: 1375
2001-11-26 18:56:52 +00:00
Chris Lattner 63b52693c8 The old getIndices has been deprecated, because it no longer works. It now
is named getIndicesBROKEN() and shall be removed when the codebase is updated
to not call it

llvm-svn: 1338
2001-11-26 16:56:19 +00:00
Ruchira Sasanka 7dfa1650a2 Commented some popTempArg.. since it leads to a bug
llvm-svn: 1326
2001-11-15 22:02:06 +00:00
Ruchira Sasanka ec62f24009 Added naming to inserted phi copy values - for easy debugging
llvm-svn: 1325
2001-11-15 20:46:40 +00:00
Ruchira Sasanka 9066899a78 Fixed a bug in setReLRegsUsedByMI
llvm-svn: 1323
2001-11-15 20:23:19 +00:00
Ruchira Sasanka dec9bfd554 Changed some names of methods, added const etc.
llvm-svn: 1322
2001-11-15 20:22:37 +00:00
Vikram S. Adve fbb8a64749 Modify AllocateLocalVar method to take a size argument.
llvm-svn: 1318
2001-11-15 15:22:26 +00:00
Ruchira Sasanka a514745a96 fixed setUsedRegAtMI
llvm-svn: 1317
2001-11-15 15:00:53 +00:00
Ruchira Sasanka c5989f645b Changed phi elimination code
llvm-svn: 1311
2001-11-15 00:27:14 +00:00
Ruchira Sasanka 64f7567391 Small changed to printing a machine operand - It the operand is a def, it prints
a star after it - only for debugging

llvm-svn: 1309
2001-11-14 20:05:23 +00:00
Vikram S. Adve cba86d060b Don't assume constant operand can only be in position 1!
llvm-svn: 1308
2001-11-14 18:49:45 +00:00
Vikram S. Adve 65d54eb06e Idiotic error in last fix.
llvm-svn: 1306
2001-11-14 17:55:02 +00:00
Vikram S. Adve c1b534043f Don't need to load a NULL pointer constant from memory!
llvm-svn: 1305
2001-11-14 17:24:49 +00:00
Ruchira Sasanka 7765ca8b25 Added support method for setting interference for pseudo instructions
llvm-svn: 1303
2001-11-14 15:37:13 +00:00
Ruchira Sasanka f1acecccb6 Added interference for args in pseudo instructions
llvm-svn: 1300
2001-11-14 15:33:58 +00:00
Chris Lattner 1237e86597 Remove much cruft from the MemAccessInst instruction
llvm-svn: 1298
2001-11-14 11:27:58 +00:00
Ruchira Sasanka 33c400f6a7 commented out lines printing code after scheduling
llvm-svn: 1295
2001-11-13 23:12:53 +00:00
Ruchira Sasanka 36f13d1c2f Fixed a bug concering LR spilling. Earlier, added spilled code was not inserted
into the instruction stream correctly.

llvm-svn: 1294
2001-11-13 23:09:30 +00:00
Vikram S. Adve dafc8b909e Do the same for allocating spills to get their alignment right too.
llvm-svn: 1285
2001-11-12 23:40:22 +00:00
Vikram S. Adve 6e9422e14c When allocating space on stack for writing a register,
use the size of the register, not the size of the Value type,
to get the right alignment.

llvm-svn: 1284
2001-11-12 23:26:35 +00:00
Vikram S. Adve 4b9c46da24 Bug fix in offset alignment computations: don't subtract the padding
value from size *before* subtracting size from offset!

llvm-svn: 1283
2001-11-12 23:26:23 +00:00
Ruchira Sasanka c189997516 For phi elimination, now we are generating only one instruction
using cpValue2Value instead of
passing vector to createCopyInstructionByType.

llvm-svn: 1272
2001-11-12 19:42:27 +00:00
Vikram S. Adve 03fae5e5db Eliminate most uses of the machine instruction vector for each LLVM instr,
since some m. instr. may be generated by LLVM instrs. in other blocks.
Handle non-SSA (anti and output) edges and true edges uniformly by
working with machine instructions alone.

llvm-svn: 1269
2001-11-12 18:53:43 +00:00
Ruchira Sasanka 9f246e65d3 Added phi elimination code - not final
llvm-svn: 1264
2001-11-12 14:44:50 +00:00
Vikram S. Adve 6e004c0818 Improved printing routines.
llvm-svn: 1263
2001-11-12 14:19:47 +00:00
Vikram S. Adve dff0a891c1 Major improvement to how nodes are built for a BB.
LLVM instruction is no longer recorded in each node, but BB is.

llvm-svn: 1262
2001-11-12 14:18:01 +00:00
Vikram S. Adve 3b02a35a80 Adjust all stack variable offsets to be aligned by size.
llvm-svn: 1261
2001-11-12 05:17:23 +00:00
Vikram S. Adve 1d5c6e0939 Fix errors in computing downgrowing offsets, and in
computing size of extra outgoing args.

llvm-svn: 1256
2001-11-11 21:23:33 +00:00
Vikram S. Adve 6cd83556e6 Only add true dep. edges from an earlier to a later instruction.
This wasn't a problem until we started putting copies for Phi values
that produced cycles in the SchedGraph!

llvm-svn: 1254
2001-11-11 01:23:27 +00:00
Ruchira Sasanka d1d5e97431 Changed code to ignore Phi Nodes in PhyRegAlloc
llvm-svn: 1253
2001-11-10 21:21:36 +00:00
Ruchira Sasanka 31305c0d57 Coalesing bug fix - now checks for the same regType instead of the same
regClass since FP class has two reg Types.

llvm-svn: 1236
2001-11-10 00:20:24 +00:00
Ruchira Sasanka d499a26116 No major change
llvm-svn: 1235
2001-11-09 23:49:42 +00:00
Vikram S. Adve 313a36f2d3 Use node->getOpCode() instead of node->getMachineInstr()->getOpCode().
Much nicer.

llvm-svn: 1223
2001-11-09 02:14:20 +00:00
Chris Lattner 2b48b9694c Add method decl
llvm-svn: 1217
2001-11-08 20:55:05 +00:00
Ruchira Sasanka dc709780aa corrected insertCode4Spilled ... bug.
llvm-svn: 1212
2001-11-08 19:11:30 +00:00
Ruchira Sasanka 19a5165c29 Uncommented LR spill code insertion
llvm-svn: 1207
2001-11-08 16:43:25 +00:00
Vikram S. Adve 621b90440b Major change to how defs are found when adding dependences (they
are now found as part of the initial walk of the machine code).
Also memory load/store instructions can be generated for non-memory
LLVM instructions, which wasn't handled before.  It is now.

llvm-svn: 1199
2001-11-08 05:20:23 +00:00
Vikram S. Adve 80310bba37 MachineCodeForMethod is now an annotation on class Method.
llvm-svn: 1198
2001-11-08 05:18:18 +00:00
Vikram S. Adve bdbb802c2f Added two minor methods.
llvm-svn: 1187
2001-11-08 04:49:52 +00:00
Vikram S. Adve d9f8598104 Removed class RegStackOffsets and used class MachineCodeForMethod
directly to manage stack frame.

llvm-svn: 1186
2001-11-08 04:48:50 +00:00
Vikram S. Adve c53037205b Major overhaul of stack frame management.
llvm-svn: 1185
2001-11-08 04:47:06 +00:00
Ruchira Sasanka 074d52d60d Fixed bug - added code in pushUnconstrainedIGNodes() to check whether a node
is already pushed to stack by a previous call to the same method.

llvm-svn: 1154
2001-11-06 15:25:38 +00:00
Vikram S. Adve 928833ecea Bug fix: uninitialized variable.
llvm-svn: 1147
2001-11-06 05:11:05 +00:00
Vikram S. Adve 596721384b Modified graph construction to use one pass to find all defs.
Avoids having to handle some special cases that cause complex interactions
with instr. selection.

llvm-svn: 1138
2001-11-05 04:04:23 +00:00
Vikram S. Adve 59a13288a6 Make reg. numbers signed ints.
llvm-svn: 1137
2001-11-05 03:56:02 +00:00
Chris Lattner 33d9cb9903 Minor method rename
llvm-svn: 1119
2001-11-04 08:08:34 +00:00
Ruchira Sasanka 471babe2d2 Added an assertion since it seems like AdjList returns an errornous size in method
IGNode::pushOnStack().

llvm-svn: 1116
2001-11-03 22:01:09 +00:00
Ruchira Sasanka 51fc1c2d72 Added support for correct spilling of %ccr
llvm-svn: 1112
2001-11-03 20:41:22 +00:00
Ruchira Sasanka ca632ed71a Arranged stack frame - needs furhter organization
llvm-svn: 1108
2001-11-03 17:14:44 +00:00
Ruchira Sasanka b7a397253f Arranged stack frame - needs furhter organization
Moved InsertCallerSaveInstr to the SparcRegInfo.cpp

llvm-svn: 1106
2001-11-03 17:13:27 +00:00
Vikram S. Adve 33ec4a3c23 Record constants that need to be emitted in the assembly code.
llvm-svn: 1010
2001-10-28 21:46:23 +00:00
Vikram S. Adve 979800ede8 Allow combinations of True/Anti/Output flags for each edge to
support, e.g., dependences on Call instructions.

llvm-svn: 1009
2001-10-28 21:45:02 +00:00
Vikram S. Adve df6913549a Add edges between call instructions and (a) load/store instructions, and
(b) any instructions that use or set CC registers.  Whether or not the
latter are needed really should be machine-dependent.

llvm-svn: 1008
2001-10-28 21:43:33 +00:00
Ruchira Sasanka 9c38dbc249 Added support for spilling
llvm-svn: 992
2001-10-28 18:15:12 +00:00
Ruchira Sasanka 321ed7be93 Added spill code support; moved insertCallerSaving to SparRegInfo since
we need to handle %ccr reg in a special way.

llvm-svn: 990
2001-10-28 18:12:02 +00:00
Ruchira Sasanka 33b0d85f65 added support to move "added instructions" after the delay slot
llvm-svn: 968
2001-10-23 21:38:42 +00:00
Ruchira Sasanka c300c6ba58 Added support to move "added instructions" after the delay slot
llvm-svn: 967
2001-10-23 21:38:00 +00:00
Vikram S. Adve 901da32e64 Use class MachineCodeForMethod to print machine code.
llvm-svn: 948
2001-10-22 13:52:03 +00:00
Vikram S. Adve cc80b02834 Added class MachineCodeForMethod.
llvm-svn: 947
2001-10-22 13:51:33 +00:00
Vikram S. Adve 3686293bd2 Cosmetic changes only.
llvm-svn: 946
2001-10-22 13:51:09 +00:00
Vikram S. Adve 9a6457388f Modify code that processes delay slots so that it preserves any
useful instructions already inserted into delay slots.

llvm-svn: 945
2001-10-22 13:49:27 +00:00
Ruchira Sasanka 24729a34ce Added support for both call/jmpl instructions
llvm-svn: 930
2001-10-21 16:43:41 +00:00
Ruchira Sasanka 53516cd05b Added code to support unusable Suggested Colors.
llvm-svn: 922
2001-10-19 21:42:06 +00:00
Ruchira Sasanka 01c55ba00c Added code to PhyRegAlloc to mark unusable suggested regs
Added initialization to AdjList to IGNode constructor - major bug fix

llvm-svn: 920
2001-10-19 21:39:31 +00:00
Ruchira Sasanka 6275a04aac Changed Call interference info
llvm-svn: 917
2001-10-19 17:21:59 +00:00
Ruchira Sasanka 09d7a2a496 Corrected call interference bug
llvm-svn: 916
2001-10-19 17:21:03 +00:00
Ruchira Sasanka 6b1d2691c6 no major change
llvm-svn: 914
2001-10-18 23:58:08 +00:00
Ruchira Sasanka 59e864eb92 Added implict operand printing for operator( ostream, MachineInstr&)
llvm-svn: 912
2001-10-18 22:40:02 +00:00
Ruchira Sasanka 0a2990a7c6 removed some debug messages
llvm-svn: 910
2001-10-18 22:36:26 +00:00
Vikram S. Adve 6d19dc9080 1. Add a bottom-up pass on BURG trees that is used to fix constant operands.
Needs to be bottom up because constant values may be forward-substituted
   to their uses (i.e., into the parent in the BURG tree).
2. Move most of the constant-fixup code into machine-indepedent file
   InstrSelectionSupport.cpp.

llvm-svn: 859
2001-10-17 23:57:50 +00:00
Vikram S. Adve ad97e4ed84 Separate VM instruction that generates the instructions that compute a value
from the value itself (the one causing an edge) because the latter may be
a temporary used within the instruction sequence for the VM instruction.

llvm-svn: 858
2001-10-17 23:55:16 +00:00
Vikram S. Adve 59cbb6498c *** empty log message ***
llvm-svn: 857
2001-10-17 23:53:16 +00:00
Ruchira Sasanka 7d23a2bee9 changed debugg message printing - no change to useful code
llvm-svn: 850
2001-10-16 16:34:44 +00:00
Ruchira Sasanka 3d878424d2 No major change - commented some debug code
llvm-svn: 849
2001-10-16 01:33:55 +00:00
Ruchira Sasanka 5b8971f418 Added support for caller saving
llvm-svn: 847
2001-10-16 01:23:19 +00:00
Chris Lattner 24872c8838 Print Debug Code to stderr instead of stdout so that it doesn't mess up the assembly output
llvm-svn: 841
2001-10-15 18:30:06 +00:00
Chris Lattner f3f1e452ea Output to cerr rather than cout so that debug info doesn't mess up assembly generation
llvm-svn: 840
2001-10-15 18:15:27 +00:00
Ruchira Sasanka 2a6cc8300d updated suggesting/coloring of call & return args & implicit operands.
Changed added instr to a deque (from a vector)

llvm-svn: 831
2001-10-15 16:26:38 +00:00
Ruchira Sasanka 33535773cb fixed a coalscing bug
llvm-svn: 828
2001-10-15 16:22:44 +00:00
Chris Lattner 2b3369567e * Fix privacy issues on RegToRefVecMap
* Fix initialization order problems...

llvm-svn: 762
2001-10-13 06:51:01 +00:00
Ruchira Sasanka 7c10e086eb --corrected coalescing test: coalsed only if two are of the same reg class
llvm-svn: 729
2001-10-12 17:48:18 +00:00
Vikram S. Adve 1235b330f7 Add graph edges due to implicit refs in each machine instruction.
llvm-svn: 724
2001-10-11 04:22:45 +00:00
Vikram S. Adve d50b665acf Don't insert useful instructions in delay slot of a RETURN.
llvm-svn: 721
2001-10-10 20:58:11 +00:00
Vikram S. Adve 192686db96 Machine-independent code generation routines used in instruction
selection.  These used to live in several different places before.

llvm-svn: 719
2001-10-10 20:50:43 +00:00
Vikram S. Adve c36a504cfe Moved code generation support routines to InstrSelectionSupport.cpp.
llvm-svn: 717
2001-10-10 20:49:07 +00:00
Chris Lattner da55810666 Commit more code over to new cast style
llvm-svn: 697
2001-10-02 03:41:24 +00:00
Chris Lattner 3856934386 Convert more code to use new style casts
Eliminate old style casts from value.h

llvm-svn: 696
2001-10-01 20:11:19 +00:00
Chris Lattner 4b717c0edc Add support for new style casts
llvm-svn: 694
2001-10-01 16:18:37 +00:00
Ruchira Sasanka acffb966b9 removing phy regaloc - incorrect file
llvm-svn: 682
2001-09-30 23:52:14 +00:00
Vikram S. Adve 813ffcc4f6 Change ! ( ...== ...) to !=.
llvm-svn: 680
2001-09-30 23:45:08 +00:00
Vikram S. Adve e44abbb99d Improved dump for disp type operand.
llvm-svn: 679
2001-09-30 23:44:19 +00:00
Vikram S. Adve 819635eb7c Bug fixes:
(1) Ensure that delay slot instructions are not moved out of place (this
    was happening for some CALL instructions).  Basically, we need to
    move all delay slot instructions out of the graph and handle them
    along with the delayed control transfer instruction.
(2) Mark scheduled instructions correctly when instructions are scheduled
    in more than one cycle in a single step (due to delay slots).

llvm-svn: 678
2001-09-30 23:43:34 +00:00
Vikram S. Adve f734fc2af7 Minor changes for bug fixes in SchedGraph.cpp.
llvm-svn: 677
2001-09-30 23:37:26 +00:00
Vikram S. Adve 2b2ca42761 Two bug fixes:
(1) Add edges for Values that are written by multiple m/c instructions
(2) Add edges for LLVM operands that are not machine operands (e.g., Call args)

llvm-svn: 676
2001-09-30 23:36:58 +00:00
Ruchira Sasanka 560b0ad482 added suggesting color support
llvm-svn: 673
2001-09-30 23:19:57 +00:00
Ruchira Sasanka e3b9faddad --added suggesting colors; call/ret arg handling
llvm-svn: 670
2001-09-30 23:11:59 +00:00
Chris Lattner bb09a10929 Pull iterators out of CFG.h and CFGdecls and put them in Support directory
llvm-svn: 664
2001-09-28 22:56:31 +00:00
Ruchira Sasanka 72727bf358 -- removed debugging messages
llvm-svn: 651
2001-09-19 22:39:58 +00:00
Ruchira Sasanka 213b3621ac -fixed return value bug.
llvm-svn: 650
2001-09-19 22:31:21 +00:00
Chris Lattner da876eff3c Change debug info from #define to command line option
Clean up extra debug info that wasn't guarded

llvm-svn: 647
2001-09-19 16:26:23 +00:00
Chris Lattner d89425bb58 Change debug info from #define to command line option
llvm-svn: 646
2001-09-19 16:26:10 +00:00
Chris Lattner 1bec3bd0a4 * REMOVE extraneous debug info if DEBUG_RA is not set
* Spell PhyRegAlloc right.

llvm-svn: 645
2001-09-19 16:09:04 +00:00
Ruchira Sasanka 219f777bad *** empty log message ***
llvm-svn: 634
2001-09-18 22:57:47 +00:00