[all-commits] [llvm/llvm-project] 3bdaf2: VirtRegRewriter: Add super register defs for live ...

Matt Arsenault via All-commits all-commits at lists.llvm.org
Fri Oct 25 21:57:30 PDT 2024


  Branch: refs/heads/users/arsenm/issue98474-register-coalescer-verifier-error
  Home:   https://github.com/llvm/llvm-project
  Commit: 3bdaf207671d668757559b8c38f1045e54a79cc8
      https://github.com/llvm/llvm-project/commit/3bdaf207671d668757559b8c38f1045e54a79cc8
  Author: Matt Arsenault <Matthew.Arsenault at amd.com>
  Date:   2024-10-25 (Fri, 25 Oct 2024)

  Changed paths:
    M llvm/lib/CodeGen/VirtRegMap.cpp
    M llvm/test/CodeGen/AMDGPU/branch-folding-implicit-def-subreg.ll
    M llvm/test/CodeGen/AMDGPU/indirect-call.ll
    M llvm/test/CodeGen/AMDGPU/infloop-subrange-spill-inspect-subrange.mir
    M llvm/test/CodeGen/AMDGPU/infloop-subrange-spill.mir
    A llvm/test/CodeGen/AMDGPU/issue98474-need-live-out-undef-subregister-def.ll
    A llvm/test/CodeGen/AMDGPU/issue98474-virtregrewriter-live-out-undef-subregisters.mir
    M llvm/test/CodeGen/AMDGPU/itofp.i128.ll
    M llvm/test/CodeGen/AMDGPU/vni8-across-blocks.ll
    A llvm/test/MachineVerifier/AMDGPU/issue98474-missing-def-liveout-physical-subregister.mir

  Log Message:
  -----------
  VirtRegRewriter: Add super register defs for live out undef lanes

If an undef subregister def is live into another block, we need to
maintain a physreg def to track the liveness of those lanes. This
would manifest a verifier error after branch folding, when the cloned
tail block use no longer had a def.

There is a missing verifier check for this situation. Added an xfailed
test that demonstrates this. We may also be able to revert the changes
in 47d3cbcf842a036c20c3f1c74255cdfc213f41c2.

It might be better to insert an IMPLICIT_DEF before the instruction
rather than using the implicit-def operand.

Fixes #98474


  Commit: 41d4717f59afbf7744927d38102e07e7c6f1f578
      https://github.com/llvm/llvm-project/commit/41d4717f59afbf7744927d38102e07e7c6f1f578
  Author: Matt Arsenault <Matthew.Arsenault at amd.com>
  Date:   2024-10-25 (Fri, 25 Oct 2024)

  Changed paths:
    M llvm/lib/CodeGen/VirtRegMap.cpp

  Log Message:
  -----------
  Try to fix clobbering lanes in other assigned lanes of physreg


  Commit: f80bb2913b02aa1921e37a04717acfccbfa39ba8
      https://github.com/llvm/llvm-project/commit/f80bb2913b02aa1921e37a04717acfccbfa39ba8
  Author: Matt Arsenault <Matthew.Arsenault at amd.com>
  Date:   2024-10-25 (Fri, 25 Oct 2024)

  Changed paths:
    M llvm/include/llvm/CodeGen/LiveRegMatrix.h
    M llvm/lib/CodeGen/LiveRegMatrix.cpp
    M llvm/lib/CodeGen/VirtRegMap.cpp
    M llvm/test/CodeGen/AMDGPU/indirect-call.ll
    M llvm/test/CodeGen/AMDGPU/infloop-subrange-spill-inspect-subrange.mir
    M llvm/test/CodeGen/AMDGPU/infloop-subrange-spill.mir
    A llvm/test/CodeGen/AMDGPU/issue98474-assigned-physreg-interference.mir
    M llvm/test/CodeGen/AMDGPU/issue98474-virtregrewriter-live-out-undef-subregisters.mir
    M llvm/test/CodeGen/AMDGPU/itofp.i128.ll
    M llvm/test/CodeGen/AMDGPU/vni8-across-blocks.ll

  Log Message:
  -----------
  Use LiveRegMatrix and only add necessary impdefs

We apparently need to detect interference with other assigned
intervals to avoid clobbering the undef lanes defined in other
intervals, since the undef def didn't count as interference.

This is pretty ugly and adds a new dependency on LiveRegMatrix,
keeping it live for one more pass. It also adds a lot of implicit
operand spam (we really should have a better representation for this).


  Commit: 4456624cc6ec42f95cd3e16939f62f51e3d9a20c
      https://github.com/llvm/llvm-project/commit/4456624cc6ec42f95cd3e16939f62f51e3d9a20c
  Author: Matt Arsenault <Matthew.Arsenault at amd.com>
  Date:   2024-10-25 (Fri, 25 Oct 2024)

  Changed paths:
    M llvm/lib/CodeGen/VirtRegMap.cpp

  Log Message:
  -----------
  More comments


Compare: https://github.com/llvm/llvm-project/compare/b0b1659a7005...4456624cc6ec

To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list