[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
Evan Cheng
evan.cheng at apple.com
Wed Oct 11 14:06:15 PDT 2006
Changes in directory llvm/lib/Target/X86:
X86ISelDAGToDAG.cpp updated: 1.113 -> 1.114
---
Log message:
ComplexPatterns sse_load_f32 and sse_load_f64 returns in / out chain operands.
---
Diffs of the changes: (+10 -7)
X86ISelDAGToDAG.cpp | 17 ++++++++++-------
1 files changed, 10 insertions(+), 7 deletions(-)
Index: llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
diff -u llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.113 llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.114
--- llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.113 Mon Oct 9 20:46:56 2006
+++ llvm/lib/Target/X86/X86ISelDAGToDAG.cpp Wed Oct 11 16:06:01 2006
@@ -148,7 +148,8 @@
bool SelectLEAAddr(SDOperand N, SDOperand &Base, SDOperand &Scale,
SDOperand &Index, SDOperand &Disp);
bool SelectScalarSSELoad(SDOperand N, SDOperand &Base, SDOperand &Scale,
- SDOperand &Index, SDOperand &Disp);
+ SDOperand &Index, SDOperand &Disp,
+ SDOperand &InChain, SDOperand &OutChain);
bool TryFoldLoad(SDOperand P, SDOperand N,
SDOperand &Base, SDOperand &Scale,
SDOperand &Index, SDOperand &Disp);
@@ -781,20 +782,22 @@
/// match a load whose top elements are either undef or zeros. The load flavor
/// is derived from the type of N, which is either v4f32 or v2f64.
bool X86DAGToDAGISel::SelectScalarSSELoad(SDOperand N, SDOperand &Base,
- SDOperand &Scale,
- SDOperand &Index, SDOperand &Disp) {
-#if 0
+ SDOperand &Scale, SDOperand &Index,
+ SDOperand &Disp, SDOperand &InChain,
+ SDOperand &OutChain) {
if (N.getOpcode() == ISD::SCALAR_TO_VECTOR) {
- if (N.getOperand(0).getOpcode() == ISD::LOAD) {
- SDOperand LoadAddr = N.getOperand(0).getOperand(0);
+ InChain = N.getOperand(0);
+ if (ISD::isNON_EXTLoad(InChain.Val)) {
+ LoadSDNode *LD = cast<LoadSDNode>(InChain);
+ SDOperand LoadAddr = LD->getBasePtr();
if (!SelectAddr(LoadAddr, Base, Scale, Index, Disp))
return false;
+ OutChain = LD->getChain();
return true;
}
}
// TODO: Also handle the case where we explicitly require zeros in the top
// elements. This is a vector shuffle from the zero vector.
-#endif
return false;
}
More information about the llvm-commits
mailing list