Changes in directory llvm/lib/CodeGen/SelectionDAG:
SelectionDAGISel.cpp updated: 1.438 -> 1.439 --- Log message: generalize aggregate handling --- Diffs of the changes: (+21 -5) SelectionDAGISel.cpp | 26 +++++++++++++++++++++----- 1 files changed, 21 insertions(+), 5 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.438 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.439 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.438 Sat Apr 28 16:12:06 2007 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Sun Apr 29 13:58:03 2007 @@ -3248,12 +3248,28 @@ if (OpInfo.CallOperandVal) { OpInfo.CallOperand = getValue(OpInfo.CallOperandVal); const Type *OpTy = OpInfo.CallOperandVal->getType(); - if (!OpInfo.isIndirect) { - // Must be an input. - OpVT = TLI.getValueType(OpTy); - } else { - OpVT = TLI.getValueType(cast<PointerType>(OpTy)->getElementType(),true); + // If this is an indirect operand, the operand is a pointer to the + // accessed type. + if (OpInfo.isIndirect) + OpTy = cast<PointerType>(OpTy)->getElementType(); + + // If OpTy is not a first-class value, it may be a struct/union that we + // can tile with integers. + if (!OpTy->isFirstClassType() && OpTy->isSized()) { + unsigned BitSize = TD->getTypeSizeInBits(OpTy); + switch (BitSize) { + default: break; + case 1: + case 8: + case 16: + case 32: + case 64: + OpTy = IntegerType::get(BitSize); + break; + } } + + OpVT = TLI.getValueType(OpTy, true); } OpInfo.ConstraintVT = OpVT; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits