Changes in directory llvm/lib/VMCore:
ConstantFolding.cpp updated: 1.76 -> 1.77 --- Log message: don't crash when trying to constant fold packed expressions. --- Diffs of the changes: (+29 -0) ConstantFolding.cpp | 29 +++++++++++++++++++++++++++++ 1 files changed, 29 insertions(+) Index: llvm/lib/VMCore/ConstantFolding.cpp diff -u llvm/lib/VMCore/ConstantFolding.cpp:1.76 llvm/lib/VMCore/ConstantFolding.cpp:1.77 --- llvm/lib/VMCore/ConstantFolding.cpp:1.76 Mon May 2 22:13:01 2005 +++ llvm/lib/VMCore/ConstantFolding.cpp Tue Jan 3 20:03:29 2006 @@ -328,6 +328,29 @@ } }; +//===----------------------------------------------------------------------===// +// ConstantPackedRules Class +//===----------------------------------------------------------------------===// + +/// PackedTypeRules provides a concrete base class of ConstRules for +/// ConstantPacked operands. +/// +struct ConstantPackedRules + : public TemplateRules<ConstantPacked, ConstantPackedRules> { +}; + + +//===----------------------------------------------------------------------===// +// GeneralPackedRules Class +//===----------------------------------------------------------------------===// + +/// GeneralPackedRules provides a concrete base class of ConstRules for +/// PackedType operands, where both operands are not ConstantPacked. The usual +/// cause for this is that one operand is a ConstantAggregateZero. +/// +struct GeneralPackedRules : public TemplateRules<Constant, GeneralPackedRules> { +}; + //===----------------------------------------------------------------------===// // DirectRules Class @@ -487,6 +510,8 @@ static EmptyRules EmptyR; static BoolRules BoolR; static NullPointerRules NullPointerR; + static ConstantPackedRules ConstantPackedR; + static GeneralPackedRules GeneralPackedR; static DirectIntRules<ConstantSInt, signed char , &Type::SByteTy> SByteR; static DirectIntRules<ConstantUInt, unsigned char , &Type::UByteTy> UByteR; static DirectIntRules<ConstantSInt, signed short, &Type::ShortTy> ShortR; @@ -517,6 +542,10 @@ case Type::ULongTyID: return ULongR; case Type::FloatTyID: return FloatR; case Type::DoubleTyID: return DoubleR; + case Type::PackedTyID: + if (isa<ConstantPacked>(V1) && isa<ConstantPacked>(V2)) + return ConstantPackedR; + return GeneralPackedR; // Constant folding rules for ConstantAggregateZero. } } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits