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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Andrew Lenharth [Wed, 1 Feb 2006 19:37:33 +0000 (19:37 +0000)]
Add immediate forms of cmov and remove some cruft
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25882
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Lenharth [Wed, 1 Feb 2006 19:36:52 +0000 (19:36 +0000)]
test cmov immediate form
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25881
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 1 Feb 2006 19:12:23 +0000 (19:12 +0000)]
add a note, ya knoe
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25880
91177308-0d34-0410-b5e6-
96231b3b80d8
Nate Begeman [Wed, 1 Feb 2006 19:05:15 +0000 (19:05 +0000)]
*** empty log message ***
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25879
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 1 Feb 2006 18:59:47 +0000 (18:59 +0000)]
Implement simple register assignment for inline asms. This allows us to compile:
int %test(int %A, int %B) {
%C = call int asm "xyz $0, $1, $2", "=r,r,r"(int %A, int %B)
ret int %C
}
into:
(0x8906130, LLVM BB @0x8902220):
%r2 = OR4 %r3, %r3
%r3 = OR4 %r4, %r4
INLINEASM <es:xyz $0, $1, $2>, %r2<def>, %r2, %r3
%r3 = OR4 %r2, %r2
BLR
which asmprints as:
_test:
or r2, r3, r3
or r3, r4, r4
xyz $0, $1, $2 ;; need to print the operands now :)
or r3, r2, r2
blr
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25878
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 1 Feb 2006 18:10:56 +0000 (18:10 +0000)]
Finegrainify namespacification
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25877
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 1 Feb 2006 17:54:23 +0000 (17:54 +0000)]
add a note
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25876
91177308-0d34-0410-b5e6-
96231b3b80d8
Nate Begeman [Wed, 1 Feb 2006 07:19:44 +0000 (07:19 +0000)]
Fix some of the stuff in the PPC README file, and clean up legalization
of the SELECT_CC, BR_CC, and BRTWOWAY_CC nodes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25875
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 1 Feb 2006 06:40:32 +0000 (06:40 +0000)]
add a note, I'll take care of this after nate commits his big patch
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25873
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Wed, 1 Feb 2006 06:13:50 +0000 (06:13 +0000)]
- Use xor to clear integer registers (set R, 0).
- Added a new format for instructions where the source register is implied
and it is same as the destination register. Used for pseudo instructions
that clear the destination register.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25872
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Wed, 1 Feb 2006 06:08:48 +0000 (06:08 +0000)]
Remove another entry.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25871
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Wed, 1 Feb 2006 06:06:31 +0000 (06:06 +0000)]
If a pattern's root node is a constant, its size should be 3 rather than 2.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25870
91177308-0d34-0410-b5e6-
96231b3b80d8
Jeff Cohen [Wed, 1 Feb 2006 04:37:04 +0000 (04:37 +0000)]
Fix VC++ compilation error.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25869
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 1 Feb 2006 01:45:02 +0000 (01:45 +0000)]
new testcase for the 'ret double folding with load' opzn
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25868
91177308-0d34-0410-b5e6-
96231b3b80d8