Commit Graph

129 Commits

Author SHA1 Message Date
Brian Gaeke
2d58f0691e Remove these MachineOpCodeFlags and their accessor - they are never set.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11341 91177308-0d34-0410-b5e6-96231b3b80d8
2004-02-12 04:00:55 +00:00
Alkis Evlogimenos
c0b9dc5be7 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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11340 91177308-0d34-0410-b5e6-96231b3b80d8
2004-02-12 02:27:10 +00:00
Brian Gaeke
cd0b3a90aa Remove getOpCode(). Help doxygenify some comments.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11338 91177308-0d34-0410-b5e6-96231b3b80d8
2004-02-12 01:34:03 +00:00
Chris Lattner
d6b5e5f637 Urg, the X86 backend DOES use virtual register operands. :(
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11288 91177308-0d34-0410-b5e6-96231b3b80d8
2004-02-10 21:43:11 +00:00
Chris Lattner
376ad9fa9f 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.  :)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11287 91177308-0d34-0410-b5e6-96231b3b80d8
2004-02-10 21:21:17 +00:00
Chris Lattner
9f42dd5472 Eliminate MachineOperand::isPhysicalRegister. The X86 backend should use
MRegisterInfo::isPhysicalRegister(MO.getReg()) and the Sparc backend should
use isMachineRegister()


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11279 91177308-0d34-0410-b5e6-96231b3b80d8
2004-02-10 20:42:11 +00:00
Chris Lattner
b2e5db94cf Simplify condition, this does not change the predicate at all though
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11275 91177308-0d34-0410-b5e6-96231b3b80d8
2004-02-10 20:30:40 +00:00
Alkis Evlogimenos
14be64018f Modify the two address instruction pass to remove the duplicate
operand of the instruction and thus simplify the register allocation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11124 91177308-0d34-0410-b5e6-96231b3b80d8
2004-02-04 22:17:40 +00:00
Alkis Evlogimenos
4e7854407c 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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11093 91177308-0d34-0410-b5e6-96231b3b80d8
2004-02-03 01:13:07 +00:00
Alkis Evlogimenos
9fe7602862 Revert changes. Will implement this using a different set of primitives
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11091 91177308-0d34-0410-b5e6-96231b3b80d8
2004-02-02 23:08:58 +00:00
Alkis Evlogimenos
782ce955b2 Add MachineOperand::setDef() and MachineOperand::setUse() so that the
TwoAddressInstructionPass can correctly update use/def information.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11086 91177308-0d34-0410-b5e6-96231b3b80d8
2004-02-02 21:55:18 +00:00
Alkis Evlogimenos
721b4e5715 I wonder how this didn't cause any tests to fail...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10462 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-14 13:30:19 +00:00
Alkis Evlogimenos
4d7af65903 Change interface of MachineOperand as follows:
a) remove opIsUse(), opIsDefOnly(), opIsDefAndUse()
    b) add isUse(), isDef()
    c) rename opHiBits32() to isHiBits32(),
              opLoBits32() to isLoBits32(),
              opHiBits64() to isHiBits64(),
              opLoBits64() to isLoBits64().

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10461 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-14 13:24:17 +00:00
Chris Lattner
786a518f47 Add some "useful" methods
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10277 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-01 05:30:29 +00:00
Brian Gaeke
d0fde30ce8 Put all LLVM code into the llvm namespace, as per bug 109.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9903 91177308-0d34-0410-b5e6-96231b3b80d8
2003-11-11 22:41:34 +00:00
John Criswell
6fbcc26f14 Added LLVM copyright header (for lack of a better term).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9304 91177308-0d34-0410-b5e6-96231b3b80d8
2003-10-20 20:19:47 +00:00
Chris Lattner
48486893f4 Standardize header file comments
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8782 91177308-0d34-0410-b5e6-96231b3b80d8
2003-09-30 18:37:50 +00:00
Misha Brukman
ef6a6a69ff The word dependent' has no a'.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8030 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-21 22:14:26 +00:00
Chris Lattner
5e8b77e375 Completely eliminate the per-machine-instruction regsUsed set.
This substantially shrinks the size of each machine instruction, which should
make allocation faster and the cache footprint of the machine code lighter.

