Author: lattner Date: Wed Jan 23 13:04:14 2008 New Revision: 46276 URL: http://llvm.org/viewvc/llvm-project?rev=46276&view=rev Log: Fix rdar://5701047, llvm-gcc crashes on this testcase on ppc:
typedef __attribute__((altivec(vector__))) float vFloat; static const vFloat _minusZero = ((const vFloat) (-0.0f)); vFloat x; void foo(vFloat f0, vFloat f1) { x = vec_vmaddfp(f0, f1, _minusZero); } vector_cst's are supposed to be zerofilled if insufficient elements are specified. Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=46276&r1=46275&r2=46276&view=diff ============================================================================== --- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Wed Jan 23 13:04:14 2008 @@ -5962,6 +5962,15 @@ std::vector<Constant*> Elts; for (tree elt = TREE_VECTOR_CST_ELTS(exp); elt; elt = TREE_CHAIN(elt)) Elts.push_back(Convert(TREE_VALUE(elt))); + + // The vector should be zero filled if insufficient elements are provided. + if (Elts.size() < TYPE_VECTOR_SUBPARTS(TREE_TYPE(exp))) { + tree EltType = TREE_TYPE(TREE_TYPE(exp)); + Constant *Zero = Constant::getNullValue(ConvertType(EltType)); + while (Elts.size() < TYPE_VECTOR_SUBPARTS(TREE_TYPE(exp))) + Elts.push_back(Zero); + } + return ConstantVector::get(Elts); } else { return Constant::getNullValue(ConvertType(TREE_TYPE(exp))); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits