[all-commits] [llvm/llvm-project] 538b90: [RISCV][GlobalISel] Select ALU GPR instructions

Craig Topper via All-commits all-commits at lists.llvm.org
Mon Aug 28 10:11:41 PDT 2023

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 538b90cf4c63c7f7b55a9eb9812e951529abd66c
  Author: Craig Topper <craig.topper at sifive.com>
  Date:   2023-08-28 (Mon, 28 Aug 2023)

  Changed paths:
    M llvm/lib/Target/RISCV/CMakeLists.txt
    M llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp
    A llvm/lib/Target/RISCV/RISCVGISel.td
    A llvm/test/CodeGen/RISCV/GlobalISel/alu-roundtrip.ll
    A llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/alu-rv32.mir
    A llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/alu-rv64.mir
    A llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/alu_m-rv32.mir
    A llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/alu_m-rv64.mir

  Log Message:
  [RISCV][GlobalISel] Select ALU GPR instructions

Some instruction selection patterns required for ALU GPR instructions have already been automatically imported from existing TableGen descriptions - this patch simply adds testing for them. Logic for selecting constants and copies has been added, along with the first of the GIComplexPatternEquiv definitions required to select the shiftMaskXLen ComplexPattern. New patterns have been added to directly select RV64 W instructions from gMIR rather than using custom gMIR operations earlier in the pipeline. In future this could also support the checks present in the DAGToDAGISel for finding ops whose users only require the lower 32 bits.

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

  Commit: ff6d33382faf3709fa270ae0abb8d165142df9ae
  Author: Craig Topper <craig.topper at sifive.com>
  Date:   2023-08-28 (Mon, 28 Aug 2023)

  Changed paths:
    M llvm/lib/Target/RISCV/RISCVExpandAtomicPseudoInsts.cpp
    A llvm/test/CodeGen/RISCV/pr65025.ll

  Log Message:
  [RISCV] Prevent tryToFoldBNEOnCmpXchgResult from deleting AND if it has others users.

This disables the transform if the branch does not have the kill
flag set for the AND we want to delete.

Ideally we'd be able to share the AND with the AND we create in
the expansion, but that's a more complex transform. So this starts
with the simple approach to fix miscompile.

This should be backported to LLVM 17.

Fixes PR65025.ll

Reviewed By: asb

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

Compare: https://github.com/llvm/llvm-project/compare/2102ed0b917b...ff6d33382faf

More information about the All-commits mailing list