oota-llvm.git
18 years agoRe-commit the last bit of change that was backed out.
Evan Cheng [Sun, 5 Feb 2006 05:25:07 +0000 (05:25 +0000)]
Re-commit the last bit of change that was backed out.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25983 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRe-committing the last bit of change. It shouldn't break PPC this time.
Evan Cheng [Sun, 5 Feb 2006 05:22:18 +0000 (05:22 +0000)]
Re-committing the last bit of change. It shouldn't break PPC this time.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25982 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agomake sure that global doubles are aligned to 8 bytes
Chris Lattner [Sun, 5 Feb 2006 01:46:49 +0000 (01:46 +0000)]
make sure that global doubles are aligned to 8 bytes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25981 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoUse getPreferredAlignmentLog.
Chris Lattner [Sun, 5 Feb 2006 01:45:04 +0000 (01:45 +0000)]
Use getPreferredAlignmentLog.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25980 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoUse the asmprinter to find out what the preferred alignment of a global is.
Chris Lattner [Sun, 5 Feb 2006 01:30:45 +0000 (01:30 +0000)]
Use the asmprinter to find out what the preferred alignment of a global is.
This patch speeds up 172.mgrid from 31.81s to 11.39s on darwin/ppc.
Many many thanks to Nate for tracking down the root cause of the issue.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25979 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoImplement the AsmPrinter::getPreferredAlignmentLog method.
Chris Lattner [Sun, 5 Feb 2006 01:29:18 +0000 (01:29 +0000)]
Implement the AsmPrinter::getPreferredAlignmentLog method.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25978 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd a new method, getPreferredAlignmentLog.
Chris Lattner [Sun, 5 Feb 2006 01:24:06 +0000 (01:24 +0000)]
add a new method, getPreferredAlignmentLog.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25977 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agolinkage fix for weak functions
Andrew Lenharth [Sat, 4 Feb 2006 19:13:09 +0000 (19:13 +0000)]
linkage fix for weak functions

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25976 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix VC++ warning.
Jeff Cohen [Sat, 4 Feb 2006 16:20:31 +0000 (16:20 +0000)]
Fix VC++ warning.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25975 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoUse SCEVExpander::InsertCastOfTo instead of our own code. This reduces
Chris Lattner [Sat, 4 Feb 2006 09:52:43 +0000 (09:52 +0000)]
Use SCEVExpander::InsertCastOfTo instead of our own code.  This reduces
#LLVM LOC, and auto-cse's cast instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25974 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoPull the InsertCastOfTo out of the header, implement CSE'ing of arguments.
Chris Lattner [Sat, 4 Feb 2006 09:51:53 +0000 (09:51 +0000)]
Pull the InsertCastOfTo out of the header, implement CSE'ing of arguments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25973 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRefactor a bunch of code into a non-inlined method
Chris Lattner [Sat, 4 Feb 2006 09:51:33 +0000 (09:51 +0000)]
Refactor a bunch of code into a non-inlined method

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25972 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoTemporarily revert this patch, which probably breaks with the
Chris Lattner [Sat, 4 Feb 2006 09:24:16 +0000 (09:24 +0000)]
Temporarily revert this patch, which probably breaks with the
tblgen patch reverted.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25971 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoTemporarily revert the last change, which breaks PPC and other targets that
Chris Lattner [Sat, 4 Feb 2006 09:23:06 +0000 (09:23 +0000)]
Temporarily revert the last change, which breaks PPC and other targets that
DO select things.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25970 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoValue# select instructions, allowing -gcse to remove duplicates
Chris Lattner [Sat, 4 Feb 2006 09:15:29 +0000 (09:15 +0000)]
Value# select instructions, allowing -gcse to remove duplicates

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25969 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoComplex pattern's custom matcher should not call Select() on any operands.
Evan Cheng [Sat, 4 Feb 2006 08:50:49 +0000 (08:50 +0000)]
Complex pattern's custom matcher should not call Select() on any operands.
Select them afterwards if it returns true.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25968 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoCustom lower VAARG for the case when we are doing vaarg(double). In this
Chris Lattner [Sat, 4 Feb 2006 08:31:30 +0000 (08:31 +0000)]
Custom lower VAARG for the case when we are doing vaarg(double).  In this
case, the double being loaded may not be 8-byte aligned, so we have to use
our standard bit_convert game.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25967 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix a nasty typo that broke functions with big stack frames.
Chris Lattner [Sat, 4 Feb 2006 08:04:21 +0000 (08:04 +0000)]
Fix a nasty typo that broke functions with big stack frames.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25966 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agofix a bug in my last checkin
Chris Lattner [Sat, 4 Feb 2006 07:48:46 +0000 (07:48 +0000)]
fix a bug in my last checkin

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25965 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix two significant bugs in LSR:
Chris Lattner [Sat, 4 Feb 2006 07:36:50 +0000 (07:36 +0000)]
Fix two significant bugs in LSR:

