- Feb 04, 2006
-
-
Chris Lattner authored
llvm-svn: 25949
-
Chris Lattner authored
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. llvm-svn: 25948
-
Chris Lattner authored
and PhysRegsAvailable maps out into a new AvailableSpills struct. No functionality change. This paves the way for a bugfix, coming up next. llvm-svn: 25947
-
- Feb 03, 2006
-
-
Nate Begeman authored
llvm-svn: 25946
-
Nate Begeman authored
llvm-svn: 25945
-
Chris Lattner authored
llvm-svn: 25944
-
Chris Lattner authored
llvm-svn: 25943
-
Chris Lattner authored
llvm-svn: 25942
-
Chris Lattner authored
llvm-svn: 25941
-
Chris Lattner authored
llvm-svn: 25940
-
Chris Lattner authored
obsolete. yaay :) llvm-svn: 25939
-
Chris Lattner authored
instruction when possible. llvm-svn: 25938
-
Chris Lattner authored
X86 backend attempts to match small-immediate versions of instructions before the full size immediate versions. llvm-svn: 25937
-
Chris Lattner authored
Remove the dead getRegClassForType method minor formating changes. llvm-svn: 25936
-
Chris Lattner authored
llvm-svn: 25935
-
Nate Begeman authored
llvm-svn: 25934
-
Evan Cheng authored
llvm-svn: 25933
-
Chris Lattner authored
llvm-svn: 25932
-
Evan Cheng authored
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. llvm-svn: 25931
-
Chris Lattner authored
llvm-svn: 25930
-
Chris Lattner authored
llvm-svn: 25929
-
Nate Begeman authored
llvm-svn: 25928
-
Jeff Cohen authored
a std::multimap iterator value. For some reason, GCC doesn't have a problem with this. llvm-svn: 25927
-
Chris Lattner authored
llvm-svn: 25926
-
Andrew Lenharth authored
llvm-svn: 25925
-
Chris Lattner authored
llvm-svn: 25924
-
Chris Lattner authored
llvm-svn: 25923
-
Chris Lattner authored
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. llvm-svn: 25922
-
Chris Lattner authored
llvm-svn: 25921
-
Evan Cheng authored
llvm-svn: 25920
-
Chris Lattner authored
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... llvm-svn: 25919
-
Chris Lattner authored
llvm-svn: 25918
-
Chris Lattner authored
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... llvm-svn: 25917
-
- Feb 02, 2006
-
-
Nate Begeman authored
llvm-svn: 25916
-
Chris Lattner authored
llvm-svn: 25915
-
Chris Lattner authored
llvm-svn: 25914
-
Chris Lattner authored
Move isLoadFrom/StoreToStackSlot from MRegisterInfo to TargetInstrInfo,a far more logical place. Other methods should also be moved if anyoneis interested. :) llvm-svn: 25913
-
Chris Lattner authored
a far more logical place. Other methods should also be moved if anyone is interested. :) llvm-svn: 25912
-
Chris Lattner authored
llvm-svn: 25911
-
Chris Lattner authored
llvm-svn: 25910
-