[llvm] [CodeGen][Mips] Remove fp128 libcall list (PR #153798)

Sergei Barannikov via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 15 07:11:52 PDT 2025


================
@@ -11031,6 +11031,12 @@ TargetLowering::LowerCallTo(TargetLowering::CallLoweringInfo &CLI) const {
   for (Type *Ty : RetOrigTys)
     RetTys.push_back(getValueType(DL, Ty));
 
+  if (CLI.RetTy != CLI.OrigRetTy) {
+    assert(RetOrigTys.size() == 1 &&
+           "Only supported for non-aggregate returns");
+    RetOrigTys[0] = CLI.OrigRetTy;
+  }
----------------
s-barannikov wrote:

Something like this (with a clarifying comment) would be less confusing to me:
```C++
  ComputeValueTypes(DL, CLI.OrigRetTy, RetOrigTys, &Offsets);

  SmallVector<EVT, 4> RetVTs;
  if (CLI.RetTy != CLI.OrigRetTy) {
    assert(RetOrigTys.size() == 1 &&
           "Only supported for non-aggregate returns");
    RetVTs.push_back(getValueType(DL, CLI.RetTy));
  } else {
    for (Type *Ty : RetOrigTys)
      RetVTs.push_back(getValueType(DL, Ty));
  }
```
<details>
<summary>patch</summary>

```patch
Subject: [PATCH] patch
---
Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp	(revision 9080a4972b88acc8bb2d198fa148222217a38fcd)
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp	(date 1755266928933)
@@ -11025,35 +11025,35 @@
   SmallVector<Type *, 4> RetOrigTys;
   SmallVector<TypeSize, 4> Offsets;
   auto &DL = CLI.DAG.getDataLayout();
-  ComputeValueTypes(DL, CLI.RetTy, RetOrigTys, &Offsets);
+  ComputeValueTypes(DL, CLI.OrigRetTy, RetOrigTys, &Offsets);
 
-  SmallVector<EVT, 4> RetTys;
-  for (Type *Ty : RetOrigTys)
-    RetTys.push_back(getValueType(DL, Ty));
-
+  SmallVector<EVT, 4> RetVTs;
   if (CLI.RetTy != CLI.OrigRetTy) {
     assert(RetOrigTys.size() == 1 &&
            "Only supported for non-aggregate returns");
-    RetOrigTys[0] = CLI.OrigRetTy;
+    RetVTs.push_back(getValueType(DL, CLI.RetTy));
+  } else {
+    for (Type *Ty : RetOrigTys)
+      RetVTs.push_back(getValueType(DL, Ty));
   }
 
   if (CLI.IsPostTypeLegalization) {
     // If we are lowering a libcall after legalization, split the return type.
     SmallVector<Type *, 4> OldRetOrigTys;
-    SmallVector<EVT, 4> OldRetTys;
+    SmallVector<EVT, 4> OldRetVTs;
     SmallVector<TypeSize, 4> OldOffsets;
     RetOrigTys.swap(OldRetOrigTys);
-    RetTys.swap(OldRetTys);
+    RetVTs.swap(OldRetVTs);
     Offsets.swap(OldOffsets);
 
-    for (size_t i = 0, e = OldRetTys.size(); i != e; ++i) {
-      EVT RetVT = OldRetTys[i];
+    for (size_t i = 0, e = OldRetVTs.size(); i != e; ++i) {
+      EVT RetVT = OldRetVTs[i];
       uint64_t Offset = OldOffsets[i];
       MVT RegisterVT = getRegisterType(Context, RetVT);
       unsigned NumRegs = getNumRegisters(Context, RetVT);
       unsigned RegisterVTByteSZ = RegisterVT.getSizeInBits() / 8;
       RetOrigTys.append(NumRegs, OldRetOrigTys[i]);
-      RetTys.append(NumRegs, RegisterVT);
+      RetVTs.append(NumRegs, RegisterVT);
       for (unsigned j = 0; j != NumRegs; ++j)
         Offsets.push_back(TypeSize::getFixed(Offset + j * RegisterVTByteSZ));
     }
```

</details>


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


More information about the llvm-commits mailing list