[clang] [HLSL] Implement output parameter (PR #101083)

John McCall via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 19 15:50:39 PDT 2024


================
@@ -4148,6 +4152,30 @@ static void emitWriteback(CodeGenFunction &CGF,
   assert(!isProvablyNull(srcAddr.getBasePointer()) &&
          "shouldn't have writeback for provably null argument");
 
+  if (CGF.getLangOpts().HLSL) {
+    if (!isa<OpaqueValueExpr>(writeback.CastExpr)) {
+      RValue TmpVal = CGF.EmitAnyExprToTemp(writeback.CastExpr);
+      if (TmpVal.isScalar())
+        CGF.EmitStoreThroughLValue(TmpVal, srcLV);
+      else {
+        llvm::Value *Val = CGF.Builder.CreateLoad(TmpVal.getAggregateAddress());
----------------
rjmccall wrote:

Well, that's awful, but it's supportable.  The easiest way to get out of the business of having to handle all these different evaluation kinds is to just change the AST to the representation you'll need to use to support non-POD types, because then the load/assignment will just be the normal code-gen for emitting assignments.

https://github.com/llvm/llvm-project/pull/101083


More information about the cfe-commits mailing list