Here are some timings for code generation of the larger benchmarks we have.
This are timings of code generation phases of the X86 JIT, when compiled in
debug mode:

		Before	After	Diff
164.gzip:
  InstSel	0.0878	0.0722	-21.6%
  RegAlloc	0.2031	0.1757	-15.6%
  TOTAL		0.5585	0.4999	-11.7%
Ptrdist-bc:
  InstSel	0.0878	0.0722	-21.6%
  RegAlloc	0.2070	0.1933	- 7.1%
  TOTAL		0.6972	0.6464	- 7.9%
197.parser:
  InstSel	0.2148	0.2148	- 0.0%
  RegAlloc	0.4941	0.4277	-15.5%
  TOTAL		1.3749	1.2851	- 7.0%
175.vpr:
  InstSel	0.2519	0.2109	-19.4%
  RegAlloc	0.5976	0.5663	- 5.5%
  TOTAL		1.6933	1.6347	- 3.5%
254.gap:
  InstSel	1.1328	0.9921	-14.2%
  RegAlloc	2.6933	2.4804	- 8.6%
  TOTAL		7.7871	7.2499	- 7.4%


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7622 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-05 22:39:13 +00:00
Chris Lattner
610234d5c9 Do not insert physical regsiters into the regsUsed set
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7617 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-05 21:55:20 +00:00
Chris Lattner
e057ca61b1 Remove unused method
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7608 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-05 17:09:08 +00:00
Chris Lattner
a2dd745613 All callers of these methods actually wanted them to preserve the flags,
so get rid of the def/use parameters that were getting passed in.

**** This now changes the semantics of these methods to preserve the flags,
     not clobber them!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7602 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-05 16:58:46 +00:00
Vikram S. Adve
b1e6f05110 Add an assertion.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7326 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-25 20:58:57 +00:00
Vikram S. Adve
627eb31cd7 Change interface to MachineInstr::substituteValue to specify more precisely
which args can be substituted: defsOnly, defsAndUses or usesOnly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7154 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-10 19:45:07 +00:00
Vikram S. Adve
daee2b492f Leak fix: delete old objects before reallocation in an assignment operator!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7055 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-02 01:25:44 +00:00
Chris Lattner
3889a2cb05 Remove a ton of extraneous #includes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6842 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-22 03:08:05 +00:00
John Criswell
be583b914d Included assert.h so that the code compiles under newer versions of GCC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6682 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-11 14:01:36 +00:00
Chris Lattner
b05497e0ca Minor cleanups:
* Document the MOTy namespace correctly for doxygen
  * Eliminate usage of the MachineOpCode typedef, which should eventually
    be eliminated entirely.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6584 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-03 15:42:53 +00:00
