[PATCH] D156136: [BPF] Clean up SelLowering
Eduard Zingerman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 30 04:39:27 PDT 2023
eddyz87 added inline comments.
================
Comment at: llvm/lib/Target/BPF/BPFISelLowering.cpp:379
+ if (MF.getFunction().hasStructRetAttr())
+ fail(DL, DAG, "sret functions are not supported");
----------------
tamird wrote:
> yonghong-song wrote:
> > User may not understand what 'sret' means without looking at source code.
> > Maybe 'functions with returning struct are not supported'?
> Thanks, I agree this error message is not very clear. I'd like to update it, but I notice that the existing tests do not cover it. Do you know how to write a function that would produce IR with the `sret` attribute?
The following C code sample:
```
struct bar { long a[100]; };
struct bar foo(void) {
struct bar b;
return b;
}
```
Produces IR that triggers the error:
```
$ clang -mcpu=v4 -O2 --target=bpf -S test3.c -emit-llvm -o -
...
%struct.bar = type { [100 x i64] }
; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
define dso_local void @foo(ptr noalias nocapture sret(%struct.bar) align 8 %agg.result) local_unnamed_addr #0 {
entry:
ret void
}
...
$ clang -mcpu=v4 -O2 --target=bpf -S test3.c -emit-llvm -o - | llc
...
error: <unknown>:0:0: in function foo void (ptr): functions with VarArgs or StructRet are not supported
...
```
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D156136/new/
https://reviews.llvm.org/D156136
More information about the llvm-commits
mailing list