@@ -500,25 +500,19 @@ static void EmitHLSLSplatCast(CodeGenFunction &CGF, Address DestVal,
500500 // ^^ Flattened accesses to DestVal we want to store into
501501 CGF.FlattenAccessAndType (DestVal, DestTy, StoreGEPList, DestTypes);
502502
503- if (const VectorType *VT = SrcTy->getAs <VectorType>()) {
504- assert (VT->getNumElements () == 1 && " Invalid HLSL splat cast." );
505-
506- SrcTy = VT->getElementType ();
507- SrcVal = CGF.Builder .CreateExtractElement (SrcVal, (uint64_t )0 , " vec.load" );
508- }
509503 assert (SrcTy->isScalarType () && " Invalid HLSL splat cast." );
510- for (unsigned i = 0 ; i < StoreGEPList.size (); i ++) {
504+ for (unsigned I = 0 , Size = StoreGEPList.size (); I < Size; I ++) {
511505 llvm::Value *Cast =
512- CGF.EmitScalarConversion (SrcVal, SrcTy, DestTypes[i ], Loc);
506+ CGF.EmitScalarConversion (SrcVal, SrcTy, DestTypes[I ], Loc);
513507
514508 // store back
515- llvm::Value *Idx = StoreGEPList[i ].second ;
509+ llvm::Value *Idx = StoreGEPList[I ].second ;
516510 if (Idx) {
517511 llvm::Value *V =
518- CGF.Builder .CreateLoad (StoreGEPList[i ].first , " load.for.insert" );
512+ CGF.Builder .CreateLoad (StoreGEPList[I ].first , " load.for.insert" );
519513 Cast = CGF.Builder .CreateInsertElement (V, Cast, Idx);
520514 }
521- CGF.Builder .CreateStore (Cast, StoreGEPList[i ].first );
515+ CGF.Builder .CreateStore (Cast, StoreGEPList[I ].first );
522516 }
523517}
524518
@@ -1002,12 +996,10 @@ void AggExprEmitter::VisitCastExpr(CastExpr *E) {
1002996 Address DestVal = Dest.getAddress ();
1003997 SourceLocation Loc = E->getExprLoc ();
1004998
1005- if (RV.isScalar ()) {
1006- llvm::Value *SrcVal = RV.getScalarVal ();
1007- EmitHLSLSplatCast (CGF, DestVal, DestTy, SrcVal, SrcTy, Loc);
1008- break ;
1009- }
1010- llvm_unreachable (" RHS of HLSL splat cast must be a scalar or vector." );
999+ assert (RV.isScalar () && " RHS of HLSL splat cast must be a scalar." );
1000+ llvm::Value *SrcVal = RV.getScalarVal ();
1001+ EmitHLSLSplatCast (CGF, DestVal, DestTy, SrcVal, SrcTy, Loc);
1002+ break ;
10111003 }
10121004 case CK_HLSLElementwiseCast: {
10131005 Expr *Src = E->getSubExpr ();
0 commit comments