[all-commits] [llvm/llvm-project] bc7d88: CodeGen: Disable isCopyInstrImpl if there are impl...

Matt Arsenault via All-commits all-commits at lists.llvm.org
Mon Oct 2 05:16:56 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: bc7d88faf1a595ab59952a2054418cdd0d9eeee8
      https://github.com/llvm/llvm-project/commit/bc7d88faf1a595ab59952a2054418cdd0d9eeee8
  Author: Matt Arsenault <Matthew.Arsenault at amd.com>
  Date:   2023-10-02 (Mon, 02 Oct 2023)

  Changed paths:
    M llvm/include/llvm/CodeGen/TargetInstrInfo.h
    M llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
    M llvm/lib/CodeGen/LiveDebugValues/VarLocBasedImpl.cpp
    M llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
    M llvm/test/CodeGen/AArch64/GlobalISel/arm64-pcsections.ll

  Log Message:
  -----------
  CodeGen: Disable isCopyInstrImpl if there are implicit operands

This is a conservative workaround for broken liveness tracking of
SUBREG_TO_REG to speculatively fix all targets. The current reported
failures are on X86 only, but this issue should appear for all targets
that use SUBREG_TO_REG. The next minimally correct refinement would be
to disallow only implicit defs.

The coalescer now introduces implicit-defs of the super register to
track the dependency on other subregisters. If we see such an implicit
operand, we cannot simply treat the subregister def as the result
operand in case downstream users depend on the implicitly defined
parts. Really target implementations should be considering the
implicit defs and trying to interpret them appropriately (maybe with
some generic helpers). The full implicit def could possibly be
reported as the move result, rather than the subregister def but that
requires additional work.

Hopefully fixes #64060 as well.

This needs to be applied to the release branch.

https://reviews.llvm.org/D156346




More information about the All-commits mailing list