Owen Anderson
88812b5c0a
Make all of the TargetMachine subclasses use the new string TargetData methods.
...
This is part of the on-going work on PR 761.
llvm-svn: 28414
2006-05-20 00:24:56 +00:00
Evan Cheng
305c49579c
getCalleeSaveRegs and getCalleeSaveRegClasses are no long TableGen'd.
...
llvm-svn: 28378
2006-05-18 00:12:58 +00:00
Evan Cheng
dcec882286
Remove PointerType from class Target
...
llvm-svn: 28368
2006-05-17 21:20:27 +00:00
Chris Lattner
9cd2ef34e6
Remove dead variable.
...
llvm-svn: 28247
2006-05-12 17:31:21 +00:00
Owen Anderson
8c2c1e90c4
Refactor a bunch of includes so that TargetMachine.h doesn't have to include
...
TargetData.h. This should make recompiles a bit faster with my current
TargetData tinkering.
llvm-svn: 28238
2006-05-12 06:33:49 +00:00
Chris Lattner
8488ba2e41
Split SwitchSection into SwitchTo{Text|Data}Section methods.
...
llvm-svn: 28184
2006-05-09 04:59:56 +00:00
Chris Lattner
8587f8885d
Some notes and thoughts to myself
...
llvm-svn: 28182
2006-05-09 04:58:46 +00:00
Chris Lattner
10b71c0d08
Rename MO_VirtualRegister -> MO_Register. Clean up immediate handling.
...
llvm-svn: 28104
2006-05-04 18:05:43 +00:00
Chris Lattner
10d6341618
Move some methods out of MachineInstr into MachineOperand
...
llvm-svn: 28102
2006-05-04 17:52:23 +00:00
Chris Lattner
fef7a2d0f5
There shalt be only one "immediate" operand type!
...
llvm-svn: 28099
2006-05-04 17:21:20 +00:00
Chris Lattner
940cc978ef
Remove a bunch more SparcV9 specific stuff
...
llvm-svn: 28093
2006-05-04 01:15:02 +00:00
Chris Lattner
9f6639b64d
Remove some more unused stuff from MachineInstr that was leftover from V9.
...
llvm-svn: 28091
2006-05-04 00:44:25 +00:00
Owen Anderson
20a631fde7
Refactor TargetMachine, pushing handling of TargetData into the target-specific subclasses. This has one caller-visible change: getTargetData() now returns a pointer instead of a reference.
...
This fixes PR 759.
llvm-svn: 28074
2006-05-03 01:29:57 +00:00
Nate Begeman
b9d4f8324d
Extend printBasicBlockLabel a bit so that it can be used to print all
...
basic block labels, consolidating the code to do so in one place for each
target.
llvm-svn: 28050
2006-05-02 05:37:32 +00:00
Nate Begeman
4ca2ea5b43
JumpTable support! What this represents is working asm and jit support for
...
x86 and ppc for 100% dense switch statements when relocations are non-PIC.
This support will be extended and enhanced in the coming days to support
PIC, and less dense forms of jump tables.
llvm-svn: 27947
2006-04-22 18:53:45 +00:00
Reid Spencer
9857229aba
Add the README files to the distribution.
...
llvm-svn: 27651
2006-04-13 06:39:24 +00:00
Nate Begeman
3f9c17906f
Disable switch lowering for targets based on the selection dag isel,
...
letting the code generator handle them directly.
llvm-svn: 27539
2006-04-08 19:46:55 +00:00
Jim Laskey
2d7298c362
Foundation for call frame information.
...
llvm-svn: 27491
2006-04-07 16:34:46 +00:00
Jim Laskey
d1aa1638c6
Expose base register for DwarfWriter. Refactor code accordingly.
...
llvm-svn: 27225
2006-03-28 13:48:33 +00:00
Jim Laskey
fa53b276d0
Translate llvm target registers to dwarf register numbers properly.
...
llvm-svn: 27180
2006-03-27 20:18:45 +00:00
Nate Begeman
ed728c1291
SelectionDAGISel can now natively handle Switch instructions, in the same
...
manner that the LowerSwitch LLVM to LLVM pass does: emitting a binary
search tree of basic blocks. The new approach has several advantages:
it is faster, it generates significantly smaller code in many cases, and
it paves the way for implementing dense switch tables as a jump table by
handling switches directly in the instruction selector.
This functionality is currently only enabled on x86, but should be safe for
every target. In anticipation of making it the default, the cfg is now
properly updated in the x86, ppc, and sparc select lowering code.
llvm-svn: 27156
2006-03-27 01:32:24 +00:00
Chris Lattner
5d70a7c4a5
#include Intrinsics.h into all dag isels
...
llvm-svn: 27109
2006-03-25 06:47:10 +00:00
Jim Laskey
bb84eae239
D'oh - should be even numbered.
...
llvm-svn: 27088
2006-03-24 22:48:02 +00:00
Jim Laskey
f0729b4067
Add dwarf register numbering to register data.
...
llvm-svn: 27081
2006-03-24 21:15:58 +00:00
Jim Laskey
3c43609f1f
Add support to locate local variables in frames (early version.)
...
llvm-svn: 26994
2006-03-23 18:12:57 +00:00
Chris Lattner
6f95ab7abb
Eliminate IntrinsicLowering from TargetMachine.
...
Make the CBE and V9 backends create their own, since they're the only ones that use it.
llvm-svn: 26974
2006-03-23 05:43:16 +00:00
Nate Begeman
bb01d4f272
Remove BRTWOWAY*
...
Make the PPC backend not dependent on BRTWOWAY_CC and make the branch
selector smarter about the code it generates, fixing a case in the
readme.
llvm-svn: 26814
2006-03-17 01:40:33 +00:00
Chris Lattner
e363fdf318
Add support for 'special' llvm globals like debug info and static ctors/dtors.
...
llvm-svn: 26628
2006-03-09 06:14:35 +00:00
Chris Lattner
9c7f50376a
Copysign needs to be expanded everywhere. Note that Alpha and IA64 should
...
implement copysign as a native op if they have it.
llvm-svn: 26541
2006-03-05 05:08:37 +00:00
Chris Lattner
ec185f7843
Don't print constant initializers, they may span lines now.
...
llvm-svn: 26403
2006-02-27 20:09:23 +00:00
Chris Lattner
747cf60696
The HasNoV9 hack isn't needed here, now that tblgen knows that CustomDAGSchedInserter
...
instructions are expensive.
llvm-svn: 26298
2006-02-21 18:04:32 +00:00
Nate Begeman
5965bd19f8
kill ADD_PARTS & SUB_PARTS and replace them with fancy new ADDC, ADDE, SUBC
...
and SUBE nodes that actually expose what's going on and allow for
significant simplifications in the targets.
llvm-svn: 26255
2006-02-17 05:43:56 +00:00
Nate Begeman
8a77efe4f7
Rework the SelectionDAG-based implementations of SimplifyDemandedBits
...
and ComputeMaskedBits to match the new improved versions in instcombine.
Tested against all of multisource/benchmarks on ppc.
llvm-svn: 26238
2006-02-16 21:11:51 +00:00
Chris Lattner
6db414e8de
Sparc actually *DOES* have a directive for emitting zeros. In fact, it requires
...
it, because this:
.bss
X:
.byte 0
results in the assembler warning: "initialization in bss segment". Annoying.
llvm-svn: 26204
2006-02-15 07:07:14 +00:00
Chris Lattner
a9d0b5800a
Fix SingleSource/Regression/C/2004-08-12-InlinerAndAllocas.c on Sparc.
...
The ABI specifies that there is a register save area at the bottom of the
stack, which means the actual used pointer needs to be an offset from
the subtracted value.
llvm-svn: 26202
2006-02-15 06:41:34 +00:00
Chris Lattner
62c3484e43
Switch targets over to using SelectionDAG::getCALLSEQ_START to create
...
CALLSEQ_START nodes.
llvm-svn: 26143
2006-02-13 09:00:43 +00:00
Chris Lattner
fcb8a3aa76
Use the auto-generated call matcher. Remove a broken impl of the frameaddr/returnaddr
...
intrinsics.
Autogen frameindex matcher
llvm-svn: 26107
2006-02-10 07:35:42 +00:00
Chris Lattner
0c4dea4cb2
Update to new-style flags usage, simplifying the .td file
...
llvm-svn: 26106
2006-02-10 06:58:25 +00:00
Chris Lattner
4c0bd5bcdf
Done
...
llvm-svn: 26091
2006-02-09 20:00:19 +00:00
Chris Lattner
5259aa1c86
Enable LSR by default for SPARC: it is a clear win.
...
llvm-svn: 26090
2006-02-09 19:59:55 +00:00
Evan Cheng
d1b82d8db0
Match getTargetNode() changes (now return SDNode* instead of SDOperand).
...
llvm-svn: 26085
2006-02-09 07:17:49 +00:00
Chris Lattner
c75d5b093d
add an option to turn on LSR.
...
llvm-svn: 26080
2006-02-09 05:06:36 +00:00
Chris Lattner
f6190821da
Adjust to MachineConstantPool interface change: instead of keeping a
...
value/alignment pair for each constant, keep a value/offset pair.
llvm-svn: 26078
2006-02-09 04:46:04 +00:00
Evan Cheng
6dc90ca172
Change Select() from
...
SDOperand Select(SDOperand N);
to
void Select(SDOperand &Result, SDOperand N);
llvm-svn: 26067
2006-02-09 00:37:58 +00:00
Chris Lattner
463fa70eaa
Fix the Sparc backend with Evan's recent tblgen changes
...
llvm-svn: 26009
2006-02-05 08:35:50 +00:00
Evan Cheng
a28b764886
Use SelectRoot() as the entry to any tblgen based isel.
...
llvm-svn: 25998
2006-02-05 06:51:51 +00:00
Chris Lattner
a3e5b2c61c
remove V8 reference
...
llvm-svn: 25991
2006-02-05 06:32:59 +00:00
Chris Lattner
158e1f519c
Rename SPARC V8 target to be the LLVM SPARC target.
...
llvm-svn: 25985
2006-02-05 05:50:24 +00:00
Brian Gaeke
94e95d2b3e
Great renaming: Sparc --> SparcV9
...
llvm-svn: 11826
2004-02-25 18:44:15 +00:00
Brian Gaeke
10a32da382
FunctionLiveVarInfo.h moved: include/llvm/CodeGen -> lib/Target/Sparc/LiveVar
...
llvm-svn: 11804
2004-02-24 19:46:00 +00:00
Alkis Evlogimenos
8358cc573d
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
Chris Lattner
76b2ff4ded
Adjustments to support the new ConstantAggregateZero class
...
llvm-svn: 11474
2004-02-15 05:55:15 +00:00
Alkis Evlogimenos
5a92240270
Use newly added next() and prior() utility functions.
...
llvm-svn: 11430
2004-02-14 01:18:34 +00:00
Alkis Evlogimenos
8cdd0215bf
Remove getAllocatedRegNum(). Use getReg() instead.
...
llvm-svn: 11393
2004-02-13 21:01:20 +00:00
Chris Lattner
cbf0667743
Squish warning
...
llvm-svn: 11375
2004-02-13 16:14:50 +00:00
Brian Gaeke
c07b64f3cb
Remove this MachineOpCodeFlags assertion - its test can never be false.
...
llvm-svn: 11342
2004-02-12 04:01:07 +00:00
Alkis Evlogimenos
80da865f77
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
b22186adf0
MachineInstr::getOpCode() --> getOpcode() in SPARC back-end.
...
llvm-svn: 11335
2004-02-11 20:47:34 +00:00
Alkis Evlogimenos
8f4142616d
Increase constness.
...
llvm-svn: 11322
2004-02-11 17:55:09 +00:00
Alkis Evlogimenos
2f21547208
Remove assert as the only integer registers on the sparc are physical.
...
llvm-svn: 11317
2004-02-11 06:04:51 +00:00
Alkis Evlogimenos
fcb99fe370
Fix previous broken commit. A MachineOperand may have opType ==
...
MO_VirtualRegister but if the register number is one of a physical
register is it considered as a physical register.
llvm-svn: 11315
2004-02-11 05:55:00 +00:00
Alkis Evlogimenos
adcc14d96a
Remove assert as it is meaningless. MachineOperands can be tagged as
...
MO_VirtualRegister but actually be representing a physical register.
llvm-svn: 11310
2004-02-11 04:52:30 +00:00
Chris Lattner
1cb6d2697d
Stop using this method
...
llvm-svn: 11282
2004-02-10 21:12:06 +00:00
Chris Lattner
2d5feb5e04
Remvoe use of MO.isVirtualRegister(), turn an assertion into an assert()
...
llvm-svn: 11280
2004-02-10 20:47:24 +00:00
Chris Lattner
2aea68ccfd
Remove use of isPhysicalRegister
...
llvm-svn: 11277
2004-02-10 20:35:42 +00:00
Chris Lattner
ff04d76c57
Fix PR228: [sparc] Boolean constants are emitted as true and false
...
I will observe that the concept of using WriteAsOperand is completely broken,
but then we all knew that, didn't we?
llvm-svn: 11255
2004-02-10 05:16:44 +00:00
Misha Brukman
7f7a842bd6
Doxygenify comments.
...
llvm-svn: 11252
2004-02-09 23:18:42 +00:00
John Criswell
4dc5478fbc
Fix PR#226: When emitting padding, always emit it as bytes. Bytes can be
...
placed into any alignment situation.
llvm-svn: 11247
2004-02-09 22:15:33 +00:00
Brian Gaeke
f429a0e6dd
Add a new (static inline) std::ostream& << AllocInfo& method. Use it.
...
llvm-svn: 11002
2004-01-28 19:05:43 +00:00
Misha Brukman
929d1d1ca1
Use the LLVM standard name mangling infrastructure instead of reinventing the
...
wheel.
llvm-svn: 10891
2004-01-15 22:44:19 +00:00
Brian Gaeke
16d4009a1b
Include TargetRegInfo.h and declare SparcTargetMachine forward, to make this
...
header more easily includable.
llvm-svn: 10880
2004-01-15 18:17:07 +00:00
Chris Lattner
93cd755c05
Eliminate the isStringCompatible function, using ConstantArray::isString.
...
It's not clear why the code was looking for signed chars < 0, but it can't
matter to the assembler anyway, so the check goes away. This also fixes
compatibility with arrays of [us]byte that have constantexprs in them.
Also slightly restructure some code to be cleaner.
llvm-svn: 10854
2004-01-14 17:15:17 +00:00
Chris Lattner
66f33ff6c2
Finegrainify namespacification
...
Using the SlotCalculator is total overkill for this file, a simple map
will suffice. Why doesn't this use the NameMangler interface?
llvm-svn: 10823
2004-01-13 21:27:59 +00:00
Brian Gaeke
dbd9c33e5e
Remove dump-input option.
...
Make addPassesToEmitAssembly() look slightly more like addPassesToJITCompile().
llvm-svn: 10818
2004-01-13 19:26:21 +00:00
Chris Lattner
fe2aafe08a
Eliminate use of ConstantHandling itf
...
llvm-svn: 10782
2004-01-12 18:08:18 +00:00
Chris Lattner
4ee36320f4
Move sparc-specific livevar code into lib/Target/Sparc
...
llvm-svn: 10733
2004-01-09 18:15:24 +00:00
Chris Lattner
bb6fa4b327
Fix more incestuous #includage.
...
llvm-svn: 10732
2004-01-09 16:17:09 +00:00
Chris Lattner
3d874aebc2
Move InstrSelection into lib/Target/Sparc, as it's sparc specific. This
...
makes the incestuous #include'ing of sparc internal headers much less
disturbing. :)
llvm-svn: 10729
2004-01-09 06:22:34 +00:00
Chris Lattner
b9c7999881
Move lib/Codegen/RegAlloc into lib/Target/Sparc, as it is sparc specific
...
llvm-svn: 10728
2004-01-09 06:17:12 +00:00
Chris Lattner
5d236005b0
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
Chris Lattner
dfc5631bfd
Eliminate some code that is not needed now that we have the intrinsic lowering pass
...
llvm-svn: 10628
2003-12-28 09:46:33 +00:00
Misha Brukman
69aa1ccb07
Really release memory used by functions. Patch by Chris.
...
llvm-svn: 10572
2003-12-22 03:47:58 +00:00
Chris Lattner
9a4898939a
Hoist some sparc specific code into the sparc target
...
llvm-svn: 10554
2003-12-20 09:17:40 +00:00
Chris Lattner
833c3c2597
Rip JIT specific stuff out of TargetMachine, as per PR176
...
llvm-svn: 10542
2003-12-20 01:22:19 +00:00
Misha Brukman
ee158ca708
* Converted C-style comments to C++
...
* Doxygenified comments
* Reordered #includes
llvm-svn: 10503
2003-12-17 22:08:20 +00:00
Misha Brukman
0f42585924
Reordered #includes.
...
llvm-svn: 10502
2003-12-17 22:06:28 +00:00
Misha Brukman
426275b96d
Doxygenified some comments, reduced extraneous space.
...
llvm-svn: 10501
2003-12-17 22:06:08 +00:00
Misha Brukman
b01a80aa94
Reorganized the Sparc backend to be more modular -- each different
...
implementation of a Target{RegInfo, InstrInfo, Machine, etc} now has a separate
header and a separate implementation file.
This means that instead of a massive SparcInternals.h that forces a
recompilation of the whole target whenever a minor detail is changed, you should
only recompile a few files.
Note that SparcInternals.h is still around; its contents should be minimized.
llvm-svn: 10500
2003-12-17 22:04:00 +00:00
Alkis Evlogimenos
aaba4639f8
Change interface of MachineOperand as follows:
...
a) remove opIsUse(), opIsDefOnly(), opIsDefAndUse()
b) add isUse(), isDef()
c) rename opHiBits32() to isHiBits32(),
opLoBits32() to isLoBits32(),
opHiBits64() to isHiBits64(),
opLoBits64() to isLoBits64().
This results to much more readable code, for example compare
"op.opIsDef() || op.opIsDefAndUse()" to "op.isDef()" a pattern used
very often in the code.
llvm-svn: 10461
2003-12-14 13:24:17 +00:00
Misha Brukman
d181666052
* Add code to flush the ICache, which any self-respecting SMC must do
...
* Restore registers *after* everything else to avoid any possible side effects
This fixes McCat-imp.
llvm-svn: 10147
2003-11-21 23:48:54 +00:00
Misha Brukman
0e2e1f121a
Include the file before we close the llvm namespace.
...
llvm-svn: 9954
2003-11-13 00:23:05 +00:00
Misha Brukman
6675f982de
Substantially re-organized this file:
...
* There is now only one pass to print out assembly instead of two
* It is a FunctionPass
* The Module-level printing of globals is now in doFinalization() method of the
FunctionPass
* The code has been reformatted to follow LLVM coding standards
* Some comments, not all, were doxygenified
* Last but not least, the function to create an instance of this pass is also no
longer a method in the UltraSparc class.
llvm-svn: 9953
2003-11-13 00:22:19 +00:00
Misha Brukman
2558e8c852
The function to create an instance of this pass is no longer a method of
...
the UltraSparc class.
llvm-svn: 9952
2003-11-13 00:19:02 +00:00
Misha Brukman
167026f8c8
The functions to create new instances of passes are no longer methods in the
...
UltraSparc class. Comments are also doxygen-compatible now.
llvm-svn: 9951
2003-11-13 00:17:20 +00:00
Misha Brukman
b26c6fa4eb
* Put command-line switches in their own namespace
...
* Pass creation functions are no longer in the UltraSparc class
llvm-svn: 9950
2003-11-13 00:16:28 +00:00
Misha Brukman
893e793739
Force a dependency on the .inc file, which must be generated!
...
llvm-svn: 9949
2003-11-13 00:05:09 +00:00
Brian Gaeke
960707c335
Put all LLVM code into the llvm namespace, as per bug 109.
...
llvm-svn: 9903
2003-11-11 22:41:34 +00:00
Brian Gaeke
75bc7cec4b
Fix PR103
...
llvm-svn: 9830
2003-11-09 07:08:34 +00:00
Brian Gaeke
f8cb2419ee
Fix two typos I found in comments.
...
llvm-svn: 9806
2003-11-08 18:12:24 +00:00
Misha Brukman
a1eefa40dc
For some reason, LICM and GCSE like to crash the FunctionPassManager when they
...
are being added as FunctionPasses... Sigh.
llvm-svn: 9798
2003-11-08 00:01:39 +00:00
Misha Brukman
508cc3e7a9
Implement branching to a PC-relative constant (not a BasicBlock).
...
llvm-svn: 9793
2003-11-07 21:07:30 +00:00
Misha Brukman
3b2343eae9
PreSelection is not optional, it performs a necessary and vital transformation
...
for the Sparc backend: breaking up constant expressions. Thus, we cannot have it
guarded by a conditional, it should never be disabled.
Also, it's now available for the JIT since it is a FunctionPass.
llvm-svn: 9791
2003-11-07 20:33:25 +00:00
Misha Brukman
2c3068026a
Switch to emitting MachineConstantPool the way it was meant to be done.
...
llvm-svn: 9777
2003-11-07 18:06:26 +00:00
Misha Brukman
2133b0513d
Switch to using the standard representation of the constant pool -- namely, the
...
MachineConstantPool. This involved refactoring the two classes involved in
printing out Sparc assembly. In fact, they should share all this code anyway.
llvm-svn: 9776
2003-11-07 17:45:28 +00:00
Misha Brukman
faa42d264f
We accept TargetMachine as a const reference.
...
llvm-svn: 9775
2003-11-07 17:44:18 +00:00
Misha Brukman
bd4a8ed139
PreSelection and PeepholeOpts are now FunctionPasses.
...
llvm-svn: 9774
2003-11-07 17:43:43 +00:00
Misha Brukman
81c748c1e2
* Stop making a global for each constant that cannot live in an instruction;
...
it will be converted to a MachineConstantPool index during instruction
selection
* This is now eligible to become a FunctionPass since it does not have any side
effects outside of the function it is processing.
llvm-svn: 9773
2003-11-07 17:31:22 +00:00
Misha Brukman
bf9ed7ac1f
* Use the MachineConstantPool for storing constants instead of a hash_set;
...
* Do not create new globals for constants!
Also, order #includes as per coding style guide
llvm-svn: 9772
2003-11-07 17:29:48 +00:00
Misha Brukman
c16149d7dd
Use `basename $<` to get just the filename, not full path, for ease of reading.
...
llvm-svn: 9770
2003-11-07 17:26:27 +00:00
Chris Lattner
5285e9c9a0
Hopefully this will fix PR98
...
llvm-svn: 9762
2003-11-07 00:38:09 +00:00
Misha Brukman
b4ad4c3d4c
* Make the comment header 80 columns long
...
* Alphabetize #includes
llvm-svn: 9751
2003-11-06 18:06:13 +00:00
Brian Gaeke
adc07972bc
Tweak sed commands so that they filter out more # stuff and also
...
work on Mac OS X. Also turn ${...} into $(...); we do not speak BSD
Make.
llvm-svn: 9589
2003-10-29 20:07:35 +00:00
Misha Brukman
3f45389172
Make code layout more consistent.
...
llvm-svn: 9418
2003-10-23 16:48:30 +00:00
Misha Brukman
dbe73c5d6d
Add comments to describe what these functions actually do.
...
llvm-svn: 9370
2003-10-22 05:50:40 +00:00
Misha Brukman
8c0608cf0d
* Use <cmath> instead of <math.h>
...
* Order #includes according to LLVM coding standards
llvm-svn: 9369
2003-10-22 05:09:56 +00:00
Misha Brukman
cc0d34223d
Removed completely duplicated function comment (an identical one appears later).
...
llvm-svn: 9368
2003-10-22 04:55:09 +00:00
Misha Brukman
980d74c752
No, really, order the #includes correctly.
...
llvm-svn: 9367
2003-10-22 04:51:36 +00:00
Misha Brukman
88be700644
* Fix order of #includes to follow style guide
...
* It's no longer a BasicBlock pass: update comment on run() method
* Fix placement of braces to be consistent
* Delete extraneous whitespace
llvm-svn: 9361
2003-10-22 03:27:45 +00:00
Chris Lattner
73d9355fea
Hrm, unbreak stuph :(
...
llvm-svn: 9334
2003-10-21 17:22:23 +00:00
Chris Lattner
a62228d01a
Fix preselection/lowerswitches bug
...
llvm-svn: 9333
2003-10-21 16:29:23 +00:00
Chris Lattner
4439aee504
Pull the PHI special case into it's own visit* method
...
llvm-svn: 9332
2003-10-21 16:09:23 +00:00
Chris Lattner
898a42afde
The lastOp operand is never used
...
llvm-svn: 9331
2003-10-21 16:06:07 +00:00
John Criswell
9583cfafc5
Added LLVM copyright notice.
...
llvm-svn: 9324
2003-10-21 15:29:18 +00:00
John Criswell
29265fe981
Added LLVM copyright header.
...
llvm-svn: 9321
2003-10-21 15:17:13 +00:00
Chris Lattner
2e2a0ed7e1
Preselection is _not_ a basicblock pass, because it adds global variables to
...
the module. This change converts it from being a basic block pass to being
a simple pass. This allows elimination of the annotation and simplification
of the logic for moving constants into global variables.
llvm-svn: 9320
2003-10-21 14:49:19 +00:00
Vikram S. Adve
8264e29e01
When opcodes like ADD were split into reg. and immed. versions (ADDi and ADDr),
...
this code wasn't fixed correctly so it missed copy operations that used ADDi.
llvm-svn: 9318
2003-10-21 12:29:45 +00:00
Vikram S. Adve
64e8a13b7b
Why does g++ not even generate a warning when you miss a break statement?
...
llvm-svn: 9317
2003-10-21 12:28:27 +00:00
Vikram S. Adve
af2df5b7f9
Implement the new varargs instructions and intrinsics.
...
llvm-svn: 9316
2003-10-21 11:25:09 +00:00
John Criswell
4436c49787
Added LLVM copyright notice to Makefiles.
...
llvm-svn: 9312
2003-10-20 22:26:57 +00:00
Brian Gaeke
e7621515c0
Goodbye, AddRegNumToValues
...
llvm-svn: 9309
2003-10-20 20:44:03 +00:00
John Criswell
482202a601
Added LLVM project notice to the top of every C++ source file.
...
Header files will be on the way.
llvm-svn: 9298
2003-10-20 19:43:21 +00:00
Brian Gaeke
ca1789d3f5
Minor leftover fixups from replaceMachineCodeForFunction () change.
...
llvm-svn: 9295
2003-10-20 17:59:09 +00:00
Brian Gaeke
4bc3958c7b
Make replaceMachineCodeForFunction() return void.
...
llvm-svn: 9289
2003-10-20 15:17:12 +00:00
Brian Gaeke
67a5a865ae
Make replaceMachineCodeForFunction return void.
...
llvm-svn: 9288
2003-10-20 15:15:17 +00:00
Chris Lattner
f187b7691d
Apparently the dependencies are wrong for this file, so it didn't rebuild it
...
when changing Instruction.def. :(
llvm-svn: 9286
2003-10-20 14:12:52 +00:00
Chris Lattner
b94550e537
Change the Opcode enum for PHI nodes from "Instruction::PHINode" to "Instruction::PHI" to be more consistent with the other instructions.
...
llvm-svn: 9269
2003-10-19 21:34:28 +00:00
Chris Lattner
fb40334c25
Update the sparc backend to at least compile correctly with the new varargs stuff even if it's not all implemented yet.
...
llvm-svn: 9223
2003-10-18 05:55:58 +00:00
Brian Gaeke
2e24fcadf5
Refactor jump insertion code from CompilationCallback() into insertJumpAtAddr().
...
Make insertFarJumpAtAddr() return void, because nothing uses its return value.
Remove some commented-out code.
Implement replaceMachineCodeForFunction() for SPARC.
llvm-svn: 9203
2003-10-17 18:27:37 +00:00
Brian Gaeke
240fc39b07
Add prototype for replaceMachineCodeForFunction().
...
llvm-svn: 9202
2003-10-17 18:27:25 +00:00
Brian Gaeke
09d40333a2
Remove extra blank line.
...
llvm-svn: 9196
2003-10-17 18:09:10 +00:00
Alkis Evlogimenos
8faf8d93d5
Eliminate some extraneous code in SlotCalculator::insertVal().
...
Rename SlotCalculator::getValSlot() to SlotCalculator::getSlot(),
SlotCalculator::insertValue() to SlotCalculator::getOrCreateSlot(),
SlotCalculator::insertVal() to SlotCalculator::insertValue(), and
SlotCalculator::doInsertVal() to SlotCalculator::doInsertValue().
llvm-svn: 9190
2003-10-17 02:02:40 +00:00
Brian Gaeke
6855f03c56
Remove WordsEmitted statistic; there's already a non-backend-specific
...
jello statistic for this (just divide #-bytes-of-code-emitted by 4).
Rewrite head-of-file comment.
llvm-svn: 9098
2003-10-13 19:51:20 +00:00
Chris Lattner
44d2c3514a
Regularize header file comments
...
llvm-svn: 9071
2003-10-13 03:32:08 +00:00
Brian Gaeke
2797c131ef
Don't include "Config/stdlib.h".
...
llvm-svn: 9037
2003-10-10 19:12:22 +00:00
Brian Gaeke
b8a4ed6543
Include <cstdio> instead of <stdio.h>.
...
llvm-svn: 9032
2003-10-10 18:46:52 +00:00
Misha Brukman
8b2bd4ed47
Fix spelling.
...
llvm-svn: 9027
2003-10-10 17:57:28 +00:00
Brian Gaeke
4547ab19b0
Add # of printed instructions statistic to both the SPARC and X86 LLC backends.
...
llvm-svn: 8892
2003-10-06 15:41:21 +00:00
Chris Lattner
fb25374170
Add support for the Invoke instruction by using the LowerInvoke pass
...
llvm-svn: 8872
2003-10-05 19:16:09 +00:00
Misha Brukman
cda2885499
The comment seems irrelevant as the pass has become a BasicBlock pass.
...
llvm-svn: 8803
2003-10-01 05:24:50 +00:00
Chris Lattner
1440902484
Make sure to get the definition of getRegisterAllocator
...
llvm-svn: 8801
2003-09-30 22:24:00 +00:00
Chris Lattner
8b583a229d
RegisterAllocation.h is going away
...
llvm-svn: 8795
2003-09-30 20:15:04 +00:00
Brian Gaeke
167d87443a
Add statistic for # of emitWord() calls.
...
llvm-svn: 8772
2003-09-30 17:49:41 +00:00
Misha Brukman
427929adfb
Fixed spelling.
...
llvm-svn: 8687
2003-09-23 17:28:11 +00:00
Misha Brukman
84b1140e2c
Fix spelling.
...
llvm-svn: 8686
2003-09-23 17:27:28 +00:00
Vikram S. Adve
49cf091005
Fix assertion so it doesn't not trip incorrectly.
...
llvm-svn: 8650
2003-09-21 07:55:27 +00:00
Brian Gaeke
7af0df0015
Fix a typo in Sparc.cpp.
...
Update names of some pass creator fns in addPassesToEmitAssembly().
FunctionInfo is gone.
llvm-svn: 8599
2003-09-18 17:37:46 +00:00
Brian Gaeke
310b1d899a
Rename the pass creator fn to mimic the other creator fn names.
...
llvm-svn: 8598
2003-09-18 17:37:35 +00:00
Brian Gaeke
24e706c1ac
Fix (and properly doxygenify) some comments. Incorporate
...
functionality of FunctionInfo pass as doFinalization method.
Rename pass to match names of other passes like it.
Rename the pass creator fn to mimic the other creator fn names.
Include StringExtras for utostr().
Make symbol prologue/epilogue stuff redundant with
EmitBytecodeToAssembly, in preparation for refactoring.
llvm-svn: 8597
2003-09-18 17:37:25 +00:00
Brian Gaeke
b4aa604093
Make the symbol prologue/epilogue stuff redundant with MappingInfo, in
...
preparation for refactoring.
Rename the pass creator fn to mimic the other creator fn names.
llvm-svn: 8596
2003-09-18 17:37:14 +00:00
Vikram S. Adve
256fc40375
Fix longjmp case so that, along with the call to abort(), we also
...
generate the appropriate CallArgsDescriptor and tmp. virtual regs.
llvm-svn: 8554
2003-09-16 05:56:22 +00:00
John Criswell
732ae94521
Don't explicitly use $SourceDir to find the tblgen files. This causes make
...
some confusion when trying to generate files (it probably couldn't tell that
./file and $(SourceDir)/file may be the same file).
Now, just let VPATH find everything, and list the primary tblgen file first in
the list of dependencies so that we can just use $< to reference it in the make
rule.
This should hopefully fix the nightly tester.
llvm-svn: 8433
2003-09-10 14:10:44 +00:00
John Criswell
ded9899d2d
Updated to find source files using VPATH. This makes writing build rules
...
much cleaner and easier.
Labeled .td as a suffix for tblgen files in Makefile.rules.
Modified build rules so that source files generated during the build are placed
in the build directory and not the source directory (and not in a Debug
directory). This makes the system cleaner and allows us to have a read-only
source tree.
llvm-svn: 8424
2003-09-09 20:57:03 +00:00
John Criswell
0d1a26ddc2
Checkin of autoconf-style object root.
...
Adjusted Makefile to work with new autoconf-style object root.
Specifically, use the new -I option of tblgen to find include files.
llvm-svn: 8379
2003-09-06 14:50:22 +00:00
Misha Brukman
c1ac706afb
Added some optimizations:
...
* Generate a single BA instead of 6-instruction JUMP if possible
(this occurs both in the creation and overwriting of the stub code)
* If possible, rewrite the ORIGINAL call to call the generated function
directly, thus bypassing the stub entirely
Also added some statistics on how often calls are overwritten and how often the
CompilationCallback is invoked.
llvm-svn: 8376
2003-09-05 22:59:31 +00:00
Chris Lattner
b49a8d7e01
No longer provide an optinfo, noone uses it
...
llvm-svn: 8311
2003-09-01 20:40:59 +00:00
Chris Lattner
825624e954
Inline simple comparison which is sparc specific anyway
...
llvm-svn: 8309
2003-09-01 20:38:03 +00:00
Chris Lattner
0792315409
Move private interfaces into private .h file
...
llvm-svn: 8306
2003-09-01 20:33:07 +00:00
Chris Lattner
8a3d3d26a5
Simplify code a bit
...
llvm-svn: 8301
2003-09-01 20:24:06 +00:00
Chris Lattner
eefb565449
LiveRange.h is now in lib/CodeGen/RegAlloc
...
llvm-svn: 8299
2003-09-01 20:17:13 +00:00
Chris Lattner
e80612a28e
LiveRangeInfo got moved into the lib/CodeGen/RegAlloc directory
...
llvm-svn: 8297
2003-09-01 20:12:17 +00:00
Chris Lattner
8c50571f12
IGNode got moved to lib/CodeGen/RegAlloc
...
llvm-svn: 8294
2003-09-01 20:00:08 +00:00
Chris Lattner
69382173e9
This file just needs LiveRange.h not IGNode.h
...
llvm-svn: 8293
2003-09-01 19:58:02 +00:00
Chris Lattner
3323829ecc
No longer include IGNode.h in the Sparc global header
...
llvm-svn: 8292
2003-09-01 19:56:48 +00:00
Misha Brukman
9770b83509
* Use alloca() to force GCC not to eliminate frame pointer
...
* Break apart saving and restoring registers into separate functions
* Instead of saving single and double FP registers, just save the double
registers -- aliasing helps preserve the single FP registers as well.
* Request just as much memory for a stub as we actually use
llvm-svn: 8200
2003-08-29 04:22:54 +00:00
Chris Lattner
4fd144acc8
Targets should configure themselves based on a Module, not some wierd flags
...
llvm-svn: 8132
2003-08-24 19:49:48 +00:00
Chris Lattner
43450cb075
Change all #include'd files to be :: rules instead of : rules
...
llvm-svn: 8019
2003-08-21 20:37:17 +00:00
Chris Lattner
a592cac43c
Add support for the sig(set|long)jmp intrinsics
...
llvm-svn: 7951
2003-08-18 16:06:09 +00:00
Misha Brukman
7eb05a170a
Spell `necessary' correctly.
...
llvm-svn: 7944
2003-08-18 14:43:39 +00:00
Brian Gaeke
f365176472
Rename -emitmaps to -enable-maps
...
llvm-svn: 7913
2003-08-16 00:23:16 +00:00
Misha Brukman
0238ea5d69
Now that the JIT memory manager allocates as many bytes as necessary rather than
...
rounding up to a page, we need to request (num instrs * 4) bytes. However, I
think that 64 bytes is overkill for the stub function.
llvm-svn: 7888
2003-08-15 18:03:06 +00:00
Misha Brukman
7d98bf2921
Fix register and parameter numbers in saving double FP registers.
...
llvm-svn: 7884
2003-08-15 16:15:28 +00:00
Misha Brukman
a12864b1bd
* Must save FP registers when calling CompilationCallback(), because FP
...
registers are global, are NOT windowed, and hence can be clobbered!
* Removed unused register shorthand notations
* Fixed and cleaned up comments in inline assembly
llvm-svn: 7853
2003-08-15 00:26:50 +00:00
Misha Brukman
4aab2b25b3
Since we now have TableGen editing modes for VIM and (X)Emacs, we no longer need
...
to mark TableGen description files with "C++ mode".
llvm-svn: 7841
2003-08-14 15:16:28 +00:00
Chris Lattner
bf0c0100f6
Restore 'nice name' to pass
...
llvm-svn: 7840
2003-08-14 14:43:24 +00:00
Brian Gaeke
8c14ba96ca
Factory methods for function passes now return type FunctionPass *.
...
llvm-svn: 7839
2003-08-14 06:09:32 +00:00
Brian Gaeke
74db4c7e27
Unbreak SPARC backend: addPassesToJITCompile and
...
addPassesToEmitMachineCode now both take a FunctionPassManager.
llvm-svn: 7837
2003-08-14 06:04:59 +00:00
Brian Gaeke
cbd3a40626
Factory methods for function passes now return type FunctionPass *.
...
Get rid of RegisterLLC, which can't handle FunctionPasses anyway.
llvm-svn: 7836
2003-08-14 06:04:49 +00:00
Brian Gaeke
ec8519d6b6
Unbreak SPARC backend: addPassesToJITCompile and
...
addPassesToEmitMachineCode now both take a FunctionPassManager.
Factory methods for function passes now return type FunctionPass *.
llvm-svn: 7835
2003-08-14 06:04:29 +00:00
Chris Lattner
ec611ae0d0
Adjust files for move of mapping info stuff into the Sparc directory
...
llvm-svn: 7802
2003-08-13 02:38:16 +00:00
Vikram S. Adve
d6f22ad8d3
Disable emitting LLVM-to-MI maps, by default.
...
Add -emitmaps options to turn this back on.
llvm-svn: 7774
2003-08-12 15:51:02 +00:00
Vikram S. Adve
029ed09323
Fix va_arg to generate LDDFi for floating point values, instead of LDXi.
...
All non-FP cases use LDXi as before.
llvm-svn: 7765
2003-08-12 03:04:05 +00:00
Vikram S. Adve
2df6ea2f38
Register argument to va_start must be marked as defined!
...
llvm-svn: 7734
2003-08-11 18:42:47 +00:00
Misha Brukman
1fe74d144b
Implement LLVM intrinsics `llvm.setjmp' and `llvm.longjmp' as follows:
...
* setjmp() simply returns 0
* longjmp() simply calls abort()
llvm-svn: 7676
2003-08-07 15:43:46 +00:00
Vikram S. Adve
6e4a358f72
Fix sanity-checking in 'maskUnsigned' code to be more precise:
...
use or def-and-use operands can be substituted after one def-only
operand has been substituted.
llvm-svn: 7674
2003-08-07 15:01:26 +00:00
Misha Brukman
b611692487
Changing command-line option formats to be more consistent with LLVM style.
...
llvm-svn: 7658
2003-08-06 23:25:25 +00:00
Misha Brukman
8f18938d1c
* Renamed option from `nopreselect' to `nopreopt' since it disables more than
...
just PreSelection
* Wrapped code at 80 columns
* Added the DecomposeMultiDimRefs Pass to the JIT compilation path
llvm-svn: 7657
2003-08-06 23:06:21 +00:00
Misha Brukman
79226d066e
Use the registers g1 and g5 as temporaries for making far jumps and far calls,
...
because saving i1 and i2 to their ``designated'' stack slots corrupts unknown
memory in other functions, standard libraries, and worse.
In addition, this has the benefit of improving JIT performance because we
eliminate writing out 4 instructions in CompilationCallback() and 2 loads and 2
stores.
llvm-svn: 7653
2003-08-06 22:19:18 +00:00
Vikram S. Adve
792b48f4d1
1. Bug fix: was using SLL instead of SLLX for ULongTy. Chump.
...
2. Handle fp-to-uint conversions directly here instead of relying on
a pre-transformation to replace them with the 2-step conversion.
3. Use size rather than explicitly checking types when deciding what
opcodes to use, wherever possible. This is less error prone (the
bug fix above was not the first time!).
4. Float-to-pointer casts shd now work though this hasn't been tested.
llvm-svn: 7645
2003-08-06 18:48:40 +00:00
Vikram S. Adve
26125cbeb5
Remove conversion of fp-to-uint cast into a multi-step cast:
...
this is not an optional transformation on SPARC and is now handled
directly by instruction selection.
llvm-svn: 7644
2003-08-06 18:42:49 +00:00
Misha Brukman
4510698acb
SparcV9CodeEmitter.cpp:
...
* Doxygen-ified comments
* Added capability to make far calls (i.e., beyond 30 bits in CALL instr)
which implies that we need to delete function references that were added by
the call to addFunctionReference() because the actual call instruction is 10
instructions away (thanks to 64-bit address construction)
* Cleaned up code that generates far jumps by using an array+loop
SparcV9CodeEmitter.h:
* Explained more of the side-effects of emitFarCall()
llvm-svn: 7639
2003-08-06 16:20:22 +00:00
Chris Lattner
21343336d6
This method has now been changed to preserve flags for us!
...
llvm-svn: 7603
2003-08-05 16:59:24 +00:00
Misha Brukman
1e88cfb42e
* Removed `using' declaration, now use full namespace qualifier std::string
...
* Simplified code by using an inline function instead of copy-pasted code
llvm-svn: 7597
2003-08-05 16:01:50 +00:00
Misha Brukman
5c68269dfd
* Set annul bit to be 0, because the Sparc backend currently does not use it.
...
* Use the name of the predict field instead of just the const 1 in the
Instruction.
llvm-svn: 7592
2003-08-05 14:34:38 +00:00
Chris Lattner
9fb7e0a425
Transition to using 'let X = y' instead of 'set X = y'.
...
llvm-svn: 7565
2003-08-04 05:03:18 +00:00
Chris Lattner
fea54c2511
DEBUG got moved to Debug.h
...
llvm-svn: 7495
2003-08-01 22:19:03 +00:00
Chris Lattner
c0eb77c24c
Remove makefile complexity by always running tablegen with its final output
...
directory.
llvm-svn: 7485
2003-08-01 20:34:56 +00:00
Vikram S. Adve
89f9397668
Add all arithmetic operators to ConstantExprToString().
...
Note that some generated operators (like &, | or ^) may
not be supported by the assembler -- but if they've got
this far, it's better to generate them and let the assembler decide.
llvm-svn: 7476
2003-08-01 15:55:53 +00:00
Vikram S. Adve
16c2b62d13
*Both* operands of divide need sign-extension before divide (if smaller
...
than machine register size), not just the second operand.
llvm-svn: 7475
2003-08-01 15:54:38 +00:00
Vikram S. Adve
36fcc5d8b3
Put back the separate pass to decompose multi-dimensional references
...
since it is *necessary* for correct code generation. Only optional
transformations belong in the PreOpts pass (which needs to be renamed
from PreSelection to PreOpts).
llvm-svn: 7474
2003-08-01 15:53:24 +00:00
Chris Lattner
a979d4dd27
We no longer need to preprocess SparcV9.td before sending it through tablegen
...
llvm-svn: 7437
2003-07-30 21:00:37 +00:00
Vikram S. Adve
4f6b98900c
When emitting a constant, check for ConstantExpr before
...
ordinary (primitive) types since ConstantExprs may be of primitive type!
llvm-svn: 7418
2003-07-30 12:54:47 +00:00
Chris Lattner
33a3edad1b
Conform to the new interface for describing target registers... even though
...
it's currently not used.
llvm-svn: 7416
2003-07-30 05:51:34 +00:00
Chris Lattner
3f368e3432
Only regenerate the .inc file if IT has changed, not just if the .td files
...
have changed.
llvm-svn: 7414
2003-07-30 05:49:17 +00:00
Chris Lattner
4f94bedfa6
Do not use 'cpp' directly
...
llvm-svn: 7404
2003-07-29 23:04:41 +00:00
Misha Brukman
0f918540b6
* Cleaned up and corrected comments wrt instruction formats
...
* Enabled STXFSR instructions
llvm-svn: 7400
2003-07-29 21:21:20 +00:00
Misha Brukman
fb8f64a590
Make emitFarCall() public, and add a few comments to functions.
...
llvm-svn: 7399
2003-07-29 20:52:56 +00:00
Vikram S. Adve
e895c2e241
Unify all constant evaluations that depend on register size
...
in ConvertConstantToIntType.
llvm-svn: 7395
2003-07-29 19:59:23 +00:00
Vikram S. Adve
2b630b4ec2
Rename 'dump-asm' to 'dump-input' and really print it just before code-gen.
...
llvm-svn: 7394
2003-07-29 19:58:00 +00:00
Vikram S. Adve
dbc0eb6a2d
Bug fix: don't unnecessarily pretty-print control-characters, some of
...
which were wrong (particularly, '\a' for '\007').
llvm-svn: 7393
2003-07-29 19:57:34 +00:00
Vikram S. Adve
648ce40adf
Add ConvertConstantToIntType() to unify all constant handling
...
that depends on machine register size.
Moved insertCallerSavingCode() to PhyRegAlloc and
moved isRegVolatile and modifiedByCall to TargetRegInfo: they are all
machine independent. Remove several dead functions.
llvm-svn: 7392
2003-07-29 19:54:41 +00:00
Vikram S. Adve
2353584afc
Add code to support stack spill/temp offsets that don't fit in the
...
immed. field. Moved insertCallerSavingCode() to PhyRegAlloc: it is
now machine independent. Remove all uses of PhyRegAlloc.
llvm-svn: 7391
2003-07-29 19:53:21 +00:00
Misha Brukman
0db560d8f6
* Correctly emit a far call if the target address does not fit into 30 bits
...
instead of assert()ing
* Fixed a nasty bug where '07' was used instead of register 'o7'
llvm-svn: 7382
2003-07-29 19:00:58 +00:00
Chris Lattner
ae92d0bba6
Specify the value type for the register, not just the size.
...
llvm-svn: 7357
2003-07-28 04:25:36 +00:00
Chris Lattner
99dbdf7391
This code doesn't modify the LLVM structure, keep stuff const
...
llvm-svn: 7343
2003-07-26 23:04:00 +00:00
Vikram S. Adve
536b19220c
(1) Major fix to the way unused regs. are marked and found for the FP
...
Single and FP double reg types (which share the same reg class).
Now all methods marking/finding unused regs consider the regType
within the reg class, and SparcFloatRegClass specializes this code.
(2) Remove machine-specific regalloc. methods that are no longer needed.
In particular, arguments and return value from a call do not need
machine-specific code for allocation.
(3) Rename TargetRegInfo::getRegType variants to avoid unintentional
overloading when an include file is omitted.
llvm-svn: 7334
2003-07-25 21:12:15 +00:00
Vikram S. Adve
9b17ad16c4
1. Fix a case that was marking the invalid reg. num. (-1) as used,
...
causing a nasty array bound error later.
2. Fix silly typo causing logical shift of unsigned long to use
SRL instead of SRLX.
llvm-svn: 7330
2003-07-25 21:08:58 +00:00
Chris Lattner
f26a8ee580
Remove redundant const qualifiers from cast<> expressions
...
llvm-svn: 7253
2003-07-23 15:30:06 +00:00
Chris Lattner
6077c3195f
Simplify code by using ConstantInt::getRawValue instead of checking to see
...
whether the constant is signed or unsigned, then casting
llvm-svn: 7252
2003-07-23 15:22:26 +00:00
Chris Lattner
c783297812
Simplify code a bit
...
llvm-svn: 7217
2003-07-21 19:56:49 +00:00
Anand Shukla
bd2d0577fb
Added special consideration for instrumentation strategy
...
llvm-svn: 7208
2003-07-20 15:39:30 +00:00
Misha Brukman
e32251b56d
Fixed the number translation scheme for the integer condition code registers: it
...
now works in instructions which require a 2-bit or 3-bit INTcc code.
Incidentally, that means that the representation of INTcc registers is now the
same in both integer and FP instructions. Thus, code became much simpler and
cleaner.
llvm-svn: 7185
2003-07-16 20:30:40 +00:00
Misha Brukman
bc0ecb29c8
The name should really be `simm11' to follow the naming convention, but this has
...
no change in functionality.
llvm-svn: 7184
2003-07-16 20:27:44 +00:00
Misha Brukman
d49975cf29
No need for a second immediate field if the class already inherits one.
...
llvm-svn: 7182
2003-07-15 21:27:14 +00:00
Misha Brukman
4cf012d845
Encode predict = 1 by default, because the Sparc assembler does this.
...
llvm-svn: 7181
2003-07-15 21:26:49 +00:00
Misha Brukman
384cb5dd10
Correctly handle calls to functions which are further away than 2**32 bits will
...
allow, i.e. make a sequence of instructions to enable an indirect call using
jump-and-link and 2 temporary registers (which we save and ultimately restore).
Warning: if the delay slot of a function call is used to do meaningful work and
not just a NOP, this behavior is incorrect. However, the Sparc backend does not
yet utilize the delay slots effectively, so it is not necessary to make an
overly complicated algorithm for something that's not used.
llvm-svn: 7178
2003-07-15 19:09:43 +00:00
Misha Brukman
b402819ddf
* Added support for the %ccr register
...
* FP double registers are now coded correctly
* Removed function which converted registers based on register types, it was
broken (because regTypes are broken)
llvm-svn: 7175
2003-07-14 23:26:03 +00:00
Misha Brukman
7fdaab4f68
The word `separate' only has one `e'.
...
llvm-svn: 7173
2003-07-14 17:20:40 +00:00
Vikram S. Adve
4f420ce3a3
Several important bug fixes:
...
(1) Cannot use ANDN(ot), ORN, and XORN for boolean ops, only bitwise ops.
(2) Conditional move instructions must distinguish signed and unsigned
condition codes, e.g., MOVLE vs. MOVLEU.
(3) Conditional-move-on-register was using the cond-move-on-cc opcodes,
which produces a valid-looking instruction with bogus registers!
(4) Here's a really cute one: dividing-by-2^k for negative numbers needs to
add 2^k-1 before shifting, not add 1 after shifting. Sadly, these
are the same when k=0 so our poor test case worked fine.
(5) Casting between signed and unsigned values was not correct:
completely reimplemented.
(6) Zero-extension on unsigned values was bogus: I was only doing the
SRL and not the SLLX before it. Don't know WHAT I was thinking!
(7) And the most important class of changes: Sign-extensions on signed values.
Signed values are not sign-extended after ordinary operations,
so they must be sign-extended before the following cases:
-- passing to an external or unknown function
-- returning from a function
-- using as operand 2 of DIV or REM
-- using as either operand of condition-code setting operation
(currently only SUBCC), with smaller than 32-bit operands
Also, a couple of improvements:
(1) Fold cast-to-bool into Not(bool). Need to do this for And, Or, XOR also.
(2) Convert SetCC-Const into a conditional-move-on-register (case 41)
if the constant is 0. This was only being done for branch-on-SetCC-Const
when the branch is folded with the SetCC-Const.
llvm-svn: 7159
2003-07-10 20:07:54 +00:00
Vikram S. Adve
8ea738a9ff
Bug fix in creating constants: need 1U << 31, not 1 << 31.
...
llvm-svn: 7158
2003-07-10 19:48:19 +00:00
Vikram S. Adve
2f90c823a2
Fold cast-to-bool into not. Later, this should also be folded into other
...
boolean operations: AND, OR, XOR.
llvm-svn: 7157
2003-07-10 19:47:42 +00:00
Vikram S. Adve
6528067646
Several fixes to handling of int CC register:
...
(1) An int CC live range must be spilled if there are any interferences,
even if no other "neighbour" in the interf. graph has been allocated
that reg. yet. This is actually true of any class with only one reg!
(2) SparcIntCCRegClass::colorIGNode sets the color even if the LR must
be spilled so that the machine-independent spill code doesn't have to
make the machine-dependent decision of which CC name to use based on
operand type: %xcc or %icc. (These are two halves of the same register.)
(3) LR->isMarkedForSpill() is no longer the same as LR->hasColor().
These should never have been the same, and this is necessary now for #2 .
(4) All RDCCR and WRCCR instructions are directly generated with the
phony number for %ccr so that EmitAssembly/EmitBinary doesn't have to
deal with this.
llvm-svn: 7151
2003-07-10 19:42:11 +00:00
Misha Brukman
ea6e7a5d72
Elaborated assembly syntax of instructions in the comments.
...
llvm-svn: 7120
2003-07-07 22:18:42 +00:00
Misha Brukman
25a49f0cf1
Removed unnecessary assignment (it was taken care by a superclass) and clarified
...
some comments.
llvm-svn: 7119
2003-07-07 22:18:06 +00:00
Misha Brukman
c1db0fdd7e
Moved RegClassIDs enum to be next to the RegTypes enum.
...
llvm-svn: 7114
2003-07-07 16:52:39 +00:00
Vikram S. Adve
55c8e21073
Correction to last fix: Pointer types do not return true in Type::IsIntegral().
...
llvm-svn: 7113
2003-07-06 22:50:31 +00:00
Vikram S. Adve
d09c4c34c0
Major bug fix though it happened rarely (only on a compare after an
...
integer overflow):
We need to use %icc and not %xcc for comparisons on 32-bit or smaller
integer values.
llvm-svn: 7111
2003-07-06 20:13:59 +00:00
Vikram S. Adve
c4499d6cb1
Make the RegClassID values public -- there is no other way to get them.
...
llvm-svn: 7109
2003-07-06 19:53:59 +00:00
Misha Brukman
bb95605448
Apparently, the "regType" and "regClass" used in the Sparc backend are not both
...
correct: empirically, "regType" is wrong for a number of registers. Thus, one
can only rely on the "regClass" to figure out what kind of register one is
dealing with.
This change switches to using only "regClass" and adds a few extra DEBUG() print
statements and a few clean-ups in comments and code, mostly minor.
llvm-svn: 7103
2003-07-03 18:36:47 +00:00
Misha Brukman
20d93ca01d
* Force all "don't care" bits to 0 so that there are absolutely no unset bits in
...
the TableGen descriptions; all unset bits are thus errors.
* As a result, found and fixed instructions where some operands were not
actually assigned into the right portion of the instruction.
llvm-svn: 7074
2003-07-02 19:37:48 +00:00
Misha Brukman
eccc0dac91
The classes F4_3 and F4_4 have an `rd' operand that needs to be set.
...
llvm-svn: 7073
2003-07-02 18:27:47 +00:00
Misha Brukman
81951e1142
Properly fix instruction syntax in comments, using `imm' for instructions that
...
use an immediate value instead of a register.
llvm-svn: 7072
2003-07-02 18:15:43 +00:00
Misha Brukman
6f9caec57f
Fixed instruction syntax in the comments (specifies how instr is used).
...
llvm-svn: 7071
2003-07-02 18:02:58 +00:00
Vikram S. Adve
7a4abf89fa
Force fixed-size but large alloca objects to the dynamically allocated
...
area to avoid using up precious stack space within the 4095 offset limit
from %fp. Such objects that would themselves live at a large offset
were being put there already so this is a simple change.
llvm-svn: 7066
2003-07-02 06:59:22 +00:00
Vikram S. Adve
cf952cb504
(1) Major bug fix: DecomposeArrayRef() replaces its argument instr. and
...
deletes it, but we were merrily trying to fix the operands of that
instruction anyway! Instead, fix the replacement instruction.
(2) An Improvement: Check for and extract global values in all operands,
not just in known pointer operands. For example, they can occur in
call arguments, and probably other unforeseeable places as well.
This also eliminates the special-case handling of Load and Store.
llvm-svn: 7053
2003-07-02 01:23:15 +00:00
Vikram S. Adve
b5f8ada255
Bug/case fixes:
...
(1) select: Ok to convert a pointer to a float or double.
(2) regalloc: Some MachineInstr* for caller-saving code before a call
were being inserted before and after the call!
(3) Don't insert the caller-saving instructions in the
MachineCodeForInstruction for the Call instruction.
*All* instructions generated by register allocation need to be
recorded in those maps, but it needs to be done uniformly.
llvm-svn: 7051
2003-07-02 01:13:57 +00:00
John Criswell
3ef61afb76
Merged in autoconf branch. This provides configuration via the autoconf
...
system.
llvm-svn: 7014
2003-06-30 21:59:07 +00:00
Vikram S. Adve
50b1d41ad4
Add the padding needed for variable-size alloca's, which should work now.
...
llvm-svn: 6859
2003-06-23 02:13:57 +00:00
Chris Lattner
9cb6b02dc9
Some preprocessors doen't support // comments and get confused
...
llvm-svn: 6821
2003-06-20 23:14:50 +00:00
Vikram S. Adve
f6aaa90e8d
RDCCR defines arg. #1 , not arg. #2 .
...
llvm-svn: 6796
2003-06-20 11:32:11 +00:00
Brian Gaeke
cf8c4f5fe4
lib/Target/Sparc/Sparc.cpp:
...
Move LowerAllocations, PrintFunction, and SymbolStripping passes, and
the corresponding -disable-strip and -d options, over here to the SPARC
target-specific bits of llc. Rename -d to -dump-asm.
tools/llc/Makefile:
Reindent. Add x86 library so that llc compiles again.
tools/llc/llc.cpp:
Remove support for running arbitrary optimization passes. Use opt instead.
Remove LowerAllocations, PrintFunction, and SymbolStripping passes, as noted
above.
Allow user to select a backend (x86 or SPARC); default to guessing from
the endianness/pointer size of the input bytecode file.
Fix typos.
Delete empty .s file and exit with error status if target does not support
static compilation.
llvm-svn: 6776
2003-06-18 21:14:23 +00:00
Chris Lattner
d768c51f1b
These instructions really take three operands. This fixes some assertions
...
llvm-svn: 6765
2003-06-18 15:09:02 +00:00
Chris Lattner
3bcde17e00
Rename FInfo.cpp to FunctionInfo.cpp, eliminate FInfo.h
...
llvm-svn: 6712
2003-06-16 15:31:52 +00:00
Chris Lattner
617ea34a6d
move contents of include/llvm/Reoptimizer/Mapping/FInfo.h into here, it is sparc internal
...
llvm-svn: 6711
2003-06-16 15:31:09 +00:00
Chris Lattner
cb9ef2bccc
Fix invalid number of arguments problem
...
llvm-svn: 6692
2003-06-16 12:03:00 +00:00
John Criswell
fafd3d2b31
Updated for the new projects Makefile.
...
llvm-svn: 6678
2003-06-11 13:49:11 +00:00
Misha Brukman
ff61facc3c
Print address out as hex.
...
llvm-svn: 6657
2003-06-06 09:53:28 +00:00
Misha Brukman
ad2ab66d89
Added 'r' and 'i' versions to WRCCR.
...
llvm-svn: 6656
2003-06-06 09:52:58 +00:00
Misha Brukman
2969ec5266
* Changed Bcc instructions to behave like BPcc instructions
...
* BPA and BPN do not take a %cc register as a parameter
* SLL/SRL/SRA{r,i}5 are there for a reason - they are ONLY 32-bit instructions
* Likewise, SLL/SRL/SRAX{r,i}6 are only 64-bit
* Added WRCCR{r,i} opcodes
llvm-svn: 6655
2003-06-06 09:52:23 +00:00
Misha Brukman
0941cd11c8
* Removed PreSelection pass because that is now done in the JIT
...
* Removed instruction scheduling as it is too slow to run in a JIT environment
* Removed other passes because they aren't necessary and can slow JIT down
llvm-svn: 6652
2003-06-06 07:11:16 +00:00
Misha Brukman
b7f76d32fe
Fixed a bunch of test cases in test/Regression/Jello which could not get the
...
address of a floating-point (allocated via ConstantPool) correctly.
llvm-svn: 6647
2003-06-06 04:41:22 +00:00
Misha Brukman
905ffcb780
* If a global is not a function, just ask the MachineCodeEmitter for the addr
...
* Do not block a print statement with a DEBUG() guard if we're going to abort()
llvm-svn: 6645
2003-06-06 03:35:37 +00:00
Misha Brukman
ee21ccc607
The SUB*i instructions belong to a different class than their SUB*r brethren.
...
llvm-svn: 6644
2003-06-06 03:34:47 +00:00
Misha Brukman
1c1568ed68
Put all debug print statements under the DEBUG() guard to make output clean so
...
that tests can automatically diff the output.
llvm-svn: 6642
2003-06-06 00:26:11 +00:00
Misha Brukman
ee964e2690
Fixed confusion between register classes and register types.
...
Now %fcc registers are recognized correctly.
llvm-svn: 6640
2003-06-05 23:51:10 +00:00
Misha Brukman
97a04b24cc
Added missing directive to store the instruction name.
...
llvm-svn: 6639
2003-06-05 23:35:11 +00:00
Misha Brukman
90fd75efa4
Moved predict and annul fields to the end of each individual instruction
...
class, because they are currently unused.
llvm-svn: 6638
2003-06-05 23:33:15 +00:00
Misha Brukman
fd394b766a
Do not preset the cc register, the instructions actually use it.
...
llvm-svn: 6637
2003-06-05 23:30:27 +00:00
Vikram S. Adve
82dca3714f
Minor tuning -- avoid a non-inlinable function call on every operand.
...
Also, reorder a couple of functions for inlining.
llvm-svn: 6635
2003-06-05 21:12:56 +00:00
Misha Brukman
27afe52c4c
Added lazy function resolution to the JIT.
...
llvm-svn: 6633
2003-06-05 20:52:06 +00:00
Misha Brukman
9ac56f847f
* The textual output of (non-)predicted FP branches is the same.
...
* Stop mapping FBcc instructions to deprecated opcodes, map to FBPcc instead.
* Fixed opf in FCMPxy instructions.
llvm-svn: 6632
2003-06-05 20:51:37 +00:00
Misha Brukman
cbbe7ac699
All store instructions really want 'rd' in the first field.
...
Special cases: STFSRx and STXFSRx - they operate on predefined rd=0 or rd=1, and
expect %fsr as the parameter in assembly. They are disabled (since not used)
until an encoding, both for code generation and output, is chosen.
llvm-svn: 6619
2003-06-05 01:06:10 +00:00
Misha Brukman
98467a7a18
Added missing 'rs1' field to F3_rdrs1imm13, 'rd' to F3_rdrs1rs2.
...
llvm-svn: 6618
2003-06-05 00:39:45 +00:00
Brian Gaeke
98eee41e0e
lib/CodeGen/Mapping/MappingInfo.cpp:
...
Update file comment to contain a bunch of the overview mapping-info
documentation previously buried within the file.
Remove some unnecessary include/using stmts.
Rename pass to MappingInfoCollector.
Rewrite a lot of it so it doesn't use global instance variables and so
it outputs into MappingInfo objects and then dumps those out, instead of going
straight to an assembly file.
Change name of factory to getMappingInfoCollector.
Fold prologue & epilogue writers into MappingInfo methods.
lib/Target/Sparc/FInfo.cpp:
Correct file comment to reflect above change
lib/Target/Sparc/Sparc.cpp:
Change name of factory to getMappingInfoCollector.
llvm-svn: 6617
2003-06-04 22:07:12 +00:00
Brian Gaeke
44b2d7a56f
Add file comment. Include <vector> and <string>. Update include guards
...
to reflect file's current location. Add definition of class
MappingInfo.
llvm-svn: 6616
2003-06-04 22:02:47 +00:00
Chris Lattner
365a47bdbb
Revert brians patch to get mapping info working again
...
sorry dude
llvm-svn: 6615
2003-06-04 21:01:12 +00:00
Tanya Lattner
cbf828dd0d
Had to comment out a line in outByte() to get it to compile because Out and tmp were
...
undeclared. I was not sure what Brian wanted, so I will let him fix this. But now it compiles.
llvm-svn: 6614
2003-06-04 20:53:46 +00:00
Misha Brukman
efafdf8046
* Instead of re-inventing the MachineConstantPool emitter that's already given
...
in Emitter.cpp, just convert the Sparc version of the constant pool into
what's already supported and inter-operate.
* Implemented a first pass at lazy function resolution in the JITResolver. That
required adding a SparcV9CodeEmitter pointer to simplify generating
bit-patterns of the instructions.
* SparcV9CodeEmitter now creates and destroys static TheJITResolver, which makes
sense because the SparcV9CodeEmitter is the only user of TheJITResolver, and
lives for the entire duration of the JIT (via PassManager which lives in VM).
* Changed all return values in the JITResolver to uint64_t because of the 64-bit
Sparc architecture.
* Added a new version of getting the value of a GlobalValue in the
SparcV9CodeEmitter, which now works for already-generated functions (JITted or
library functions).
* Removed little-used and unused functions, cleaning up the internal view of the
SparcV9CodeEmitter.
llvm-svn: 6612
2003-06-04 20:01:13 +00:00
Brian Gaeke
49833da4bf
Make writeNumber() void. Get ready to decouple it from .byte directive output.
...
llvm-svn: 6609
2003-06-04 18:17:22 +00:00
Misha Brukman
7be5063ccc
Added the 4.7 instruction class and all the FMOVcc instructions in them.
...
llvm-svn: 6601
2003-06-04 04:48:31 +00:00
Misha Brukman
11cfb6f7dc
Comment out opcodes currently unused in the Sparc backend.
...
llvm-svn: 6597
2003-06-04 02:57:55 +00:00
Misha Brukman
37586db4b5
Added instruction format class 3.15 and floating-point compare instructions.
...
llvm-svn: 6594
2003-06-04 02:26:14 +00:00
Chris Lattner
46666cfcdd
Avoid generating a getelementptr instruction of a function
...
llvm-svn: 6591
2003-06-04 01:24:40 +00:00
Brian Gaeke
49e14432c2
Make the write*map methods more self-contained. Document some more.
...
llvm-svn: 6589
2003-06-03 19:30:15 +00:00
Brian Gaeke
71ab329f08
I documented this file, in an attempt to understand it, with a view toward
...
rewriting it. I also vacuumed out all the commented-out code and
inaccurate comments, etc.
(We need to put the mapping information in a data structure so that we can
pass it out to the JIT, instead of automagically converting it to .byte
directives.)
llvm-svn: 6574
2003-06-03 07:56:05 +00:00
Chris Lattner
0521493aa9
Use the new -o tablegen option
...
llvm-svn: 6572
2003-06-03 05:06:33 +00:00
Misha Brukman
2712333e5f
Constants are laid out in memory in PC-relative form.
...
llvm-svn: 6568
2003-06-03 03:24:12 +00:00
Misha Brukman
c8728a147e
Added opcode conversion for conditional move of integers.
...
llvm-svn: 6567
2003-06-03 03:23:35 +00:00
Misha Brukman
cdf6256940
* Convert load/store opcodes from register to immediate forms.
...
* Stop code from wrapping to the next line.
llvm-svn: 6566
2003-06-03 03:21:58 +00:00
Misha Brukman
3cdf52a644
Convert load/store opcodes from register to immediate forms, if necessary.
...
llvm-svn: 6565
2003-06-03 03:20:57 +00:00
Misha Brukman
b54bf54065
Store instructions are different from other Format 3.1/3.2 instructions in that
...
they prefer the destination register to be last. Thus, two new classes were made
for them that accomodate for having this layout of operands (F3_1rd, F3_2rd).
llvm-svn: 6564
2003-06-03 03:20:14 +00:00
Misha Brukman
bbd10f96a2
* Added section A.34: Move FP register on int reg condition (FMOVr)
...
* Labeled sections that are not currently used in the Sparc backend as not
requiring completion at this time.
llvm-svn: 6562
2003-06-03 01:16:27 +00:00
Misha Brukman
e9465fc1d4
* Removed unused classes (rd field is always mentioned last); fixed comments.
...
* Added instruction classes which start building from rs1, then rs2, and rd.
* Fixed order of operands in classes 4.1 and 4.2; added 4.6 .
llvm-svn: 6561
2003-06-03 01:13:53 +00:00
Misha Brukman
ace89ff224
* Removed unused classes: the rd field is always mentioned as the last reg.
...
* Added new classes which start building from rs1, adding rs2, and then rd.
* Fixed order of operands in classes 3.11, 3.12, 3.16, and 3.17 .
* Fixed comments to reflect Real Life (tm).
* Removed "don't care" commented out assignments and dead classes (#if 0).
llvm-svn: 6560
2003-06-03 01:11:58 +00:00
Misha Brukman
4485c795a9
The rd field goes after the immediate field in format 2.1 instructions.
...
llvm-svn: 6559
2003-06-03 01:04:04 +00:00
Misha Brukman
f545b2402f
Added MOVR (move int reg on register condition), aka comparison with zero.
...
None of these instructions are actually used in the Sparc backend, so no changes
were required in the instruction selector.
llvm-svn: 6549
2003-06-02 21:16:54 +00:00
Misha Brukman
843d6933a0
SparcInstr.def: added 'r' and 'i' versions of MOV(F)cc instructions
...
SparcInstrSelection.cpp:
* Fixed opcodes to return correct 'i' version since the two functions are each
only used in one place.
* Changed name of function to have an 'i' in the name to signify that they each
return an immediate form of the opcode.
* Added a warning if either of the functions is ever used in a context which
requires a register-version opcode.
SparcV9_F4.td: fixed class F4_3, added F4_4 and notes that F4_{1,2} need fixing
SparcV9.td: added the MOV(F)cc instructions
llvm-svn: 6548
2003-06-02 20:55:14 +00:00
Misha Brukman
609b55c255
* Added casts to/from floating-point to integers.
...
* Changed // comments to #ifdef 0 to maintain syntax highlighting.
llvm-svn: 6546
2003-06-02 19:08:37 +00:00
Misha Brukman
55c6331637
Clean up after merging in SparcEmitter.cpp; branches and return work again.
...
llvm-svn: 6536
2003-06-02 05:24:46 +00:00
Misha Brukman
ce62d36615
Merged in tools/lli/JIT/SparcEmitter.cpp, coupled with the JITResolver taken
...
from lib/Target/X86/X86CodeEmitter.cpp .
llvm-svn: 6530
2003-06-02 04:12:39 +00:00
Brian Gaeke
bca71e4735
Deal with %lo/%lm/%hm/%hh flags in getMachineOpValue().
...
llvm-svn: 6522
2003-06-02 02:13:26 +00:00
Brian Gaeke
13dffdefef
Make the .inc file depend on $(TBLGEN), so that changes to TableGen followed
...
by a re-link of TableGen will notify Make to rebuild the .inc file.
llvm-svn: 6512
2003-06-01 04:52:51 +00:00
Anand Shukla
e6c3ee6b07
Add map info for arguments to call (copies)
...
llvm-svn: 6503
2003-06-01 02:48:23 +00:00
Vikram S. Adve
ba6f8e274a
Several bug fixes: globals in call operands were not being pulled out;
...
globals in some other places may not have been pulled out either;
globals in phi operands were being put just before the phi instead of
in the predecessor basic blocks.
llvm-svn: 6466
2003-05-31 07:34:57 +00:00
Vikram S. Adve
a83804a29a
Extensive changes to the way code generation occurs for function
...
call arguments and return values:
Now all copy operations before and after a call are generated during
selection instead of during register allocation.
The values are copied to virtual registers (or to the stack), but
in the former case these operands are marked with the correct physical
registers according to the calling convention.
Although this complicates scheduling and does not work well with
live range analysis, it simplifies the machine-dependent part of
register allocation.
llvm-svn: 6465
2003-05-31 07:32:01 +00:00
Vikram S. Adve
96b801ab56
Reverting previous beautification changes.
...
llvm-svn: 6464
2003-05-31 07:27:17 +00:00
Misha Brukman
bf69b7fe69
Removed useless code -- the byte order of output code is correct as is.
...
llvm-svn: 6462
2003-05-31 06:26:06 +00:00
Misha Brukman
23937091f0
The 'rd' register is consistently mentioned last in instruction definitions.
...
Created new classes from which instructions inherit their ordering of fields.
llvm-svn: 6461
2003-05-31 06:25:19 +00:00
Misha Brukman
c4f029f8ba
* Put back into action SLL/SRL/SRA{r,i}6 instructions
...
* Fixed page numbers referring to the Sparc manual
llvm-svn: 6460
2003-05-31 06:24:29 +00:00
Misha Brukman
8d5316769f
Code beautification, no functional changes.
...
llvm-svn: 6459
2003-05-31 06:22:37 +00:00
Misha Brukman
0b3a70c25b
Enabling some of these passes causes lli to break
...
llvm-svn: 6457
2003-05-31 04:23:04 +00:00
Misha Brukman
87cbd97710
The actual order of parameters in a 2-reg-immediate assembly instructions is
...
"rs1, imm, rd": most importantly, rd goes last.
llvm-svn: 6456
2003-05-31 04:22:26 +00:00
Misha Brukman
5bf351c880
Added:
...
* ability to save BasicBlock references to be resolved later
* register remappings from the enum values to the real hardware numbers
llvm-svn: 6449
2003-05-30 20:17:33 +00:00
Misha Brukman
0757de607a
Fixed the namespace to match SparcInternals.h; added notes on some missing
...
sections of instructions.
llvm-svn: 6448
2003-05-30 20:15:59 +00:00
Misha Brukman
8747377292
The register types need to be visible outside of the class to be useful.
...
For one, converting register numbers based on class in the code emitter.
llvm-svn: 6447
2003-05-30 20:12:42 +00:00
Misha Brukman
a853af587a
Moved and expanded convertOpcodeFromRegToImm() to conver more opcodes.
...
Code beautification for the rest of the code: changed layout to match the rest
of the code base.
llvm-svn: 6446
2003-05-30 20:11:56 +00:00
Misha Brukman
c1830a472a
Make LLI behave just like LLC with regard to the compile passes it uses.
...
llvm-svn: 6444
2003-05-30 20:00:13 +00:00
Misha Brukman
39dfa6a920
Made the register and immediate versions of instructions consecutive.
...
llvm-svn: 6439
2003-05-30 19:14:01 +00:00
Misha Brukman
f6e4dce74c
Because the format of the shift instructions is `shift r, shcnt, r', the
...
instructions of format 3.12 and 3.13 cannot inherit from F3rdrs1, because that
implies that the two registers are the first two parameters to the instruction.
Thus I made the instructions inherit from F3rd again, and manually added an rs1
field AFTER the shcnt field in the instruction, which maps to the appropriate
place in the instruction.
The other changes are just elimination of unnecessary spaces.
llvm-svn: 6437
2003-05-30 18:06:10 +00:00
Brian Gaeke
d380f29377
Makefile: Make SparcV9CodeEmitter.inc depend on SparcV9_F*.td as well.
...
SparcV9_F3.td: F3_12 and F3_13 instructions have rd and rs1 fields. Also,
their fields were totally screwed up. This seems to fix the problem.
llvm-svn: 6429
2003-05-30 08:02:14 +00:00
Misha Brukman
6ada87e6eb
Since there is now another derived .inc file, ignore them all.
...
llvm-svn: 6411
2003-05-29 20:15:27 +00:00
Misha Brukman
9175a5de53
Use an absolute path to TableGen because not everyone (e.g. automatic tester)
...
has their path set up by this point.
llvm-svn: 6410
2003-05-29 20:09:56 +00:00
Misha Brukman
35d5512f34
When TableGen finds an error in the SparcV9.td file, it exits with a non-zero
...
exit code. This, in turn, makes an empty file SparcV9CodeEmitter.inc, and only
much later, produces a link error because the key function that TableGen creates
isn't found.
Using a temporary file in the middle forces a good .INC file to be generated by
TableGen, and it will keep trying until you fix the input file.
llvm-svn: 6392
2003-05-29 05:29:22 +00:00
Misha Brukman
794c8a1334
Fixed to use the correct format of the instruction.
...
llvm-svn: 6390
2003-05-29 04:53:56 +00:00
Misha Brukman
376dac2eed
This should work better with re-generating the SparcV9CodeEmitter.inc file.
...
Also, added a rule to delete the generated .inc file on `make clean'.
llvm-svn: 6389
2003-05-29 03:32:49 +00:00
Misha Brukman
ea4f498395
* Broke up SparcV9.td into separate files as it was getting unmanageable
...
* Added some Format 4 classes, but not instructions
* Added notes on missing sections with FIXMEs
* Added RDCCR instr
llvm-svn: 6388
2003-05-29 03:31:43 +00:00
Misha Brukman
fded35952a
Fixed ordering of elements in instructions: although the binary instructions
...
list (rd, rs1, imm), in that order (bit-wise), the actual assembly syntax is
instr rd, imm, rs1, and that is how they are constructed in the instruction
selector. This fixes the discrepancy.
Also fixed some comments along the same lines and fixed page numbers referring
to where instructions are described in the Sparc manual.
llvm-svn: 6384
2003-05-28 17:49:29 +00:00
Brian Gaeke
2c35144ce5
Add dependency to make TableGen rule fire.
...
llvm-svn: 6383
2003-05-28 17:41:09 +00:00
Misha Brukman
07b60f8e2e
Fixed an error preventing compilation.
...
llvm-svn: 6381
2003-05-27 22:48:28 +00:00
Misha Brukman
481dfdb523
Added the 'r' and 'i' annotations to instructions as their opcode names have
...
changed.
llvm-svn: 6380
2003-05-27 22:44:44 +00:00
Misha Brukman
7975661a8e
Keep track of the current BasicBlock being processed so that a referencing
...
MachineInstr can later be patched up correctly.
llvm-svn: 6378
2003-05-27 22:41:44 +00:00
Misha Brukman
af96d39c04
Added 'r' and 'i' annotations to instructions as SparcInstr.def has changed.
...
llvm-svn: 6377
2003-05-27 22:40:34 +00:00
Misha Brukman
96ce62a105
Added 'r' or 'i' annotations to instructions, as SparcInstr.def has changed.
...
Non-obvious change: since I have changed ST and STD to be STF and STDF to
(a) closer resemble their name (NOT assembly text) in the Sparc manual, and
(b) clearly specify that they they are floating-point opcodes,
I made the same changes in this file.
llvm-svn: 6376
2003-05-27 22:39:01 +00:00
Misha Brukman
da83883ef1
Added 'r' or 'i' annotations to instructions, as SparcInstr.def has changed.
...
Here I had to make one non-trivial change: add a function to get a version of
the opcode that takes an immediate, given an opcode that takes all registers.
This is required because sometimes it is not known at construction time which
opcode is used because opcodes are passed around between functions.
llvm-svn: 6375
2003-05-27 22:37:00 +00:00
Misha Brukman
8bde6a688c
Added 'r' or 'i' annotations to instructions, as SparcInstr.def has changed.
...
llvm-svn: 6373
2003-05-27 22:35:43 +00:00
Misha Brukman
cb801a6884
Added entries for each of the instructions with annotations ('r' or 'i').
...
llvm-svn: 6372
2003-05-27 22:33:39 +00:00
Misha Brukman
db69bebc89
One of the first major changes to make the work of JITting easier: adding
...
annotations on instructions to specify which format they are (i.e., do they take
2 registers and 1 immediate or just 3 registers) as that changes their binary
representation and hence, code emission.
This makes instructions more like how X86 defines them to be. Now, writers of
instruction selection must choose the correct opcode based on what instruction
type they are building, which they already know. Thus, the JIT doesn't have to
do the same work by `discovering' which operands an instruction really has.
As this involves lots of small changes to a lot of files in lib/target/Sparc,
I'll commit them individually because otherwise the diffs will be unreadable.
llvm-svn: 6371
2003-05-27 22:32:38 +00:00
Misha Brukman
8110439ff6
* Allow passing in an unsigned configuration to allocateSparcTargetMachine()
...
a default value is set in the header file.
* Fixed some code layout to make it more consistent with the rest of codebase
* Added addPassesToJITCompile() with relevant passes
llvm-svn: 6369
2003-05-27 22:24:48 +00:00
Misha Brukman
8b28140662
Moved generation of the SparcV9CodeEmitter.inc file higher in the Makefile so
...
that Makefile.common would see it.
llvm-svn: 6367
2003-05-27 22:04:38 +00:00
Misha Brukman
5641434438
Add prototypes to add passes to JIT compilation and code emission.
...
Also, added annotations to how instructions are modified (reg/imm operands).
Added prototype for adding register numbers to values pass for interfacing with
the target-independent register allocators in the JIT.
llvm-svn: 6366
2003-05-27 22:01:10 +00:00
Misha Brukman
e195b7c0fc
Broke out class definition from SparcV9CodeEmitter, and added ability to take a
...
MachineCodeEmitter to make a pass-through debugger -- output to memory and to
std::cerr.
llvm-svn: 6363
2003-05-27 21:45:05 +00:00
Misha Brukman
3e9272fb29
SparcV9CodeEmitter.cpp is a part of the Sparc code emitter. The main function
...
that assembles instructions is generated via TableGen (and hence must be built
before building this directory, but that's already the case in the top-level
Makefile).
Also added is .cvsignore to ignore the generated file `SparcV9CodeEmitter.inc',
which is included by SparcV9CodeEmitter.cpp .
llvm-svn: 6357
2003-05-27 20:07:58 +00:00
Misha Brukman
d452b60678
Added definitions for a bunch of floating-point instructions.
...
llvm-svn: 6356
2003-05-27 20:03:29 +00:00
Vikram S. Adve
8adb9944aa
Added special register class containing (for now) %fsr.
...
Fixed spilling of %fcc[0-3] which are part of %fsr.
Moved some machine-independent reg-class code to class TargetRegInfo
from SparcReg{Class,}Info.
llvm-svn: 6339
2003-05-27 00:02:22 +00:00
Vikram S. Adve
3ee4e2a3c1
Bug fix: right shift for int divide-by-power-of-2 was incorrect for
...
negative values. Need to add one to a negative value before right shift!
llvm-svn: 6334
2003-05-25 21:59:47 +00:00
Vikram S. Adve
5f36d741db
Bug fix: padding bytes within a structure should go after each field!
...
llvm-svn: 6333
2003-05-25 21:59:09 +00:00
Vikram S. Adve
5b941461b1
Bug fix: sign-extension was not happening for C = -MININT since C == -C!
...
llvm-svn: 6332
2003-05-25 21:58:11 +00:00
Vikram S. Adve
c9a0a1d728
Add support for compiling varargs functions.
...
llvm-svn: 6325
2003-05-25 15:59:47 +00:00
Misha Brukman
e2402c65d0
Reword to remove reference to how things worked in the past.
...
llvm-svn: 6323
2003-05-24 01:08:43 +00:00
Misha Brukman
d21a02ad58
Implement the TargetInstrInfo's createNOPinstr() and isNOPinstr() interface.
...
llvm-svn: 6320
2003-05-24 00:09:50 +00:00
Misha Brukman
39968bbc46
Cleaned up code layout; no functional changes.
...
llvm-svn: 6312
2003-05-23 19:20:57 +00:00
Misha Brukman
c42dc745db
Fixed `volatile' typo.
...
llvm-svn: 6266
2003-05-21 19:34:28 +00:00
Misha Brukman
f865cc44ab
Cleaned up code layout, spacing, etc. for readability purposes and to be more
...
consistent with the style of LLVM's code base (and itself! it's inconsistent in
some places.)
No functional changes were made.
llvm-svn: 6265
2003-05-21 18:48:06 +00:00
Misha Brukman
2a651d7a0e
Cleaned up code layout, spacing, etc. for readability purposes and to be more
...
consistent with the style of LLVM's code base (and itself! it's inconsistent in
some places.)
No functional changes were made.
llvm-svn: 6262
2003-05-21 18:05:35 +00:00
Misha Brukman
352f7ac072
Namespacified `vector' and `cerr' to always use the `std::' namespace.
...
Eliminated `using' directives.
llvm-svn: 6261
2003-05-21 17:59:06 +00:00
Misha Brukman
56f4fa10fd
Sparc instruction opcodes now all live under the `V9' namespace.
...
llvm-svn: 6249
2003-05-20 20:32:24 +00:00
Chris Lattner
b1eee00034
Remove wierd printout
...
llvm-svn: 6145
2003-05-12 20:10:12 +00:00
Misha Brukman
25e907dae4
Added the initial version of the TableGen description for the Sparc backend.
...
llvm-svn: 6021
2003-05-07 21:52:39 +00:00
Chris Lattner
3ed86610cd
Eliminate use of NonCopyable so that doxygen documentation doesn't link
...
the Annotation classes with the noncopyable classes for no reason
llvm-svn: 5973
2003-05-01 20:28:45 +00:00
Chris Lattner
4f6cdbdf81
Remove two fields from TargetData which are target specific.
...
llvm-svn: 5963
2003-04-26 20:11:09 +00:00
Chris Lattner
21d4509d76
IntegerRegSize is always 8 for sparc
...
llvm-svn: 5961
2003-04-26 19:44:35 +00:00
Chris Lattner
efbae9cff1
Fix obvious type-o
...
llvm-svn: 5932
2003-04-25 05:23:10 +00:00
Chris Lattner
13cafd041a
Trivial cleanup
...
llvm-svn: 5899
2003-04-24 18:35:51 +00:00
Chris Lattner
524608ab79
Add support for the Switch instruction by running the lowerSwitch pass first
...
llvm-svn: 5867
2003-04-23 16:24:55 +00:00
Chris Lattner
379a8d2d1c
Add new linkage types to support a real frontend
...
llvm-svn: 5786
2003-04-16 20:28:45 +00:00
Chris Lattner
dea36ca100
Move sparc specific code into the Sparc backend
...
llvm-svn: 5317
2003-01-15 21:36:50 +00:00
Chris Lattner
4f596d7a2c
Fix warnings
...
llvm-svn: 5316
2003-01-15 21:36:30 +00:00
Chris Lattner
f9fd59148c
Adjust to simpler interfaces
...
Eliminate dependency on RegClass.h
llvm-svn: 5315
2003-01-15 21:14:32 +00:00
Chris Lattner
a23969b669
#include RegClass.h explicitly
...
llvm-svn: 5307
2003-01-15 19:57:07 +00:00
Chris Lattner
90fc665489
Move private header to private directory
...
llvm-svn: 5305
2003-01-15 19:50:44 +00:00
Chris Lattner
d840ccd2e0
Prune #includes
...
llvm-svn: 5303
2003-01-15 19:48:13 +00:00
Chris Lattner
e58cd301cd
Use BuildMI more
...
llvm-svn: 5299
2003-01-15 19:23:34 +00:00
Chris Lattner
8145abb99e
Fix bug found by regtests
...
llvm-svn: 5294
2003-01-15 18:11:11 +00:00
Chris Lattner
1ebaa90f48
Use BuildMI more, Create*Instruction less
...
llvm-svn: 5291
2003-01-15 17:47:49 +00:00
Chris Lattner
71aa7afc27
* Elimiante a bunch of functions from InstrSelectionSupport.h, replacing users
...
of them with BUildMI calls instead.
* Fix def information in instructions generated by prologepilog inserter
llvm-svn: 5287
2003-01-15 00:03:28 +00:00
Chris Lattner
24c1d5e551
Rename llvm/Analysis/LiveVar/FunctionLiveVarInfo.h -> llvm/CodeGen/FunctionLiveVarInfo.h
...
llvm-svn: 5284
2003-01-14 23:05:08 +00:00
Chris Lattner
b4d58d7f9e
Rename MachineInstrInfo -> TargetInstrInfo
...
llvm-svn: 5272
2003-01-14 22:00:31 +00:00
Chris Lattner
c49ca9ce58
Minor cleanups
...
llvm-svn: 5266
2003-01-14 20:32:10 +00:00
Chris Lattner
f9781b59ab
More renamings of Target/Machine*Info to Target/Target*Info
...
llvm-svn: 5204
2002-12-29 03:13:05 +00:00
Chris Lattner
42d59219c7
Rename MachineOptInfo to TargetoptInfo
...
Rename MachineCacheInfo to TargetCacheInfo
llvm-svn: 5203
2002-12-29 02:50:35 +00:00
Chris Lattner
83d835da2a
Rename MachineOptInfo to TargetoptInfo
...
Rename MachineCacheInfo to TargetCacheInfo
llvm-svn: 5202
2002-12-29 02:50:33 +00:00
Chris Lattner
871e591e34
Rename MachineFrameInfo to TargetFrameInfo.h
...
llvm-svn: 5199
2002-12-28 21:00:25 +00:00
Chris Lattner
2ca5e23403
Put class in anonymous namespace
...
llvm-svn: 5197
2002-12-28 20:42:56 +00:00
Chris Lattner
d47aac9d4b
* Rename machineFrameInfo to targetFrameInfo
...
* Constant pool and frame info is no longer directly in MachineFunction
llvm-svn: 5177
2002-12-28 20:21:29 +00:00
Chris Lattner
fe9b705bed
* Rename MachineFrameInfo to TargetFrameInfo
...
* Move some sparc specific code here from Target files
llvm-svn: 5176
2002-12-28 20:20:24 +00:00
Chris Lattner
b9feac398f
* TargetData is no longer directly accessable from TM
...
* s/unsigned int/unsigned/
llvm-svn: 5175
2002-12-28 20:19:44 +00:00
Chris Lattner
a41b89a829
* TargetData is no longer directly accessable from TargetMachine
...
* Constpool & frame info is no longer directly in MachineFunction
llvm-svn: 5174
2002-12-28 20:18:21 +00:00
Chris Lattner
525e3af36c
* Frame & const pool info is no longer directly in MachineFunction
...
llvm-svn: 5173
2002-12-28 20:17:43 +00:00
Chris Lattner
d2a67df791
* Changes to be a MachineFunctionPass
...
* Frame information is now stuck in MachineFunctionInfo instead of directly
in MachineFunction.
* Don't require a TM as an argument to the ctor
llvm-svn: 5172
2002-12-28 20:16:08 +00:00
Chris Lattner
4d84d49f75
* Don't access TargetData directly
...
* Changes because frame info is not in MachineFunction directly anymore
llvm-svn: 5171
2002-12-28 20:15:01 +00:00
Chris Lattner
ccc2c7e8a7
Sparc is not little endian
...
llvm-svn: 5129
2002-12-24 00:02:38 +00:00
Chris Lattner
c6d6d62c8e
Initialize implicit uses/defs fields for sparc backend to empty list
...
llvm-svn: 4876
2002-12-03 05:41:54 +00:00
Chris Lattner
5961102d31
Fix misleading indentation
...
llvm-svn: 4730
2002-11-17 22:57:23 +00:00
Vikram S. Adve
a281003e5e
Remove a nasty little semi-colon someone introduced which
...
prevented any machine instrs from being printed!
llvm-svn: 4557
2002-11-06 00:34:26 +00:00
Chris Lattner
8cdd50d177
Reassociate pass now works
...
llvm-svn: 4473
2002-10-31 17:16:18 +00:00
Vikram S. Adve
9f205ddfdd
In getID(), don't call getValidSymbolName to mangle external names!
...
llvm-svn: 4451
2002-10-30 20:16:38 +00:00
Chris Lattner
c1d7563566
Sparc backend doesn't use target specific flags yet
...
llvm-svn: 4440
2002-10-30 01:07:12 +00:00
Chris Lattner
e2ac271173
These are no longer virtual methods
...
llvm-svn: 4420
2002-10-29 22:01:44 +00:00
Chris Lattner
b848956370
* Privatize the TargetName
...
* Move optSizeForSubWordData to TargetData
* Remove unused fields
llvm-svn: 4417
2002-10-29 21:48:17 +00:00
Chris Lattner
5667f0eefd
Allow TargetMachine to refuse static code gen
...
llvm-svn: 4415
2002-10-29 21:12:46 +00:00
Chris Lattner
69127c68ed
Remove unneccesary #includes
...
llvm-svn: 4408
2002-10-29 20:47:46 +00:00
Chris Lattner
71b6d491db
Rename Sparc.h to TargetMachineImpls.h
...
llvm-svn: 4407
2002-10-29 20:47:26 +00:00
Vikram S. Adve
ea0d174f1a
Bug fix: align size for dynamic allocas according to stack pointer
...
alignment restrictions. This is incomplete for one case.
llvm-svn: 4397
2002-10-29 19:37:31 +00:00
Chris Lattner
52ce69b8e2
*** empty log message ***
...
llvm-svn: 4390
2002-10-29 17:35:41 +00:00
Chris Lattner
01efae0bbf
MachineInstrInfo doesn't need a TargetMachine
...
llvm-svn: 4372
2002-10-29 15:45:20 +00:00
Chris Lattner
cbe6385890
Use BuildMI instead of explicit code.
...
llvm-svn: 4362
2002-10-28 21:43:57 +00:00
Chris Lattner
5c7d638208
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
3d736950ea
Fix minor bug
...
llvm-svn: 4355
2002-10-28 20:11:17 +00:00
Chris Lattner
9bebf832c8
Don't pass default args
...
llvm-svn: 4354
2002-10-28 20:10:56 +00:00
Misha Brukman
181ea4a265
Rewrote uses of deprecated `MachineFunction::get(BasicBlock *BB)'.
...
llvm-svn: 4352
2002-10-28 20:01:13 +00:00
Misha Brukman
6be5e92526
Replaced uses of deprecated `MachineFunction::get(BasicBlock *BB)'.
...
llvm-svn: 4351
2002-10-28 20:00:31 +00:00
Chris Lattner
780090bbf1
Don't bother passing in default value
...
llvm-svn: 4347
2002-10-28 19:46:25 +00:00
Chris Lattner
e3aa50d6b7
Fixes to work with updated RegAlloc
...
llvm-svn: 4345
2002-10-28 19:32:07 +00:00
Chris Lattner
6a30b02b1d
Rename the redundant MachineOperand::getOperandType() to MachineOperand::getType()
...
llvm-svn: 4331
2002-10-28 04:45:29 +00:00
Chris Lattner
2a3bd1c562
*** empty log message ***
...
llvm-svn: 4323
2002-10-28 02:01:37 +00:00
Chris Lattner
8710aab04c
Rename MachineCodeForBasicBlock to MachineBasicBlock
...
llvm-svn: 4318
2002-10-28 01:41:47 +00:00
Chris Lattner
6d8a6c645c
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
e94db67c4f
Move addPassesToEmitAssembly from TargetMachine to UltraSparc because it
...
really is sparc specific.
llvm-svn: 4308
2002-10-28 01:03:43 +00:00
Misha Brukman
7ae7f84cf3
Changed `MachineCodeForMethod' to `MachineFunction'.
...
llvm-svn: 4301
2002-10-28 00:28:31 +00:00
Chris Lattner
fb34004733
change ++ to +1 when using random access iterators
...
llvm-svn: 4292
2002-10-27 19:09:51 +00:00
Chris Lattner
d6786b5f59
Prune #includes
...
llvm-svn: 4277
2002-10-25 02:01:33 +00:00
Chris Lattner
1e5e3f071e
Fix misspelling
...
llvm-svn: 4276
2002-10-25 01:43:26 +00:00
Chris Lattner
42c66c4887
Minor cleanups
...
Make sure to have a pass name
llvm-svn: 4268
2002-10-23 01:12:01 +00:00
Chris Lattner
ce64eddb71
- 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
Chris Lattner
aaf6ee80de
Make sure to escape \'s when they are output
...
llvm-svn: 4179
2002-10-15 19:56:24 +00:00
Vikram S. Adve
92ccbb9f27
Print "circular" warning message only in debug mode.
...
llvm-svn: 4170
2002-10-14 16:32:49 +00:00
Vikram S. Adve
4049a9a5de
Removed misleading const keyword.
...
llvm-svn: 4169
2002-10-14 16:32:24 +00:00
Chris Lattner
74cb2d2503
Allow emission of names that start with an underscore. This is needed to
...
interface with code that uses symbols in the ansi-c protected namespace. In
most cases this comes from system header files, such as stdio.h. In particular,
without this change, a reference to the __iob symbol is mangled into ll_iob,
which is not resolved by libc.
llvm-svn: 4165
2002-10-14 06:14:18 +00:00
Chris Lattner
69ce8674b5
- Rename Instruction::First*Op to *OpsBegin, and Num*Ops to *OpsEnd to
...
reflect the fact that it's a range being defined.
llvm-svn: 4147
2002-10-13 19:39:16 +00:00
Vikram S. Adve
10d8164013
Several major fixes, particularly in emitting constant aggregates:
...
(1) Padding bytes between structure fields (for alignment) were never
being emitted into the constant pool so the layout did not match!
(2) In printing constants, structures containing structures or arrays
were never handled.
(3) Support new model for external/uninitialized/initialized globals.
Uninitialized globals are no longer emitted since they are external.
Initialized globals may go either in .bss or in .data.
llvm-svn: 4134
2002-10-13 00:32:18 +00:00
Vikram S. Adve
78044fbc8e
Don't use %l0 for large operands to a SAVE since it is needed *before* SAVE!
...
We now use %g1 instead since that is shared and volatile.
llvm-svn: 4133
2002-10-13 00:24:06 +00:00
Vikram S. Adve
f4f7292b4e
Don't mark JMPLCALL and JMPLRET as branches.
...
llvm-svn: 4132
2002-10-13 00:22:32 +00:00
Vikram S. Adve
d2dc60e5d9
(1) Try to evaluate constant when multiplying 2 constants.
...
(2) Use intelligent multiply selection code for array allocas.
(3) Don't use cache padding for alloca'd stack slots!
(4) Bug fix in handling call arguments: was not copying sixth FP arg
to int reg. when calling a function with no prototype.
llvm-svn: 4130
2002-10-13 00:18:57 +00:00
Vikram S. Adve
d00beecb59
Eliminate duplicate target pointer in SparcRegInfo.
...
llvm-svn: 4129
2002-10-13 00:06:04 +00:00
Vikram S. Adve
879eac9fa1
Eliminate duplicate target pointer. Also add a few assertions.
...
llvm-svn: 4128
2002-10-13 00:05:30 +00:00
Vikram S. Adve
ea31dc707f
Make sure to handle small negative values hiding as large unsigned longs --
...
this is a common case created by the front-end.
llvm-svn: 4127
2002-10-13 00:04:26 +00:00
Vikram S. Adve
4ef6cce821
Major fix: extract ConstantExpr nodes and decompose them into symbolic
...
instructions so that (a) constant folding is done automatically before
code generation, and (b) selection does not have to deal with them.
Also, check for ConstantPointerRefs in additional to GlobalValues
when creating a GEP to load a global address.
llvm-svn: 4126
2002-10-13 00:01:57 +00:00
Vikram S. Adve
d76d82b40f
Return address register should be marked as "result" for the JMPL instruction
...
since it is defined by the instruction.
llvm-svn: 3966
2002-09-28 17:00:15 +00:00
Vikram S. Adve
6d1036d41b
Live ranges for Return value and return address of a Call are no longer
...
created here. Instead they are created in LiveRangeInfo.cpp. This
simplifies the code here quite a bit.
llvm-svn: 3965
2002-09-28 16:59:05 +00:00
Vikram S. Adve
cce628aeaf
Simplified code that handles call args and rets, so it no longer
...
needs the RegClass list to be passed in.
llvm-svn: 3964
2002-09-28 16:56:59 +00:00
Vikram S. Adve
4bb9866dc5
Simplify Call translation slightly.
...
llvm-svn: 3963
2002-09-28 16:55:41 +00:00
Vikram S. Adve
34d16d64b0
Overhaul integer conversions to match C++ ISO standard.
...
Don't allow direct FP-to-uint conversion (must be eliminated by preselection).
Address arithmetic for arrays is now entirely 64-bit so no sign-ext needed.
llvm-svn: 3961
2002-09-27 14:33:08 +00:00
Vikram S. Adve
40e2347b90
Modify operand order for Create{Sign,Zero}ExtensionInstructions.
...
llvm-svn: 3960
2002-09-27 14:29:45 +00:00
Vikram S. Adve
d238de02c7
Bug fix: some redundant copies were not being deleted after detection :-|.
...
llvm-svn: 3959
2002-09-27 14:27:37 +00:00
Vikram S. Adve
46aeb8c7c2
Decompose FP-to-UInt casts into FP-to-ULong-toUInt.
...
llvm-svn: 3957
2002-09-27 14:24:45 +00:00
Vikram S. Adve
8e6e1816c0
Put intermediate source files in a subdirectory here instead of with
...
object files. Also,
llvm-svn: 3884
2002-09-23 13:12:28 +00:00
Anand Shukla
ca15c99c4d
Initial version: it adds 2 empty slots at the top of stack
...
llvm-svn: 3872
2002-09-21 04:58:26 +00:00
Vikram S. Adve
bbf45f6960
Added class MachineOptInfo as interface to target-specific
...
routines supporting machine code optimization.
Also added method MachineInstrInfo::getNOPOpCode().
llvm-svn: 3845
2002-09-20 00:52:09 +00:00
Vikram S. Adve
5e1c434572
Peephole optimization pass on final machine code.
...
llvm-svn: 3840
2002-09-20 00:42:11 +00:00
Vikram S. Adve
e9ac29b475
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
Anand Shukla
ff0248c47c
Removed debug info printing
...
llvm-svn: 3778
2002-09-17 20:24:46 +00:00
Vikram S. Adve
b048d6633d
Use ulong instead of uint for size expressions.
...
llvm-svn: 3744
2002-09-16 15:56:45 +00:00
Vikram S. Adve
fff5ffde27
Add methods to query about the representation of LLVM quantities (e.g.,
...
constants). Useful for target-dependent LLVM transformations like
Preselection.
llvm-svn: 3743
2002-09-16 15:56:01 +00:00
Vikram S. Adve
8cbdbd8e2e
Don't print out global names unnecesssarily. Also, expose pass
...
constructors so passes can be inserted by TargetMachine.cpp.
llvm-svn: 3742
2002-09-16 15:54:02 +00:00
Vikram S. Adve
36d3e03fa0
Move all the code that creates code generation passes from Sparc.cpp to
...
TargetMachine.cpp, since it is entirely machine-independent.
Also, add options to disable optional back-end passes (preselection and
instr. scheduling).
llvm-svn: 3740
2002-09-16 15:39:26 +00:00
Misha Brukman
834885fb82
Again, including Module makes Function unnecessary.
...
llvm-svn: 3714
2002-09-14 02:07:43 +00:00
Chris Lattner
e314bf5264
- Change getelementptr instruction to use long indexes instead of uint
...
indexes for sequential types.
llvm-svn: 3683
2002-09-11 01:21:35 +00:00
Vikram S. Adve
d50fb11d18
Silly bug fix: Machine code vector could be empty for a no-op cast instruction,
...
e.g., cast double to double.
llvm-svn: 3633
2002-09-09 14:54:21 +00:00
Vikram S. Adve
f5d585d185
Add new function UltraSparcInstrInfo::CreateZeroExtensionInstructions.
...
llvm-svn: 3581
2002-09-05 18:34:31 +00:00
Vikram S. Adve
549489aa77
Bug fixes in casting between floats and ints smaller than 64 bits.
...
Add UltraSparcInstrInfo::CreateZeroExtensionInstructions to help with that.
llvm-svn: 3580
2002-09-05 18:33:59 +00:00
Vikram S. Adve
7bc45123d3
-- Use size of pointer element type instead of pointer type in array offsets!
...
-- A few bug fixes in casting between floats and ints.
-- Use SRL reg, 0 instead of AND reg, 0xffffffff to clear high 32 bits.
llvm-svn: 3579
2002-09-05 18:32:13 +00:00
Vikram S. Adve
93407286ed
-- Bug fix: use byte offsets not typed offsets in output assembly!
...
-- Add support for ConstantExpr constants (only cast and add operators so far)
-- Avoid generating label Bbss.bss, which sometimes came out twice.
llvm-svn: 3578
2002-09-05 18:28:10 +00:00
Chris Lattner
b0b412e66e
- 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
bcba516097
moved this file from lib/Reoptimizer/Mapping
...
llvm-svn: 3519
2002-08-27 22:47:33 +00:00
Anand Shukla
f246131208
Added getFunctionInfo and MappingInfoForFunction pass, and fixed the earlier error in compiling
...
llvm-svn: 3513
2002-08-27 16:45:17 +00:00
Vikram S. Adve
bee7297f26
LoadIdx non-terminal no longer needed.
...
llvm-svn: 3499
2002-08-24 20:58:04 +00:00
Vikram S. Adve
541862fbf3
Sign-extend values used to index arrays (and Simplify
...
SetOperandsForMemInstr significantly). Load and Store
no longer have any indices. Eliminate spurious sign-extension
on a cast to float/double.
llvm-svn: 3498
2002-08-24 20:56:53 +00:00
Chris Lattner
02fe752fbd
Eliminated the MemAccessInst class, folding contents into GEP class.
...
llvm-svn: 3488
2002-08-22 23:37:24 +00:00
Chris Lattner
f18177ea01
Change code to not use the copyOperands method added to User. It's now
...
more efficient to boot.
llvm-svn: 3453
2002-08-22 15:57:58 +00:00
Vikram S. Adve
a6100862d3
Fix two resource names.
...
llvm-svn: 3443
2002-08-22 02:58:57 +00:00
Vikram S. Adve
c3a5e4e0f8
Add AsmPrinter::ConstantExprToString, which writes out a ConstantExpr
...
as an expression.
llvm-svn: 3442
2002-08-22 02:58:36 +00:00
Vikram S. Adve
2d85a9976a
Eliminate bool, boolreg and boolconst nonterminals, and just use
...
reg and Constant instead.
llvm-svn: 3441
2002-08-22 02:56:10 +00:00
Vikram S. Adve
e56681c891
Change rules for Not, since it is now implemented as Xor(reg,11..1).
...
Eliminate bool, boolreg and boolconst nonterminals, and just use
reg and Constant instead.
llvm-svn: 3440
2002-08-22 02:55:21 +00:00
Chris Lattner
74469f858f
This case JUST handles constantpointer nulls, not all pointers.
...
llvm-svn: 3402
2002-08-20 17:02:48 +00:00
Vikram S. Adve
caed269085
Revise code generation for unary Not (boolean and bitwise), which is
...
no longer a separate instruction but is instead implemented with XOR.
llvm-svn: 3342
2002-08-15 14:17:37 +00:00
Vikram S. Adve
4f729affe6
Several bug fixes in casting to signed int values.
...
llvm-svn: 3301
2002-08-13 18:04:08 +00:00
Vikram S. Adve
3a5a29faf4
Handle small unsigned results correctly by clearing high bits.
...
Bug fixes in casting to signed int values.
llvm-svn: 3297
2002-08-13 17:40:54 +00:00
Brian Ensink
9c9e548596
Build correctly in the face of /shared.
...
-Chris
llvm-svn: 3296
2002-08-12 22:09:44 +00:00
Chris Lattner
56e9166b84
- Clean up interface to Sparc register handling a bit:
...
- Eliminate Sparc*Order classes, moving contents to Sparc*Class classes
- get register name methods now return const char * const pointers instead
of std::string's.
- Added file header comments to SparcRegClassInfo.(cpp|h)
- Moved BIG constant arrays out of SparcRegClassInfo.h, into
SparcRegInfo.cpp. This should allow a LOT of std::string constructors to
not have to be called.
llvm-svn: 3295
2002-08-12 21:25:05 +00:00
Chris Lattner
959a5fbf8e
* 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
c93df6bf22
Merge three loops into one.
...
llvm-svn: 3259
2002-08-07 21:39:48 +00:00
Chris Lattner
e64e62eff9
Fix breakage in the build
...
llvm-svn: 3258
2002-08-07 21:39:39 +00:00
Mehwish Nagda
428a0ba612
added Mapping and Function Pass
...
llvm-svn: 3251
2002-08-05 23:23:19 +00:00
Vikram S. Adve
482ab44175
Bug fix in CreateCodeToLoadConst(): use sign of dest, not operand,
...
in choosing how to create int-set instructions.
llvm-svn: 3248
2002-08-04 20:55:37 +00:00
Vikram S. Adve
b4a9685872
Bug fix in SetOperandsForMemInstr: handle leading zeros correctly
...
when folding or not folding GEPs.
llvm-svn: 3245
2002-08-04 20:51:05 +00:00
Chris Lattner
b430c3f395
Fix compilation problem. IsIndexZero doesn't exist, use IsZero instead.
...
llvm-svn: 3243
2002-08-03 20:57:38 +00:00
Vikram S. Adve
1944064801
Simplified handling of array indexes in SetMemOperands_Internal.
...
llvm-svn: 3236
2002-08-03 13:48:21 +00:00
Vikram S. Adve
6d6deba9f9
Bug fix: incorrect SAVE instruction when using register for stack size.
...
llvm-svn: 3198
2002-08-01 14:26:11 +00:00
Vikram S. Adve
c19b1cc168
Just improved comments and assertions.
...
llvm-svn: 3191
2002-07-31 21:13:31 +00:00
Vikram S. Adve
defe6ec939
Add a missing case: converting float/double to unsigned integer types.
...
llvm-svn: 3188
2002-07-31 21:01:34 +00:00
Chris Lattner
31d05fdd0a
* Move InstructionSelection pass to lib/CodeGen/InstrSelection so it is
...
shared by backends.
llvm-svn: 3146
2002-07-30 03:56:16 +00:00
Mehwish Nagda
26c7e5839e
changed implementation of LLVM BYTECODE Length
...
llvm-svn: 3089
2002-07-25 17:22:48 +00:00
Chris Lattner
3091e11726
GCC 3.1 changes, finally the burm file builds the FIRST time a clean directory is built.
...
llvm-svn: 3073
2002-07-25 06:08:32 +00:00
Chris Lattner
e98dd5fcac
*** empty log message ***
...
llvm-svn: 3056
2002-07-24 21:21:32 +00:00
Mehwish Nagda
f6f772b1af
moved from CodeGen to this dir
...
llvm-svn: 2992
2002-07-22 22:09:35 +00:00
Anand Shukla
889faf8bc9
Adding code for outputing length in .s
...
llvm-svn: 2979
2002-07-21 09:35:01 +00:00
Chris Lattner
3e751859ec
* Make global variables with external linkage get emitted correctly
...
* Do NOT add a prefix to global variables that are external
* Add newline after emitting a constpointerref
llvm-svn: 2925
2002-07-16 18:35:16 +00:00
Mehwish Nagda
382f286ae7
Added the Mapping Pass to out put Mapping Info to .s file
...
llvm-svn: 2913
2002-07-15 23:58:21 +00:00
Anand Shukla
cf764680ad
added std:: to vector
...
llvm-svn: 2874
2002-07-11 00:16:28 +00:00
Vikram S. Adve
c5f8b52bd0
Changed interface to insertCallerSavingCode().
...
llvm-svn: 2859
2002-07-10 21:42:42 +00:00
Vikram S. Adve
e997a11251
Stop using pseudo-instructions (SETX, SETUW, SETSW)
...
and generate actual machine instruction sequences directly.
llvm-svn: 2858
2002-07-10 21:42:13 +00:00
Vikram S. Adve
4e1ee14694
Add support to print %hh, %hm, %lm, or %lo in an operand field.
...
llvm-svn: 2857
2002-07-10 21:41:21 +00:00
Vikram S. Adve
58c904ace6
Major overhaul to stop using pseudo-instructions (SETX, SETUW, SETSW)
...
and generate actual machine instruction sequences directly.
Also a couple of bug fixes in code for putting constants into registers:
-- Do *not* sign-extend unsigned constant that is shorter than int reg size
-- Fix handling of address constant (a GlobalValue) vs. constant that
must be loaded.
llvm-svn: 2856
2002-07-10 21:39:50 +00:00
Vikram S. Adve
4aee77c70b
More important fixes:
...
-- FP argument to a function with no prototype going on stack
was not being copied to the stack in colorCallArgs().
-- Put caller-saving code *before* argument copying code so that
we don't trash a register before saving it!
-- Two other minor fixes.
llvm-svn: 2855
2002-07-10 21:36:00 +00:00
Anand Shukla
7e882db2f4
Added std:: to mem_fun for 64-bit gcc
...
llvm-svn: 2845
2002-07-09 19:16:59 +00:00
Vikram S. Adve
a3697666eb
Added support for printing constant global references to
...
assembly.
llvm-svn: 2842
2002-07-09 12:30:29 +00:00
Vikram S. Adve
5eb69429aa
Numerous changes in interface to class SparcRegInfo corresponding to
...
changes in class MachineRegInfo (see MachineRegInfo.h for details).
Added {LD,ST}[X]FSR instructions.
llvm-svn: 2839
2002-07-08 23:34:10 +00:00
Vikram S. Adve
1ce4096033
class MachineCodeForBasicBlock is now an annotation on BasicBlock.
...
llvm-svn: 2838
2002-07-08 23:31:24 +00:00
Vikram S. Adve
3bb830d337
BA no longer has the unused CC operand.
...
llvm-svn: 2837
2002-07-08 23:30:59 +00:00
Vikram S. Adve
82190d3e73
Have to save a boolean (setCC) value whenever use is outside the current
...
basic block.
Mark setCCInstr used as dest. of conditional-move as both a def and a use.
BA instruction no longer has the unused CC argument.
llvm-svn: 2836
2002-07-08 23:30:14 +00:00
Vikram S. Adve
c564520c5c
BA has only one argument.
...
Added LDFSR, LDXFSR, STFSR and STXFSR.
Fixed operands info for RDCCR, WRCCR.
llvm-svn: 2835
2002-07-08 23:25:17 +00:00
Vikram S. Adve
aee6701e63
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.
Also, cpMem<->Reg functions now return a vector of machine instructions.
-- 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.
Other changes:
-- Added several get{Class,Type} functions.
-- Added unified-to-local register number conversion.
-- class MachineCodeForBasicBlock is now an annotation on BasicBlock.
-- Suggest/Color methods may modify the MachineInstr (and always did),
so don't make that argument const!
-- Caller-saving code doesn't need its special purpose code for
handling CC registers since cpMem<->Reg handle those correctly now.
llvm-svn: 2834
2002-07-08 23:23:12 +00:00
Chris Lattner
c28c7b9ccf
Remove diff-cluttering tags
...
llvm-svn: 2808
2002-06-30 16:12:03 +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
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
2152e03bfd
Fix constness
...
llvm-svn: 2762
2002-06-05 18:11:37 +00:00
Chris Lattner
c0b158b94d
Fix Constness problems
...
llvm-svn: 2761
2002-06-05 18:08:26 +00:00
Chris Lattner
070cf77a40
Disable debugging output
...
llvm-svn: 2756
2002-06-04 03:09:57 +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
Mehwish Nagda
4dbcec4295
Fixed the makefile to not die when compiling a new, empty, source directory
...
llvm-svn: 2688
2002-05-21 15:58:24 +00:00
Chris Lattner
7f99b6f58c
Rename IsPowerOf2 to isPowerOf2
...
llvm-svn: 2663
2002-05-19 21:20:19 +00:00
Vikram S. Adve
e9327f0082
Numerous bug fixes:
...
-- correct sign extensions for integer casts and for shift-by-constant
instructions generated for integer multiply
-- 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 stack frame size when padding a section
-- folding getelementptr operations with mixed array and struct indexes
-- use uint64_t instead of uint for constant offsets in mem operands
-- 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: 2640
2002-05-19 15:25:51 +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
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
f12cc842b3
Tighten up the AnalysisUsage of lots of passes, primarily to correctly indicate whether or not they invalidate the CFGA
...
llvm-svn: 2386
2002-04-28 21:27:06 +00:00
Chris Lattner
63c52f3805
Add #include that was removed from TargetMachine.h
...
llvm-svn: 2381
2002-04-28 20:40:59 +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
776bfa20a9
Simplify code
...
Remove unneccesary getID variant for module's
llvm-svn: 2353
2002-04-28 04:50:54 +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
Chris Lattner
e6dd75604e
Use the cast<> operator in favor of C style casts
...
llvm-svn: 2331
2002-04-27 03:14:39 +00:00
Chris Lattner
2716b5e524
Change Constant::getNullConstant to Constant::getNullValue
...
llvm-svn: 2323
2002-04-27 02:25:14 +00:00
Chris Lattner
93ddab25e8
Simplify code a bit
...
llvm-svn: 2322
2002-04-27 02:24:17 +00:00
Vikram S. Adve
776df77d14
Don't pad spills and temp. stack areas for alignment.
...
Freeze auto vars and spill areas when their sizes are used
for computing other offsets.
llvm-svn: 2317
2002-04-25 04:43:45 +00:00
Vikram S. Adve
a6d94c9a76
Major changes to how int and FP arguments are handled. Varargs
...
function calls were simply wrong; other functions were just not
using all available registers.
llvm-svn: 2316
2002-04-25 04:42:21 +00:00
Vikram S. Adve
a77a8eee50
Added functions to compute which register, if any, to use
...
for a particular argument in a list of arguments.
llvm-svn: 2315
2002-04-25 04:40:24 +00:00
Vikram S. Adve
dccabec1ea
Insert copy operations for FP arguments to a varargs function,
...
to copy the FP arg. to an integer. Necessary so that the
register allocator has two different live ranges for the FP value
and the int. argument.
llvm-svn: 2314
2002-04-25 04:37:51 +00:00
Chris Lattner
c3728c281b
* getAsString requires that the input array is string compatible, so
...
assert it.
* Use WriteAsOperand instead of getStringValue for constants
llvm-svn: 2296
2002-04-18 18:15:38 +00:00
Chris Lattner
a8e24c494e
Only print debug message if DEBUG_RA is on
...
llvm-svn: 2254
2002-04-15 22:41:48 +00:00
Chris Lattner
0b32d0d511
Handle the FP format problem, where outputed FP constants were not precise
...
enough. This fixes compilation of the health benchmark.
llvm-svn: 2228
2002-04-11 21:44:02 +00:00
Chris Lattner
98d0ac0f8e
Eliminate unneccesary extraneous iterators
...
llvm-svn: 2215
2002-04-09 19:46:27 +00:00
Chris Lattner
06be180225
Add explicit #includes of Function.h to make up for the removed #include
...
in iOther.h
llvm-svn: 2209
2002-04-09 19:08:28 +00:00
Chris Lattner
6b17c83fb0
iUse new form of pop_back to make code more concise
...
llvm-svn: 2202
2002-04-09 18:02:02 +00:00
Chris Lattner
c71deb8412
Delete NOP instructions as they are eliminated.
...
llvm-svn: 2199
2002-04-09 15:05:04 +00:00
Chris Lattner
929d4a8bb5
* Add a useful file comment
...
* Move InsertPrologEpilogCode class to PrologEpilogCodeInserter.cpp
-> Among other things, this eliminates the need for the minstrVec static
global array.
llvm-svn: 2195
2002-04-09 05:21:26 +00:00
Chris Lattner
f8a9bfbc03
Move the InsertPrologEpilogCode class out of the Sparc.cpp file into the
...
new PrologEpilogCodeInserter.cpp file, and include the bodies of the
GetInstructionsFor(Prolog|Epilog) functions from SparcInstrSelection.cpp
into the class. This eliminates the need for a static global vector of
instructions and a class of errors that is really unneccesary.
llvm-svn: 2194
2002-04-09 05:20:15 +00:00
Chris Lattner
5074bb529e
Move the InsertPrologEpilogCode class out of the Sparc.cpp file, and include
...
the bodies of the GetInstructionsFor(Prolog|Epilog) functions from
SparcInstrSelection.cpp into the class. This eliminates the need for a static
global vector of instructions and a class of errors that is really unneccesary.
llvm-svn: 2193
2002-04-09 05:18:31 +00:00
Chris Lattner
35b90c22e9
Include prototype for interface to PrologEpilogCodeInserter.cpp file
...
llvm-svn: 2192
2002-04-09 05:16:36 +00:00
Chris Lattner
46f8b0e759
Use new higher level isFloatingPoint() function
...
llvm-svn: 2191
2002-04-09 05:16:08 +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
f739fa8541
s/Method/Function
...
llvm-svn: 2180
2002-04-08 22:03:57 +00:00
Chris Lattner
6915f8fc3c
* Move include/llvm/Analysis/SlotCalculator.h to include/llvm/SlotCalculator.h
...
because the slot calculator is already part of the VMCore library.
* Rename incorporateMethod and purgeMethod to *Function
llvm-svn: 2154
2002-04-07 22:49:37 +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
Chris Lattner
e2f2f54f0c
s/MethodType/FunctionType
...
llvm-svn: 2115
2002-04-04 22:19:18 +00:00
Vikram S. Adve
313ca14124
Case numbers were not updated when Sparc.burg.in was changed
...
to add separate label for bitwise NOT operator.
llvm-svn: 2091
2002-04-01 20:28:48 +00:00
Vikram S. Adve
4973f73ad1
1. Fix a leftover bug in generating memory instructions.
...
2. Fix type used for TmpInstruction holding the return address.
llvm-svn: 2075
2002-03-31 19:07:35 +00:00
Vikram S. Adve
02662bd390
Added function getCallInstIndirectAddrVal() to set call interference
...
for that value.
llvm-svn: 2074
2002-03-31 19:04:50 +00:00
Vikram S. Adve
07c874547b
Minor cleanup in printing constants. I think this included a bug
...
fix related to putting a read-write variable in a read-only section,
but I'm not sure now.
llvm-svn: 2073
2002-03-31 19:03:58 +00:00
Vikram S. Adve
bd4e68c280
Fix CreateUIntSetInstruction() to handle sign extensions correctly.
...
llvm-svn: 2059
2002-03-31 00:13:12 +00:00
Chris Lattner
ff87436f48
s/Method/Function
...
llvm-svn: 2035
2002-03-29 03:51:11 +00:00
Chris Lattner
5d088b00bf
Convert to use new style casts instead of direct checking
...
llvm-svn: 1990
2002-03-26 17:58:12 +00:00
Vikram S. Adve
75ee890af0
Bug re-fix: put back MachineCodeForInstruction::get(*I).dropAllReferences().
...
Also re-enable instr. scheduling pass.
llvm-svn: 1966
2002-03-24 03:35:16 +00:00
Vikram S. Adve
be08b5ea15
Change latencies for Load, Store and Branch instructions.
...
llvm-svn: 1965
2002-03-24 03:33:53 +00:00
Vikram S. Adve
72213c9a66
Major enhancements to how array and structure indices are handled.
...
Improve checking for constants in Multiply.
Simpler method to keep track of when a node is folded into its parent.
Several other bug fixes.
llvm-svn: 1964
2002-03-24 03:33:02 +00:00
Vikram S. Adve
493b8241e0
Add support for code generation for array references.
...
Also, use distinct names for the three types of SetMachineOperand to
avoid painful overloading problems and errors.
Bug fix in converting-int-to-float. Other minor stuff.
llvm-svn: 1896
2002-03-18 03:15:35 +00:00
Vikram S. Adve
db1435f410
Bug fixes for not using unified reg. numbers, and for using the
...
wrong register class for saving CC registers.
Also, use distinct names for the three types of SetMachineOperand.
llvm-svn: 1895
2002-03-18 03:12:16 +00:00
Vikram S. Adve
f9ab087be7
Use distinct names for the three types of SetMachineOperand to
...
avoid painful overloading problems and errors.
llvm-svn: 1893
2002-03-18 03:09:15 +00:00
Vikram S. Adve
55ee12bb25
Minor fixes.
...
llvm-svn: 1892
2002-03-18 03:08:07 +00:00
Vikram S. Adve
270f56a085
Handling of global names was severely broken when converting to 2 passes.
...
Different labels were generated for the same name in different passes.
Use an annotation to hold a fixed table of names.
llvm-svn: 1891
2002-03-18 03:07:26 +00:00
Vikram S. Adve
0513e01bee
Several sundry bug fixes.
...
llvm-svn: 1890
2002-03-18 03:02:42 +00:00
Vikram S. Adve
15148e7e8c
Fix include error.
...
llvm-svn: 1819
2002-03-03 20:46:32 +00:00
Chris Lattner
5536c9c938
Clean up std namespace issues
...
Silence warning
llvm-svn: 1790
2002-02-24 23:02:40 +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
774cbceb0b
Write llvm bytecode to output .s file as last step of LLC.
...
llvm-svn: 1728
2002-02-11 22:35:46 +00:00
Chris Lattner
74ed5cf1e6
Fix build error
...
llvm-svn: 1722
2002-02-11 17:11:43 +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
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
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
1cb37628d9
The interface to instruction scheduling is now just a call to get the pass.
...
llvm-svn: 1702
2002-02-04 20:03:43 +00:00
Chris Lattner
e6b511dc0a
* ValueSet interface converted from add/remove to insert/erase
...
llvm-svn: 1690
2002-02-04 16:37:09 +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
13b2227ccc
EmitAssembly doesn't need an UltraSparc, it can do with any TargetMachine
...
llvm-svn: 1680
2002-02-04 15:53:23 +00:00
Chris Lattner
5216cc55f7
* Minor cleanups
...
* Reduce number of #includes
* Remove blatently misleading qualifiers (how do you have an inlined pure virtual function?)
* Remove unnecesary & ignored qualifiers (const int argument vs int argument)
* SparcInternals.h now no longer #includes RegClass.h or SparcRegClassInfo.h
* Pull inlined functions out of .h file if they are virtual and interfere with dependencies
llvm-svn: 1677
2002-02-04 05:59:25 +00:00
Chris Lattner
a3403539e1
SparcRegInfo does NOT need anything about instruction scheduling.
...
llvm-svn: 1670
2002-02-04 02:44:38 +00:00
Chris Lattner
e769482fd3
Pull all of the scheduling related stuff out of Sparc.cpp into it's own file
...
llvm-svn: 1668
2002-02-04 00:39:14 +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
64593c51bb
Move a ton of tables out of SparcInternals.h and move them to Sparc.cpp.
...
Eventually they will probably get moved again, but at least now they aren't
having to be compiled by 7 different .cpp files...
llvm-svn: 1666
2002-02-04 00:04:35 +00:00
Chris Lattner
38aa77b911
Convert sparc backend over to use pass based compilation structure.
...
Try to decouple stuff as much as possible.
llvm-svn: 1664
2002-02-03 23:42:19 +00:00
Chris Lattner
84fa1e7801
Convert sparc backend over to use pass based compilation structure.
...
Convert some stages into passes in preparation for more splitting up.
Try to decouple stuff as much as possible.
llvm-svn: 1663
2002-02-03 23:41:51 +00:00
Chris Lattner
d682045227
Convert assembly emission over to a two pass approach.
...
llvm-svn: 1662
2002-02-03 23:41:08 +00:00
Chris Lattner
029af0b37f
Add a file level comment
...
Remove #includes
llvm-svn: 1657
2002-02-03 07:52:04 +00:00
Chris Lattner
92a49c5cae
Implement new method by method assembly output & memory releasing
...
llvm-svn: 1656
2002-02-03 07:51:17 +00:00
Chris Lattner
477923d0d4
* Switch to new TmpInstruction model
...
* Switch to new MachineCodeForInstruction model
llvm-svn: 1655
2002-02-03 07:50:56 +00:00
Chris Lattner
f08669fcbc
* Switch to new TmpInstruction model
...
llvm-svn: 1654
2002-02-03 07:49:49 +00:00
Chris Lattner
0752167009
* Swithc to new MachineCodeForInstruction model
...
* Implement memory freeing for instruction temporaries
llvm-svn: 1653
2002-02-03 07:49:15 +00:00
Chris Lattner
e772d28862
* prune #includes
...
* Implement permethod output of machine code to assembly
llvm-svn: 1652
2002-02-03 07:48:06 +00:00
Chris Lattner
61c6aeb6fe
Remove dead variable.
...
llvm-svn: 1514
2002-01-21 22:44:57 +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
f4c2dddcda
Added more comments
...
llvm-svn: 1498
2002-01-07 21:03:42 +00:00
Ruchira Sasanka
c07341f999
removed SizeOfStackOperand constant from the SparcRegInfo class - no longer used
...
by code.
llvm-svn: 1497
2002-01-07 20:33:44 +00:00
Ruchira Sasanka
57386b570f
Added more comments
...
llvm-svn: 1496
2002-01-07 20:28:49 +00:00
Ruchira Sasanka
4cfbfd599a
Added comments and correct logic for finding register sizes.
...
llvm-svn: 1494
2002-01-07 19:20:28 +00:00
Vikram S. Adve
cb2335f13f
Eliminate all uses of memInst->getIndicesBROKEN().
...
llvm-svn: 1485
2001-12-15 00:36:32 +00:00
Vikram S. Adve
8234b04143
Remove int hack to allow unsigned numbers greater than 2^63 - 1...
...
llvm-svn: 1483
2001-12-15 00:33:36 +00:00
Chris Lattner
7dc20864b6
Allow pointer indexing
...
llvm-svn: 1462
2001-12-14 16:31:26 +00:00
Chris Lattner
b2b1b3d036
Remove unsized array support
...
llvm-svn: 1461
2001-12-14 16:30:51 +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
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
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
edbf52c7f9
commented out popAllTempValues since it leads to a bug - see code
...
llvm-svn: 1327
2001-11-15 22:03:04 +00:00
Ruchira Sasanka
c97ccc5cb5
changed since names of some methods in PhyRegAlloc changed
...
llvm-svn: 1324
2001-11-15 20:25:07 +00:00
Vikram S. Adve
5c8f573bbf
Fix use of AllocateLocalVar for alloca instruction!
...
llvm-svn: 1319
2001-11-15 15:22:39 +00:00
Vikram S. Adve
821b129755
Fix int->float conversion.
...
llvm-svn: 1314
2001-11-15 14:59:56 +00:00
Vikram S. Adve
7e833073e3
Add function returning which operand holds immediate constant
...
for a given opcode.
llvm-svn: 1307
2001-11-14 18:48:36 +00:00
Vikram S. Adve
ea1a93b95d
Change latency of SETX to improve schedule -- just a hack.
...
llvm-svn: 1304
2001-11-14 15:54:44 +00:00
Ruchira Sasanka
b8be6f6856
Added M_PSEUDO_FLAG for SETX .. instr
...
llvm-svn: 1301
2001-11-14 15:35:13 +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
1a9a7f2ef1
Changed checking for invalid register number - earlier it was uisng a contant
...
llvm-svn: 1293
2001-11-13 23:08:19 +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
Ruchira Sasanka
20e105f4b1
Fixed a bug with pervious ColorCallArg
...
llvm-svn: 1278
2001-11-12 20:54:19 +00:00
Ruchira Sasanka
24e29431bc
Canged ColorCallArg so that when a call arg is directly pushed on to stack
...
for argument passing, that instruction is directly added to the InstructionsBefore
set of the called machine instruction - i.e., it is not reordered.
llvm-svn: 1277
2001-11-12 20:31:47 +00:00
Vikram S. Adve
01daa32a92
Disable use of the Phi machine instruction which is no longer needed
...
for register allocation.
llvm-svn: 1270
2001-11-12 18:54:11 +00:00
Ruchira Sasanka
fcdc2ff6e0
Added phi elimination code
...
llvm-svn: 1265
2001-11-12 14:45:33 +00:00
Vikram S. Adve
e7dc82ec0d
Fix dumb bug in alignment adjustment code!
...
llvm-svn: 1260
2001-11-12 05:16:39 +00:00
Vikram S. Adve
68d00415b4
Fix bogus code that was eliminating needed args.
...
llvm-svn: 1259
2001-11-11 23:11:36 +00:00
Ruchira Sasanka
80fc434970
Fixed FP and SP usage. SP for outgoing args - for everything else FP
...
llvm-svn: 1258
2001-11-11 22:37:51 +00:00
Ruchira Sasanka
2d5c48fcc9
cahnged StackPointer accesses to FramePointer
...
llvm-svn: 1257
2001-11-11 21:49:37 +00:00
Vikram S. Adve
b3b55ae4b1
Down-growing offsets from FP should start at 0, not -1.
...
llvm-svn: 1255
2001-11-11 21:22:11 +00:00
Ruchira Sasanka
0c0859846a
Corrected reodering code for instructions inserted before calls
...
llvm-svn: 1252
2001-11-10 21:20:43 +00:00
Vikram S. Adve
295600c417
Several bug fixes in printing constants, particularly with unsized
...
arrays and multi-dimensional arrays.
llvm-svn: 1239
2001-11-10 02:03:06 +00:00
Vikram S. Adve
209d8e1c3b
Must generate an instruction for GetElementPtr if single user is not
...
a memory instruction!
llvm-svn: 1238
2001-11-10 01:05:26 +00:00
Ruchira Sasanka
1812fc499d
Disabled some debuggin messages
...
llvm-svn: 1237
2001-11-10 00:26:55 +00:00
Ruchira Sasanka
d0d294afde
Added code for correct reordering of call arguments
...
llvm-svn: 1234
2001-11-09 23:49:14 +00:00
Vikram S. Adve
2ccb900add
Add support to print constant arrays and structures.
...
Align data larger than an L1 cache line on L1 cache line boundary.
llvm-svn: 1228
2001-11-09 02:19:29 +00:00
Vikram S. Adve
bc23cf5521
Do the same for float->int that we did for int->float earlier.
...
Also check IsPointerType() in addition to IsIntegral() in several places.
llvm-svn: 1227
2001-11-09 02:18:16 +00:00
Vikram S. Adve
e6642f93d4
Added function UltraSparcInstrInfo::CreateCodeToCopyFloatToInt.
...
llvm-svn: 1226
2001-11-09 02:16:40 +00:00
Vikram S. Adve
f34fa6956d
Added class UltraSparcCacheInfo.
...
llvm-svn: 1225
2001-11-09 02:16:04 +00:00
Vikram S. Adve
367f34f7cc
Bug fix: Need to include the stack offset "bias" in assembly code itself.
...
Added class UltraSparcCacheInfo.
Added function to convert float to int by copying via memory.
llvm-svn: 1224
2001-11-09 02:15:52 +00:00
Vikram S. Adve
56e61ec517
Bug fix: need to use .reserve for uninitialized data.
...
llvm-svn: 1205
2001-11-08 14:29:57 +00:00
Vikram S. Adve
81908213ae
Added support for bitwise logical operators. Use different labels for
...
for these than for boolean logicals to avoid making Burg diverge.
See Burg manual for more information.
llvm-svn: 1196
2001-11-08 05:14:02 +00:00
Vikram S. Adve
03f12f521f
Fixed function getEscapedString to follow the Sparc assembly rules
...
for symbol names! (And renamed it to getValidSymbolName).
Fixed format for float and other constants.
llvm-svn: 1195
2001-11-08 05:12:37 +00:00
Vikram S. Adve
f889a11590
Fix bugs in FITOS/D instruction generation.
...
The space for optional args in the stack frame is now being computed,
so finish the code generation for the variable `alloca'.
Finally, made a major overhaul of how stack frame is managed.
llvm-svn: 1194
2001-11-08 05:04:09 +00:00
Vikram S. Adve
503d3098fa
Added new function UltraSparcInstrInfo::CreateCodeToCopyIntToFloat.
...
Also major overhaul of how stack frame is managed.
llvm-svn: 1193
2001-11-08 04:57:53 +00:00
Vikram S. Adve
7a1524f971
Removed class RegStackOffsets and used class MachineCodeForMethod
...
directly to manage stack frame.
llvm-svn: 1192
2001-11-08 04:56:41 +00:00
Vikram S. Adve
6fcb28924b
Use MachineFrameInfo as base class of UltraSparcFrameInfo, and made
...
a major overhaul of this class and how stack frames are managed.
llvm-svn: 1191
2001-11-08 04:55:13 +00:00
Chris Lattner
e147d062fa
Killing warnings
...
llvm-svn: 1175
2001-11-07 14:01:59 +00:00
Chris Lattner
5e030830a3
Squelch warnings about not returning a value
...
llvm-svn: 1173
2001-11-07 13:49:12 +00:00
Vikram S. Adve
f5b4f47cff
Bug fix: Printing AdIBef and AdIAft outside the scope where they
...
were declared, and in some cases when they were unintialized.
llvm-svn: 1146
2001-11-06 05:01:54 +00:00
Vikram S. Adve
80cf60687d
Generate code for Rem instruction.
...
llvm-svn: 1124
2001-11-04 21:59:14 +00:00
Vikram S. Adve
ea5d1f5db8
Fixed instruction information for RDCCR and WRCCR.
...
Fixed selection to create a TmpInstruction for each integer CC register
(since it is an implicit side-effect, unlike FP CC registers which are
explicit operands).
llvm-svn: 1120
2001-11-04 19:34:49 +00:00
Chris Lattner
33d9cb9903
Minor method rename
...
llvm-svn: 1119
2001-11-04 08:08:34 +00:00
Ruchira Sasanka
9d8950d240
Added code to support correct saving of %ccr across calls
...
llvm-svn: 1111
2001-11-03 19:59:59 +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
Chris Lattner
41a8289eb8
Check in to use moved stringizing code
...
llvm-svn: 1024
2001-10-29 13:39:38 +00:00
Vikram S. Adve
5ff15721c9
Minor fix I omitted to check in.
...
llvm-svn: 1012
2001-10-28 22:19:06 +00:00
Vikram S. Adve
2f72cdd756
Generate SETX for 64-bit integers!
...
llvm-svn: 1007
2001-10-28 21:41:46 +00:00
Vikram S. Adve
a5619eb835
Add SETX instruction for 64-bit constants.
...
Add M_CC_FLAG for many instructions that use int or fp CC registers.
llvm-svn: 1006
2001-10-28 21:41:01 +00:00
Vikram S. Adve
b31f9c3ea6
Need to subtract, not add, stack size in SAVE instruction!
...
llvm-svn: 1005
2001-10-28 21:39:47 +00:00
Vikram S. Adve
71b265a848
Major overhaul to print globals and constants.
...
llvm-svn: 1004
2001-10-28 21:38:52 +00:00
Ruchira Sasanka
9c38dbc249
Added support for spilling
...
llvm-svn: 992
2001-10-28 18:15:12 +00:00
Ruchira Sasanka
0863c161e9
Fixed load syntax in EmitAssembly
...
Fixed cpReg2Mem (store) operand oreder in SparcRegInfo.cpp
llvm-svn: 984
2001-10-24 22:05:34 +00:00
Ruchira Sasanka
36bcd79050
Fixed logic for checking whether a LR received the correct color.
...
llvm-svn: 976
2001-10-24 15:56:58 +00:00
Ruchira Sasanka
6a7f02082b
Corrected a bug in SparcRegInfo.cpp - to add inserted instructions before a return
...
llvm-svn: 969
2001-10-23 21:40:39 +00:00
Vikram S. Adve
18a9e39214
UNUSED.
...
llvm-svn: 944
2001-10-22 13:46:38 +00:00
Vikram S. Adve
a0177cdca5
Split JMPL into JMPLCALL and JMPLRET.
...
llvm-svn: 943
2001-10-22 13:44:53 +00:00
Vikram S. Adve
9090b50ba9
Added a frame layout class, and code to insert prolog/epilog code.
...
llvm-svn: 942
2001-10-22 13:44:23 +00:00
Vikram S. Adve
5462dca9f1
Reordered registers slightly to simplify a new check.
...
Added a function to map between the caller's and callee's register windows.
llvm-svn: 941
2001-10-22 13:43:08 +00:00
Vikram S. Adve
8498277e77
Split JMPL into JMPLCALL and JMPLRET so that IsCall and IsReturn can
...
be used to distinguish those uses of the `jmpl' instruction.
llvm-svn: 940
2001-10-22 13:41:12 +00:00
Vikram S. Adve
52e41008e3
Added functions to generate prolog and epilog code.
...
Use JMPLRET instead of RETURN for method returns so that
llvm-svn: 939
2001-10-22 13:36:31 +00:00
Vikram S. Adve
6b492ddc15
Added SAVE and RESTORE. Duplicated JMPL into JMPLCALL and JMPLRET,
...
which have the same opcode and operands but different flags.
llvm-svn: 938
2001-10-22 13:32:55 +00:00
Vikram S. Adve
7c1a8d6d53
Reordered a couple of registers to simplify some new checks.
...
Added code to map between caller's and callee's register windows.
Added frame layout class.
llvm-svn: 937
2001-10-22 13:31:53 +00:00
Ruchira Sasanka
24729a34ce
Added support for both call/jmpl instructions
...
llvm-svn: 930
2001-10-21 16:43:41 +00:00
Vikram S. Adve
9bc488984f
Fixed printing of offset operand for RETURN instruction.
...
llvm-svn: 928
2001-10-20 21:33:50 +00:00
Vikram S. Adve
5731249137
Use CALL for direct function calls; JMPL for indirect ones.
...
llvm-svn: 927
2001-10-20 20:57:06 +00:00
Vikram S. Adve
72ebb454d0
Minor bug fix in printing operands of JMPL.
...
llvm-svn: 926
2001-10-20 20:56:40 +00:00
Ruchira Sasanka
6a073498ba
Added code so that colorIGNode does not unnecessarily reserve unusable
...
Suggested colors for neighbors.
llvm-svn: 921
2001-10-19 21:41:16 +00:00
Ruchira Sasanka
d77a1bbc2f
Corrected call interference bug - suggested color not allocated if
...
volatile and there are call interferences
llvm-svn: 918
2001-10-19 17:23:43 +00:00
Ruchira Sasanka
5f629318fa
Added support for condition code loading/stroing in methods cpReg2Reg etc.
...
llvm-svn: 911
2001-10-18 22:38:52 +00:00
Chris Lattner
ee6e199f0e
Change Sources specifier to ExtraSources
...
llvm-svn: 874
2001-10-18 01:48:09 +00:00
Vikram S. Adve
6c697526bf
1. Move most of the constant-fixup code into machine-independent file
...
InstrSelectionSupport.cpp. It now happens in a bottom-up pass on
each BURG tree after the original top-down selection pass on the tree.
2. Handle global values as constants (viz., constant addresses).
llvm-svn: 868
2001-10-18 00:26:20 +00:00
Vikram S. Adve
cc776df39c
Sparc-specific code shared between local files.
...
llvm-svn: 864
2001-10-18 00:03:20 +00:00
Vikram S. Adve
01e57a481e
Moved implementation of class UltraSparcInstrInfo to SparcInstrInfo.cpp.
...
llvm-svn: 863
2001-10-18 00:02:32 +00:00
Vikram S. Adve
505130cb30
Added virtual function to generate an instruction sequence to
...
load a constant into a register.
llvm-svn: 862
2001-10-18 00:02:06 +00:00
Vikram S. Adve
4cc2b3b155
Moved implementation of class UltraSparcInstrInfo here.
...
llvm-svn: 861
2001-10-18 00:01:48 +00:00
Vikram S. Adve
6b4ba47f31
Only list automatically generated .cpp files.
...
llvm-svn: 854
2001-10-17 12:34:26 +00:00
Ruchira Sasanka
5b8971f418
Added support for caller saving
...
llvm-svn: 847
2001-10-16 01:23:19 +00:00
Chris Lattner
3294e7c14b
Emit the proper .type declarations to tell the debugger what a function is
...
llvm-svn: 845
2001-10-15 19:34:17 +00:00
Chris Lattner
77d2c22d94
Handle abnormal jmpl syntax correctly
...
llvm-svn: 844
2001-10-15 19:21:31 +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
086bf0fe3a
updated suggesting/coloring of call & return args & implicit operands
...
llvm-svn: 830
2001-10-15 16:25:28 +00:00
Chris Lattner
02b671388e
Be const correct
...
llvm-svn: 826
2001-10-15 15:54:43 +00:00
Vikram S. Adve
e6c611b990
Forward operands into implicit uses as well as explicit ones.
...
llvm-svn: 808
2001-10-14 23:28:43 +00:00
Vikram S. Adve
1679709b71
Two bug fixes that were suppressing some "load-constant-into-register" instrs.
...
llvm-svn: 795
2001-10-14 18:10:33 +00:00
Chris Lattner
b3368ac9db
Move the burg file to here. Add .in suffix to indicate that it gets
...
preprocessed before burg gets to it
llvm-svn: 794
2001-10-14 17:26:21 +00:00
Chris Lattner
1a176f15dc
Make the sparc.burg file be a little more flexible and rubust in the fact of
...
renumbering of instructions. It is still horribly broken and grossly dependant on the number of instructions, but now it is a least a little better.
Oh yeah it also works now.
llvm-svn: 793
2001-10-14 17:25:31 +00:00
Chris Lattner
8deb9e588e
Fix broken #endif
...
llvm-svn: 768
2001-10-13 06:54:54 +00:00
Chris Lattner
a742b6acf3
* Add #include
...
* Fix #endif problems
* Change to getCalledValue instead of getCalledMethod
llvm-svn: 767
2001-10-13 06:54:30 +00:00
Vikram S. Adve
8aeb09fcc7
Record implicitRefs for each machine instruction instead of
...
each VM instruction.
llvm-svn: 725
2001-10-11 04:23:19 +00:00
Vikram S. Adve
021d523b2f
Insert code to load constants used as Call or Return arguments.
...
Also, note return value of a Call as an "implicitUse".
llvm-svn: 720
2001-10-10 20:56:33 +00:00
Ruchira Sasanka
990d8fb3e8
--removed %g regs being allocated - fix later
...
llvm-svn: 714
2001-10-09 23:36:13 +00:00
Chris Lattner
7fac070215
* Both Method & GlobalVariable now subclass GlobalValue
...
* ConstPoolPointerReference now represents a pointer to a GlobalValue
* Methods name references are now explicit pointers to methods
* Rename Value::GlobalVal to Value::GlobalVariableVal to avoid confusion
llvm-svn: 703
2001-10-03 14:53:21 +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
8f19112923
Add more support for new style casts
...
Convert more code to use them
llvm-svn: 695
2001-10-01 18:26:53 +00:00
Chris Lattner
4b717c0edc
Add support for new style casts
...
llvm-svn: 694
2001-10-01 16:18:37 +00:00
Chris Lattner
0156ba6185
Fix emission of return instructions
...
llvm-svn: 688
2001-10-01 02:32:34 +00:00
Vikram S. Adve
3652ef7587
Several fixes:
...
(1) Avoid hard-coding some register numbers.
(2) Fix some incorrect branch opcodes.
(3) Don't try to move int register to float register!
(4) If an operand being forwarded is a constant and it doesn't fit
into the immed field of the copy machine instruction, then
generate a load-constant instead of a copy.
(5) Use (unsigned long) 0 for copying a pointer via "add 0, ptr -> ptr2".
llvm-svn: 683
2001-10-01 00:12:53 +00:00
Vikram S. Adve
40378e32cd
Change latency of setuw and setsw to 2 cycles.
...
llvm-svn: 681
2001-09-30 23:46:57 +00:00
Ruchira Sasanka
560b0ad482
added suggesting color support
...
llvm-svn: 673
2001-09-30 23:19:57 +00:00
Ruchira Sasanka
5867c7ae80
added support for suggesting colors
...
llvm-svn: 671
2001-09-30 23:16:47 +00:00
Chris Lattner
b021f68438
* Properly escape function names
...
* Ignore %xcc argument on conditional branches
llvm-svn: 663
2001-09-28 15:07:24 +00:00
Chris Lattner
c6635c9fa2
Check in bug fix for vadve
...
llvm-svn: 662
2001-09-28 15:06:55 +00:00
Ruchira Sasanka
ebd284dfe9
-- fixed a ret val bug
...
llvm-svn: 652
2001-09-19 22:40:51 +00:00
Chris Lattner
e86a0230aa
Seperate instruction definitions into new SparcInstr.def file
...
Move contents of SparcMachineInstrDesc[] out of SparcInternals.h
into Sparc.cpp
llvm-svn: 644
2001-09-19 15:56:23 +00:00
Chris Lattner
49726a21a5
Add EmitAssembly to mf
...
llvm-svn: 637
2001-09-19 13:48:18 +00:00
Chris Lattner
036a317f2a
First cut at assembly output
...
llvm-svn: 636
2001-09-19 13:47:27 +00:00
Chris Lattner
518da4f3cd
Add emitAssemblyMethod to TargetMachine
...
llvm-svn: 635
2001-09-19 13:47:12 +00:00
Ruchira Sasanka
dfc6c887da
-- ruchira
...
llvm-svn: 632
2001-09-18 22:52:44 +00:00
Chris Lattner
caa449cf5c
Remove extraneous #includes
...
llvm-svn: 627
2001-09-18 17:03:48 +00:00
Vikram S. Adve
8dd5e310e0
Renamed a header file.
...
llvm-svn: 619
2001-09-18 13:04:53 +00:00
Vikram S. Adve
514180ed83
Make class TargetMachine the common interface to all target-dependent
...
information, including instr, sched, and reg information.
This allows us to allocate them all in one place and use them much
more uniformly.
llvm-svn: 618
2001-09-18 13:04:24 +00:00
Vikram S. Adve
78d50d0f7a
Allow pointer constants as well as integer and booleans.
...
Skip over list nodes in ForwardOperand.
llvm-svn: 617
2001-09-18 13:03:13 +00:00
Vikram S. Adve
49d908a419
Make class TargetMachine the common interface to all target-dependent
...
information, including instr, sched, and reg information.
Rename files to match the primary classes they provide.
Commented out call to register allocation until more tests run correctly.
llvm-svn: 616
2001-09-18 13:01:29 +00:00
Ruchira Sasanka
970886e738
modified printing of debug messages
...
llvm-svn: 593
2001-09-15 19:11:31 +00:00
Ruchira Sasanka
7d144a8500
added register allocation code
...
llvm-svn: 585
2001-09-15 00:30:44 +00:00
Ruchira Sasanka
dfdab46dc1
*** empty log message ***
...
llvm-svn: 579
2001-09-14 20:31:39 +00:00
Chris Lattner
95c652b59b
Add support for loading and storing pointers...
...
llvm-svn: 575
2001-09-14 20:00:02 +00:00
Chris Lattner
ad2cbf0e18
Fix a bug that caused a crash if a setcc had zero uses.
...
llvm-svn: 574
2001-09-14 18:29:28 +00:00
Chris Lattner
8d44b99844
Chris seems fond of #include <vector>. Fix these. Also convert use list in
...
Value to a vector instead of a list.
Move SchedGraph.h & SchedPriorities.h into lib/CodeGen/InstrScheduling
llvm-svn: 572
2001-09-14 16:56:32 +00:00
Chris Lattner
22a6a90511
Make a new llvm/Target #include directory.
...
Move files from lib/CodeGen/TargetMachine to lib/Target
Move TargetData.h and TargetMachine.h to Target/{Data.h|Machine.h}
Prepare to split TargetMachine.h into several smaller files
llvm-svn: 566
2001-09-14 05:34:53 +00:00
Chris Lattner
f8464e4b8d
Checkin changes to:
...
1. Clean up the TargetMachine structure. No more wierd pointers that have to
be cast around and taken care of by the target.
2. Instruction Scheduling now takes the schedinfo as an argument. The same
should be done with the instinfo, it just isn't now.
llvm-svn: 565
2001-09-14 04:32:55 +00:00
Chris Lattner
5fae0de330
Move files to new sparc directory
...
llvm-svn: 563
2001-09-14 03:56:45 +00:00
Chris Lattner
06028541ab
Move the sparc target to a new lib/Target directory
...
llvm-svn: 562
2001-09-14 03:55:11 +00:00
Chris Lattner
b0ddffaae3
Move files.
...
llvm-svn: 561
2001-09-14 03:47:57 +00:00