Chris Lattner
c40aa40525
give FP stack registers names
...
llvm-svn: 15394
2004-08-01 08:12:13 +00:00
Chris Lattner
6c596faddb
Switch more instructions over to using the asmprinter. Fix bugs in the emission
...
of in/out instructions (missing %'s on registers).
llvm-svn: 15393
2004-08-01 07:44:35 +00:00
Chris Lattner
3a928f8119
The tblgen'erated asmparser wants a way to print operands.
...
llvm-svn: 15392
2004-08-01 07:43:46 +00:00
Chris Lattner
e4c868ffa0
Rename the Printer class -> X86AsmPrinter.
...
Include the tablegenerated assembly writer.
llvm-svn: 15389
2004-08-01 06:02:08 +00:00
Chris Lattner
a02166d28b
Factor a bunch of the rules and add support for generating the asmwriter.
...
llvm-svn: 15388
2004-08-01 06:01:32 +00:00
Chris Lattner
9a7b050ebb
Specify an asm string and operands lists for a bunch of instructions.
...
This only really covers no-operand instructions so far.
llvm-svn: 15387
2004-08-01 06:01:00 +00:00
Chris Lattner
91a07c84b1
Add the 'ops' marker, add an AsmString initializer
...
llvm-svn: 15383
2004-08-01 04:40:43 +00:00
Chris Lattner
101dccd430
Completely disable the pattern isel until it is more substantial.
...
llvm-svn: 15380
2004-08-01 03:28:02 +00:00
Chris Lattner
9bce44c8cc
Entirely eliminate all patterns and expanders from this file. We shall go
...
with an incremental approach rather than a revolutionary approach.
llvm-svn: 15379
2004-08-01 03:25:01 +00:00
Chris Lattner
d20c857ba0
Move the 'Expander' node to later in the file, with the other experimental
...
stuff. The pattern becomes a list, add some stuff, add some comments.
llvm-svn: 15378
2004-08-01 03:23:34 +00:00
Chris Lattner
0717ef353d
Remove obsolete file
...
llvm-svn: 15377
2004-08-01 03:19:28 +00:00
Alkis Evlogimenos
1dd3ea5515
Make OptimizeBlock take a MachineFunction::iterator instead of a
...
MachineBasicBlock* as a parameter so that nxext() and prior() helper
functions can work naturally on it.
llvm-svn: 15376
2004-07-31 19:24:41 +00:00
Chris Lattner
ecca71ce92
Next on a pointer increments the pointer, not an iterator
...
llvm-svn: 15375
2004-07-31 18:40:36 +00:00
Alkis Evlogimenos
b28bc78d0a
Use next() helper to make code more readable. Use
...
MachineFunction::iterator instead of MachineBasicBlock* to avoid
dereferencing end iterators.
llvm-svn: 15373
2004-07-31 15:14:29 +00:00
Alkis Evlogimenos
143aeb646c
Use MachineFunction::iterator instead of a MachineBasicBlock* because
...
FallThrough maybe == to MF.end().
llvm-svn: 15372
2004-07-31 15:03:52 +00:00
Alkis Evlogimenos
cdcb1c62e5
Align breaks.
...
llvm-svn: 15371
2004-07-31 10:05:44 +00:00
Chris Lattner
170b31f44d
Expose this as a functionpass
...
llvm-svn: 15369
2004-07-31 10:01:58 +00:00
Chris Lattner
7b12b8a13e
Implement a simple target-independent CFG cleanup pass
...
llvm-svn: 15368
2004-07-31 10:01:27 +00:00
Chris Lattner
0d66480e9e
Add breaks
...
llvm-svn: 15365
2004-07-31 09:53:31 +00:00
Alkis Evlogimenos
1eb8a5dc09
Simplify code a bit.
...
llvm-svn: 15364
2004-07-31 09:44:32 +00:00
Alkis Evlogimenos
de150fb74b
Correctly spell 'unconditional'.
...
llvm-svn: 15363
2004-07-31 09:41:44 +00:00
Alkis Evlogimenos
bc3d550391
Implement insertGoto and reverseBranchCondition for the X86.
...
llvm-svn: 15362
2004-07-31 09:38:47 +00:00
Chris Lattner
c21741420c
I'm pretty sure that ba is branch always, which is a barrier. Brg should
...
check this :)
llvm-svn: 15357
2004-07-31 02:24:37 +00:00
Chris Lattner
9a23ab1e63
Mark barrier instructions. Execution does not fall through uncond branches
...
or return intructions.
llvm-svn: 15356
2004-07-31 02:10:53 +00:00
Chris Lattner
6ff86f8af6
New flag
...
llvm-svn: 15354
2004-07-31 02:07:07 +00:00
Tanya Lattner
e757e5a231
Updated ModuloScheduling. It makes it all the wya through register allocation on the new code!!
...
llvm-svn: 15351
2004-07-30 23:36:10 +00:00
Misha Brukman
8209358fca
* Conditional save/restore of LR disabled as it's not quite correct
...
* sumarray2d fixed: large fixed-size alloca
* make is now compileable
* Re-organized tests to fit them under proper headings
Patch by Nate Begeman.
llvm-svn: 15347
2004-07-30 15:53:09 +00:00
Misha Brukman
f0c6eaca10
Do not mark LR as callee-save: not quite correctly done. Patch: Nate Begeman.
...
llvm-svn: 15346
2004-07-30 15:51:51 +00:00
Misha Brukman
27ced926da
* Temporarily suspend LR save/restore optimization as it is not quite correct
...
* Implement large fixed-size allocas Entire patch by Nate Begeman.
llvm-svn: 15345
2004-07-30 15:50:45 +00:00
Misha Brukman
4b70aa2e78
Fix De Morgan's name.
...
llvm-svn: 15343
2004-07-30 12:50:08 +00:00
Chris Lattner
e63c404df2
Start using the PatternMatcher a bit.
...
llvm-svn: 15342
2004-07-30 07:50:03 +00:00
Brian Gaeke
9abd4de830
Convert a few assertions with side-effects into regular old runtime checks.
...
These side-effects seem to make a difference when using llc -march=sparcv9
in Release mode (i.e., with -DNDEBUG); when they are left out, lots of
instructions just get dropped on the floor, because they never end up
in the schedule.
llvm-svn: 15339
2004-07-29 21:31:20 +00:00
Misha Brukman
8760d70159
Fix #includes of i*.h => Instructions.h as per PR403.
...
llvm-svn: 15337
2004-07-29 17:30:57 +00:00
Misha Brukman
58104df77b
Fix #includes of i*.h => Instructions.h as per PR403.
...
llvm-svn: 15334
2004-07-29 17:30:56 +00:00
Chris Lattner
42b2748566
Fix #includes of i*.h => Instructions.h as per PR403:
...
http://llvm.cs.uiuc.edu/PR403 .
llvm-svn: 15333
2004-07-29 17:23:00 +00:00
Chris Lattner
964a0794b0
Header moved
...
llvm-svn: 15332
2004-07-29 17:15:38 +00:00
Chris Lattner
d5247fc917
Fix #includes of i*.h => Instructions.h as per PR403:
...
http://llvm.cs.uiuc.edu/PR403 .
llvm-svn: 15331
2004-07-29 17:11:37 +00:00
Misha Brukman
2a80e53645
Fix #includes of i*.h => Instructions.h as per PR403.
...
llvm-svn: 15328
2004-07-29 17:05:13 +00:00
Misha Brukman
8346db7afe
Fix #includes of i*.h files => Instructions.h as per PR403
...
llvm-svn: 15327
2004-07-29 16:53:53 +00:00
Alkis Evlogimenos
09d3f2533c
Merge i*.cpp definitions into Instructions.cpp as part of bug403.
...
llvm-svn: 15326
2004-07-29 12:33:25 +00:00
Alkis Evlogimenos
fb27f702ca
Merge i*.h headers into Instructions.h as part of bug403.
...
llvm-svn: 15325
2004-07-29 12:17:34 +00:00
Chris Lattner
b2cf39d1a4
Fix test/Regression/Analysis/BasicAA/2004-07-28-MustAliasbug.llx
...
This also fixes the miscompilation of MallocBench/gs with dead store
elimination enabled.
llvm-svn: 15324
2004-07-29 07:56:39 +00:00
Brian Gaeke
636a3a9525
Get rid of a few dead method declarations.
...
llvm-svn: 15323
2004-07-29 06:43:10 +00:00
Brian Gaeke
e946e1fedf
Get rid of calls to void llvm::printSet(const ValueSet &).
...
llvm-svn: 15322
2004-07-29 06:43:09 +00:00
Brian Gaeke
88dbff09db
Get rid of calls to void llvm::printSet(const ValueSet &).
...
Use LiveRange's iterator types and operations instead of ValueSet's.
llvm-svn: 15321
2004-07-29 06:43:08 +00:00
Brian Gaeke
7de9b55c7e
Don't derive from ValueSet to implement class LiveRange; instead, use a
...
SetVector<Value *> data member.
Add << operator for LiveRanges (a dumb one, for now.)
llvm-svn: 15320
2004-07-29 06:43:06 +00:00
Brian Gaeke
e7b655d971
Fix a few typoes and grammaroes in comments.
...
llvm-svn: 15319
2004-07-29 04:25:43 +00:00
Brian Gaeke
8061d1a01f
Remove mustSaveAcrossCalls flag, which isn't ever read, and its mutator,
...
markForSaveAcrossCalls.
llvm-svn: 15317
2004-07-29 04:15:36 +00:00
Chris Lattner
6bea23ff54
Minor corrections
...
llvm-svn: 15309
2004-07-28 20:18:53 +00:00
Brian Gaeke
99f18cc97f
TargetInstrInfo::hasOperandInterlock() is always true, because it is
...
never overridden by any target.
llvm-svn: 15308
2004-07-28 19:24:48 +00:00
Misha Brukman
8e19054114
Add notes on bug involving casting ulong -> double, thanks to Nate Begeman.
...
llvm-svn: 15307
2004-07-28 19:16:10 +00:00
Misha Brukman
a8bcaec663
Simplify loading (un)signed constants to registers, patch by Nate Begeman.
...
llvm-svn: 15306
2004-07-28 19:13:49 +00:00
Misha Brukman
b699e3d825
Remove an extra 8 byte distance penalty. Patch by Nate Begeman.
...
llvm-svn: 15305
2004-07-28 19:13:07 +00:00
Misha Brukman
6e134ad499
Find longs by type, not by their primitive size being 64. Patch by Nate Begeman.
...
llvm-svn: 15304
2004-07-28 19:12:24 +00:00
Misha Brukman
8c293deaad
LI can only take signed values, so values > 32767 can only be loaded with ORI
...
llvm-svn: 15299
2004-07-28 00:56:04 +00:00
Misha Brukman
ac63bc04f8
Reorganize tests to place them in proper directories.
...
llvm-svn: 15298
2004-07-28 00:55:12 +00:00
Misha Brukman
8fc18d7d1c
UnitTests 2003-05-26-Shorts and 2003-07-09-LoadShorts have been fixed;
...
2003-05-22-VarSizeArray is broken.
llvm-svn: 15297
2004-07-28 00:01:41 +00:00
Misha Brukman
1b4bc02316
Fix printing of immediate operands by looking at their operand types in
...
the TargetInstrInfo. This fixes UnitTests 2003-05-26-Shorts and
2003-07-09-LoadShorts.
llvm-svn: 15296
2004-07-28 00:00:48 +00:00
Misha Brukman
148ad01de1
Renamed files:
...
* PowerPCReg.td => PowerPCRegisterinfo.td
* PowerPCInstrs.td => PowerPCInstrInfo.td
llvm-svn: 15295
2004-07-27 23:29:16 +00:00
Brian Gaeke
1ec15e0428
ConstantTypeMustBeLoaded has been incorporated into SparcV9PreSelection, its
...
only user.
llvm-svn: 15294
2004-07-27 21:43:38 +00:00
Brian Gaeke
ea9178e184
This was the only user of TargetInstrInfo::ConstantTypeMustBeLoaded().
...
llvm-svn: 15293
2004-07-27 21:11:20 +00:00
Robert Bocchino
4325ca6606
This change fixed a bug in the function visitMul. The prior version
...
assumed that a constant on the RHS of a multiplication was either an
IntConstant or an FPConstant. It checked for an IntConstant and then,
if it did not find one, did a hard cast to an FPConstant. That code
would crash if the RHS were a ConstantExpr that was neither an
IntConstant nor an FPConstant. This version replaces the hard cast
with a dyn_cast. It performs the same way for IntConstants and
FPConstants but does nothing, instead of crashing, for constant
expressions.
The regression test for this change is 2004-07-27-ConstantExprMul.ll.
llvm-svn: 15291
2004-07-27 21:02:21 +00:00
Brian Gaeke
5a8680850f
Get rid of the (apparently non-working) filePrinterEmitter which is added in
...
debug mode. Its only effect seems to be the creation of an empty file...
llvm-svn: 15289
2004-07-27 19:37:37 +00:00
Misha Brukman
b779843f6b
Branch selection support implemented by Nate Begeman for long branches.
...
llvm-svn: 15288
2004-07-27 18:43:04 +00:00
Misha Brukman
b07f569386
Correctly print out long branches, assert on finding pseudo instr COND_BRANCH
...
Patch by Nate Begeman.
llvm-svn: 15286
2004-07-27 18:40:39 +00:00
Misha Brukman
ef0cbd830c
Run the branch selection pass right before the asm printer.
...
Patch by Nate Begeman.
llvm-svn: 15285
2004-07-27 18:39:34 +00:00
Misha Brukman
0f26a3309f
Remove empty unused method processFunctionBeforeFrameFinalized()
...
llvm-svn: 15284
2004-07-27 18:38:40 +00:00
Misha Brukman
8c047d4fad
Add COND_BRANCH pseudo instruction, patch by Nate Begeman.
...
llvm-svn: 15283
2004-07-27 18:35:54 +00:00
Misha Brukman
d7d501d518
Build COND_BRANCHes which may become long or short, decided by a later pass.
...
Patch by Nate Begeman.
llvm-svn: 15282
2004-07-27 18:35:23 +00:00
Misha Brukman
8e2f8de3c3
Moved definition of invertPPCBranchOpcode() into PowerPCInstrInfo class.
...
Patch by Nate Begeman.
llvm-svn: 15281
2004-07-27 18:34:11 +00:00
Misha Brukman
0fe1f5d880
Add PowerPCBranchSelector to discover which are `long' branches.
...
Contributed by Nate Begeman.
llvm-svn: 15280
2004-07-27 18:33:06 +00:00
Brian Gaeke
fefef027f4
TargetInstrInfo::getNOPOpCode() has been replaced by a reference to V9::NOP.
...
llvm-svn: 15279
2004-07-27 17:43:24 +00:00
Brian Gaeke
c9b9016d72
Convert many of the virtual TargetInstrInfo methods used as helper
...
functions in SparcV9InstrSelection and SparcV9PreSelection into regular
old global functions. As it happens, none of them really have anything
to do with TargetInstrInfo.
llvm-svn: 15278
2004-07-27 17:43:23 +00:00
Brian Gaeke
a71776e676
As it happens, none of these TargetInstrInfo methods which are only
...
used in the SparcV9 backend really have anything to do with
TargetInstrInfo, so we're converting them into regular old global
functions and moving their declarations to SparcV9InstrSelectionSupport.h.
(They're mostly used as helper functions for SparcV9InstrSelection.)
llvm-svn: 15277
2004-07-27 17:43:22 +00:00
Brian Gaeke
45adb41f46
Make the create...() functions for some of these passes return a FunctionPass *.
...
llvm-svn: 15276
2004-07-27 17:43:21 +00:00
Misha Brukman
c22bbdd36d
Fixed saving/restoring LR unconditionally, only done as necessary.
...
llvm-svn: 15275
2004-07-27 17:17:48 +00:00
Misha Brukman
adb86dba29
Save and restore LR just like any other register and ONLY if we actually modify
...
it (due to calls or globals access). We now compile `void empty(){}' to `blr'.
llvm-svn: 15274
2004-07-27 17:17:18 +00:00
Misha Brukman
6fec7336fe
LR is a 32-bit int reg
...
llvm-svn: 15273
2004-07-27 17:15:32 +00:00
Misha Brukman
93b0ea58a2
MovePCtoLR (which is `bl' in disguise) modifies LR implicitly
...
llvm-svn: 15272
2004-07-27 17:15:05 +00:00
Misha Brukman
4be6841bc0
Register LR is callee-saved
...
llvm-svn: 15271
2004-07-27 17:14:34 +00:00
Misha Brukman
a3ac216fce
Add IMPLICIT_DEF of LR for branch-and-link instrs (calls and global accesses)
...
llvm-svn: 15270
2004-07-27 17:13:58 +00:00
Chris Lattner
81f96c5a79
nuke pointless -debug output
...
llvm-svn: 15267
2004-07-27 08:03:18 +00:00
Chris Lattner
6a1dd59421
Fix conservative assumption, which was quite broken. Also, notice that
...
functions known to not access memory (like sin/cos) don't access memory! :)
llvm-svn: 15264
2004-07-27 07:46:26 +00:00
Chris Lattner
5cfb85064e
Fix hoisting of void typed values, e.g. calls
...
llvm-svn: 15263
2004-07-27 07:38:32 +00:00
Chris Lattner
687d568cf1
alloca void makes no sense
...
llvm-svn: 15262
2004-07-27 07:30:02 +00:00
Chris Lattner
e921652646
Remove a bogus assertion
...
llvm-svn: 15261
2004-07-27 07:22:21 +00:00
Chris Lattner
c76d21f55d
Complete rewrite of this pass to be faster, use less memory, be easier to
...
understand, and more accurate to boot! This implements
GlobalModRef/purecse.ll over the previous impl.
llvm-svn: 15260
2004-07-27 06:40:37 +00:00
Chris Lattner
60e918e115
Simplify code and silence warning
...
llvm-svn: 15255
2004-07-27 02:34:49 +00:00
Chris Lattner
550242f7ec
Use context-sensitive alias analysis to avoid pessimization in clients of
...
AliasSetTracker (dse and licm). This implements
DeadStoreElimination/context-sensitive.llx
llvm-svn: 15254
2004-07-27 02:20:26 +00:00
Chris Lattner
40bd881142
Make basicaa a bit more aggressive
...
llvm-svn: 15252
2004-07-27 02:18:52 +00:00
Chris Lattner
fe3fff9354
basic-aa can actually provide simple mod/ref info
...
llvm-svn: 15251
2004-07-27 02:13:55 +00:00
Chris Lattner
9cfa22fb48
This was implemented back in march
...
llvm-svn: 15250
2004-07-27 01:59:42 +00:00
Misha Brukman
6272268028
Do not store the stack pointer if the stack size is 0.
...
Also, convert C-style comments to C++ and make sure code wraps at 80 cols.
llvm-svn: 15245
2004-07-26 22:00:26 +00:00
Misha Brukman
a979e8a08a
ADDI can take several forms, including:
...
addi r1, r2, 0
addi r1, <frame index #n>, 0
so we must check for the second parameter being a register for this instruction
to be considered a reg-to-reg copy.
llvm-svn: 15244
2004-07-26 21:50:38 +00:00
Misha Brukman
a2cf775362
assert() on MachineInstr properties instead of checking them dynamically
...
llvm-svn: 15243
2004-07-26 21:35:58 +00:00
Misha Brukman
73687cfcc6
* Recognize `addi r1, r2, 0' a move instruction
...
* List formats of instructions currently recognized as moves
llvm-svn: 15242
2004-07-26 21:29:00 +00:00
Misha Brukman
3e7a88e9db
Fix indentation: should be 2 spaces.
...
llvm-svn: 15240
2004-07-26 18:48:58 +00:00
Misha Brukman
61ff8a374f
Fix file header as it has been renamed.
...
llvm-svn: 15239
2004-07-26 18:45:48 +00:00
Misha Brukman
ccd1114518
Renamed files to have the `X86' prefix for uniqueness purposes.
...
All CVS history was renamed, the *,v were copied over. No worries.
llvm-svn: 15238
2004-07-26 18:43:11 +00:00
Misha Brukman
288289f9a7
* Rewrote casts
...
* Implemented GEP folding
* Dynamically output global address stuff once per function
* Fix casting fp<->short/byte
Patch contributed by Nate Begeman.
llvm-svn: 15237
2004-07-26 18:13:24 +00:00
Misha Brukman
bf2ad22ff6
Increment the label number in runOnFunction() rather than while printing out
...
some instruction. Patch by Nate Begeman.
llvm-svn: 15236
2004-07-26 16:28:33 +00:00
Misha Brukman
796cc48f99
More notes on bugs, unimplemented features, and suggested code improvements.
...
Written by Nate Begeman.
llvm-svn: 15235
2004-07-26 16:23:55 +00:00
Misha Brukman
29efda2e6b
Fix subtracting values > 2^15 in the prologue/epilogue, by Nate Begeman.
...
llvm-svn: 15234
2004-07-26 16:22:52 +00:00
Chris Lattner
59aff88abe
Implement DeadStoreElim/alloca.llx by observing that allocas are dead at the
...
end of the function (either return or unwind)
llvm-svn: 15232
2004-07-26 06:14:11 +00:00
Chris Lattner
8b2590f09f
Add some new methods
...
llvm-svn: 15230
2004-07-26 05:50:23 +00:00
Chris Lattner
c2e9c56906
Throttle back indvar substitution from creating multiplies in loops. This is bad bad bad.
...
llvm-svn: 15227
2004-07-26 02:47:12 +00:00
Chris Lattner
4fcb3b1e7d
Fix bug in previous patch :(
...
llvm-svn: 15226
2004-07-26 01:40:20 +00:00
Chris Lattner
1bb4db76b2
Fix an extremely serious regression that was causing LLVM basic blocks to be
...
scrambled around almost at random, having really bad effects on icache locality.
llvm-svn: 15225
2004-07-26 01:22:59 +00:00
Chris Lattner
e643adb9e5
Fix a serious bug in the double constant reader. In particular, because
...
(At[3] << 24) is an int type and it is being coerced to uint64_t, it was
getting sign extended, causing us to get FFFFFFFFxxxxxxxx constants all of
the time.
llvm-svn: 15224
2004-07-25 23:15:44 +00:00
Chris Lattner
1649c7d308
Temporarily disable this code, as it is emitting LLVM_NAN("nan") which results in a call to the
...
glibc 'nan' function because the initializer is not a string. This breaks when used in a global
initializer. Try compiling this testcase for example:
%X = global float <some nan value>
llvm-svn: 15223
2004-07-25 22:36:35 +00:00
Reid Spencer
a23e595275
Avoid use of size(), which counts, in favor of other mechanisms.
...
llvm-svn: 15221
2004-07-25 21:44:54 +00:00
Reid Spencer
5aeeecb218
Always write FP values correctly.
...
Adjust for new Module.h interface for dependent libraries.
Excise unused backwards compatibility flag.
llvm-svn: 15220
2004-07-25 21:36:26 +00:00
Reid Spencer
bf99424415
Don't create a backwards compatibility flag for something that was a
...
regression bug introduced in release 1.2
llvm-svn: 15219
2004-07-25 21:32:51 +00:00
Reid Spencer
1bf4f4f9e1
Adjust to new Module.h interface for dependent libraries.
...
llvm-svn: 15218
2004-07-25 21:32:02 +00:00
Reid Spencer
04819ff173
Adjust to new Module.h interface for dependent libraries
...
Remove mem leaks resulting from not freeing parse strings.
llvm-svn: 15217
2004-07-25 21:30:51 +00:00
Reid Spencer
07e3e1c29b
Adjust to new Module.h interface for dependent libraries
...
Only write the target triple and deplibs if they are non-empty.
llvm-svn: 15216
2004-07-25 21:29:43 +00:00
Chris Lattner
447e112745
Fix a latent bug in the AliasSetTracker that was exposed by the FreeInst additions and broke a bunch of programs last night.
...
llvm-svn: 15214
2004-07-25 18:32:01 +00:00
Reid Spencer
11fc1457c0
bug 263:
...
Ensure the list of libraries is cleared.
llvm-svn: 15212
2004-07-25 18:08:57 +00:00
Reid Spencer
9077f12bb0
bug 263:
...
Add ability to write target triple and dependent libraries information.
llvm-svn: 15211
2004-07-25 18:08:18 +00:00
Reid Spencer
3043e82af5
bug 263:
...
- encode/decode target triple and dependent libraries
bug 401:
- fix encoding/decoding of FP values to be little-endian only
bug 402:
- initial (compatible) cut at 24-bit types instead of 32-bit
- reduce size of block headers by 50%
Other:
- cleanup Writer by consolidating to one compilation unit, rem. other files
- use a std::vector instead of std::deque so the buffer can be allocated
in multiples of 64KByte chunks rather than in multiples of some smaller
(default) number.
llvm-svn: 15210
2004-07-25 18:07:36 +00:00
Reid Spencer
4b76a409e5
bug 263:
...
Provide parsing for the target triple and dependent libraries.
llvm-svn: 15209
2004-07-25 17:58:28 +00:00
Reid Spencer
282e14928d
bug 263:
...
Provide new tokens for target triples and dependent libraries.
llvm-svn: 15208
2004-07-25 17:56:00 +00:00
Chris Lattner
a259f9201c
* Substantially simplify how free instructions are handled (potentially fixing
...
a bug in DSE).
* Delete dead operand uses iteratively instead of recursively, using a
SetVector.
* Defer deletion of dead operand uses until the end of processing, which means
we don't have to bother with updating the AliasSetTracker. This speeds up
DSE substantially.
llvm-svn: 15204
2004-07-25 11:09:56 +00:00
Alkis Evlogimenos
3e3fe9ff5a
Add some comments to the backtracking code.
...
llvm-svn: 15200
2004-07-25 08:10:33 +00:00
Chris Lattner
0a9d5e6f14
Free instructions kill values too. This implements DeadStoreElim/free.llx
...
llvm-svn: 15199
2004-07-25 07:58:38 +00:00
Chris Lattner
31d9cbf7bb
Add support for free instructions
...
llvm-svn: 15197
2004-07-25 07:57:37 +00:00
Chris Lattner
fd9f044bcf
Fix the sense of joinable
...
llvm-svn: 15196
2004-07-25 07:47:25 +00:00
Chris Lattner
db6b0d2361
Remove linux/solaris specific stuff.
...
llvm-svn: 15195
2004-07-25 07:34:00 +00:00
Chris Lattner
7630df9aa0
This patch makes use of the infrastructure implemented before to safely and
...
aggressively coallesce live ranges even if they overlap. Consider this LLVM
code for example:
int %test(int %X) {
%Y = mul int %X, 1 ;; Codegens to Y = X
%Z = add int %X, %Y
ret int %Z
}
The mul is just there to get a copy into the code stream. This produces
this machine code:
(0x869e5a8, LLVM BB @0x869b9a0):
%reg1024 = mov <fi#-2>, 1, %NOREG, 0 ;; "X"
%reg1025 = mov %reg1024 ;; "Y" (subsumed by X)
%reg1026 = add %reg1024, %reg1025
%EAX = mov %reg1026
ret
Note that the life times of reg1024 and reg1025 overlap, even though they
contain the same value. This results in this machine code:
test:
mov %EAX, DWORD PTR [%ESP + 4]
mov %ECX, %EAX
add %EAX, %ECX
ret
Another, worse case involves loops and PHI nodes. Consider this trivial loop:
testcase:
int %test2(int %X) {
entry:
br label %Loop
Loop:
%Y = phi int [%X, %entry], [%Z, %Loop]
%Z = add int %Y, 1
%cond = seteq int %Z, 100
br bool %cond, label %Out, label %Loop
Out:
ret int %Z
}
Because of interactions between the PHI elimination pass and the register
allocator, this got compiled to this code:
test2:
mov %ECX, DWORD PTR [%ESP + 4]
.LBBtest2_1:
*** mov %EAX, %ECX
inc %EAX
cmp %EAX, 100
*** mov %ECX, %EAX
jne .LBBtest2_1
ret
Or on powerpc, this code:
_test2:
mflr r0
stw r0, 8(r1)
stwu r1, -60(r1)
.LBB_test2_1:
addi r2, r3, 1
cmpwi cr0, r2, 100
*** or r3, r2, r2
bne cr0, .LBB_test2_1
*** or r3, r2, r2
lwz r0, 68(r1)
mtlr r0
addi r1, r1, 60
blr 0
With this improvement in place, we now generate this code for these two
testcases, which is what we want:
test:
mov %EAX, DWORD PTR [%ESP + 4]
add %EAX, %EAX
ret
test2:
mov %EAX, DWORD PTR [%ESP + 4]
.LBBtest2_1:
inc %EAX
cmp %EAX, 100
jne .LBBtest2_1 # Loop
ret
Or on PPC:
_test2:
mflr r0
stw r0, 8(r1)
stwu r1, -60(r1)
.LBB_test2_1:
addi r3, r3, 1
cmpwi cr0, r3, 100
bne cr0, .LBB_test2_1
lwz r0, 68(r1)
mtlr r0
addi r1, r1, 60
blr 0
Static numbers for spill code loads/stores/reg-reg copies (smaller is better):
em3d: before: 47/25/26 after: 44/22/24
164.gzip: before: 433/245/310 after: 403/231/278
175.vpr: before: 3721/2189/1581 after: 4144/2081/1423
176.gcc: before: 26195/8866/9235 after: 25942/8082/8275
186.crafty: before: 4295/2587/3079 after: 4119/2519/2916
252.eon: before: 12754/7585/5803 after: 12508/7425/5643
256.bzip2: before: 463/226/315 after: 482:241/309
Runtime perf number samples on X86:
gzip: before: 41.09 after: 39.86
bzip2: runtime: before: 56.71s after: 57.07s
gcc: before: 6.16 after: 6.12
eon: before: 2.03s after: 2.00s
llvm-svn: 15194
2004-07-25 07:11:19 +00:00
Chris Lattner
0997e50af5
Make a method const, no functionality changes
...
llvm-svn: 15193
2004-07-25 06:23:01 +00:00
Chris Lattner
5196d002f9
I think that V8 should coallesce registers, don't you?
...
llvm-svn: 15192
2004-07-25 06:19:04 +00:00
Alkis Evlogimenos
d4ef731684
Use name.empty() instead of testing against equality with the empty
...
string.
llvm-svn: 15191
2004-07-25 06:16:52 +00:00
Alkis Evlogimenos
d5f5b018e9
Disallow creation of named values of type void.
...
llvm-svn: 15190
2004-07-25 06:07:15 +00:00
Chris Lattner
32cab750d4
Fix a bug where we incorrectly value numbered the first PHI definition the
...
same as the PHI use. This is not correct as the PHI use value is different
depending on which branch is taken. This fixes espresso with aggressive
coallescing, and perhaps others.
llvm-svn: 15189
2004-07-25 05:45:18 +00:00
Chris Lattner
e3da94e11f
Fix a bug in the range remover
...
llvm-svn: 15188
2004-07-25 05:43:53 +00:00
Chris Lattner
4ed2b97d51
Add debugging output for joining assignments
...
llvm-svn: 15187
2004-07-25 03:24:11 +00:00
Alkis Evlogimenos
2faa6cdc75
Remove implementation of operator= and make it private so that it is
...
not used accidentally.
llvm-svn: 15172
2004-07-24 18:55:15 +00:00
Alkis Evlogimenos
0618429149
Change std::map<unsigned, LiveInterval*> into a std::map<unsigned,
...
LiveInterval>. This saves some space and removes the pointer
indirection caused by following the pointer.
llvm-svn: 15167
2004-07-24 11:44:15 +00:00
Chris Lattner
29e97f36bf
obvious fix
...
llvm-svn: 15162
2004-07-24 07:51:27 +00:00
Chris Lattner
71a9eec1d3
Get rid of the printout from the low-level system interface
...
llvm-svn: 15161
2004-07-24 07:50:48 +00:00
Chris Lattner
f162d7dac2
Pass timeouts into the low level "execute program with timeout" function
...
llvm-svn: 15160
2004-07-24 07:49:11 +00:00
Chris Lattner
07dc2875c2
Add support for killing the program if it executes for too long.
...
llvm-svn: 15158
2004-07-24 07:41:31 +00:00
Chris Lattner
26856ab7c3
whoops, didn't mean to remove this
...
llvm-svn: 15157
2004-07-24 04:32:22 +00:00
Chris Lattner
de8efecef1
In the joiner, merge the small interval into the large interval. This restores
...
us back to taking about 10.5s on gcc, instead of taking 15.6s! The net result
is that my big patches have hand no significant effect on compile time or code
quality. heh.
llvm-svn: 15156
2004-07-24 03:41:50 +00:00
Chris Lattner
c71a9684f8
Completely eliminate the intervals_ list. instead, the r2iMap_ maintains
...
ownership of the intervals.
llvm-svn: 15155
2004-07-24 03:32:06 +00:00
Chris Lattner
b05762ade7
Big change to compute logical value numbers for each LiveRange added to an
...
Interval. This generalizes the isDefinedOnce mechanism that we used before
to help us coallesce ranges that overlap. As part of this, every logical
range with a different value is assigned a different number in the interval.
For example, for code that looks like this:
0 X = ...
4 X += ...
...
N = X
We now generate a live interval that contains two ranges: [2,6:0),[6,?:1)
reflecting the fact that there are two different values in the range at
different positions in the code.
Currently we are not using this information at all, so this just slows down
liveintervals. In the future, this will change.
Note that this change also substantially refactors the joinIntervalsInMachineBB
method to merge the cases for virt-virt and phys-virt joining into a single
case, adds comments, and makes the code a bit easier to follow.
llvm-svn: 15154
2004-07-24 02:59:07 +00:00
Chris Lattner
5ff4567405
Add a new differingRegisterClasses method
...
make overlapsAliases take pointers instead of references
fix indentation
llvm-svn: 15153
2004-07-24 02:53:43 +00:00
Chris Lattner
a3f7433b58
Little stuff:
...
* Fix comment typeo
* add dump() methods
* add a few new methods like getLiveRangeContaining, removeRange & joinable
(which is currently the same as overlaps)
* Remove the unused operator==
Bigger change:
* In LiveInterval, instead of using a boolean isDefinedOnce to keep track of
if there are > 1 definitions in a particular interval, keep a counter,
NumValues to keep track of exactly how many there are.
* In LiveRange, add a new ValId element to indicate which of the numbered
values each LiveRange belongs to. We now no longer merge LiveRanges if
they are of differing value ID's even if they are neighbors.
llvm-svn: 15152
2004-07-24 02:52:23 +00:00
Misha Brukman
c1e23e1939
Running list of bugs, unimplemented features, currently broken tests, until we
...
have a nightly tester set up for PowerPC.
llvm-svn: 15147
2004-07-23 22:37:22 +00:00
Misha Brukman
c7291558eb
Eliminate spurious empty space; make code easier to page through.
...
llvm-svn: 15146
2004-07-23 22:35:49 +00:00