[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp
Chris Lattner
lattner at cs.uiuc.edu
Tue Jan 11 14:29:27 PST 2005
Changes in directory llvm/lib/Target/X86:
X86ISelPattern.cpp updated: 1.34 -> 1.35
---
Log message:
Treat int constants as not requiring a register, since they are almost always
folded into an instruction.
---
Diffs of the changes: (+22 -14)
Index: llvm/lib/Target/X86/X86ISelPattern.cpp
diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.34 llvm/lib/Target/X86/X86ISelPattern.cpp:1.35
--- llvm/lib/Target/X86/X86ISelPattern.cpp:1.34 Tue Jan 11 15:19:59 2005
+++ llvm/lib/Target/X86/X86ISelPattern.cpp Tue Jan 11 16:29:12 2005
@@ -388,22 +388,30 @@
// FIXME: Should operations like CALL (which clobber lots o regs) have a
// higher fixed cost??
- if (N->getNumOperands() == 0)
- return Result = 1;
-
- unsigned MaxRegUse = 0;
- unsigned NumExtraMaxRegUsers = 0;
- for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
- unsigned Regs = ComputeRegPressure(N->getOperand(i));
- if (Regs > MaxRegUse) {
- MaxRegUse = Regs;
- NumExtraMaxRegUsers = 0;
- } else if (Regs == MaxRegUse) {
- ++NumExtraMaxRegUsers;
+ if (N->getNumOperands() == 0) {
+ Result = 1;
+ } else {
+ unsigned MaxRegUse = 0;
+ unsigned NumExtraMaxRegUsers = 0;
+ for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
+ unsigned Regs;
+ if (N->getOperand(i).getOpcode() == ISD::Constant)
+ Regs = 0;
+ else
+ Regs = ComputeRegPressure(N->getOperand(i));
+ if (Regs > MaxRegUse) {
+ MaxRegUse = Regs;
+ NumExtraMaxRegUsers = 0;
+ } else if (Regs == MaxRegUse &&
+ N->getOperand(i).getValueType() != MVT::Other) {
+ ++NumExtraMaxRegUsers;
+ }
}
- }
- return Result = MaxRegUse+NumExtraMaxRegUsers;
+ Result = MaxRegUse+NumExtraMaxRegUsers;
+ }
+ std::cerr << " WEIGHT: " << Result << " "; N->dump(); std::cerr << "\n";
+ return Result;
}
/// SelectAddress - Add the specified node to the specified addressing mode,
More information about the llvm-commits
mailing list