[all-commits] [llvm/llvm-project] 3231d2: AMDGPU/GlobalISel: Cleanup call lowering sequence

Matt Arsenault via All-commits all-commits at lists.llvm.org
Fri Mar 12 06:02:15 PST 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 3231d2b581f57ae1587587e436bc2873ce1470ce
      https://github.com/llvm/llvm-project/commit/3231d2b581f57ae1587587e436bc2873ce1470ce
  Author: Matt Arsenault <Matthew.Arsenault at amd.com>
  Date:   2021-03-12 (Fri, 12 Mar 2021)

  Changed paths:
    M llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp

  Log Message:
  -----------
  AMDGPU/GlobalISel: Cleanup call lowering sequence

Now that handleAssignments is handling all of the argument splitting,
we don't have to move the insert point around.


  Commit: d44a3dad994bac112850e929e36f97e6963cd481
      https://github.com/llvm/llvm-project/commit/d44a3dad994bac112850e929e36f97e6963cd481
  Author: Matt Arsenault <Matthew.Arsenault at amd.com>
  Date:   2021-03-12 (Fri, 12 Mar 2021)

  Changed paths:
    M llvm/test/CodeGen/AArch64/GlobalISel/call-translator-tail-call.ll

  Log Message:
  -----------
  AArch64/GlobalISel: Don't use common prefix in test

Unlike update_llc_test_checks, update_mir_test_checks isn't actually
smart enough to common functions with identical output.


  Commit: 34471c30602b5deccca4ed7607721e819e26b39c
      https://github.com/llvm/llvm-project/commit/34471c30602b5deccca4ed7607721e819e26b39c
  Author: Matt Arsenault <Matthew.Arsenault at amd.com>
  Date:   2021-03-12 (Fri, 12 Mar 2021)

  Changed paths:
    M llvm/lib/CodeGen/GlobalISel/CallLowering.cpp
    M llvm/test/CodeGen/AArch64/GlobalISel/call-translator-tail-call.ll
    M llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-call-sret.ll
    M llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-call.ll
    M llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-function-args.ll

  Log Message:
  -----------
  GlobalISel: Partially fix handling of byval arguments

This was essentially ignoring byval and treating them as a pointer
argument which needed to be loaded from. This should copy the frame
index value to the virtual register, not insert a load from the frame
index into the pointer value.

For AMDGPU, this was producing a load from the byval pointer argument,
to a pointer used for the byval arguments. I do not understand how
AArch64 managed to work before since it appears to be similarly
broken.

We could also change the ValueHandler API to avoid the extra copy from
the frame index, since currently it returns a new register.

I believe there is still an issue with outgoing byval arguments. These
should have a copy inserted in case the callee decided to overwrite
the memory.


  Commit: 6b76d82853fdc64160dda44610407c04af620292
      https://github.com/llvm/llvm-project/commit/6b76d82853fdc64160dda44610407c04af620292
  Author: Matt Arsenault <Matthew.Arsenault at amd.com>
  Date:   2021-03-12 (Fri, 12 Mar 2021)

  Changed paths:
    M llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h
    M llvm/lib/CodeGen/GlobalISel/CallLowering.cpp
    M llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp
    M llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp
    M llvm/lib/Target/ARM/ARMCallLowering.cpp
    M llvm/lib/Target/Mips/MipsCallLowering.cpp
    M llvm/lib/Target/X86/X86CallLowering.cpp
    A llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-stack-objects.ll
    M llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-function-args.ll

  Log Message:
  -----------
  GlobalISel: Fix marking byval arguments as immutable

byval arguments need to be assumed writable. Only implicitly stack
passed arguments which aren't addressable in the IR can be assumed
immutable.

Mips is still broken since for some reason its doing its own thing
with the ValueHandlers (and x86 doesn't actually handle byval
arguments now, although some of the code is there).


Compare: https://github.com/llvm/llvm-project/compare/bc4a5bdce4af...6b76d82853fd


More information about the All-commits mailing list