================ @@ -4689,6 +4719,32 @@ void CodeGenFunction::EmitCallArg(CallArgList &args, const Expr *E, assert(type->isReferenceType() == E->isGLValue() && "reference binding to unmaterialized r-value!"); + // Add writeback for HLSLOutParamExpr. + if (const HLSLOutArgExpr *OE = dyn_cast<HLSLOutArgExpr>(E)) { + LValue LV = EmitLValue(E); + llvm::Type *ElTy = ConvertTypeForMem(LV.getType()); + llvm::Value *Addr, *BaseAddr; + if (LV.isExtVectorElt()) { + llvm::Constant *VecElts = LV.getExtVectorElts(); + BaseAddr = LV.getExtVectorAddress().getBasePointer(); + Addr = Builder.CreateGEP( + ElTy, BaseAddr, + {Builder.getInt32(0), VecElts->getAggregateElement((unsigned)0)}); + } else // LV.getAddress() will assert if this is not a simple LValue. + Addr = BaseAddr = LV.getAddress().getBasePointer(); + + llvm::TypeSize Sz = + CGM.getDataLayout().getTypeAllocSize(ConvertTypeForMem(LV.getType())); + + llvm::Value *LifetimeSize = EmitLifetimeStart(Sz, BaseAddr); + + Address TmpAddr(Addr, ElTy, LV.getAlignment()); + // TODO-HLSLOutArgExp: Fix me!!! ---------------- llvm-beanz wrote:
Doh. I think that's just a stale comment, but let me verify that all the test coverage is correct. https://github.com/llvm/llvm-project/pull/101083 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits