[PATCH] D155881: [AMDGPU] Remove std::optional from VOPD::ComponentProps. NFC.
Stanislav Mekhanoshin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 24 12:36:22 PDT 2023
rampitec added a comment.
In D155881#4529385 <https://reviews.llvm.org/D155881#4529385>, @scott.linder wrote:
> Drive-by comment, but is the impetus for the change just around trivial-copy-constructibility? This is guaranteed in C++20 at least, via https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0602r4.html and on my machine I get it even when compiling for C++17 (as it appears it might have been deemed a "defect" against C++17). Is it really worth making the code less clear to ensure this for older standards, when it will become a moot point in not too long?
>
> If the issue is actually the size of the object then there seems to be marginal benefit anyway; on my x86_64 Linux machine `sizeof(ComponentProps)` goes from `16` to `12` with this patch (i.e. the `std::optional` discriminant effectively occupies `4` bytes, I assume because of `3` bytes of padding). A more effective approach to shrink the object would then be to use a smaller `unsigned` type; I don't know if the fact that `MCInstrInfo::NumOperands` is `public` is just some historical artifact or if it really is part of the interface to the type, but in the latter case this version drops the `sizeof(ComponentProps)` to `8` on my machine:
>
> // Properties of VOPD components.
> class ComponentProps {
> private:
> using NumOperandsT = decltype(MCInstrDesc::NumOperands);
> NumOperandsT SrcOperandsNum = 0;
> std::optional<NumOperandsT> MandatoryLiteralIdx;
> bool HasSrc2Acc = false;
>
> Of course, with more fuss that size could be even lower, but I vastly prefer the (admittedly imperfect) `std::optional` to any other option when it is feasible. In this case there isn't much room for confusion or mistakes, but I'd still prefer the absolutely-obvious version.
>
> If there is some other issue I missed I'm interested in understanding it better!
At this point I constantly hit this in the gdb, and it is really performance critical class. As you said, there is not much room for confusion in this case.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D155881/new/
https://reviews.llvm.org/D155881
More information about the llvm-commits
mailing list