Chris Lattner
064dd4ef95
Rename createSimpleX86RegisterAllocator to createSimpleRegisterAllocator.
...
Remvoe some dead code
llvm-svn: 5070
2002-12-16 14:37:00 +00:00
Chris Lattner
93b0272717
Some simpliciations to the spill/reload interface
...
llvm-svn: 5067
2002-12-15 23:01:26 +00:00
Chris Lattner
6a2d7bef14
Simplify PHI node elimination significantly by doing it as a prepass to
...
register allocation
llvm-svn: 5066
2002-12-15 22:39:53 +00:00
Chris Lattner
ebb82f7f96
Variety of small or trivial simplifications to the code, completely eliminated
...
the dependence on PhysRegClassMap
llvm-svn: 5064
2002-12-15 22:19:19 +00:00
Chris Lattner
370918a2db
Remove unused savePhysRegToStack method
...
llvm-svn: 5061
2002-12-15 21:33:51 +00:00
Chris Lattner
35ceaa7322
Localize a map, remove another
...
llvm-svn: 5060
2002-12-15 21:24:30 +00:00
Chris Lattner
f499e065be
Give simple reg allocator a nice Pass Name
...
llvm-svn: 5058
2002-12-15 21:13:12 +00:00
Chris Lattner
da3e75b117
Add a big assert making sure 2 address instructions are formed right
...
llvm-svn: 5057
2002-12-15 21:02:20 +00:00
Chris Lattner
e8acf72d80
Fix a problem that occurs when PHI nodes have multiple entries for the same predecessor
...
llvm-svn: 5055
2002-12-15 20:48:03 +00:00
Chris Lattner
234abaea18
Grab bag of minor cleanups. Export some statistics about the number of
...
spills and reloads emitted
llvm-svn: 5054
2002-12-15 20:36:09 +00:00
Chris Lattner
dd307412c4
Implement printing of MBB arguments
...
llvm-svn: 5053
2002-12-15 20:35:25 +00:00
Chris Lattner
4214ac384a
Simplify interfaces used by regalloc to insert code
...
llvm-svn: 5052
2002-12-15 20:06:35 +00:00
Chris Lattner
351dc9af16
* Simplify code a bit by breaking the PHI node handling stuff out into a seperate
...
function from normal regalloc code
* Make the regalloc for a block a function instead of part of runOnMachineBB, which
makes it easier to see what's going on in runOnMBB.
llvm-svn: 5051
2002-12-15 19:51:14 +00:00
Chris Lattner
6c5c2a58ee
* Remove some unneccesary instance variables
...
* Make allocateStackSpaceFor only allocate the right amount of space
llvm-svn: 5048
2002-12-15 19:07:34 +00:00
Chris Lattner
c43cb38245
pull inverse reg class mapping into a class that is sharable and out of the
...
target register description classes.
llvm-svn: 5045
2002-12-15 18:38:59 +00:00
Chris Lattner
2c20e950be
Prune #includes
...
llvm-svn: 5044
2002-12-15 18:19:24 +00:00
Chris Lattner
aab9196e79
Remove extraneous #includes, perform FIXME
...
llvm-svn: 5043
2002-12-15 18:15:24 +00:00
Chris Lattner
41ad5c9aff
Fix borkness with not using MachineBasicBlocks in PHI nodes
...
llvm-svn: 5035
2002-12-15 08:02:51 +00:00
Misha Brukman
de680081ab
Fixed a bug where moves due to phis were being neglected.
...
llvm-svn: 5019
2002-12-13 12:33:31 +00:00
Misha Brukman
1f57df5fad
Need to insert all moves due to PHI nodes before *ALL* jumps in a predecessor
...
basic block, as there could be multiple.
llvm-svn: 5016
2002-12-13 11:55:59 +00:00
Misha Brukman
0bfbbc73f2
This should be more correct: invalidates physical registers that are used in
...
an instruction to avoid using them to allocate to other virtual registers.
llvm-svn: 5013
2002-12-13 11:33:22 +00:00
Misha Brukman
e694e406a4
Fixed bug with running out of registers. Also, reinstated namespace which
...
disappeared during the last checkin.
llvm-svn: 5007
2002-12-13 10:42:31 +00:00
Misha Brukman
af40b6adcd
This should handle register allocating PHI nodes.
...
llvm-svn: 5002
2002-12-13 09:54:36 +00:00
Misha Brukman
e5a8dcc695
Start allocating stack space at [ebp-4] to not overwrite the return address.
...
Also make all loads & stores 4-byte aligned for performance. ;)
llvm-svn: 4982
2002-12-13 04:34:02 +00:00
Misha Brukman
12bec4ecef
Take advantage of our knowledge of 2-address X86 instructions and
...
register-allocated them appropriately.
llvm-svn: 4976
2002-12-12 23:20:31 +00:00
Misha Brukman
8f56246d62
Added code generation for function prologues and epilogues.
...
llvm-svn: 4930
2002-12-04 23:58:08 +00:00
Misha Brukman
566bac5ec1
Fun arithmetic with iterators aimed at fixing a bug: inserting instructions
...
after the *current* instruction while keeping the iterator in the same
'logical' place.
llvm-svn: 4923
2002-12-04 19:24:45 +00:00
Chris Lattner
994984de43
Print out direct global references
...
llvm-svn: 4906
2002-12-04 06:44:41 +00:00
Misha Brukman
f13126a427
This should fix the bug seen with some registers not being allocated
...
correctly: skipping instructions by incorrectly incrementing the pointer.
Also adds support for building a reg-to-regclass map, and splits the function
for saving register to stack into two, one suitable for virtual registers
(which also assigns it a physical register) and one for simply storing back
physical registers.
llvm-svn: 4898
2002-12-03 23:15:19 +00:00
Chris Lattner
47478b4dce
Checkin debug implementation of MCE
...
llvm-svn: 4893
2002-12-03 20:56:42 +00:00
Misha Brukman
f776547336
* Abstracted out stack space allocation into its own function
...
* Added saving of register values to the stack
llvm-svn: 4858
2002-12-02 21:11:58 +00:00
Misha Brukman
021bf57248
A simple (spilling) register allocator.
...
llvm-svn: 4828
2002-11-22 22:44:32 +00:00
Misha Brukman
2bf32bfea1
Initialize the SSARegMap.
...
llvm-svn: 4782
2002-11-20 18:55:27 +00:00
Chris Lattner
3afc487fba
Print is const!
...
llvm-svn: 4737
2002-11-17 23:22:13 +00:00
Chris Lattner
8ac4eea84b
Remove only uses of markDef/markDefAndUse methods
...
llvm-svn: 4719
2002-11-17 22:14:08 +00:00
Chris Lattner
0141841bc4
Fix warning
...
llvm-svn: 4649
2002-11-09 00:49:43 +00:00
Chris Lattner
0478222ec2
Move function to cpp file from header
...
llvm-svn: 4510
2002-11-02 22:07:51 +00:00
Chris Lattner
4b8d170d55
New iostream definitions
...
llvm-svn: 4482
2002-11-01 16:46:05 +00:00
Vikram S. Adve
8ecd939ce9
Restore support for indirect function calls (which briefly wasn't working
...
after I removed annotations on MachineInstr for the CallDescriptor).
llvm-svn: 4469
2002-10-31 15:34:48 +00:00
Chris Lattner
8fa0840abd
Remove fixme
...
llvm-svn: 4447
2002-10-30 02:02:37 +00:00
Chris Lattner
98e6bad1ee
Add special code to make printing SSA form machine instructions nicer
...
llvm-svn: 4446
2002-10-30 01:55:38 +00:00
Chris Lattner
8dfb0ef7b0
Use MRegisterInfo, if available, to print symbolic register names
...
llvm-svn: 4438
2002-10-30 00:58:19 +00:00
Chris Lattner
2cfa08e4bf
Implement structured machine code printing
...
llvm-svn: 4435
2002-10-30 00:48:05 +00:00
Chris Lattner
e89cb8ba64
Make argsize calculation stuff optional, so that Targets without FrameInfo
...
objects yet don't die
llvm-svn: 4427
2002-10-29 23:40:03 +00:00
Chris Lattner
64fa3f3e97
Implement autoinserting ctor
...
llvm-svn: 4426
2002-10-29 23:19:00 +00:00
Chris Lattner
de3938a592
Rename annotation id
...
llvm-svn: 4425
2002-10-29 23:18:43 +00:00
Chris Lattner
fc88414ffd
Merge with sparc backend
...
llvm-svn: 4403
2002-10-29 20:10:58 +00:00
Chris Lattner
0ac25d509c
X86 merge is complete, eliminate unused code
...
llvm-svn: 4400
2002-10-29 20:07:16 +00:00
Vikram S. Adve
4acb69b4ea
Remove separate vector of implicit refs from MachineInstr, and
...
instead record them as extra operands in the operands[] vector.
Also, move CallArgsDescriptor into this class instead of making it an
annotation on the machine instruction.
llvm-svn: 4399
2002-10-29 19:41:18 +00:00
Vikram S. Adve
1730a958ea
Move CallArgsDescriptor into this class instead of making it an
...
annotation on the machine instruction.
llvm-svn: 4398
2002-10-29 19:38:46 +00:00
Chris Lattner
b49e35e745
Move TargetInstrDescriptors extern to the one .cpp file that refers to it:
...
MachineInstr.cpp
llvm-svn: 4392
2002-10-29 17:40:30 +00:00
Chris Lattner
fa303f1bb7
Use higher level methods, don't use TargetInstrDescriptors directly!
...
llvm-svn: 4389
2002-10-29 17:35:39 +00:00
Chris Lattner
c3e30fed7b
Use higher level method
...
llvm-svn: 4386
2002-10-29 17:25:41 +00:00
Chris Lattner
80c0746b11
Remove #include, misleading comment, and a typedef used only once
...
llvm-svn: 4383
2002-10-29 17:08:05 +00:00
Chris Lattner
8ae0be7897
Inline typedef, eliminate unused method
...
llvm-svn: 4382
2002-10-29 17:03:19 +00:00
Chris Lattner
8ab1906b5f
Remove long dead #if 0
...
llvm-svn: 4381
2002-10-29 17:00:19 +00:00
Chris Lattner
9739fc7ff1
Add #includes that were eliminated from headers
...
llvm-svn: 4380
2002-10-29 16:51:05 +00:00
Chris Lattner
0493b81eef
De-inline methods
...
llvm-svn: 4379
2002-10-29 16:50:33 +00:00
Chris Lattner
6c092a9ea7
Remove #include
...
llvm-svn: 4378
2002-10-29 16:50:20 +00:00
Chris Lattner
4aba455989
Remove unneeded #include
...
llvm-svn: 4377
2002-10-29 16:50:06 +00:00
Chris Lattner
f658cf4988
Remove forward decl
...
llvm-svn: 4376
2002-10-29 16:49:44 +00:00
Chris Lattner
0cff6f7e16
Make assertIGNode be private to the InterferenceGraph.cpp file
...
llvm-svn: 4375
2002-10-29 16:42:34 +00:00
Chris Lattner
7d6709e213
MachineInstrInfo no longer #includes this header, so we must
...
llvm-svn: 4366
2002-10-28 23:54:47 +00:00
Chris Lattner
566b2147f9
Remove all traces of the "Opcode Mask" field in the MachineInstr class
...
llvm-svn: 4359
2002-10-28 21:17:20 +00:00
Chris Lattner
11f52470a0
Remove more default arguments that are never used
...
llvm-svn: 4358
2002-10-28 21:02:40 +00:00
Chris Lattner
990e074c2e
Remove default operands that are never used
...
llvm-svn: 4357
2002-10-28 20:59:49 +00:00
Chris Lattner
de6ac9b0ff
* Make MachineOperand ctors private, so MachineOperand can only be created
...
by MachineInstr.
* Add a bunch of new methods to allow incremental addition of operands to the
machine instr instance.
llvm-svn: 4356
2002-10-28 20:48:39 +00:00
Misha Brukman
f9d06cfc80
Replaced uses of deprecated `MachineFunction::get(BasicBlock *BB)'.
...
llvm-svn: 4351
2002-10-28 20:00:31 +00:00
Chris Lattner
74f9160190
Remove two arguments that are never specified
...
llvm-svn: 4348
2002-10-28 19:46:59 +00:00
Chris Lattner
4b652d5505
Rename some regalloc fields
...
llvm-svn: 4346
2002-10-28 19:43:23 +00:00
Chris Lattner
bd1add2005
Eliminate usage of MachineBasicBlock::get
...
llvm-svn: 4344
2002-10-28 19:22:04 +00:00
Chris Lattner
fdca057f8d
Remove usage of MachineBasicBlock::get
...
llvm-svn: 4342
2002-10-28 19:01:16 +00:00
Chris Lattner
a7ca1bd65c
Remove usage of MachineBasicBlock::get
...
llvm-svn: 4341
2002-10-28 18:50:08 +00:00
Chris Lattner
2263f89d3b
Eliminate unneccesary use of MachineBasicBlock::get
...
llvm-svn: 4339
2002-10-28 06:01:57 +00:00
Chris Lattner
f2cd0a8266
s/method/function
...
llvm-svn: 4338
2002-10-28 05:58:46 +00:00
Chris Lattner
7cdc2977f0
Change MachineBasicBlock's to not be Annotations, instead they are kept as
...
part of a linked list tracked by MachineFunction. MachineBasicBlock::get
is now linear time instead of constant time, and thus is deprecated!
llvm-svn: 4337
2002-10-28 05:30:46 +00:00
Chris Lattner
89a424167f
Make Scheduling Class variables be 'unsigned' instead of 'int'
...
llvm-svn: 4333
2002-10-28 04:53:02 +00:00
Chris Lattner
e309cdbc95
Rename the redundant MachineOperand::getOperandType() to MachineOperand::getType()
...
llvm-svn: 4331
2002-10-28 04:45:29 +00:00
Chris Lattner
7000bbb63f
Fairly major overhaul of MachineInstr & Operand classes
...
- Inline methods that are mostly a single line anyway
- Eliminate several methods that were never called
- Group methods a bit more consistently
llvm-svn: 4329
2002-10-28 04:24:49 +00:00
Chris Lattner
dd22b9e8b6
Add #includes now that MachineInstr.h doesn't include llvm/Target/MachineInstrInfo.h
...
llvm-svn: 4327
2002-10-28 02:28:39 +00:00
Chris Lattner
a7e9d3e90f
Don't #include <Support/*>, #include "Support/*"
...
llvm-svn: 4325
2002-10-28 02:11:53 +00:00
Chris Lattner
df1d87f5f3
*** empty log message ***
...
llvm-svn: 4323
2002-10-28 02:01:37 +00:00
Chris Lattner
6b66fadf2c
MachineFunction now includes MachineBasicBlock so there is no need to
...
reinclude it
llvm-svn: 4322
2002-10-28 02:01:35 +00:00
Chris Lattner
b8c6acfbc0
Rename MachineCodeForBasicBlock to MachineBasicBlock
...
llvm-svn: 4318
2002-10-28 01:41:47 +00:00
Chris Lattner
ef1475aa32
*** empty log message ***
...
llvm-svn: 4317
2002-10-28 01:41:27 +00:00
Chris Lattner
4f2c612b21
Inline some methods from .cpp files into .h files, minor cleanups
...
llvm-svn: 4313
2002-10-28 01:21:55 +00:00
Chris Lattner
61e42343e5
Minor cleanups
...
llvm-svn: 4312
2002-10-28 01:16:38 +00:00
Chris Lattner
33b00d8186
Move machine code generation/destruction passes out of Sparc.cpp because
...
they are generic
llvm-svn: 4310
2002-10-28 01:12:41 +00:00
Chris Lattner
ce3ede5938
Prune #includes
...
llvm-svn: 4307
2002-10-28 01:02:51 +00:00
Chris Lattner
ffa0482331
Updates to match misha's changes
...
llvm-svn: 4302
2002-10-28 00:37:53 +00:00
Misha Brukman
142795fd17
Changed MachineCodeForMethod' to
MachineFunction'.
...
llvm-svn: 4301
2002-10-28 00:28:31 +00:00
Chris Lattner
a952881e00
Initial checkin of codegen infrastructure for LLVM-JIT
...
llvm-svn: 4282
2002-10-25 22:54:41 +00:00
Chris Lattner
47508d5c0f
Tell PassManager that this pass does not invalidate the CFG so that dominator
...
information and Loop info will not have to be recomputed after this runs.
llvm-svn: 4269
2002-10-23 03:30:47 +00:00
Chris Lattner
b8ffbe6966
Ensure definate initialization
...
llvm-svn: 4263
2002-10-22 23:34:11 +00:00
Chris Lattner
dfc8fbf16b
- Two minor improvements to the MachineInstr class to reduce footprint and
...
overhead: Merge 3 parallel vectors into 1, change regsUsed hash_set to be a
bitvector. Sped up LLC a little less than 10% in a debug build!
llvm-svn: 4261
2002-10-22 23:16:21 +00:00
Vikram S. Adve
3a54b695ce
Significant improvement: GEP used by a load or store no longer generates
...
a separate ADD; instead just use the indexed load/store instruction!
Also, a bug fix: folding a GEP with a leading non-zero index with
its predecessor was incorrect: now it only happens if the predecessor
is pointing to an indexable type (aka SequentialType).
llvm-svn: 4168
2002-10-14 16:30:55 +00:00
Vikram S. Adve
e18a54c249
Use vectors instead of hash_maps for issueGaps and conflictLists.
...
These hash lookups were a major sink of time because they happen so often!
Also, add option to disable scheduling.
llvm-svn: 4138
2002-10-13 00:40:37 +00:00
Vikram S. Adve
211f972d28
Major bug fix: was not adding CD edges for RETURNs!
...
llvm-svn: 4137
2002-10-13 00:39:22 +00:00
Vikram S. Adve
be4905b56a
Major bug fix: spill code for an instruction in a delay slot was
...
merrily being inserted before/after the instruction!
llvm-svn: 4116
2002-10-11 16:12:40 +00:00
Vikram S. Adve
f19f08c3ab
Don't pad variables in stack slots for performance!
...
llvm-svn: 4115
2002-10-11 16:10:53 +00:00
Vikram S. Adve
01e64b5eef
Bug fix in folding getElementPtr instructions: don't fold one into
...
a predecessor if it has a non-zero first index and the predecessor
ends with a struct index.
llvm-svn: 3982
2002-09-29 22:55:05 +00:00
Vikram S. Adve
69d19cf9a9
Convert DIRS to PARALLEL_DIRS. They can be built independently.
...
llvm-svn: 3972
2002-09-29 11:52:14 +00:00
Vikram S. Adve
59778ef96d
Added a couple of helper methods for live range construction.
...
llvm-svn: 3970
2002-09-28 17:05:43 +00:00
Vikram S. Adve
2710051771
Live ranges for Return value and return address of a Call are now
...
created here, simply by handling all implicit operands (which should
have been done anyway).
llvm-svn: 3969
2002-09-28 17:05:22 +00:00
Vikram S. Adve
7e39b876eb
Fixed method getReturnValue(): it should return NULL if the
...
callee does not return a value.
llvm-svn: 3968
2002-09-28 17:03:54 +00:00
Vikram S. Adve
7c0175962a
Fixed incorrect assertion: spill code for function ptr should be
...
handled like normal operands, not like other call arguments.
llvm-svn: 3967
2002-09-28 17:02:40 +00:00
Vikram S. Adve
c795b90eac
Sign-extend integer constants from original type size to 64 bits!
...
llvm-svn: 3958
2002-09-27 14:26:20 +00:00
Vikram S. Adve
07a33b5553
Add method IGNode::getCombinedDegree to count the sum of the degrees
...
of two nodes, excluding duplicates.
llvm-svn: 3848
2002-09-20 00:55:04 +00:00
Vikram S. Adve
1d139cf8de
Add PostOpts/ and rename PreSelection/ to PreOpts/.
...
llvm-svn: 3847
2002-09-20 00:53:53 +00:00
Vikram S. Adve
47303cde2d
Add method MachineInstr::replace to rewrite a machine instruction in place.
...
llvm-svn: 3843
2002-09-20 00:47:49 +00:00
Vikram S. Adve
ccb33335a3
Allow copy coalescing in more cases: if sum of node degrees is more than
...
than #available regs, compute the sum excluding duplicates and if that
is less than #regs, go ahead and coalesce.
Add method IGNode::getCombinedDegree to count excluding duplicates.
llvm-svn: 3842
2002-09-20 00:45:47 +00:00
Vikram S. Adve
82b15d7253
Peephole optimization pass on final machine code.
...
llvm-svn: 3840
2002-09-20 00:42:11 +00:00
Vikram S. Adve
8dc14ec198
Files moved to CodeGen/PreOpts.
...
llvm-svn: 3839
2002-09-20 00:30:46 +00:00
Vikram S. Adve
6f0ad9998b
Moving these files from Code/PreSelection to here.
...
Original logs for PreSelection.cpp:
revision 1.2
date: 2002/09/17 23:50:32; author: lattner; state: Exp; lines: +1 -3
Don't put default parameter values into .cpp files, it breaks 3.x compilers
revision 1.1
date: 2002/09/16 15:31:13; author: vadve; state: Exp;
New preselection pass that specializes LLVM code for a target machine,
while remaining in legal portable LLVM form and preserving type
information and type safety.
llvm-svn: 3838
2002-09-20 00:29:28 +00:00
Chris Lattner
86e6e0f6e3
Don't put default parameter values into .cpp files, it breaks 3.x compilers
...
llvm-svn: 3799
2002-09-17 23:50:32 +00:00
Chris Lattner
7c1b7e5889
Add support for GCC 2.96
...
llvm-svn: 3777
2002-09-17 17:23:09 +00:00
Vikram S. Adve
04cace44d8
Add subdirectory PreSelection.
...
llvm-svn: 3739
2002-09-16 15:32:07 +00:00
Vikram S. Adve
a5b251ed67
New preselection pass that specializes LLVM code for a target machine,
...
while remaining in legal portable LLVM form and preserving type
information and type safety.
llvm-svn: 3738
2002-09-16 15:31:13 +00:00
Vikram S. Adve
3d9c3e8751
Dump routine now writes out allocated register numbers if available.
...
llvm-svn: 3737
2002-09-16 15:18:53 +00:00
Vikram S. Adve
df1e95af82
Improve and fix error in allocating stack slots: adjust alignment after adding
...
base address of the relevant region (instead of assuming that each region
is maximally aligned).
llvm-svn: 3736
2002-09-16 15:18:16 +00:00
Vikram S. Adve
533c888d4a
Add a version of ChooseRegOrImmed to handle numerical constants
...
introduced by InstrSelection.
llvm-svn: 3735
2002-09-16 15:15:57 +00:00
Vikram S. Adve
74823d9145
Add an assertion.
...
llvm-svn: 3734
2002-09-16 15:13:59 +00:00
Vikram S. Adve
69cf056052
Fix typos in previous checkin.
...
llvm-svn: 3726
2002-09-15 15:33:48 +00:00
Chris Lattner
db2c0b75ab
RegAllocCommon no longer includes CommandLine.h so we have to include it
...
here.
llvm-svn: 3725
2002-09-15 07:07:55 +00:00
Vikram S. Adve
2ebafaf8ff
Break RA_DEBUG option into several levels to get better control over
...
debug output.
llvm-svn: 3724
2002-09-14 23:05:33 +00:00
Vikram S. Adve
8d2a9260ef
Remove unnecessary include.
...
llvm-svn: 3723
2002-09-14 23:04:52 +00:00
Vikram S. Adve
263de0387d
Break RA_DEBUG option into several levels to get better output.
...
llvm-svn: 3722
2002-09-14 22:18:37 +00:00
Vikram S. Adve
7cad54b354
Moving to lib/CodeGen/RegAlloc.
...
llvm-svn: 3718
2002-09-14 11:57:17 +00:00
Chris Lattner
23bd92aeeb
Fix a bug I introduced into the code generator. :(
...
llvm-svn: 3694
2002-09-12 20:27:10 +00:00
Chris Lattner
18e3c4ff50
- Change getelementptr instruction to use long indexes instead of uint
...
indexes for sequential types.
llvm-svn: 3681
2002-09-11 01:21:29 +00:00
Chris Lattner
22bcab6bd5
Make sure the leakdetector is told about temporary Phi nodes also, so it doesn't
...
erroneously report them as leaks
llvm-svn: 3624
2002-09-08 21:19:29 +00:00
Chris Lattner
1c2e1ebb5c
Inform the memory leak detector that TmpInstruction objects should not be
...
subject to memory leak checking.
llvm-svn: 3623
2002-09-08 21:08:43 +00:00
Chris Lattner
3ce5b343c5
- Renamed Type::isIntegral() to Type::isInteger()
...
- Added new method Type::isIntegral() that is the same as isInteger, but
also accepts bool.
llvm-svn: 3574
2002-09-03 01:08:28 +00:00
Anand Shukla
9a0d43e242
moved this file from lib/Reoptimizer/Mapping
...
llvm-svn: 3519
2002-08-27 22:47:33 +00:00
Anand Shukla
687dea3dcf
Makefile for new sub directory
...
llvm-svn: 3518
2002-08-27 22:46:38 +00:00
Anand Shukla
5bb28c7358
Added Mapping subdir
...
llvm-svn: 3517
2002-08-27 22:45:49 +00:00
Vikram S. Adve
b8a0f00662
Use newly-added type inspection support in InstTreeNode subclasses.
...
llvm-svn: 3501
2002-08-24 21:02:09 +00:00
Vikram S. Adve
3190395e10
Moved code here to extract memory instruction indices and to check
...
whether FoldGetElemNodes should be called. This is machine-independent
but was in the Sparc directory. This is in a new function: GetMemInstArgs.
llvm-svn: 3500
2002-08-24 21:00:08 +00:00
Anand Shukla
656de9732b
Added #include <alloca.h>
...
llvm-svn: 3491
2002-08-23 10:54:26 +00:00
Chris Lattner
20b85d96e4
Eliminated the MemAccessInst class, folding contents into GEP class.
...
llvm-svn: 3487
2002-08-22 23:37:20 +00:00
Vikram S. Adve
0672c43566
dumpNode() does not need to print MachineInstrs.
...
llvm-svn: 3444
2002-08-22 02:59:46 +00:00
Vikram S. Adve
21b0deb4ab
Unary Not (boolean and bitwise) is no longer a separate LLVM instruction
...
but is instead implemented with XOR. Note that the InstrForest opLabels
for Not and BNot remain the same, i.e., the XOR is recognized and
represented as a (boolean or bitwise) Not when building the instruction
trees. But these tree nodes are now binary, not unary.
llvm-svn: 3343
2002-08-15 14:19:22 +00:00
Vikram S. Adve
87928f2098
Add method MachineInstr::substituteValue() which substitutes
...
one Value with another one in all operands and implicit references
of the machine instruction.
llvm-svn: 3306
2002-08-14 16:52:58 +00:00
Chris Lattner
8a4787495a
* Removed extraneous #includes
...
* Fixed file headers to be consistent with the rest of LLVM
* Other minor fixes
llvm-svn: 3278
2002-08-09 20:08:06 +00:00
Chris Lattner
4d9fadc44a
* Removed extraneous #includes
...
* Fixed file headers to be consistent with the rest of LLVM
* Other minor fixes
llvm-svn: 3277
2002-08-09 20:08:03 +00:00
Chris Lattner
c95ce32146
We are using std::vector, so remove extraneous namespace prefixes
...
llvm-svn: 3275
2002-08-09 20:05:34 +00:00
Chris Lattner
12af061d07
Very minor cleanups
...
llvm-svn: 3271
2002-08-09 18:55:18 +00:00
Chris Lattner
a21e315db4
- 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
91d4742562
- 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
3489677a7e
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
44a988ebf2
* 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
17bb18af72
Remove unused vector
...
llvm-svn: 3143
2002-07-30 02:52:40 +00:00
Chris Lattner
9da0755dd0
Refix stuff for GCC 2.95, 3.0.4 & 3.1
...
llvm-svn: 3094
2002-07-25 18:04:48 +00:00
Mehwish Nagda
4968d78ef0
now removes deleted nops from MachineCodeForInstruction
...
llvm-svn: 3090
2002-07-25 17:31:05 +00:00
Chris Lattner
05fe67c0d2
*** empty log message ***
...
llvm-svn: 3075
2002-07-25 06:17:51 +00:00
Chris Lattner
5d262d3846
*** empty log message ***
...
llvm-svn: 3058
2002-07-24 21:21:33 +00:00
Chris Lattner
ad8fc4ba3e
Non-standard hash classes are not in the std:: namespace
...
llvm-svn: 3057
2002-07-24 21:21:33 +00:00
Chris Lattner
9860e64083
*** empty log message ***
...
llvm-svn: 3056
2002-07-24 21:21:32 +00:00
Mehwish Nagda
7311aa4f84
moving to the Reoptimizer/Mapping dir
...
llvm-svn: 2993
2002-07-22 22:10:55 +00:00
Chris Lattner
99ad379582
*** empty log message ***
...
llvm-svn: 2985
2002-07-22 02:10:13 +00:00
Mehwish Nagda
78d892eb4f
changed size computation
...
llvm-svn: 2974
2002-07-19 22:54:08 +00:00
Mehwish Nagda
219eac01f4
added check for Function with 0 BB
...
llvm-svn: 2942
2002-07-17 23:40:33 +00:00
Mehwish Nagda
01b0cf5ea1
Now will profile all Basic Blocks
...
llvm-svn: 2922
2002-07-16 17:48:27 +00:00
Mehwish Nagda
b73d836e54
Initial checking : Writes LLVM - MI mappiing to the .s file
...
llvm-svn: 2911
2002-07-15 23:08:49 +00:00
Anand Shukla
d70cde528d
added std:: to endl
...
llvm-svn: 2875
2002-07-11 00:17:17 +00:00
Vikram S. Adve
cd544ed252
Fix print of BB name in dump().
...
llvm-svn: 2861
2002-07-10 21:45:30 +00:00
Vikram S. Adve
62f569e4ea
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
33b491bba2
changed mem_fun to std::mem_fun
...
llvm-svn: 2847
2002-07-09 19:18:56 +00:00
Vikram S. Adve
0b32273208
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
a8c7633d5b
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
3e8b72f0e3
Rename static struct Initializer to avoid name conflict with BB.
...
llvm-svn: 2831
2002-07-08 23:04:31 +00:00
Vikram S. Adve
25d81936d2
Fix printing of BB in dump.
...
llvm-svn: 2830
2002-07-08 23:03:54 +00:00
Vikram S. Adve
f6d73e9711
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
5b4c4a9326
MachineInstr::dump() now takes no arguments.
...
llvm-svn: 2828
2002-07-08 23:01:46 +00:00
Vikram S. Adve
a2381d3998
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
4efbb9c931
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
58b597078f
getUsableUniRegAtMI interface simplified slightly.
...
llvm-svn: 2822
2002-07-08 22:39:36 +00:00
Vikram S. Adve
a110ccca19
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
d82933c6c8
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
5339840831
Remove tag that just clutters diffs
...
llvm-svn: 2807
2002-06-30 16:08:25 +00:00
Anand Shukla
ee7ed50bb4
changes to make it compatible with 64bit gcc
...
llvm-svn: 2791
2002-06-25 20:55:50 +00:00
Chris Lattner
dfd421a7df
MEGAPATCH checkin.
...
For details, See: docs/2002-06-25-MegaPatchInfo.txt
llvm-svn: 2779
2002-06-25 16:13:24 +00:00
Chris Lattner
d7cbd7d5d2
MEGAPATCH checkin.
...
For details, See: docs/2002-06-25-MegaPatchInfo.txt
llvm-svn: 2778
2002-06-25 16:13:21 +00:00
Chris Lattner
e61bc07952
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
7d0544f0cc
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
07732a38b7
Avoid #including CommandLine.h
...
llvm-svn: 2710
2002-05-22 17:06:56 +00:00
Chris Lattner
1752fa9899
Hide debugging options
...
llvm-svn: 2676
2002-05-20 21:39:10 +00:00
Chris Lattner
0cfea31aee
Don't lose namespace qualifications on previous patch.
...
llvm-svn: 2664
2002-05-20 17:38:26 +00:00
Vikram S. Adve
21ed1be093
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
3d968bccd8
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
883c425f15
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
1f8badf623
Annotation class for MachineInstr.
...
llvm-svn: 2643
2002-05-19 15:30:21 +00:00
Vikram S. Adve
6133689517
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
fd8d5b852c
Replace all usages of Type::isPointerType with isa<PointerType>
...
llvm-svn: 2486
2002-05-06 16:15:30 +00:00
Chris Lattner
ba813cb36f
Add neccesary #include
...
llvm-svn: 2406
2002-04-29 18:48:55 +00:00
Chris Lattner
96e0c48175
Eliminate duplicate or unneccesary #include's
...
llvm-svn: 2397
2002-04-29 17:42:12 +00:00
Chris Lattner
589debc4ba
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
e7143ad386
Include appropriate file
...
llvm-svn: 2379
2002-04-28 20:40:16 +00:00
Chris Lattner
321a8cf4ba
Split ConstantVals.h into Constant.h and Constants.h
...
llvm-svn: 2378
2002-04-28 19:55:58 +00:00
Chris Lattner
07fe96ca98
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
f043c4baac
Remove all contents of the cfg namespace to the global namespace
...
llvm-svn: 2369
2002-04-28 16:19:42 +00:00
Chris Lattner
2f0ee1833d
s/Method/Function
...
llvm-svn: 2336
2002-04-27 07:27:19 +00:00
Chris Lattner
536cf1b13f
* 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
95b080aca1
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
f69db4f795
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
ad382a01be
Improve printing during dumps.
...
llvm-svn: 2311
2002-04-25 04:31:18 +00:00
Vikram S. Adve
9f9392ec24
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
572d298aa6
Only emit message if DEBUG_RA is on
...
llvm-svn: 2252
2002-04-15 20:36:15 +00:00
Chris Lattner
5e12c7caf5
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
97ce718b8d
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
119c675af7
* 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
cd23d94446
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
ee0fa0eb15
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
7bc600203b
GCC3.0 is reported to die without an alloca definition.
...
llvm-svn: 2186
2002-04-09 03:37:11 +00:00
Chris Lattner
e7a2ce6e4e
Don't leak memory like a seive
...
llvm-svn: 2185
2002-04-08 23:09:07 +00:00
Chris Lattner
56229b8690
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
c8166cec07
s/Method/Function
...
llvm-svn: 2180
2002-04-08 22:03:57 +00:00
Chris Lattner
cd3575a5cf
s/method/function
...
llvm-svn: 2177
2002-04-08 22:01:15 +00:00
Chris Lattner
bc15ae64dd
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
44ee4184e4
Add method clearCallInterference().
...
llvm-svn: 2071
2002-03-31 18:58:14 +00:00
Vikram S. Adve
c2c33ba3fd
Include temp. values when computing max. size of stack frame!
...
llvm-svn: 2070
2002-03-31 18:57:49 +00:00
Vikram S. Adve
1e6ab6f476
Fix a bug in previous bug fix.
...
llvm-svn: 2069
2002-03-31 18:56:51 +00:00
Vikram S. Adve
fbdd533059
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
849c762b02
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
3dfd5b888b
Destroy MethodLiveVarInfo after register allocation.
...
llvm-svn: 1976
2002-03-24 03:54:03 +00:00
Vikram S. Adve
fa2ed7e6b1
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
058ec11ea3
Bug fix: nextToTry was not being initialized in one case.
...
llvm-svn: 1974
2002-03-24 03:46:15 +00:00
Vikram S. Adve
37d44e7de9
Add option to disable scheduling.
...
llvm-svn: 1973
2002-03-24 03:45:35 +00:00
Vikram S. Adve
0cdcf40121
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
d18a1cc9fb
Minor changes.
...
llvm-svn: 1971
2002-03-24 03:40:59 +00:00
Vikram S. Adve
e06cac463f
Re-fix bug: Put back MachineCodeForInstruction::dropAllReferences.
...
llvm-svn: 1970
2002-03-24 03:40:11 +00:00
Vikram S. Adve
b347d2796c
Fix padding for variables allocated on stack.
...
llvm-svn: 1969
2002-03-24 03:39:26 +00:00
Vikram S. Adve
34306e0e1c
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
8493ae74b2
Use deterministic iterator for treeRoots.
...
llvm-svn: 1967
2002-03-24 03:36:52 +00:00
Vikram S. Adve
a141a7190b
Change treeRoots data structure to make enumeration deterministic.
...
llvm-svn: 1962
2002-03-24 03:24:00 +00:00
Chris Lattner
c481e92886
Rename Method to Function
...
llvm-svn: 1957
2002-03-23 22:51:58 +00:00
Vikram S. Adve
8553fc5d21
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
855ed3d941
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
edc1adae11
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
b26ed73c33
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
3fe5a9e913
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
125cd33f99
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
32c3ca3f0c
Change to make it build with GCC 2.95.3
...
llvm-svn: 1802
2002-02-26 18:57:15 +00:00
Chris Lattner
c1de0d6e83
* Make it compile with GCC 3.0.4
...
llvm-svn: 1788
2002-02-24 23:01:56 +00:00
Chris Lattner
3cffcc10bc
* 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
8e9be000a7
* 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
b0a2c5546b
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
e282c0b592
Convert operand iterator over to work like an STL iterator
...
llvm-svn: 1720
2002-02-05 06:02:59 +00:00
Chris Lattner
5337fbec40
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
862fab4da7
* Code Cleanups
...
* Removal dependencies on Type.h & remove uses of getTypeID()
llvm-svn: 1718
2002-02-05 03:52:29 +00:00