[all-commits] [llvm/llvm-project] 011ba7: [flang] finish BIND(C) VALUE derived type passing ...

jeanPerier via All-commits all-commits at lists.llvm.org
Fri Jan 12 00:33:00 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 011ba725070360341f5473e88ebb4c956574805f
      https://github.com/llvm/llvm-project/commit/011ba725070360341f5473e88ebb4c956574805f
  Author: jeanPerier <jperier at nvidia.com>
  Date:   2024-01-12 (Fri, 12 Jan 2024)

  Changed paths:
    M flang/lib/Optimizer/CodeGen/Target.cpp
    M flang/lib/Optimizer/CodeGen/TargetRewrite.cpp
    A flang/test/Fir/struct-passing-x86-64-several-fields-inreg.fir

  Log Message:
  -----------
  [flang] finish BIND(C) VALUE derived type passing ABI on X86-64 (#77742)

Derived type passed with VALUE in BIND(C) context must be passed like C
struct and LLVM is not implementing the ABI for this (it is up to the
frontends like clang).

Previous patch #75802 implemented the simple cases where the derived
type have one field, this patch implements the general case. Note that
the generated LLVM IR is compliant from a X86-64 C ABI point of view and
compatible with clang generated assembly, but that it is not guaranteed
to match the LLVM IR signatures generated by clang for the C equivalent
functions because several LLVM IR signatures may lead to the same X86-64
signature.




More information about the All-commits mailing list