[all-commits] [llvm/llvm-project] 60433c: Remove TwoAddressInstructionPass::sink3AddrInstruc...

James Y Knight via All-commits all-commits at lists.llvm.org
Thu Jul 16 07:03:19 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 60433c63acb71935111304d71e41b7ee982398f8
      https://github.com/llvm/llvm-project/commit/60433c63acb71935111304d71e41b7ee982398f8
  Author: James Y Knight <jyknight at google.com>
  Date:   2020-07-16 (Thu, 16 Jul 2020)

  Changed paths:
    M llvm/lib/CodeGen/TwoAddressInstructionPass.cpp
    A llvm/test/CodeGen/X86/callbr-asm-sink.ll
    M llvm/test/CodeGen/X86/masked-iv-unsafe.ll
    M llvm/test/CodeGen/X86/reverse_branches.ll
    M llvm/test/CodeGen/X86/rotate-extract.ll
    M llvm/test/CodeGen/X86/twoaddr-lea.ll
    R llvm/test/CodeGen/X86/twoaddr-pass-sink.ll

  Log Message:
  -----------
  Remove TwoAddressInstructionPass::sink3AddrInstruction.

This function has a bug which will incorrectly reschedule instructions
after an INLINEASM_BR (which can branch). (The bug may also allow
scheduling past a throwing-CALL, I'm not certain.)

I could fix that bug, but, as the removed FIXME notes, it's better to
attempt rescheduling before converting to 3-addr form, as that may
remove the need to convert in the first place. In fact, the code to do
such reordering was added to this pass only a few months later, in
2011, via the addition of the function rescheduleMIBelowKill. That
code does not contain the same bug.

The removal of the sink3AddrInstruction function is not a no-op: in
some cases it would move an instruction post-conversion, when
rescheduleMIBelowKill would not move the instruction pre-converison.
However, this does not appear to be important: the machine instruction
scheduler can reorder the after-conversion instructions, in any case.

This patch fixes a kernel panic 4.4 LTS x86_64 Linux kernels, when
built with clang after 4b0aa5724feaa89a9538dcab97e018110b0e4bc3.

Link: https://github.com/ClangBuiltLinux/linux/issues/1085

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




More information about the All-commits mailing list