[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp
Chris Lattner
lattner at cs.uiuc.edu
Thu Jan 13 11:56:13 PST 2005
Changes in directory llvm/lib/Target/X86:
X86ISelPattern.cpp updated: 1.52 -> 1.53
---
Log message:
Codegen factor nodes more intelligently according to perceived register pressure.
---
Diffs of the changes: (+14 -2)
Index: llvm/lib/Target/X86/X86ISelPattern.cpp
diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.52 llvm/lib/Target/X86/X86ISelPattern.cpp:1.53
--- llvm/lib/Target/X86/X86ISelPattern.cpp:1.52 Thu Jan 13 12:01:36 2005
+++ llvm/lib/Target/X86/X86ISelPattern.cpp Thu Jan 13 13:56:00 2005
@@ -2088,8 +2088,20 @@
assert(0 && "Node not handled yet!");
case ISD::EntryToken: return; // Noop
case ISD::TokenFactor:
- for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i)
- Select(Node->getOperand(i));
+ if (Node->getNumOperands() == 2) {
+ bool OneFirst =
+ getRegPressure(Node->getOperand(1))>getRegPressure(Node->getOperand(0));
+ Select(Node->getOperand(OneFirst));
+ Select(Node->getOperand(!OneFirst));
+ } else {
+ std::vector<std::pair<unsigned, unsigned> > OpsP;
+ for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i)
+ OpsP.push_back(std::make_pair(getRegPressure(Node->getOperand(i)), i));
+ std::sort(OpsP.begin(), OpsP.end());
+ std::reverse(OpsP.begin(), OpsP.end());
+ for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i)
+ Select(Node->getOperand(OpsP[i].second));
+ }
return;
case ISD::CopyToReg:
if (getRegPressure(N.getOperand(0)) > getRegPressure(N.getOperand(1))) {
More information about the llvm-commits
mailing list