Chris Lattner
b6b8d6e242
This class is no longer an annotation
...
llvm-svn: 14437
2004-06-27 18:50:49 +00:00
Chris Lattner
642e65c537
Add a map of MachineCodeForInstruction objects to MachineFunctionInfo
...
llvm-svn: 14436
2004-06-27 18:50:30 +00:00
Chris Lattner
19e5c047c7
Make it obvious that this file is bad bad bad
...
llvm-svn: 14432
2004-06-27 18:21:20 +00:00
Tanya Lattner
da38dc5180
Made a fix so that you can print out MachineInstrs that belong to a MachineBasicBlock that is not yet attached to a MachineFunction. This change includes changing the third operand (TargetMachine) to a pointer for the MachineInstr::print function.
...
llvm-svn: 14389
2004-06-25 00:13:11 +00:00
Chris Lattner
9da4181217
Start moving IntrinsicLowering out of VMCore into libcodegen, as per PR346
...
llvm-svn: 14264
2004-06-20 07:40:46 +00:00
Brian Gaeke
fb83999991
Add a forwarding method pop_front() that allows you to delete instructions
...
from the beginning of a MBB.
llvm-svn: 14074
2004-06-08 18:52:47 +00:00
Brian Gaeke
4b0b12c188
Add a TmpInstruction ctor that doesn't take a MCFI.
...
llvm-svn: 14073
2004-06-08 18:52:46 +00:00
Misha Brukman
d608ac24d7
Clarify documentation and use correct doxygen comment form /// vs. // .
...
Thanks to Vladimir Prus for corrections.
llvm-svn: 14009
2004-06-04 14:51:25 +00:00
Tanya Lattner
7cf16701f7
Moved MachineBasicBlock deconstructor to cpp file and removed it from LeakDetector to fix memory leak bug.
...
llvm-svn: 13718
2004-05-24 07:14:35 +00:00
Tanya Lattner
aabaaec037
Added MachineFunction parent* to MachineBasicBlock. Customized ilist template
...
to set the parent when a MachineBasicBlock is added to a MachineFunction.
llvm-svn: 13716
2004-05-24 06:11:51 +00:00
Tanya Lattner
55477a5af1
Changed clone to be const.
...
Changed copy constructor to set parent, prev, and next pointers to null.
llvm-svn: 13706
2004-05-24 03:14:18 +00:00
Tanya Lattner
e755fc6689
Fixed up my changes to add support for cloning Machine Instructions.
...
llvm-svn: 13665
2004-05-23 20:58:02 +00:00
Tanya Lattner
2848065a29
Adding support to clone MachineInstr
...
llvm-svn: 13661
2004-05-23 19:35:12 +00:00
Brian Gaeke
f00f4ca846
Fix a typo in the head-of-file comment.
...
Rewrite the comments about the different versions of BuildMI, to
better emphasize their differences.
llvm-svn: 13642
2004-05-23 05:04:00 +00:00
Brian Gaeke
b964085c4c
Fix a comment.
...
llvm-svn: 13518
2004-05-12 21:57:23 +00:00
Brian Gaeke
0315644cd7
Add a NextMBBNumber field w/ incrementing accessor method, for
...
function-level unique numbering of MBBs.
llvm-svn: 13513
2004-05-12 21:35:21 +00:00
Brian Gaeke
a0d9f814da
Add a Number field w/ accessor method, for function-level unique numbering
...
of MBBs.
Add non-const MachineBasicBlock::getParent() accessor method.
llvm-svn: 13512
2004-05-12 21:35:20 +00:00
Tanya Lattner
c69bb49340
Fixed up sched graph.
...
llvm-svn: 13428
2004-05-08 16:14:24 +00:00
Tanya Lattner
9b4ee61855
Registering the ModuloScheduling pass.
...
llvm-svn: 13427
2004-05-08 16:14:02 +00:00
Brian Gaeke
397162e886
Chris told me to take these assertions out a few days ago, but I forgot to
...
check this in.
llvm-svn: 13313
2004-05-02 01:04:52 +00:00
Chris Lattner
dd7eb23ccf
Stop LiveVariables from using BasicBlocks as part of the mapping, instead
...
use MachineBasicBlocks.
llvm-svn: 13300
2004-05-01 21:23:35 +00:00
Chris Lattner
939685e14b
Move the GraphTraits for MachineBasicBlocks to the MachineBasicBlock file.
...
llvm-svn: 13299
2004-05-01 21:05:34 +00:00
Brian Gaeke
8e3668faca
Add pred./succ. list size methods.
...
llvm-svn: 13214
2004-04-28 04:46:35 +00:00
Brian Gaeke
369fa0ed81
Move private methods to end of class decl at Chris's request
...
llvm-svn: 13210
2004-04-28 04:15:06 +00:00
Brian Gaeke
d63179c70b
Fix thinkos that Chris caught for me.
...
Make pred mutators private.
llvm-svn: 13209
2004-04-28 03:59:48 +00:00
Brian Gaeke
213538a039
Add machine-code CFG support: MachineBasicBlocks may now have their own
...
predecessors and successors
llvm-svn: 13208
2004-04-28 02:16:33 +00:00
Brian Gaeke
2f5697a29f
Add emitWordAt() - a quick and dirty interface that the machine-dependent
...
emitters can use to emit "relocations".
llvm-svn: 13116
2004-04-23 17:11:12 +00:00
Brian Gaeke
2a087ad673
Include <string> for compatibility with gcc 3.0.x (the system compiler on
...
Debian.)
llvm-svn: 12985
2004-04-16 15:57:14 +00:00
Brian Gaeke
95213bd702
This file does not appear to be included anywhere.
...
llvm-svn: 12777
2004-04-08 19:36:26 +00:00
Brian Gaeke
14dadd43e1
This file is no longer used.
...
llvm-svn: 12767
2004-04-07 21:01:22 +00:00
Chris Lattner
c241db65d6
Allow converting a builder to an iterator
...
llvm-svn: 12586
2004-04-01 04:03:10 +00:00
Brian Gaeke
e7f4f73f67
Add clear() forwarding method.
...
llvm-svn: 12580
2004-03-31 22:43:12 +00:00
Chris Lattner
3f24ea6ccf
MachineBasicBlock::remove should not change the iterator passed into it
...
llvm-svn: 12569
2004-03-31 21:58:50 +00:00
Alkis Evlogimenos
64aa7f3708
Fix bug introduced by yesterday's changes.
...
llvm-svn: 12119
2004-03-04 18:02:07 +00:00
Brian Gaeke
aa96ff7926
Make MachineOperand's value named 'contents'. Make really, really sure
...
it is always completely initialized and copied.
Also, fix up many comments and asserts.
llvm-svn: 12100
2004-03-03 19:07:27 +00:00
Chris Lattner
4c7ed6793e
Remove public header. It's been moved to lib/Target/SparcV9
...
llvm-svn: 12004
2004-02-29 19:13:20 +00:00
Chris Lattner
df24575c31
Do not use explicit casts that hide the dependence on Instruction being
...
annotable
llvm-svn: 12000
2004-02-29 19:02:26 +00:00
Chris Lattner
768b31fc77
Remove unneeded #include
...
llvm-svn: 11978
2004-02-29 05:15:56 +00:00
Chris Lattner
34977159b3
Continue Alkis's int64_t cleanup. This makes all of the immediate related
...
methods take an int or unsigned value instead of int64_t.
Also, add an 'addImm' method to the MachineInstrBuilder class, because the
fact that the hardware sign or zero extends it does not/should not matter
to the code generator. Once the old sparc backend is removed the difference
can be eliminated.
llvm-svn: 11976
2004-02-29 05:06:49 +00:00
Chris Lattner
85dd74a158
Add BuildMI variants that take a MBB::iterator
...
llvm-svn: 11975
2004-02-29 04:55:28 +00:00
Alkis Evlogimenos
5193c08a8a
Make MachineOperand's immediate value an int and save 4 bytes out of
...
each MachineOperand. We don't really need an int64_t immediate :-).
llvm-svn: 11906
2004-02-27 15:05:28 +00:00
Alkis Evlogimenos
f1516015af
Add DenseMap template and actually use it for for mapping virtual regs
...
to objects.
llvm-svn: 11840
2004-02-25 21:55:45 +00:00
Brian Gaeke
eae0364189
FunctionLiveVarInfo.h moved: include/llvm/CodeGen -> lib/Target/Sparc/LiveVar
...
llvm-svn: 11804
2004-02-24 19:46:00 +00:00
Alkis Evlogimenos
9b103024ef
Refactor rewinding code for finding the first terminator of a basic
...
block into MachineBasicBlock::getFirstTerminator().
This also fixes a bug in the implementation of the above in both
RegAllocLocal and InstrSched, where instructions where added after the
terminator if the basic block's only instruction was a terminator (it
shouldn't matter for RegAllocLocal since this case never occurs in
practice).
llvm-svn: 11748
2004-02-23 18:14:48 +00:00
Alkis Evlogimenos
850bd0819f
Move LiveIntervals.h to lib/CodeGen since it shouldn't be exposed to other parts of the compiler
...
llvm-svn: 11719
2004-02-23 00:50:15 +00:00
Alkis Evlogimenos
7f7d70a53c
Move MOTy::UseType enum into MachineOperand. This eliminates the
...
switch statements in the constructors and simplifies the
implementation of the getUseType() member function. You will have to
specify defs using MachineOperand::Def instead of MOTy::Def though
(similarly for Use and UseAndDef).
llvm-svn: 11715
2004-02-22 19:23:26 +00:00
Alkis Evlogimenos
abc8efe386
Fix silly bug in implementation of getUseType(). Thanks Misha.
...
llvm-svn: 11711
2004-02-22 07:24:19 +00:00
Alkis Evlogimenos
6998610eda
When folding memory operands in machine instructions be careful to
...
leave register operands with the same use/def flags as the original
instruction.
llvm-svn: 11709
2004-02-22 06:54:26 +00:00
Alkis Evlogimenos
32d12d31ae
Abstract merging of ranges away from number of slots per instruction.
...
Also make it less aggressive as the current implementation breaks in
some cases.
llvm-svn: 11696
2004-02-22 04:05:13 +00:00
Alkis Evlogimenos
f32239a5c6
Too many changes in one commit:
...
1. LiveIntervals now implement a 4 slot per instruction model. Load,
Use, Def and a Store slot. This is required in order to correctly
represent caller saved register clobbering on function calls,
register reuse in the same instruction (def resues last use) and
also spill code added later by the allocator. The previous
representation (2 slots per instruction) was insufficient and as a
result was causing subtle bugs.
2. Fixes in spill code generation. This was the major cause of
failures in the test suite.
3. Linear scan now has core support for folding memory operands. This
is untested and not enabled (the live interval update function does
not attempt to fold loads/stores in instructions).
4. Lots of improvements in the debugging output of both live intervals
and linear scan. Give it a try... it is beautiful :-)
In summary the above fixes all the issues with the recent reserved
register elimination changes and get the allocator very close to the
next big step: folding memory operands.
llvm-svn: 11654
2004-02-20 06:15:40 +00:00
Chris Lattner
6c338f7627
ADd a method for when an instruction moves
...
llvm-svn: 11626
2004-02-19 18:28:22 +00:00
Chris Lattner
436ab13009
Add a MachineBasicBlock::getParent() method
...
llvm-svn: 11622
2004-02-19 16:13:54 +00:00
Alkis Evlogimenos
d4fd43dee8
Move unused typedefs in private section. Add method to return interval
...
given a register.
llvm-svn: 11608
2004-02-18 23:14:52 +00:00
Chris Lattner
34f3bce70c
eliminate a pair of really inefficient methods now that noone uses them
...
llvm-svn: 11579
2004-02-18 16:45:22 +00:00
Alkis Evlogimenos
a479dc4715
Add LiveIntervals::Interval::empty() member function.
...
llvm-svn: 11520
2004-02-17 05:14:37 +00:00
Alkis Evlogimenos
790b000aa7
Add LeakDetection to MachineInstr.
...
Move out of line member functions of MachineBasicBlock to
MachineBasicBlock.cpp.
llvm-svn: 11497
2004-02-16 07:17:43 +00:00
Alkis Evlogimenos
1026a01d5a
Eliminate the use of spill (reserved) registers.
...
llvm-svn: 11476
2004-02-15 10:24:21 +00:00
Chris Lattner
bbe538e930
finegrainify namespacification
...
llvm-svn: 11469
2004-02-15 05:52:36 +00:00
Alkis Evlogimenos
6d6ab846af
Remove getAllocatedRegNum(). Use getReg() instead.
...
llvm-svn: 11393
2004-02-13 21:01:20 +00:00
Alkis Evlogimenos
e504fa6710
Mark MachineBasicBlock::operator[] deprecated.
...
llvm-svn: 11392
2004-02-13 20:05:56 +00:00
Alkis Evlogimenos
c109214f58
Add getNumVirtualRegs().
...
Whitespace cleanups.
llvm-svn: 11388
2004-02-13 18:07:06 +00:00
Brian Gaeke
7707461afa
Include <iosfwd>.
...
Add prototypes for MachineBasicBlock's dump() and print() methods.
llvm-svn: 11365
2004-02-13 04:40:15 +00:00
Alkis Evlogimenos
00d97b6a13
Move ilist_trairs<MachineInstr> in MachineBasicBlock.
...
llvm-svn: 11358
2004-02-12 19:12:03 +00:00
Alkis Evlogimenos
3ecdcd18c5
Add parent pointer to MachineInstr that points to owning
...
MachineBasicBlock. Also change opcode to a short and numImplicitRefs
to an unsigned char so that overall MachineInstr's size stays the
same.
llvm-svn: 11357
2004-02-12 18:49:07 +00:00
Chris Lattner
ef375052c6
Rename the opCode instance variable to Opcode
...
llvm-svn: 11348
2004-02-12 16:09:53 +00:00
Chris Lattner
04c37927bd
Remove a dead field from MachineInstr!
...
llvm-svn: 11347
2004-02-12 16:05:03 +00:00
Brian Gaeke
57484e290d
Add one more doxygen comment.
...
llvm-svn: 11344
2004-02-12 04:26:49 +00:00
Brian Gaeke
840e7e40fe
Express one of MachineOperand's many constructors in terms of another, by means of default arguments.
...
llvm-svn: 11343
2004-02-12 04:15:00 +00:00
Brian Gaeke
0608698c34
Remove these MachineOpCodeFlags and their accessor - they are never set.
...
llvm-svn: 11341
2004-02-12 04:00:55 +00:00
Alkis Evlogimenos
b755d35fd2
Change MachineBasicBlock's vector of MachineInstr pointers into an
...
ilist of MachineInstr objects. This allows constant time removal and
insertion of MachineInstr instances from anywhere in each
MachineBasicBlock. It also allows for constant time splicing of
MachineInstrs into or out of MachineBasicBlocks.
llvm-svn: 11340
2004-02-12 02:27:10 +00:00
Brian Gaeke
2e521768eb
Remove getOpCode(). Help doxygenify some comments.
...
llvm-svn: 11338
2004-02-12 01:34:03 +00:00
Chris Lattner
a04a1456da
Urg, the X86 backend DOES use virtual register operands. :(
...
llvm-svn: 11288
2004-02-10 21:43:11 +00:00
Chris Lattner
286169ff60
Remove and simplify some of the bewildering collection of isFOORegister
...
methods which have strangely different semantics in different backends,
and noone knew what any did.
Getting rid of these ALSO allows the dependence of MachineInstr.h on
MRegisterInfo.h to be removed, which makes me much happier, and probably
alkis too. :)
llvm-svn: 11287
2004-02-10 21:21:17 +00:00
Chris Lattner
04f36062ea
Eliminate MachineOperand::isPhysicalRegister. The X86 backend should use
...
MRegisterInfo::isPhysicalRegister(MO.getReg()) and the Sparc backend should
use isMachineRegister()
llvm-svn: 11279
2004-02-10 20:42:11 +00:00
Chris Lattner
854737de3f
Simplify condition, this does not change the predicate at all though
...
llvm-svn: 11275
2004-02-10 20:30:40 +00:00
Brian Gaeke
00b2107e2a
SchedGraph doesn't need to be friends with SchedGraphNodeCommon anymore.
...
llvm-svn: 11240
2004-02-09 18:43:06 +00:00
Alkis Evlogimenos
676e5b8997
Modify the two address instruction pass to remove the duplicate
...
operand of the instruction and thus simplify the register allocation.
llvm-svn: 11124
2004-02-04 22:17:40 +00:00
Brian Gaeke
efde1c6bb8
Include <iosfwd> and <string> instead of <iostream>.
...
Take away the default iostream argument of createMachineFunctionPrinterPass(),
at Chris's request.
llvm-svn: 11121
2004-02-04 21:41:10 +00:00
Alkis Evlogimenos
5e78d4bd75
When an instruction like: A += B had both A and B virtual registers
...
spilled, A was loaded from its stack location twice. This fixes the bug.
llvm-svn: 11093
2004-02-03 01:13:07 +00:00
Alkis Evlogimenos
e128cb3295
Revert changes. Will implement this using a different set of primitives
...
llvm-svn: 11091
2004-02-02 23:08:58 +00:00
Alkis Evlogimenos
e20cdc6437
Add MachineOperand::setDef() and MachineOperand::setUse() so that the
...
TwoAddressInstructionPass can correctly update use/def information.
llvm-svn: 11086
2004-02-02 21:55:18 +00:00
Alkis Evlogimenos
d1ec5f36ee
Merge safe parts from last night's buggy commit. These do not break
...
any test cases :-)
llvm-svn: 11032
2004-01-31 19:59:32 +00:00
Alkis Evlogimenos
b9df133d67
Revert last night's changes as they broke some tests. Will remerge parts of the patch.
...
llvm-svn: 11029
2004-01-31 14:37:41 +00:00
Alkis Evlogimenos
c0db519832
Several performance enhancements and cleanups from Chris.
...
Simplification of LiveIntervals::Interval::overlaps() and addition of
examples to overlaps() and liveAt() to make them clearer.
llvm-svn: 11028
2004-01-31 04:56:07 +00:00
Chris Lattner
8671a315d5
Add a new lazily constructed mapping from Idx's the MBB they represent
...
llvm-svn: 11017
2004-01-30 22:08:09 +00:00
Brian Gaeke
9cf840250b
Give clients of MachineFunctionPrinter the ability to specify a banner and
...
choose an ostream.
llvm-svn: 11016
2004-01-30 21:53:46 +00:00
Alkis Evlogimenos
2a8df1739b
Fix failing test cases with joined live intervals. It turns out that
...
when joining we need to check if we overlap with the second interval
or any of its aliases.
Also make joining intervals the default.
llvm-svn: 10973
2004-01-23 13:37:51 +00:00
Alkis Evlogimenos
b4745bda05
Add option to join live intervals. Two intervals are joined if there
...
is a move between two registers, at least one of the registers is
virtual and the two live intervals do not overlap.
This results in about 40% reduction in intervals, 30% decrease in the
register allocators running time and a 20% increase in peephole
optimizations (mainly move eliminations).
The option can be enabled by passing -join-liveintervals where
appropriate.
llvm-svn: 10965
2004-01-22 23:08:45 +00:00
Tanya Lattner
33079fad04
Moved iterators to common file.
...
llvm-svn: 10925
2004-01-20 17:49:42 +00:00
Alkis Evlogimenos
38f0f867b3
Fold open interval ends handling into
...
LiveIntervals::Interval::expiredAt() and simplify regalloc code.
llvm-svn: 10894
2004-01-16 20:17:05 +00:00
Alkis Evlogimenos
61db3621bd
Use a list instead of a vector to store intervals. This will be needed
...
when we join intervals and one of the two will need to be removed.
llvm-svn: 10892
2004-01-16 16:06:59 +00:00
Alkis Evlogimenos
c73c31a496
Remove allocatable registers vector. It is already provided by
...
LiveVariables.
llvm-svn: 10830
2004-01-13 22:10:43 +00:00
Alkis Evlogimenos
ef7c077e63
Make LiveVariables::HandlePhysRegUse and
...
LiveVariables::HandlePhysRegDef private they use information that is
not in memory when LiveVariables finishes the analysis.
Also update the TwoAddressInstructionPass to not use this interface.
llvm-svn: 10755
2004-01-11 09:18:45 +00:00
Chris Lattner
c37577eb9f
Clean up a lot of the code I added yesterday by exposing the IntrinsicLowering
...
implementation from the TargetMachine directly.
llvm-svn: 10636
2003-12-28 21:23:38 +00:00
Alkis Evlogimenos
fc01aac4d8
Add coalescing to register allocator. A hint is added to each interval
...
which denotes the register we would like to be assigned to (virtual or
physical). In register allocation, if this hint exists and we can map
it to a physical register (it is either a physical register or it is a
virtual register that already got assigned to a physical one) we use
that register if it is available instead of a random one in the free
pool.
llvm-svn: 10634
2003-12-28 17:58:18 +00:00
Chris Lattner
215d4146fe
add argument
...
llvm-svn: 10625
2003-12-28 09:42:49 +00:00
Chris Lattner
00a54b7c00
Move header into top-level llvm dir
...
llvm-svn: 10622
2003-12-28 08:30:07 +00:00
Chris Lattner
8bc92e92ee
Add new interface that allows removal of some code from the code generators,
...
provides for future extensibility, might help the LLVA project avoid having to
hack their own LLI, and provides support required for the experimental Venus
project.
llvm-svn: 10620
2003-12-28 08:19:13 +00:00
Alkis Evlogimenos
4401d0a7a3
Change weight into a float so that we can take into account the
...
nesting level when computing it. Right now the allocator uses:
w = sum_over_defs_uses( 10 ^ nesting level );
llvm-svn: 10569
2003-12-21 20:19:10 +00:00
Alkis Evlogimenos
4f98b79ef0
Add support for inactive intervals. This effectively reuses registers
...
for live ranges that fall into assigned registers' holes.
llvm-svn: 10566
2003-12-21 05:43:40 +00:00