Commit Graph

11307 Commits

Author SHA1 Message Date
Alkis Evlogimenos
eee91172fb Make the set of fixed (preallocated) intervals be a fixed superset of
unhandled + handled. So unhandled is now including all fixed intervals
and fixed intervals never changes when processing a function.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12462 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-17 00:48:59 +00:00
Chris Lattner
50eafbc828 Fix bug in previous checkin
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12458 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 23:36:49 +00:00
Chris Lattner
24ad00db5a Okay, so there is no reasonable way for tail duplication to update SSA form,
as it is making effectively arbitrary modifications to the CFG and we don't
have a domset/domfrontier implementations that can handle the dynamic updates.
Instead of having a bunch of code that doesn't actually work in practice,
just demote any potentially tricky values to the stack (causing the problem
to go away entirely).  Later invocations of mem2reg will rebuild SSA for us.

This fixes all of the major performance regressions with tail duplication
from LLVM 1.1.  For example, this loop:

---
int popcount(int x) {
  int result = 0;
  while (x != 0) {
    result = result + (x & 0x1);
    x = x >> 1;
  }
  return result;
}
---
Used to be compiled into:

int %popcount(int %X) {
entry:
	br label %loopentry

loopentry:		; preds = %entry, %no_exit
	%x.0 = phi int [ %X, %entry ], [ %tmp.9, %no_exit ]		; <int> [#uses=3]
	%result.1.0 = phi int [ 0, %entry ], [ %tmp.6, %no_exit ]		; <int> [#uses=2]
	%tmp.1 = seteq int %x.0, 0		; <bool> [#uses=1]
	br bool %tmp.1, label %loopexit, label %no_exit

no_exit:		; preds = %loopentry
	%tmp.4 = and int %x.0, 1		; <int> [#uses=1]
	%tmp.6 = add int %tmp.4, %result.1.0		; <int> [#uses=1]
	%tmp.9 = shr int %x.0, ubyte 1		; <int> [#uses=1]
	br label %loopentry

loopexit:		; preds = %loopentry
	ret int %result.1.0
}

And is now compiled into:

int %popcount(int %X) {
entry:
        br label %no_exit

no_exit:                ; preds = %entry, %no_exit
        %x.0.0 = phi int [ %X, %entry ], [ %tmp.9, %no_exit ]          ; <int> [#uses=2]
        %result.1.0.0 = phi int [ 0, %entry ], [ %tmp.6, %no_exit ]             ; <int> [#uses=1]
        %tmp.4 = and int %x.0.0, 1              ; <int> [#uses=1]
        %tmp.6 = add int %tmp.4, %result.1.0.0          ; <int> [#uses=2]
        %tmp.9 = shr int %x.0.0, ubyte 1                ; <int> [#uses=2]
        %tmp.1 = seteq int %tmp.9, 0            ; <bool> [#uses=1]
        br bool %tmp.1, label %loopexit, label %no_exit

loopexit:               ; preds = %no_exit
        ret int %tmp.6
}


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12457 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 23:29:09 +00:00
Chris Lattner
c1a0623e86 This code was both incredibly complex and incredibly broken. Fix it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12456 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 23:23:11 +00:00
Chris Lattner
df22f9c41b Another simple testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12455 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 23:07:52 +00:00
Brian Gaeke
54cc3c2135 The .type directive on Solaris uses the # character instead of @.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12454 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 22:52:04 +00:00
Brian Gaeke
6d339f9000 Fix bug in zero-extending of shorts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12453 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 22:45:42 +00:00
Brian Gaeke
032f80fbf1 Add UMULrr and SMULrr instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12452 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 22:37:13 +00:00
Brian Gaeke
79db7405f7 Use ! for comment char; it works in both Solaris as and GAS.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12451 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 22:37:12 +00:00
Brian Gaeke
f57e364f65 Make getClass more robust by adding cLong.
Add handling for Mul instruction.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12450 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 22:37:11 +00:00
Chris Lattner
f303aed82f Bug fixed
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12449 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 21:55:23 +00:00
Chris Lattner
0eded5c567 New testcase for PR297
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12448 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 21:52:24 +00:00
Brian Gaeke
e40eae7370 Add a better head-of-file comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12447 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 21:47:20 +00:00
Chris Lattner
f580cdcc22 Bug not fixed after all
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12446 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 21:39:04 +00:00
Chris Lattner
4dcd0d18ae Fix test
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12445 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 21:10:15 +00:00
Chris Lattner
13ebaeb278 Fix testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12444 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 20:04:55 +00:00
Chris Lattner
91408eba18 Punt if we see gigantic PHI nodes. This improves a huge interpreter loop
testcase from 32.5s in -raise to take .3s


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12443 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 19:52:53 +00:00
Chris Lattner
a2f652d420 Do not try to optimize PHI nodes with incredibly high degree. This reduces SCCP
time from 615s to 1.49s on a large testcase that has a gigantic switch statement
that all of the blocks in the function go to (an intepreter).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12442 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 19:49:59 +00:00
Chris Lattner
4bebf08d15 Do not copy gigantic switch instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12441 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 19:45:22 +00:00
Chris Lattner
c62db6fc40 Fix bug in bug name. It must be the painkillers that I haven't been taking
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12440 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 09:01:10 +00:00
Chris Lattner
7fe97dd95e Implement a new feature in the CFE, moving a GCC extension from the unsupported
to the supported list


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12439 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 08:54:07 +00:00
Chris Lattner
7698e4eb41 New testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12437 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 08:49:48 +00:00
Chris Lattner
bc7c0b8b95 boog fixed
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12436 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 08:40:35 +00:00
Chris Lattner
7d1bd336ab Fix PR296: [execution engines] Unhandled cast constant expression
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12435 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 08:38:56 +00:00
Chris Lattner
85ebd541fa Fix a regression from this patch:
http://mail.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20040308/013095.html

Basically, this patch only updated the immediate dominatees of the header node
to tell them that the preheader also dominated them.  In practice, ALL
dominatees of the header node are also dominated by the preheader.

This fixes: LoopSimplify/2004-03-15-IncorrectDomUpdate.
and PR293


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12434 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 06:00:15 +00:00
Chris Lattner
339c50873d New testcase for PR293
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12433 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 05:44:02 +00:00
Chris Lattner
26894bc347 Bug fixed
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12432 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 05:28:35 +00:00
Chris Lattner
91e49c4d72 foo Bug 291, bar PR291
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12431 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 05:18:24 +00:00
Chris Lattner
52cac3c555 foo bug291 bar PR 291
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12430 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 05:17:07 +00:00
Chris Lattner
ad32064a0e PR291
Bug 291!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12429 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 05:16:05 +00:00
Chris Lattner
a1d1fcec93 // Testcase from Bug 291
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12428 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 05:14:47 +00:00
Chris Lattner
002be76733 Add some missing functions. Make sure to handle calls together in case the
client has another VN implementation that can VN calls.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12427 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 03:41:35 +00:00
Chris Lattner
002dbddccd Fix thinko, and PR292
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12426 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 01:51:54 +00:00
Chris Lattner
6ae9eb1566 Fix PR294
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12425 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-16 01:45:55 +00:00
Alkis Evlogimenos
63dd4ff809 Add LAHF instruction
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12424 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 17:20:14 +00:00
Chris Lattner
6dd196f762 Restore old inlining heuristic. As the comment indicates, this is a nasty
horrible hack.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12423 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 06:38:14 +00:00
Chris Lattner
fcead4f426 Ok, the assertion was bogus. Calls that do not read/write memory should not
have an alias set, just like adds and subtracts don't.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12422 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 06:28:07 +00:00
Chris Lattner
df209fcc7e This assertion is bogus now that calls do not necessarily read/write memory
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12421 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 06:24:15 +00:00
Chris Lattner
46234fd97f Add counters for the number of calls elimianted
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12420 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 05:46:59 +00:00
Chris Lattner
5a6e947f1d Implement CSE of call instructions in the most trivial case. This implements
GCSE/call_cse.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12419 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 05:44:59 +00:00
Chris Lattner
142c304dbb New testcase for CSE of call instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12418 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 05:44:29 +00:00
Chris Lattner
bbcc147220 Fix a minor bug, implementing GCSE/call_pure_function.ll
Also, add some stuff I missed before.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12417 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 04:18:28 +00:00
Chris Lattner
66d0884954 Make sure that pure calls don't kill loads
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12416 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 04:17:53 +00:00
Chris Lattner
118dd0ce3d Implement LICM of calls in simple cases. This is sufficient to move around
sin/cos/strlen calls and stuff.  This implements:
  LICM/call_sink_pure_function.ll
  LICM/call_sink_const_function.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12415 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 04:11:30 +00:00
Chris Lattner
65a88e83e3 New testcases to test LICM of call instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12414 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 04:10:08 +00:00
Chris Lattner
5b5f7c11d0 Don't be COMPLETELY pessimistic in the face of function calls
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12413 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 04:08:36 +00:00
Chris Lattner
c87f0bb345 Tweak argument
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12412 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 04:08:18 +00:00
Chris Lattner
5cb66e24d4 Deinline a couple of methods. Improve comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12411 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 04:07:59 +00:00
Chris Lattner
992860c44e Deinline some virtual methods, provide better mod/ref answers through the
use of the boolean queries


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12410 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 04:07:29 +00:00
Chris Lattner
b79d79297d Pass through the boolean queries
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12409 91177308-0d34-0410-b5e6-96231b3b80d8
2004-03-15 04:06:46 +00:00