On Jun 27, 2009, at 11:34 PM, Eli Friedman wrote: > On Sat, Jun 27, 2009 at 9:01 PM, Nate Begeman<[email protected]> > wrote: >> >> On Jun 27, 2009, at 10:13 PM, Eli Friedman wrote: >> >>> On Sat, Jun 27, 2009 at 7:36 PM, Nate Begeman<[email protected]> >>> wrote: >>>> >>>> + // Handle the case of an ext vector and scalar >>>> + if (const ExtVectorType *LV = lhsType->getAsExtVectorType()) { >>>> + QualType EltTy = LV->getElementType(); >>>> + if (EltTy->isIntegralType() && rhsType->isIntegralType()) { >>>> + if (Context.getIntegerTypeOrder(EltTy, rhsType) >= 0) { >>>> + ImpCastExprToType(rex, EltTy); >>>> + rex = new (Context) CStyleCastExpr(lhsType, rex, lhsType, >>>> + >>>> rex->getSourceRange().getBegin(), >>>> + >>>> rex->getSourceRange().getEnd()); >>>> + if (swapped) std::swap(rex, lex); >>>> + return lhsType; >>>> + } >>>> + } >>> >>> Creating a CStyleCastExpr here leads to a misleading AST; is there >>> some reason why you can't just use ImpCastExprToType(rex, lhsType)"? >> >> This avoided significant modifications to CodeGen, and accomplished >> the >> desired effect. > > What changes are you talking about? I just tried it in my tree, and > it appears to work fine without any additional changes.
I'll try the OpenCL tests again without this change; there were problems in the branch of clang we were working with where codegen would not perform the correct conversion of the scalar value to element type, and then splat to vector type without the two casts in the AST. If this is no longer the case, I'll happily remove it. Added to to-do list. Nate _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
