[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