Chris Lattner
9452b0797a Remove NonCopyable base class to clean up doxygen output
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6551 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-02 22:07:37 +00:00
Vikram S. Adve
9f495b54fa Support for annul/pred and other future flags on op codes.
Support for recording the physical register for implcit references.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6471 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-31 07:43:01 +00:00
Vikram S. Adve
a22eace55b Renamed MachienOperand::opIsDef to MachineOperand::opIsDefOnly()
and related functions and flags.  Fixed several bugs where only
"isDef" was being checked, not "isDefAndUse".


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6342 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-27 00:06:48 +00:00
Chris Lattner
b66fdc2934 Remove obsolete ctor
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5301 91177308-0d34-0410-b5e6-96231b3b80d8
2003-01-15 19:47:02 +00:00
Chris Lattner
4d69c8e369 Add support for the CC registers for Sparc BE
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5296 91177308-0d34-0410-b5e6-96231b3b80d8
2003-01-15 19:22:06 +00:00
Chris Lattner
cb09cc268b Move annotation to support library
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5268 91177308-0d34-0410-b5e6-96231b3b80d8
2003-01-14 21:29:58 +00:00
Chris Lattner
3c8cbe6567 * Add 3 new types of MachineOperand: ConstantPoolIndex ExternalSymbol and GlobalAddress's
* Add new isPCRelative modifier flag which should be used in place of MO_PCRelativeDisp type.
* Fix a bug in isPhysicalRegister
* Add new setOpcode and RemoveOperand methods


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5209 91177308-0d34-0410-b5e6-96231b3b80d8
2003-01-13 00:18:17 +00:00
Chris Lattner
7ad6be7b01 * Frame indices are signed
* Cluster modification methods together


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5164 91177308-0d34-0410-b5e6-96231b3b80d8
2002-12-28 20:05:44 +00:00
Chris Lattner
56cf63f2f6 *** empty log message ***
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5138 91177308-0d34-0410-b5e6-96231b3b80d8
2002-12-25 05:00:49 +00:00
Chris Lattner
c583175e72 Add new opIsUse method
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5062 91177308-0d34-0410-b5e6-96231b3b80d8
2002-12-15 22:05:02 +00:00
Chris Lattner
8cbfc75d17 Add capability to have a MachineBasicBlock as an operand to a MachineInstr
Add a bunch of methods to MachineOperand is* to reduce usage of MO_foo


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5032 91177308-0d34-0410-b5e6-96231b3b80d8
2002-12-15 08:01:02 +00:00
Misha Brukman
35880f394f Instead of checking op.getType() against MO_VirtualRegister and
MO_MachineRegister, we no longer distinguish Virtual vs. Machine registers
externally, they're ALL registers, all equal.

Registers are only differentiated whether they are >=
MRegisterInfo::FirstVirtual or not.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4823 91177308-0d34-0410-b5e6-96231b3b80d8
2002-11-22 22:40:52 +00:00
Chris Lattner
ce3d3eadef Add helper method
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4744 91177308-0d34-0410-b5e6-96231b3b80d8
2002-11-18 06:57:05 +00:00
Chris Lattner
af55be15df Print is const!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4737 91177308-0d34-0410-b5e6-96231b3b80d8
2002-11-17 23:22:13 +00:00
Chris Lattner
23e6bba592 Finish enumating code
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4726 91177308-0d34-0410-b5e6-96231b3b80d8
2002-11-17 22:33:54 +00:00
Chris Lattner
7e1a53b404 Remove unused methods
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4720 91177308-0d34-0410-b5e6-96231b3b80d8
2002-11-17 22:14:22 +00:00
Chris Lattner
32f3d08cde Convert to use an enum to access def/use/use&def information. These make
reading code much easier than just seeing "true, false" especially when
default parameters default one but not both arguments.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4717 91177308-0d34-0410-b5e6-96231b3b80d8
2002-11-17 21:56:10 +00:00
Vikram S. Adve
8f211a4ab0 Bug fix in setting an implicit ref.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4452 91177308-0d34-0410-b5e6-96231b3b80d8
2002-10-30 20:38:16 +00:00
Chris Lattner
9cc361579b Allow BuildMI that helps automate construction of SSA information
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4443 91177308-0d34-0410-b5e6-96231b3b80d8
2002-10-30 01:48:41 +00:00
Chris Lattner
fa78fbf446 Add support for structured printing
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4432 91177308-0d34-0410-b5e6-96231b3b80d8
2002-10-30 00:46:48 +00:00
Chris Lattner
7db458fb07 Add capability to have machine instruction autoinsert when it is created
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4424 91177308-0d34-0410-b5e6-96231b3b80d8
2002-10-29 23:18:23 +00:00
Vikram S. Adve
a2bae305fb 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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4399 91177308-0d34-0410-b5e6-96231b3b80d8
2002-10-29 19:41:18 +00:00