Chris Lattner [Fri, 23 Apr 2004 21:29:48 +0000 (21:29 +0000)]
Move the scev expansion code into this pass, where it belongs. There is
still room for cleanup, but at least the code modification is out of the
analysis now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13135
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 23 Apr 2004 21:29:03 +0000 (21:29 +0000)]
Eliminate all of the SCEV Expansion code which is really part of the
IndVars pass, not part of SCEV *analysis*.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13134
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 23 Apr 2004 21:28:25 +0000 (21:28 +0000)]
Remove the SCEV::expandCodeFor method, add a new SCEVVisitor class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13133
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 23 Apr 2004 20:36:51 +0000 (20:36 +0000)]
Teach bugpoint to be a little bit smarter and avoid repeating work
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13132
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 18:17:03 +0000 (18:17 +0000)]
Merged this file into the SparcV9 target.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13128
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 18:15:48 +0000 (18:15 +0000)]
Merge TargetRegInfo.h into SparcV9RegInfo.h, which is its only subclass.
This prepares us to be able to de-virtualize and de-abstract it, and
take the register allocator bits out and move them into the register allocator
proper...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13127
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 18:15:47 +0000 (18:15 +0000)]
Include SparcV9RegInfo.h instead of TargetRegInfo.h.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13126
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 18:15:46 +0000 (18:15 +0000)]
Include SparcV9RegInfo.h instead of TargetRegInfo.h. This serves as a bit of
documentation that this module needs to be made independent of the
register file description of the current target.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13125
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 18:10:38 +0000 (18:10 +0000)]
Get rid of the old byte-at-a-time emission code used when the Sparc JIT was
being tested on X86, as per Chris's request.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13124
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 18:05:28 +0000 (18:05 +0000)]
Go back to the interpreter main loop after performing intrinsic lowering,
because 1) the first instruction might not be a call site, and
2) CS and SF.Caller were not getting set to point to the new call site
anyway (resulting in a crash on e.g. call %llvm.memset).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13122
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 17:38:17 +0000 (17:38 +0000)]
mmap of a zero length file returns null on some platforms, so hack around it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13121
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 17:11:16 +0000 (17:11 +0000)]
Use emitWordAt() to emit forward-branch fixups.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13120
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 17:11:15 +0000 (17:11 +0000)]
Emit SPARC machine code a word at a time instead of a byte at a time.
Use emitWordAt() to emit forward-branch fixups.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13119
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 17:11:14 +0000 (17:11 +0000)]
Implement emitWordAt() for the JIT emitter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13118
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 17:11:13 +0000 (17:11 +0000)]
Implement emitWordAt() for the debug emitter and the file printer emitter. (I
am not so sure about the file printer emitter, but the debug emitter change
should be harmless.)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13117
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Fri, 23 Apr 2004 17:11:12 +0000 (17:11 +0000)]
Add emitWordAt() - a quick and dirty interface that the machine-dependent
emitters can use to emit "relocations".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13116
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Thu, 22 Apr 2004 23:07:39 +0000 (23:07 +0000)]
Add command-line option to select whether to isolate or delete function from
module. Default is `isolate' as before.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13113
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Thu, 22 Apr 2004 23:00:51 +0000 (23:00 +0000)]
Clarify the logic: the flag is renamed to `deleteFn' to signify it will delete
the function instead of isolating it. This also means the condition is reversed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13112
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Thu, 22 Apr 2004 22:52:22 +0000 (22:52 +0000)]
Add a flag to choose between isolating a function or deleting the function from
the Module. The default behavior keeps functionality as before: the chosen
function is the one that remains.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13111
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Thu, 22 Apr 2004 22:51:37 +0000 (22:51 +0000)]
Add a boolean flag to delete this function from module, leaving the rest behind.
Useful in manual debugging when bugpoint isn't quite up to snuff.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13110
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Thu, 22 Apr 2004 20:02:09 +0000 (20:02 +0000)]
Add a space before result for readability on the command line.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13109
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 22 Apr 2004 15:12:36 +0000 (15:12 +0000)]
Disable a previous patch that was causing indvars to loop infinitely :(
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13108
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 22 Apr 2004 15:00:36 +0000 (15:00 +0000)]
Add an ugly cast
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13107
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 22 Apr 2004 14:59:40 +0000 (14:59 +0000)]
Fix an extremely serious thinko I made in revision 1.60 of this file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13106
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 22 Apr 2004 14:56:51 +0000 (14:56 +0000)]
Add a method
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13105
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 21 Apr 2004 23:36:08 +0000 (23:36 +0000)]
Implement a todo, rewriting all possible scev expressions inside of the
loop. This eliminates the extra add from the previous case, but it's
not clear that this will be a performance win overall. Tommorows test
results will tell. :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13103
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 21 Apr 2004 22:29:37 +0000 (22:29 +0000)]
This code really wants to iterate over the OPERANDS of an instruction, not
over its USES. If it's dead it doesn't have any uses! :)
Thanks to the fabulous and mysterious Bill Wendling for pointing this out. :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13102
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 21 Apr 2004 22:22:01 +0000 (22:22 +0000)]
Implement a fixme. The helps loops that have induction variables of different
types in them. Instead of creating an induction variable for all types, it
creates a single induction variable and casts to the other sizes. This generates
this code:
no_exit: ; preds = %entry, %no_exit
%indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ] ; <uint> [#uses=4]
*** %j.0.0 = cast uint %indvar to short ; <short> [#uses=1]
%indvar = cast uint %indvar to int ; <int> [#uses=1]
%tmp.7 = getelementptr short* %P, uint %indvar ; <short*> [#uses=1]
store short %j.0.0, short* %tmp.7
%inc.0 = add int %indvar, 1 ; <int> [#uses=2]
%tmp.2 = setlt int %inc.0, %N ; <bool> [#uses=1]
%indvar.next = add uint %indvar, 1 ; <uint> [#uses=1]
br bool %tmp.2, label %no_exit, label %loopexit
instead of:
no_exit: ; preds = %entry, %no_exit
%indvar = phi ushort [ %indvar.next, %no_exit ], [ 0, %entry ] ; <ushort> [#uses=2]
*** %indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ] ; <uint> [#uses=3]
%indvar = cast uint %indvar to int ; <int> [#uses=1]
%indvar = cast ushort %indvar to short ; <short> [#uses=1]
%tmp.7 = getelementptr short* %P, uint %indvar ; <short*> [#uses=1]
store short %indvar, short* %tmp.7
%inc.0 = add int %indvar, 1 ; <int> [#uses=2]
%tmp.2 = setlt int %inc.0, %N ; <bool> [#uses=1]
%indvar.next = add uint %indvar, 1
*** %indvar.next = add ushort %indvar, 1
br bool %tmp.2, label %no_exit, label %loopexit
This is an improvement in register pressure, but probably doesn't happen that
often.
The more important fix will be to get rid of the redundant add.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13101
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 21 Apr 2004 20:44:33 +0000 (20:44 +0000)]
Fix an incredibly nasty iterator invalidation problem. I am too spoiled by ilists :)
Eventually it would be nice if CallGraph maintained an ilist of CallGraphNode's instead
of a vector of pointers to them, but today is not that day.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13100
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 21 Apr 2004 18:52:06 +0000 (18:52 +0000)]
bug fixed
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13099
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 21 Apr 2004 18:49:35 +0000 (18:49 +0000)]
new testcase for PR326
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13098
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Wed, 21 Apr 2004 18:36:43 +0000 (18:36 +0000)]
Add doxygenified comments to functions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13097
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Wed, 21 Apr 2004 18:27:56 +0000 (18:27 +0000)]
I'm allergic to the word `stuff'.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13096
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Wed, 21 Apr 2004 17:53:58 +0000 (17:53 +0000)]
Make SparcV9RegInfo::getRegType() return the right answer for registers
of IntCC, FloatCC, and Special types.
Make SparcV9RegInfo::getRegClassIDOfRegType() return the right answer
if you ask for the class corresponding to SpecialRegType.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13095
91177308-0d34-0410-b5e6-
96231b3b80d8
Alkis Evlogimenos [Wed, 21 Apr 2004 16:11:40 +0000 (16:11 +0000)]
Include cerrno (gcc-3.4 fix)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13091
91177308-0d34-0410-b5e6-
96231b3b80d8
Alkis Evlogimenos [Wed, 21 Apr 2004 16:10:40 +0000 (16:10 +0000)]
Declare iterator as public since it is defined as such (gcc-3.4 fix)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13090
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 21 Apr 2004 14:23:18 +0000 (14:23 +0000)]
Fix typeo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13089
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 20 Apr 2004 22:06:53 +0000 (22:06 +0000)]
REALLY fix PR324: don't delete linkonce functions until after the SCC traversal
is done, which avoids invalidating iterators in the SCC traversal routines
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13088
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 20 Apr 2004 21:52:26 +0000 (21:52 +0000)]
Pass the callgraph not the module
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13087
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 20 Apr 2004 21:52:12 +0000 (21:52 +0000)]
Allow getting the module from a call graph
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13086
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 20 Apr 2004 21:52:07 +0000 (21:52 +0000)]
Change it to take a callgraph, from which we can get a module
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13085
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 20 Apr 2004 21:30:06 +0000 (21:30 +0000)]
Add the ability for SCC passes to initialize and finalize themselves
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13084
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 20 Apr 2004 20:26:03 +0000 (20:26 +0000)]
Fix PR325
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13081
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 20 Apr 2004 20:20:59 +0000 (20:20 +0000)]
Fix PR324 and testcase: Inline/2004-04-20-InlineLinkOnce.llx
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13080
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 20 Apr 2004 20:15:01 +0000 (20:15 +0000)]
New testcase, distilled from PR324
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13079
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Tue, 20 Apr 2004 20:12:57 +0000 (20:12 +0000)]
Make it legal to ask for the type of a specialreg
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13078
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Tue, 20 Apr 2004 18:18:46 +0000 (18:18 +0000)]
Add some PRs which were fixed, but not previously mentioned in the rel. notes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13077
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 20 Apr 2004 16:43:21 +0000 (16:43 +0000)]
Add support for the select instruction
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13076
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Mon, 19 Apr 2004 19:12:12 +0000 (19:12 +0000)]
Make it legal to request a load or store of %fsr.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13073
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Mon, 19 Apr 2004 19:09:24 +0000 (19:09 +0000)]
Fix typo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13072
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Mon, 19 Apr 2004 18:53:44 +0000 (18:53 +0000)]
Regularize include guards and remove some excess whitespace.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13071
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Mon, 19 Apr 2004 18:53:43 +0000 (18:53 +0000)]
Tighten up SparcV9FloatCCRegClass::getRegName()'s assertion - if you ask it for
the name of %fsr (as the comment in SparcV9RegClassInfo.h used to suggest)
you would walk off the end of the FloatCCRegName array.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13070
91177308-0d34-0410-b5e6-
96231b3b80d8
Brian Gaeke [Mon, 19 Apr 2004 18:53:42 +0000 (18:53 +0000)]
Regularize include guards, remove some excess whitespace and fix some comments.
Remove the extra %fsr register from SparcV9FloatCCRegClass.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13069
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 19 Apr 2004 18:07:02 +0000 (18:07 +0000)]
Initial checkin of a simple loop unswitching pass. It still needs work,
but it's a start, and seems to do it's basic job.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13068
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 19 Apr 2004 18:06:34 +0000 (18:06 +0000)]
New testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13067
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 19 Apr 2004 06:28:37 +0000 (06:28 +0000)]
Add accessor for a Loop Unswitching pass
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13066
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 19 Apr 2004 06:26:46 +0000 (06:26 +0000)]
Eliminate a poorly conceived method
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13065
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 19 Apr 2004 03:42:32 +0000 (03:42 +0000)]
It's not just a printer, it's actually an analysis too
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13064
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Mon, 19 Apr 2004 03:36:47 +0000 (03:36 +0000)]
As per Chris, greatly simplify handling of external functions by using the
wrapper idea uniformly: we can use Value::replaceAllUsesWith() instead of
special-casing by class of user.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13063
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Mon, 19 Apr 2004 03:28:39 +0000 (03:28 +0000)]
* Remove note about "UNSUPPORTED: " feature that just became supported
* Fix usage of <p> tag and some grammar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13062
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Mon, 19 Apr 2004 03:12:35 +0000 (03:12 +0000)]
* Reorder #includes
* Wrap a long line
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13061
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Mon, 19 Apr 2004 03:07:29 +0000 (03:07 +0000)]
Display sample bugpoint output with the `code' stylesheet class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13060
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 19 Apr 2004 03:03:19 +0000 (03:03 +0000)]
* Improve file header comment
* Remove #include
* Add some methods to update loop/loopinfo
* Stop explicitly holding the loop depth in the Loop class. Instead, just
dynamically calculate it. This makes it easier to update LoopInfo as a
result of transformations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13059
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 19 Apr 2004 03:02:09 +0000 (03:02 +0000)]
Remove code to update loop depths
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13058
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 19 Apr 2004 03:01:23 +0000 (03:01 +0000)]
Add #include
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13057
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Mon, 19 Apr 2004 03:01:01 +0000 (03:01 +0000)]
Add notes about PRs 38 and 290 being fixed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13056
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Mon, 19 Apr 2004 02:56:49 +0000 (02:56 +0000)]
Wrap (some) lines to 80 cols.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13055
91177308-0d34-0410-b5e6-
96231b3b80d8
Misha Brukman [Mon, 19 Apr 2004 01:12:01 +0000 (01:12 +0000)]
Finally implement rewriting global initializers which use external functions
by creating an internal wrapper function with same signature as the external
function, and use it instead of the "real" function.
The wrapper then calls the external function using the same JIT function
resolution API that has been used before for rewriting instructions, since the
wrapper has an explicit call instruction which we can rewrite.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13054
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 23:37:03 +0000 (23:37 +0000)]
Provide an interface that is more convenient for iterating over the blocks
in a loop.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13052
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 22:46:08 +0000 (22:46 +0000)]
Move isLoopInvariant to the Loop class
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13051
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 22:45:27 +0000 (22:45 +0000)]
Add new method
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13050
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 22:45:16 +0000 (22:45 +0000)]
Add new method.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13049
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 22:27:10 +0000 (22:27 +0000)]
Correct rewriting of exit blocks after my last patch
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13048
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 22:21:41 +0000 (22:21 +0000)]
Fix computation of exit blocks
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13047
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 22:15:13 +0000 (22:15 +0000)]
Loop exit sets are no longer explicitly held, they are dynamically computed on demand.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13046
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 22:14:10 +0000 (22:14 +0000)]
Change the ExitBlocks list from being explicitly contained in the Loop
structure to being dynamically computed on demand. This makes updating
loop information MUCH easier.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13045
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 18:26:38 +0000 (18:26 +0000)]
Spiff is no longer in our tree
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13041
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 18:06:14 +0000 (18:06 +0000)]
Reduce the unrolling limit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13040
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 17:38:42 +0000 (17:38 +0000)]
If the preheader of the loop was the entry block of the function, make sure
that the exit block of the loop becomes the new entry block of the function.
This was causing a verifier assertion on 252.eon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13039
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 17:32:39 +0000 (17:32 +0000)]
Be much more careful about how we update instructions outside of the loop
using instructions inside of the loop. This should fix the MishaTest failure
from last night.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13038
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 06:55:57 +0000 (06:55 +0000)]
Another testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13037
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 06:54:48 +0000 (06:54 +0000)]
Implement method
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13036
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 06:54:34 +0000 (06:54 +0000)]
Add a new method
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13035
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 06:27:43 +0000 (06:27 +0000)]
After unrolling our single basic block loop, fold it into the preheader and exit
block. The primary motivation for doing this is that we can now unroll nested loops.
This makes a pretty big difference in some cases. For example, in 183.equake,
we are now beating the native compiler with the CBE, and we are a lot closer
with LLC.
I'm now going to play around a bit with the unroll factor and see what effect
it really has.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13034
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 05:38:37 +0000 (05:38 +0000)]
Fix a bug: this does not preserve the CFG!
While we're at it, add support for updating loop information correctly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13033
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 05:38:05 +0000 (05:38 +0000)]
Add a new method, add a check missing that caused a segfault if a loop didn't
have a canonical indvar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13032
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 05:37:42 +0000 (05:37 +0000)]
Allow clients to delete loops, add a new method
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13031
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 05:21:01 +0000 (05:21 +0000)]
Move loop optimization passes up, add loop unroller
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13030
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 05:20:32 +0000 (05:20 +0000)]
Add prototype
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13029
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 05:20:17 +0000 (05:20 +0000)]
Initial checkin of a simple loop unroller. This pass is extremely basic and
limited. Even in it's extremely simple state (it can only *fully* unroll single
basic block loops that execute a constant number of times), it already helps improve
performance a LOT on some benchmarks, particularly with the native code generators.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13028
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 18 Apr 2004 00:52:43 +0000 (00:52 +0000)]
Make the tail duplication threshold accessible from the command line instead of hardcoded
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13025
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 17 Apr 2004 23:49:15 +0000 (23:49 +0000)]
Fix a memory leak. We leaked the vector holding the entries in switch tables.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13023
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 17 Apr 2004 23:00:51 +0000 (23:00 +0000)]
New testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13020
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 17 Apr 2004 22:58:41 +0000 (22:58 +0000)]
Add the ability to compute exit values for complex loop using unanalyzable
operations. This allows us to compile this testcase:
int main() {
int h = 1;
do h = 3 * h + 1; while (h <= 256);
printf("%d\n", h);
return 0;
}
into this:
int %main() {
entry:
call void %__main( )
%tmp.6 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([4 x sbyte]* %.str_1, long 0, long 0), int 364 ) ; <int> [#uses=0]
ret int 0
}
This testcase was taken directly from 256.bzip2, believe it or not.
This code is not as general as I would like. Next up is to refactor it
a bit to handle more cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13019
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 17 Apr 2004 18:44:09 +0000 (18:44 +0000)]
If the loop executes a constant number of times, try a bit harder to replace
exit values.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13018
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 17 Apr 2004 18:36:24 +0000 (18:36 +0000)]
Add the ability to compute trip counts that are only controlled by constants
even if the loop is using expressions that we can't compute as a closed-form.
This allows us to calculate that this function always returns 55:
int test() {
double X;
int Count = 0;
for (X = 100; X > 1; X = sqrt(X), ++Count)
/*empty*/;
return Count;
}
And allows us to compute trip counts for loops like:
int h = 1;
do h = 3 * h + 1; while (h <= 256);
(which occurs in bzip2), and for this function, which occurs after inlining
and other optimizations:
int popcount()
{
int x = 666;
int result = 0;
while (x != 0) {
result = result + (x & 0x1);
x = x >> 1;
}
return result;
}
We still cannot compute the exit values of result or h in the two loops above,
which means we cannot delete the loop, but we are getting closer. Being able to
compute a constant trip count for these two loops will allow us to unroll them
completely though.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13017
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 17 Apr 2004 18:16:10 +0000 (18:16 +0000)]
Fix a HUGE pessimization on X86. The indvars pass was taking this
(familiar) function:
int _strlen(const char *str) {
int len = 0;
while (*str++) len++;
return len;
}
And transforming it to use a ulong induction variable, because the type of
the pointer index was left as a constant long. This is obviously very bad.
The fix is to shrink long constants in getelementptr instructions to intptr_t,
making the indvars pass insert a uint induction variable, which is much more
efficient.
Here's the before code for this function:
int %_strlen(sbyte* %str) {
entry:
%tmp.13 = load sbyte* %str ; <sbyte> [#uses=1]
%tmp.24 = seteq sbyte %tmp.13, 0 ; <bool> [#uses=1]
br bool %tmp.24, label %loopexit, label %no_exit
no_exit: ; preds = %entry, %no_exit
*** %indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ] ; <uint> [#uses=2]
*** %indvar = phi ulong [ %indvar.next, %no_exit ], [ 0, %entry ] ; <ulong> [#uses=2]
%indvar1 = cast ulong %indvar to uint ; <uint> [#uses=1]
%inc.02.sum = add uint %indvar1, 1 ; <uint> [#uses=1]
%inc.0.0 = getelementptr sbyte* %str, uint %inc.02.sum ; <sbyte*> [#uses=1]
%tmp.1 = load sbyte* %inc.0.0 ; <sbyte> [#uses=1]
%tmp.2 = seteq sbyte %tmp.1, 0 ; <bool> [#uses=1]
%indvar.next = add ulong %indvar, 1 ; <ulong> [#uses=1]
%indvar.next = add uint %indvar, 1 ; <uint> [#uses=1]
br bool %tmp.2, label %loopexit.loopexit, label %no_exit
loopexit.loopexit: ; preds = %no_exit
%indvar = cast uint %indvar to int ; <int> [#uses=1]
%inc.1 = add int %indvar, 1 ; <int> [#uses=1]
ret int %inc.1
loopexit: ; preds = %entry
ret int 0
}
Here's the after code:
int %_strlen(sbyte* %str) {
entry:
%inc.02 = getelementptr sbyte* %str, uint 1 ; <sbyte*> [#uses=1]
%tmp.13 = load sbyte* %str ; <sbyte> [#uses=1]
%tmp.24 = seteq sbyte %tmp.13, 0 ; <bool> [#uses=1]
br bool %tmp.24, label %loopexit, label %no_exit
no_exit: ; preds = %entry, %no_exit
*** %indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ] ; <uint> [#uses=3]
%indvar = cast uint %indvar to int ; <int> [#uses=1]
%inc.0.0 = getelementptr sbyte* %inc.02, uint %indvar ; <sbyte*> [#uses=1]
%inc.1 = add int %indvar, 1 ; <int> [#uses=1]
%tmp.1 = load sbyte* %inc.0.0 ; <sbyte> [#uses=1]
%tmp.2 = seteq sbyte %tmp.1, 0 ; <bool> [#uses=1]
%indvar.next = add uint %indvar, 1 ; <uint> [#uses=1]
br bool %tmp.2, label %loopexit, label %no_exit
loopexit: ; preds = %entry, %no_exit
%len.0.1 = phi int [ 0, %entry ], [ %inc.1, %no_exit ] ; <int> [#uses=1]
ret int %len.0.1
}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13016
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 17 Apr 2004 18:08:33 +0000 (18:08 +0000)]
Even if there are not any induction variables in the loop, if we can compute
the trip count for the loop, insert one so that we can canonicalize the exit
condition.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13015
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 16 Apr 2004 22:35:33 +0000 (22:35 +0000)]
Add support for evaluation of exp/log/log10/pow
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13011
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 16 Apr 2004 18:08:07 +0000 (18:08 +0000)]
Fix some really nasty dominance bugs that were exposed by my patch to
make the verifier more strict. This fixes building zlib
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13002
91177308-0d34-0410-b5e6-
96231b3b80d8