1. When rewriting code in outer loops, sometimes we would insert code into
   inner loops that is invariant in that loop.
2. Notice that 4*(2+x) is 8+4*x and use that to simplify expressions.

This is a performance neutral change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25964 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRemove some stuff that now works
Nate Begeman [Sat, 4 Feb 2006 07:29:35 +0000 (07:29 +0000)]
Remove some stuff that now works

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25963 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd a note
Chris Lattner [Sat, 4 Feb 2006 07:07:31 +0000 (07:07 +0000)]
add a note

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25962 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoTwo changes:
Chris Lattner [Sat, 4 Feb 2006 06:58:46 +0000 (06:58 +0000)]
Two changes:

1. Treat FMOVD as a copy instruction, to help with coallescing in V9 mode
2. When in V9 mode, insert FMOVD instead of FpMOVD instructions, as we don't
   ever rewrite FpMOVD instructions into FMOVS instructions, thus we just end
   up with commented out copies!
This should fix a bunch of failures in V9 mode on sparc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25961 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoGet rid of some memory leaks identified by Valgrind
Evan Cheng [Sat, 4 Feb 2006 06:49:00 +0000 (06:49 +0000)]
Get rid of some memory leaks identified by Valgrind

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25960 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd a method
Chris Lattner [Sat, 4 Feb 2006 05:49:01 +0000 (05:49 +0000)]
add a method

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25959 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoLet bugpoint work on sparc with v9 instructions enabled.
Chris Lattner [Sat, 4 Feb 2006 05:02:27 +0000 (05:02 +0000)]
Let bugpoint work on sparc with v9 instructions enabled.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25958 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix VC++ warning.
Jeff Cohen [Sat, 4 Feb 2006 03:27:39 +0000 (03:27 +0000)]
Fix VC++ warning.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25957 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoKeep Visual Studio informed.
Jeff Cohen [Sat, 4 Feb 2006 03:27:04 +0000 (03:27 +0000)]
Keep Visual Studio informed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25956 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd initial support for immediates. This allows us to compile this:
Chris Lattner [Sat, 4 Feb 2006 02:26:14 +0000 (02:26 +0000)]
Add initial support for immediates.  This allows us to compile this:

int %rlwnm(int %A, int %B) {
  %C = call int asm "rlwnm $0, $1, $2, $3, $4", "=r,r,r,n,n"(int %A, int %B, int 4, int 17)
  ret int %C
}

into:

_rlwnm:
        or r2, r3, r3
        or r3, r4, r4
        rlwnm r2, r2, r3, 4, 17    ;; note the immediates :)
        or r3, r2, r2
        blr

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25955 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRemove an unnecessary predicate.
Evan Cheng [Sat, 4 Feb 2006 02:23:01 +0000 (02:23 +0000)]
Remove an unnecessary predicate.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25954 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoSeparate FILD and FILD_FLAG, the later is only used for SSE2. It produces a
Evan Cheng [Sat, 4 Feb 2006 02:20:30 +0000 (02:20 +0000)]
Separate FILD and FILD_FLAG, the later is only used for SSE2. It produces a
flag so it can be flagged to a FST.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25953 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoInitial early support for non-register operands, like immediates
Chris Lattner [Sat, 4 Feb 2006 02:16:44 +0000 (02:16 +0000)]
Initial early support for non-register operands, like immediates

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25952 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoimplementation of some methods for inlineasm
Chris Lattner [Sat, 4 Feb 2006 02:13:02 +0000 (02:13 +0000)]
implementation of some methods for inlineasm

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25951 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd some methods for inline asm support.
Chris Lattner [Sat, 4 Feb 2006 02:12:09 +0000 (02:12 +0000)]
Add some methods for inline asm support.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25950 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoHandle another case exposed on X86.
Chris Lattner [Fri, 3 Feb 2006 23:50:46 +0000 (23:50 +0000)]
Handle another case exposed on X86.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25949 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix a nasty problem on two-address machines in the following situation:
Chris Lattner [Fri, 3 Feb 2006 23:28:46 +0000 (23:28 +0000)]
Fix a nasty problem on two-address machines in the following situation:

