[llvm] 78a8878 - Revert "[RISCV][GISel] Disable call lowering for integers larger than 2*XLen. (#69144)"

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 20 11:18:57 PDT 2023


Author: Craig Topper
Date: 2023-10-20T11:18:37-07:00
New Revision: 78a8878284485c8951f930a022d29d66e9e92ad5

URL: https://github.com/llvm/llvm-project/commit/78a8878284485c8951f930a022d29d66e9e92ad5
DIFF: https://github.com/llvm/llvm-project/commit/78a8878284485c8951f930a022d29d66e9e92ad5.diff

LOG: Revert "[RISCV][GISel] Disable call lowering for integers larger than 2*XLen. (#69144)"

This reverts commit 3a4b0e9356748fc7d84f25d1b4c81352e9e23cce.

Seems to be failing on the build bots.

Added: 
    

Modified: 
    llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp b/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp
index aeb7f96c3f9ba80..215aa938e5dc484 100644
--- a/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp
+++ b/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp
@@ -193,42 +193,6 @@ struct RISCVCallReturnHandler : public RISCVIncomingValueHandler {
 RISCVCallLowering::RISCVCallLowering(const RISCVTargetLowering &TLI)
     : CallLowering(&TLI) {}
 
-// TODO: Support all argument types.
-static bool isSupportedArgumentType(Type *T, const RISCVSubtarget &Subtarget) {
-  // TODO: Integers larger than 2*XLen are passed indirectly which is not
-  // supported yet.
-  if (T->isIntegerTy())
-    return T->getIntegerBitWidth() <= Subtarget.getXLen() * 2;
-  if (T->isPointerTy())
-    return true;
-  return false;
-}
-
-// TODO: Only integer, pointer and aggregate types are supported now.
-static bool isSupportedReturnType(Type *T, const RISCVSubtarget &Subtarget) {
-  // TODO: Integers larger than 2*XLen are passed indirectly which is not
-  // supported yet.
-  if (T->isIntegerTy())
-    return T->getIntegerBitWidth() <= Subtarget.getXLen() * 2;
-  if (T->isPointerTy())
-    return true;
-
-  if (T->isArrayTy())
-    return isSupportedReturnType(T->getArrayElementType(), Subtarget);
-
-  if (T->isStructTy()) {
-    // For now we only allow homogeneous structs that we can manipulate with
-    // G_MERGE_VALUES and G_UNMERGE_VALUES
-    auto StructT = cast<StructType>(T);
-    for (unsigned i = 1, e = StructT->getNumElements(); i != e; ++i)
-      if (StructT->getElementType(i) != StructT->getElementType(0))
-        return false;
-    return isSupportedReturnType(StructT->getElementType(0), Subtarget);
-  }
-
-  return false;
-}
-
 bool RISCVCallLowering::lowerReturnVal(MachineIRBuilder &MIRBuilder,
                                        const Value *Val,
                                        ArrayRef<Register> VRegs,
@@ -236,9 +200,8 @@ bool RISCVCallLowering::lowerReturnVal(MachineIRBuilder &MIRBuilder,
   if (!Val)
     return true;
 
-  const RISCVSubtarget &Subtarget =
-      MIRBuilder.getMF().getSubtarget<RISCVSubtarget>();
-  if (!isSupportedReturnType(Val->getType(), Subtarget))
+  // TODO: Only integer, pointer and aggregate types are supported now.
+  if (!Val->getType()->isIntOrPtrTy() && !Val->getType()->isAggregateType())
     return false;
 
   MachineFunction &MF = MIRBuilder.getMF();
@@ -285,11 +248,13 @@ bool RISCVCallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder,
   if (F.isVarArg())
     return false;
 
-  const RISCVSubtarget &Subtarget =
-      MIRBuilder.getMF().getSubtarget<RISCVSubtarget>();
+  // TODO: Support all argument types.
   for (auto &Arg : F.args()) {
-    if (!isSupportedArgumentType(Arg.getType(), Subtarget))
-      return false;
+    if (Arg.getType()->isIntegerTy())
+      continue;
+    if (Arg.getType()->isPointerTy())
+      continue;
+    return false;
   }
 
   MachineFunction &MF = MIRBuilder.getMF();
@@ -327,11 +292,15 @@ bool RISCVCallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
   const Function &F = MF.getFunction();
   CallingConv::ID CC = F.getCallingConv();
 
-  const RISCVSubtarget &Subtarget =
-      MIRBuilder.getMF().getSubtarget<RISCVSubtarget>();
+  // TODO: Support all argument types.
   for (auto &AInfo : Info.OrigArgs) {
-    if (!isSupportedArgumentType(AInfo.Ty, Subtarget))
-      return false;
+    if (AInfo.Ty->isIntegerTy())
+      continue;
+    if (AInfo.Ty->isPointerTy())
+      continue;
+    if (AInfo.Ty->isFloatingPointTy())
+      continue;
+    return false;
   }
 
   SmallVector<ArgInfo, 32> SplitArgInfos;
@@ -368,7 +337,8 @@ bool RISCVCallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
   if (Info.OrigRet.Ty->isVoidTy())
     return true;
 
-  if (!isSupportedReturnType(Info.OrigRet.Ty, Subtarget))
+  // TODO: Only integer, pointer and aggregate types are supported now.
+  if (!Info.OrigRet.Ty->isIntOrPtrTy() && !Info.OrigRet.Ty->isAggregateType())
     return false;
 
   SmallVector<ArgInfo, 4> SplitRetInfos;


        


More information about the llvm-commits mailing list