Changes in directory llvm/lib/CodeGen/SelectionDAG:
LegalizeDAG.cpp updated: 1.491 -> 1.492 --- Log message: Propagate alignment/volatility in two places. Implement support for expanding a bitcast from an illegal vector type to a legal one (e.g. 4xi32 -> 4xf32 in SSE1). This fixes PR1371: http://llvm.org/PR1371 and CodeGen/X86/2007-05-05-VecCastExpand.ll --- Diffs of the changes: (+16 -4) LegalizeDAG.cpp | 20 ++++++++++++++++---- 1 files changed, 16 insertions(+), 4 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.491 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.492 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.491 Sat Apr 28 01:42:38 2007 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Sat May 5 14:39:05 2007 @@ -1881,7 +1881,8 @@ } Lo = DAG.getStore(Tmp1, Lo, Tmp2, ST->getSrcValue(), - ST->getSrcValueOffset()); + ST->getSrcValueOffset(), ST->isVolatile(), + ST->getAlignment()); if (Hi.Val == NULL) { // Must be int <-> float one-to-one expansion. @@ -1896,7 +1897,8 @@ // FIXME: This sets the srcvalue of both halves to be the same, which is // wrong. Hi = DAG.getStore(Tmp1, Hi, Tmp2, ST->getSrcValue(), - ST->getSrcValueOffset()); + ST->getSrcValueOffset(), ST->isVolatile(), + std::min(ST->getAlignment(), IncrementSize)); Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Lo, Hi); break; } @@ -5667,8 +5669,18 @@ PackVectorOp(Node->getOperand(0), EVT)); break; } else { - // FIXME: UNIMP! - assert(0 && "Cast from unsupported vector type not implemented yet!"); + // If the input vector type isn't legal, then go through memory. + SDOperand Ptr = CreateStackTemporary(NewVT); + // Get the alignment for the store. + const TargetData &TD = *TLI.getTargetData(); + unsigned Align = + TD.getABITypeAlignment(MVT::getTypeForValueType(NewVT)); + + SDOperand St = DAG.getStore(DAG.getEntryNode(), + Node->getOperand(0), Ptr, NULL, 0, false, + Align); + Result = DAG.getLoad(NewVT, St, Ptr, 0, 0); + break; } } break; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits