diff --git a/tools/clang/lib/CodeGen/CGCall.cpp b/tools/clang/lib/CodeGen/CGCall.cpp index 191289658..f781e66a0 100644 --- a/tools/clang/lib/CodeGen/CGCall.cpp +++ b/tools/clang/lib/CodeGen/CGCall.cpp @@ -988,17 +988,13 @@ static llvm::Value *CreateCoercedLoad(llvm::Value *SrcPtr, // FIXME: Do we need to recurse here? static void BuildAggStore(CodeGenFunction &CGF, llvm::Value *Val, llvm::Value *DestPtr, bool DestIsVolatile, - CharUnits DestAlign, - QualType QTy // HLSL Change - ) { + CharUnits DestAlign) { // Prefer scalar stores to first-class aggregate stores. if (llvm::StructType *STy = dyn_cast(Val->getType())) { // HLSL Change Begins - if (CGF.getLangOpts().HLSL) { - CGF.CGM.getHLSLRuntime().EmitHLSLAggregateStore(CGF, Val, DestPtr, QTy); - return; - } + assert(!CGF.getLangOpts().HLSL && + "HLSL uses SRet so this should not be possible to reach."); // HLSL Change Ends const llvm::StructLayout *Layout = CGF.CGM.getDataLayout().getStructLayout(STy); @@ -1028,9 +1024,7 @@ static void CreateCoercedStore(llvm::Value *Src, llvm::Value *DstPtr, bool DstIsVolatile, CharUnits DstAlign, - CodeGenFunction &CGF, - QualType QTy // HLSL Change - ) { + CodeGenFunction &CGF) { llvm::Type *SrcTy = Src->getType(); llvm::Type *DstTy = cast(DstPtr->getType())->getElementType(); @@ -1063,7 +1057,7 @@ static void CreateCoercedStore(llvm::Value *Src, if (SrcSize <= DstSize) { llvm::Value *Casted = CGF.Builder.CreateBitCast(DstPtr, llvm::PointerType::getUnqual(SrcTy)); - BuildAggStore(CGF, Src, Casted, DstIsVolatile, DstAlign, QTy); // HLSL Change - Add QTy + BuildAggStore(CGF, Src, Casted, DstIsVolatile, DstAlign); } else { // Otherwise do coercion through memory. This is stupid, but // simple. @@ -2082,7 +2076,7 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI, assert(NumIRArgs == 1); auto AI = FnArgs[FirstIRArg]; AI->setName(Arg->getName() + ".coerce"); - CreateCoercedStore(AI, Ptr, /*DestIsVolatile=*/false, PtrAlign, *this, Ty); // HLSL Change - Add Ty. + CreateCoercedStore(AI, Ptr, /*DestIsVolatile=*/false, PtrAlign, *this); } @@ -3724,7 +3718,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, DestPtr = CreateMemTemp(RetTy, "agg.tmp"); DestIsVolatile = false; } - BuildAggStore(*this, CI, DestPtr, DestIsVolatile, DestAlign, RetTy); // HLSL Change - Add QualTy. + BuildAggStore(*this, CI, DestPtr, DestIsVolatile, DestAlign); return RValue::getAggregate(DestPtr); } case TEK_Scalar: { @@ -3760,7 +3754,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, StoreAlign = StoreAlign.alignmentAtOffset(CharUnits::fromQuantity(Offs)); } - CreateCoercedStore(CI, StorePtr, DestIsVolatile, StoreAlign, *this, RetTy); // HLSL Change - Add QTy. + CreateCoercedStore(CI, StorePtr, DestIsVolatile, StoreAlign, *this); return convertTempToRValue(DestPtr, RetTy, SourceLocation()); } diff --git a/tools/clang/lib/CodeGen/CGHLSLMS.cpp b/tools/clang/lib/CodeGen/CGHLSLMS.cpp index 63ed9b8e9..395cb92e8 100644 --- a/tools/clang/lib/CodeGen/CGHLSLMS.cpp +++ b/tools/clang/lib/CodeGen/CGHLSLMS.cpp @@ -270,10 +270,6 @@ public: llvm::Value *DestPtr, clang::QualType Ty) override; - void EmitHLSLAggregateStore(CodeGenFunction &CGF, llvm::Value *Val, - llvm::Value *DestPtr, - clang::QualType Ty) override; - void EmitHLSLFlatConversion(CodeGenFunction &CGF, Value *Val, Value *DestPtr, QualType Ty, @@ -5691,9 +5687,9 @@ void CGMSHLSLRuntime::EmitHLSLFlatConversionAggregateCopy(CodeGenFunction &CGF, } } - // It is possible to implement EmitHLSLAggregateCopy, EmitHLSLAggregateStore - // the same way. But split value to scalar will generate many instruction when - // src type is same as dest type. + // It is possible to implement EmitHLSLAggregateCopy, the same way. But split + // value to scalar will generate many instruction when src type is same as + // dest type. SmallVector GEPIdxStack; SmallVector SrcPtrs; SmallVector SrcQualTys; @@ -5712,12 +5708,6 @@ void CGMSHLSLRuntime::EmitHLSLFlatConversionAggregateCopy(CodeGenFunction &CGF, ConvertAndStoreElements(CGF, SrcVals, SrcQualTys, DstPtrs, DstQualTys); } -void CGMSHLSLRuntime::EmitHLSLAggregateStore(CodeGenFunction &CGF, llvm::Value *SrcVal, - llvm::Value *DestPtr, - clang::QualType Ty) { - DXASSERT(0, "aggregate return type will use SRet, no aggregate store should exist"); -} - // Either copies a scalar to a scalar, a scalar to a vector, or splats a scalar to a vector static void SimpleFlatValCopy(CodeGenFunction &CGF, Value *SrcVal, QualType SrcQualTy, Value *DstPtr, QualType DstQualTy) { diff --git a/tools/clang/lib/CodeGen/CGHLSLRuntime.h b/tools/clang/lib/CodeGen/CGHLSLRuntime.h index 6f8ec2b02..a5450f561 100644 --- a/tools/clang/lib/CodeGen/CGHLSLRuntime.h +++ b/tools/clang/lib/CodeGen/CGHLSLRuntime.h @@ -114,9 +114,6 @@ public: virtual void EmitHLSLAggregateCopy(CodeGenFunction &CGF, llvm::Value *SrcPtr, llvm::Value *DestPtr, clang::QualType Ty) = 0; - virtual void EmitHLSLAggregateStore(CodeGenFunction &CGF, llvm::Value *Val, - llvm::Value *DestPtr, - clang::QualType Ty) = 0; virtual void EmitHLSLFlatConversion(CodeGenFunction &CGF, llvm::Value *Val, llvm::Value *DestPtr, clang::QualType Ty, clang::QualType SrcTy) = 0;