================
@@ -871,20 +928,50 @@ const CGFunctionInfo 
&CodeGenTypes::arrangeLLVMFunctionInfo(
   } else if (info.getCC() == CC_Swift || info.getCC() == CC_SwiftAsync) {
     swiftcall::computeABIInfo(CGM, *FI);
   } else {
-    CGM.getABIInfo().computeInfo(*FI);
+    if (isBPF)
+      CGM.fetchABIInfo(TB).computeInfo(*tempFI);
+    else
+      CGM.getABIInfo().computeInfo(*FI);
   }
 
   // Loop over all of the computed argument and return value info.  If any of
   // them are direct or extend without a specified coerce type, specify the
   // default now.
-  ABIArgInfo &retInfo = FI->getReturnInfo();
-  if (retInfo.canHaveCoerceToType() && retInfo.getCoerceToType() == nullptr)
-    retInfo.setCoerceToType(ConvertType(FI->getReturnType()));
+  if (isBPF && tempFI) {
+
+    const auto &abiRetInfo = tempFI->getReturnInfo();
+    ABIArgInfo &cgRetInfo = FI->getReturnInfo();
+
+    cgRetInfo = convertABIArgInfo(abiRetInfo, FI->getReturnType());
+
+    unsigned numArgs = std::min(FI->arg_size(), tempFI->getNumArgs());
+    unsigned argIndex = 0;
+
+    for (auto &cgArg : FI->arguments()) {
+      if (argIndex >= numArgs)
+        break;
 
-  for (auto &I : FI->arguments())
-    if (I.info.canHaveCoerceToType() && I.info.getCoerceToType() == nullptr)
-      I.info.setCoerceToType(ConvertType(I.type));
+      const auto &abiArgInfo = tempFI->getArgInfo(argIndex);
+      cgArg.info = convertABIArgInfo(abiArgInfo.ArgInfo, cgArg.type);
 
+      if (abiArgInfo.ArgInfo.isInReg())
+        cgArg.info.setInReg(true);
+
+      argIndex++;
+    }
+  } else {
+    // Non-BPF path: handle coerce types for direct/extend cases
+    ABIArgInfo &retInfo = FI->getReturnInfo();
+    if (retInfo.canHaveCoerceToType() && retInfo.getCoerceToType() == nullptr) 
{
+      retInfo.setCoerceToType(ConvertType(FI->getReturnType()));
+    }
+
+    for (auto &I : FI->arguments()) {
+      if (I.info.canHaveCoerceToType() && I.info.getCoerceToType() == nullptr) 
{
+        I.info.setCoerceToType(ConvertType(I.type));
+      }
+    }
----------------
nikic wrote:

Okay, this answers my question about why you need that CoercedType fallback. 

https://github.com/llvm/llvm-project/pull/140112
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to