[all-commits] [llvm/llvm-project] ce61de: [regalloc] Ensure Query::collectInterferringVregs ...

Mircea Trofin via All-commits all-commits at lists.llvm.org
Thu Apr 1 08:33:49 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: ce61def529e2d9ef46b79c9d1f489d69b45b95bf
      https://github.com/llvm/llvm-project/commit/ce61def529e2d9ef46b79c9d1f489d69b45b95bf
  Author: Mircea Trofin <mtrofin at google.com>
  Date:   2021-04-01 (Thu, 01 Apr 2021)

  Changed paths:
    M llvm/include/llvm/CodeGen/LiveIntervalUnion.h
    M llvm/lib/CodeGen/LiveIntervalUnion.cpp
    M llvm/lib/CodeGen/LiveRegMatrix.cpp
    M llvm/lib/CodeGen/RegAllocGreedy.cpp
    M llvm/lib/Target/AArch64/AArch64Subtarget.h
    M llvm/lib/Target/X86/X86Subtarget.h
    M llvm/test/CodeGen/AArch64/ragreedy-local-interval-cost.ll
    M llvm/test/CodeGen/X86/bug26810.ll
    M llvm/test/CodeGen/X86/greedy_regalloc_bad_eviction_sequence.ll
    M llvm/test/CodeGen/X86/i128-mul.ll
    M llvm/test/CodeGen/X86/mmx-arith.ll
    M llvm/test/CodeGen/X86/optimize-max-0.ll

  Log Message:
  -----------
  [regalloc] Ensure Query::collectInterferringVregs is called before interval iteration

The main part of the patch is the change in RegAllocGreedy.cpp: Q.collectInterferringVregs()
needs to be called before iterating the interfering live ranges.

The rest of the patch offers support that is the case: instead of  clearing the query's
InterferingVRegs field, we invalidate it. The clearing happens when the live reg matrix
is invalidated (existing triggering mechanism).

Without the change in RegAllocGreedy.cpp, the compiler ices.

This patch should make it more easily discoverable by developers that
collectInterferringVregs needs to be called before iterating.

I will follow up with a subsequent patch to improve the usability and maintainability of Query.

Differential Revision: https://reviews.llvm.org/D98232




More information about the All-commits mailing list