store EAX -> [ss#0]
[ss#0] += 1
...
use(EAX)

In this case, it is not valid to rewrite this as:

store EAX -> [ss#0]
EAX += 1
store EAX -> [ss#0]  ;;; this would also delete the store above
...
use(EAX)

... because EAX is not a dead at that point.  Keep track of which registers
we are allowed to clobber, and which ones we aren't, and don't clobber the
ones we're not supposed to.  :)

This should resolve the issues on X86 last night.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25948 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agosignificantly simplify the VirtRegMap code by pulling the SpillSlotsAvailable
Chris Lattner [Fri, 3 Feb 2006 23:13:58 +0000 (23:13 +0000)]
significantly simplify the VirtRegMap code by pulling the SpillSlotsAvailable
and PhysRegsAvailable maps out into a new AvailableSpills struct.  No
functionality change.

This paves the way for a bugfix, coming up next.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25947 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoImplement some feedback from sabre
Nate Begeman [Fri, 3 Feb 2006 22:38:07 +0000 (22:38 +0000)]
Implement some feedback from sabre

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25946 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd a framework for eliminating instructions that produces undemanded bits.
Nate Begeman [Fri, 3 Feb 2006 22:24:05 +0000 (22:24 +0000)]
Add a framework for eliminating instructions that produces undemanded bits.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25945 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd a note
Chris Lattner [Fri, 3 Feb 2006 22:06:45 +0000 (22:06 +0000)]
add a note

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25944 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoanother case Nate came up with
Chris Lattner [Fri, 3 Feb 2006 22:05:41 +0000 (22:05 +0000)]
another case Nate came up with

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25943 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd a note
Chris Lattner [Fri, 3 Feb 2006 21:25:23 +0000 (21:25 +0000)]
add a note

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25942 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoremove some #ifdef'd out code, which should properly be in the dag combiner anyway.
Chris Lattner [Fri, 3 Feb 2006 20:13:59 +0000 (20:13 +0000)]
remove some #ifdef'd out code, which should properly be in the dag combiner anyway.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25941 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoremove an old comment
Chris Lattner [Fri, 3 Feb 2006 18:59:39 +0000 (18:59 +0000)]
remove an old comment

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25940 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRemove the X86PeepholeOptimizerPass, a truly horrible old hack that is now
Chris Lattner [Fri, 3 Feb 2006 18:54:24 +0000 (18:54 +0000)]
Remove the X86PeepholeOptimizerPass, a truly horrible old hack that is now
obsolete.  yaay :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25939 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoWhen rewriting frame instructions, emit the appropriate small-immediate
Chris Lattner [Fri, 3 Feb 2006 18:20:04 +0000 (18:20 +0000)]
When rewriting frame instructions, emit the appropriate small-immediate
instruction when possible.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25938 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agonode predicates add to the complexity of a pattern. This ensures that the
Chris Lattner [Fri, 3 Feb 2006 18:06:02 +0000 (18:06 +0000)]
node predicates add to the complexity of a pattern.  This ensures that the
X86 backend attempts to match small-immediate versions of instructions before
the full size immediate versions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25937 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoTeach sparc to fold loads/stores into copies.
Chris Lattner [Fri, 3 Feb 2006 07:06:25 +0000 (07:06 +0000)]
Teach sparc to fold loads/stores into copies.
Remove the dead getRegClassForType method
minor formating changes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25936 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoremove dead fn
Chris Lattner [Fri, 3 Feb 2006 06:51:34 +0000 (06:51 +0000)]
remove dead fn

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25935 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd common code for reassociating ops in the dag combiner
Nate Begeman [Fri, 3 Feb 2006 06:46:56 +0000 (06:46 +0000)]
Add common code for reassociating ops in the dag combiner

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25934 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdded a (store (op (load ...) ...) ...) folding test case.
Evan Cheng [Fri, 3 Feb 2006 06:46:41 +0000 (06:46 +0000)]
Added a (store (op (load ...) ...) ...) folding test case.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25933 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoImplement isLoadFromStackSlot and isStoreToStackSlot
Chris Lattner [Fri, 3 Feb 2006 06:44:54 +0000 (06:44 +0000)]
Implement isLoadFromStackSlot and isStoreToStackSlot

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25932 91177308-0d34-0410-b5e6-96231b3b80d8

18 years ago(store (op (load ...))) folding problem. In the generated matching code,
Evan Cheng [Fri, 3 Feb 2006 06:22:41 +0000 (06:22 +0000)]
(store (op (load ...))) folding problem. In the generated matching code,
Chain is initially set to the chain operand of store node, when it reaches
load, if it matches the load then Chain is set to the chain operand of the
load.

However, if the matching code that follows this fails, isel moves on to the
next pattern but it does not restore Chain to the chain operand of the store.
So when it tries to match the next store / op / load pattern it would fail on
the Chain == load.getOperand(0) test.

The solution is for each chain operand to get a unique name. e.g. Chain10.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25931 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoremove some target-indep and implemented notes
Chris Lattner [Fri, 3 Feb 2006 06:22:11 +0000 (06:22 +0000)]
remove some target-indep and implemented notes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25930 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agotarget independent notes
Chris Lattner [Fri, 3 Feb 2006 06:21:43 +0000 (06:21 +0000)]
target independent notes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25929 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFlesh out a couple of the items in the README
Nate Begeman [Fri, 3 Feb 2006 05:17:06 +0000 (05:17 +0000)]
Flesh out a couple of the items in the README

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25928 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix VC++ compilation error caused by using a std::map iterator variable to receive
Jeff Cohen [Fri, 3 Feb 2006 03:48:54 +0000 (03:48 +0000)]
Fix VC++ compilation error caused by using a std::map iterator variable to receive
a std::multimap iterator value.  For some reason, GCC doesn't have a problem with this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25927 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRemove move copies and dead stuff by not clobbering the result reg of a noop copy.
Chris Lattner [Fri, 3 Feb 2006 03:16:14 +0000 (03:16 +0000)]
Remove move copies and dead stuff by not clobbering the result reg of a noop copy.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25926 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoisStoreToStackSlot
Andrew Lenharth [Fri, 3 Feb 2006 03:07:37 +0000 (03:07 +0000)]
isStoreToStackSlot

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25925 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoSimplify some code
Chris Lattner [Fri, 3 Feb 2006 03:06:49 +0000 (03:06 +0000)]
Simplify some code

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25924 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agothe X86 backend no longer needs to delete its own noop copies
Chris Lattner [Fri, 3 Feb 2006 02:59:58 +0000 (02:59 +0000)]
the X86 backend no longer needs to delete its own noop copies

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25923 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd code that checks for noop copies, which triggers when either:
Chris Lattner [Fri, 3 Feb 2006 02:02:59 +0000 (02:02 +0000)]
Add code that checks for noop copies, which triggers when either:
1. a target doesn't know how to fold load/stores into copies, or
2. the spiller rewrites the input to a copy to the same register as the dest
   instead of to the reloaded reg.

This will be moved/improved in the near future, but allows elimination of
some ancient x86 hacks.  This eliminates 92 copies from SMG2000 on X86 and
163 copies from 252.eon.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25922 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd a note
Chris Lattner [Fri, 3 Feb 2006 01:49:49 +0000 (01:49 +0000)]
Add a note

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25921 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdded case HANDLENODE to getOperationName().
Evan Cheng [Fri, 3 Feb 2006 01:33:01 +0000 (01:33 +0000)]
Added case HANDLENODE to getOperationName().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25920 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoPhysregs may hold multiple stack slot values at the same time. Keep track
Chris Lattner [Fri, 3 Feb 2006 00:36:31 +0000 (00:36 +0000)]
Physregs may hold multiple stack slot values at the same time.  Keep track
of this, and use it to our advantage (bwahahah).  This allows us to eliminate another
60 instructions from smg2000 on PPC (probably significantly more on X86).  A common
old-new diff looks like this:

        stw r2, 3304(r1)
-       lwz r2, 3192(r1)
        stw r2, 3300(r1)
-       lwz r2, 3192(r1)
        stw r2, 3296(r1)
-       lwz r2, 3192(r1)
        stw r2, 3200(r1)
-       lwz r2, 3192(r1)
        stw r2, 3196(r1)
-       lwz r2, 3192(r1)
+       or r2, r2, r2
        stw r2, 3188(r1)

and

-       lwz r31, 604(r1)
-       lwz r13, 604(r1)
-       lwz r14, 604(r1)
-       lwz r15, 604(r1)
-       lwz r16, 604(r1)
-       lwz r30, 604(r1)
+       or r31, r30, r30
+       or r13, r30, r30
+       or r14, r30, r30
+       or r15, r30, r30
+       or r16, r30, r30
+       or r30, r30, r30

Removal of the R = R copies is coming next...

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25919 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoupdate a note
Chris Lattner [Thu, 2 Feb 2006 23:50:22 +0000 (23:50 +0000)]
update a note

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25918 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix a deficiency in the spiller that Evan noticed. In particular, consider
Chris Lattner [Thu, 2 Feb 2006 23:29:36 +0000 (23:29 +0000)]
Fix a deficiency in the spiller that Evan noticed.  In particular, consider
this code:

  store [stack slot #0],  R10
    = add R14, [stack slot #0]

The spiller didn't know that the store made the value of [stackslot#0] available
in R10 *IF* the store came from a copy instruction with the store folded into it.

This patch teaches VirtRegMap to look at these stores and recognize the values
they make available.  In one case Evan provided, this code:

        divsd %XMM0, %XMM1
        movsd %XMM1, QWORD PTR [%ESP + 40]
1)      movsd QWORD PTR [%ESP + 48], %XMM1
2)      movsd %XMM1, QWORD PTR [%ESP + 48]
        addsd %XMM1, %XMM0
3)      movsd QWORD PTR [%ESP + 48], %XMM1
        movsd QWORD PTR [%ESP + 4], %XMM0

turns into:

        divsd %XMM0, %XMM1
        movsd %XMM1, QWORD PTR [%ESP + 40]
        addsd %XMM1, %XMM0
3)      movsd QWORD PTR [%ESP + 48], %XMM1
        movsd QWORD PTR [%ESP + 4], %XMM0

In this case, instruction #2 was removed because of the value made
available by #1, and inst #1 was later deleted because it is now
never used before the stack slot is redefined by #3.

This occurs here and there in a lot of code with high spilling, on PPC
most of the removed loads/stores are LSU-reject-causing loads, which is
nice.

On X86, things are much better (because it spills more), where we nuke
about 1% of the instructions from SMG2000 and several hundred from eon.

More improvements to come...

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25917 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd 64b gpr store to the possible list of isStoreToStackSlot opcodes.
Nate Begeman [Thu, 2 Feb 2006 21:07:50 +0000 (21:07 +0000)]
add 64b gpr store to the possible list of isStoreToStackSlot opcodes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25916 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agofix operand numbers
Chris Lattner [Thu, 2 Feb 2006 20:38:12 +0000 (20:38 +0000)]
fix operand numbers

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25915 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoimplement isStoreToStackSlot for PPC
Chris Lattner [Thu, 2 Feb 2006 20:16:12 +0000 (20:16 +0000)]
implement isStoreToStackSlot for PPC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25914 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoMove isLoadFrom/StoreToStackSlot from MRegisterInfo to TargetInstrInfo,a far more...
Chris Lattner [Thu, 2 Feb 2006 20:12:32 +0000 (20:12 +0000)]
Move isLoadFrom/StoreToStackSlot from MRegisterInfo to TargetInstrInfo,a far more logical place.  Other methods should also be moved if anyoneis interested. :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25913 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoMove isLoadFrom/StoreToStackSlot from MRegisterInfo to TargetInstrInfo,
Chris Lattner [Thu, 2 Feb 2006 20:11:55 +0000 (20:11 +0000)]
Move isLoadFrom/StoreToStackSlot from MRegisterInfo to TargetInstrInfo,
a far more logical place.  Other methods should also be moved if anyone
is interested. :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25912 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoimplement isStoreToStackSlot
Chris Lattner [Thu, 2 Feb 2006 20:00:41 +0000 (20:00 +0000)]
implement isStoreToStackSlot

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25911 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd a method
Chris Lattner [Thu, 2 Feb 2006 19:57:16 +0000 (19:57 +0000)]
add a method

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25910 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd a new isStoreToStackSlot method
Chris Lattner [Thu, 2 Feb 2006 19:55:29 +0000 (19:55 +0000)]
add a new isStoreToStackSlot method

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25909 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agomore notes
Chris Lattner [Thu, 2 Feb 2006 19:43:28 +0000 (19:43 +0000)]
more notes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25908 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd a note, I have no idea how important this is.
Chris Lattner [Thu, 2 Feb 2006 19:16:34 +0000 (19:16 +0000)]
add a note, I have no idea how important this is.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25907 91177308-0d34-0410-b5e6-96231b3b80d8

18 years ago%fcc is not an alias for %fcc0
Chris Lattner [Thu, 2 Feb 2006 08:02:20 +0000 (08:02 +0000)]
%fcc is not an alias for %fcc0

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25906 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agocorrect an opcode
Chris Lattner [Thu, 2 Feb 2006 07:56:15 +0000 (07:56 +0000)]
correct an opcode

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25905 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agonew example
Chris Lattner [Thu, 2 Feb 2006 07:37:11 +0000 (07:37 +0000)]
new example

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25903 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoUpdate the README
Nate Begeman [Thu, 2 Feb 2006 07:27:56 +0000 (07:27 +0000)]
Update the README

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25902 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoTurn any_extend nodes into zero_extend nodes when it allows us to remove an
Chris Lattner [Thu, 2 Feb 2006 07:17:31 +0000 (07:17 +0000)]
Turn any_extend nodes into zero_extend nodes when it allows us to remove an
and instruction.  This allows us to compile stuff like this:

bool %X(int %X) {
        %Y = add int %X, 14
        %Z = setne int %Y, 12345
        ret bool %Z
}

to this:

_X:
        cmpl $12331, 4(%esp)
        setne %al
        movzbl %al, %eax
        ret

instead of this:

_X:
        cmpl $12331, 4(%esp)
        setne %al
        movzbl %al, %eax
        andl $1, %eax
        ret

This occurs quite a bit with the X86 backend.  For example, 25 times in
lambda, 30 times in 177.mesa, 14 times in galgel,  70 times in fma3d,
25 times in vpr, several hundred times in gcc, ~45 times in crafty,
~60 times in parser, ~140 times in eon, 110 times in perlbmk, 55 on gap,
16 times on bzip2, 14 times on twolf, and 1-2 times in many other SPEC2K
programs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25901 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoImplement MaskedValueIsZero for ANY_EXTEND nodes
Chris Lattner [Thu, 2 Feb 2006 06:43:15 +0000 (06:43 +0000)]
Implement MaskedValueIsZero for ANY_EXTEND nodes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25900 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoimplemented, testcase here: test/Regression/CodeGen/X86/compare-add.ll
Chris Lattner [Thu, 2 Feb 2006 06:36:48 +0000 (06:36 +0000)]
implemented, testcase here: test/Regression/CodeGen/X86/compare-add.ll

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25899 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd two dag combines:
Chris Lattner [Thu, 2 Feb 2006 06:36:13 +0000 (06:36 +0000)]
add two dag combines:
(C1-X) == C2 --> X == C1-C2
(X+C1) == C2 --> X == C2-C1

This allows us to compile this:

bool %X(int %X) {
        %Y = add int %X, 14
        %Z = setne int %Y, 12345
        ret bool %Z
}

into this:

_X:
        cmpl $12331, 4(%esp)
        setne %al
        movzbl %al, %eax
        andl $1, %eax
        ret

not this:

_X:
        movl $14, %eax
        addl 4(%esp), %eax
        cmpl $12345, %eax
        setne %al
        movzbl %al, %eax
        andl $1, %eax
        ret

Testcase here: Regression/CodeGen/X86/compare-add.ll

nukage of the and coming up next.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25898 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agonew testcase
Chris Lattner [Thu, 2 Feb 2006 06:35:38 +0000 (06:35 +0000)]
new testcase

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25897 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoUpdate.
Evan Cheng [Thu, 2 Feb 2006 02:40:17 +0000 (02:40 +0000)]
Update.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25896 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agomake -debug output less newliney
Chris Lattner [Thu, 2 Feb 2006 00:38:08 +0000 (00:38 +0000)]
make -debug output less newliney

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25895 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix a erroneous comment.
Evan Cheng [Thu, 2 Feb 2006 00:28:23 +0000 (00:28 +0000)]
Fix a erroneous comment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25894 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoImplement matching constraints. We can now say things like this:
Chris Lattner [Thu, 2 Feb 2006 00:25:23 +0000 (00:25 +0000)]
Implement matching constraints.  We can now say things like this:

%C = call int asm "xyz $0, $1, $2, $3", "=r,r,r,0"(int %A, int %B, int 4)

and get:

xyz r2, r3, r4, r2

note that the r2's are pinned together.  Yaay for 2-address instructions.

2342 ----------------------------------------------------------------------

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25893 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agovalidate matching constraints and remember when we see them.
Chris Lattner [Thu, 2 Feb 2006 00:23:53 +0000 (00:23 +0000)]
validate matching constraints and remember when we see them.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25892 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd an instance var and argument.
Chris Lattner [Thu, 2 Feb 2006 00:23:12 +0000 (00:23 +0000)]
add an instance var and argument.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25891 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agomore notes
Chris Lattner [Wed, 1 Feb 2006 23:38:08 +0000 (23:38 +0000)]
more notes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25890 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoTell codegen MOVAPSrr and MOVAPDrr are copies.
Evan Cheng [Wed, 1 Feb 2006 23:03:16 +0000 (23:03 +0000)]
Tell codegen MOVAPSrr and MOVAPDrr are copies.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25889 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdded SSE entries to foldMemoryOperand().
Evan Cheng [Wed, 1 Feb 2006 23:02:25 +0000 (23:02 +0000)]
Added SSE entries to foldMemoryOperand().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25888 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRearrange code to my liking. :)
Evan Cheng [Wed, 1 Feb 2006 23:01:57 +0000 (23:01 +0000)]
Rearrange code to my liking. :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25887 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoImplement smart printing of inline asm strings, handling variants and
Chris Lattner [Wed, 1 Feb 2006 22:41:11 +0000 (22:41 +0000)]
Implement smart printing of inline asm strings, handling variants and
substituted operands.  For this testcase:

int %test(int %A, int %B) {
  %C = call int asm "xyz $0, $1, $2", "=r,r,r"(int %A, int %B)
  ret int %C
}

we now emit:

_test:
        or r2, r3, r3
        or r3, r4, r4
        xyz r2, r2, r3  ;; look here
        or r3, r2, r2
        blr

... note the substituted operands. :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25886 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd a new PrintAsmOperand method, move some stuff around for ease of reading.
Chris Lattner [Wed, 1 Feb 2006 22:39:30 +0000 (22:39 +0000)]
add a new PrintAsmOperand method, move some stuff around for ease of reading.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25885 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd a method
Chris Lattner [Wed, 1 Feb 2006 22:38:46 +0000 (22:38 +0000)]
add a method

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25884 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoanother note
Chris Lattner [Wed, 1 Feb 2006 21:44:48 +0000 (21:44 +0000)]
another note

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25883 91177308-0d34-0410-b5e6-96231b3b80d8