[llvm-dev] union return type

Tim Northover via llvm-dev llvm-dev at lists.llvm.org
Wed Apr 19 06:41:07 PDT 2017

On 19 April 2017 at 01:38, Julien Schmitt via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> I guess an optimization pass is called to simplify the return type in first
> case but i have no idea which one ?
> Does anybody have an explanation ?

The IR-level return (& arg) type is a complex contract between Clang
and each LLVM backend. Clang knows which registers (or stack) it wants
any object to be returned or passed in, and knows how the LLVM backend
will treat any type, so it carefully chooses the type to get the right
properties. Sometimes it even adds dummy arguments for padding.

Since this code needs to know so much about the backend, it's
different for each target (in Clang's lib/CodeGen/TargetInfo.cpp). X86
& Sparc just happen to pick different types for your union.



More information about the llvm-dev mailing list