[all-commits] [llvm/llvm-project] 2b9490: Implement operand bundles for floating-point opera...

Serge Pavlov via All-commits all-commits at lists.llvm.org
Mon Feb 17 06:32:56 PST 2025


  Branch: refs/heads/users/spavloff/floating-point-operator-bundles
  Home:   https://github.com/llvm/llvm-project
  Commit: 2b9490337528ffbbf9b7a5ad1bcbc304af10b545
      https://github.com/llvm/llvm-project/commit/2b9490337528ffbbf9b7a5ad1bcbc304af10b545
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2025-02-17 (Mon, 17 Feb 2025)

  Changed paths:
    M clang/test/CodeGen/X86/strictfp_builtins.c
    M clang/test/CodeGen/strictfp_builtins.c
    M clang/test/CodeGenOpenCL/cl20-device-side-enqueue-attributes.cl
    M llvm/docs/LangRef.rst
    M llvm/include/llvm/ADT/FloatingPointMode.h
    M llvm/include/llvm/IR/AutoUpgrade.h
    M llvm/include/llvm/IR/FPEnv.h
    M llvm/include/llvm/IR/IRBuilder.h
    M llvm/include/llvm/IR/InstrTypes.h
    M llvm/include/llvm/IR/IntrinsicInst.h
    M llvm/include/llvm/IR/LLVMContext.h
    M llvm/lib/AsmParser/LLParser.cpp
    M llvm/lib/IR/AutoUpgrade.cpp
    M llvm/lib/IR/IRBuilder.cpp
    M llvm/lib/IR/Instructions.cpp
    M llvm/lib/IR/IntrinsicInst.cpp
    M llvm/lib/IR/LLVMContext.cpp
    M llvm/lib/IR/Verifier.cpp
    M llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
    M llvm/lib/Transforms/Utils/CloneFunction.cpp
    M llvm/test/Bitcode/operand-bundles-bc-analyzer.ll
    M llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-pown.ll

  Log Message:
  -----------
  Implement operand bundles for floating-point operations

Currently floating-point operations in general form (beyond the default
mode) are always represented by calls to constrained intrinsics. In
addition to the side effect, they carry additional information in the
form of metadata arguments. This scheme is not efficient in the case of
intrinsic function calls, as was noted in
https://discourse.llvm.org/t/thought-on-strictfp-support/71453, because
it requires defining a separate intrinsic for the same operation but
used in non-default FP environment. The solution proposed in the
discussion was "to move the complexity about the environment tracking
from the intrinsics themselves to the call instruction".

The way implemented in this change is to use operand bundles
(https://llvm.org/docs/LangRef.html#operand-bundles). This way was tried
previously (https://reviews.llvm.org/D93455), but was not finished.

This change does not add any new functionality, it only adds the new way
of keeping FP related information in LLVM IR. Metadata arguments of
constrained functions are preserved, but they are not used in the
queries like `getRoundingMode` or `getExceptionBehavior`.


  Commit: 359a02252c44c3bda5897aca218ed874cc0fac1c
      https://github.com/llvm/llvm-project/commit/359a02252c44c3bda5897aca218ed874cc0fac1c
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2025-02-17 (Mon, 17 Feb 2025)

  Changed paths:
    M clang/test/CodeGen/strictfp_builtins.c
    M clang/test/CodeGenOpenCL/cl20-device-side-enqueue-attributes.cl
    M llvm/docs/LangRef.rst
    M llvm/include/llvm/ADT/FloatingPointMode.h
    M llvm/include/llvm/AsmParser/LLParser.h
    M llvm/include/llvm/IR/FPEnv.h
    M llvm/include/llvm/IR/IRBuilder.h
    M llvm/include/llvm/IR/InstrTypes.h
    M llvm/include/llvm/IR/IntrinsicInst.h
    M llvm/include/llvm/IR/LLVMContext.h
    M llvm/lib/AsmParser/LLParser.cpp
    M llvm/lib/Bitcode/Reader/BitcodeReader.cpp
    M llvm/lib/IR/AutoUpgrade.cpp
    M llvm/lib/IR/FPEnv.cpp
    M llvm/lib/IR/IRBuilder.cpp
    M llvm/lib/IR/Instructions.cpp
    M llvm/lib/IR/IntrinsicInst.cpp
    M llvm/lib/IR/LLVMContext.cpp
    M llvm/lib/IR/Verifier.cpp
    M llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
    M llvm/lib/Transforms/Utils/CloneFunction.cpp
    A llvm/test/Bitcode/auto-upgrade-constrained.ll
    A llvm/test/Bitcode/auto-upgrade-constrained.ll.bc
    M llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-pown.ll
    M llvm/test/Transforms/Attributor/nofpclass.ll
    M llvm/test/Transforms/Inline/inline-strictfp.ll
    M llvm/test/Verifier/fp-intrinsics.ll

  Log Message:
  -----------
  Use metadata for bundle values


  Commit: c376e8d34d4bc2efd173446a61ff380a71f09d6e
      https://github.com/llvm/llvm-project/commit/c376e8d34d4bc2efd173446a61ff380a71f09d6e
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2025-02-17 (Mon, 17 Feb 2025)

  Changed paths:
    M llvm/test/Transforms/EarlyCSE/defaultfp-strictfp.ll
    M llvm/test/Transforms/EarlyCSE/ebstrict-strictfp.ll
    M llvm/test/Transforms/EarlyCSE/mixed-strictfp.ll
    M llvm/test/Transforms/EarlyCSE/nonmixed-strictfp.ll
    M llvm/test/Transforms/EarlyCSE/round-dyn-strictfp.ll
    M llvm/test/Transforms/EarlyCSE/tfpropagation.ll

  Log Message:
  -----------
  Update tests in Transforms/EarlyCSE


  Commit: 4989e7b8a4e6f90e6764ed6974769c37546044b8
      https://github.com/llvm/llvm-project/commit/4989e7b8a4e6f90e6764ed6974769c37546044b8
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2025-02-17 (Mon, 17 Feb 2025)

  Changed paths:
    M llvm/docs/LangRef.rst
    M llvm/include/llvm/IR/AutoUpgrade.h
    M llvm/lib/IR/AutoUpgrade.cpp
    M llvm/lib/Transforms/Utils/CloneFunction.cpp

  Log Message:
  -----------
  Small changes: docs, clang-format, revievers' notes

- Fix Doxygen error,
- Fix clang-format error,
- remove unused function declaration,
- remove setting MD_fpmath, it is made by copyMetadata.


  Commit: 4f219ea2362721d487b2fb33ded3fb04a3cfa12d
      https://github.com/llvm/llvm-project/commit/4f219ea2362721d487b2fb33ded3fb04a3cfa12d
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2025-02-17 (Mon, 17 Feb 2025)

  Changed paths:
    M llvm/include/llvm/IR/InstrTypes.h
    M llvm/lib/IR/AutoUpgrade.cpp
    M llvm/lib/IR/IRBuilder.cpp
    M llvm/lib/IR/Instructions.cpp
    M llvm/lib/IR/LLVMContext.cpp
    M llvm/lib/IR/Verifier.cpp
    M llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
    M llvm/test/Verifier/fp-intrinsics.ll

  Log Message:
  -----------
  Small fixes

- Add method `hasFloatingPointBundles` to simplify checks,
- Update comments in `TailRecursionElimination.cpp`,
- Updated messages in Verifier,
- Add Verifier tests.
- Rebame remained cases of 'fpe.round' for 'fpe.control'


  Commit: cbce2a1fc11864e597f80edfa6311fc5b8f8d337
      https://github.com/llvm/llvm-project/commit/cbce2a1fc11864e597f80edfa6311fc5b8f8d337
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2025-02-17 (Mon, 17 Feb 2025)

  Changed paths:
    M llvm/include/llvm/IR/IRBuilder.h
    M llvm/include/llvm/IR/InstrTypes.h
    M llvm/lib/IR/Instructions.cpp

  Log Message:
  -----------
  Calculate MemoryEffect


  Commit: 8835d69e32be709c2410788d98b4ce066d8c0b51
      https://github.com/llvm/llvm-project/commit/8835d69e32be709c2410788d98b4ce066d8c0b51
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2025-02-17 (Mon, 17 Feb 2025)

  Changed paths:
    M clang/test/CodeGen/SystemZ/strictfp_builtins.c
    M clang/test/CodeGen/X86/strictfp_builtins.c
    M clang/test/CodeGen/cx-complex-range.c
    M clang/test/CodeGen/isfpclass.c
    M clang/test/CodeGen/strictfp-elementwise-bulitins.cpp
    M clang/test/CodeGen/strictfp_builtins.c
    M clang/test/CodeGenOpenCL/cl20-device-side-enqueue-attributes.cl
    M llvm/lib/IR/IRBuilder.cpp
    M llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-pown.ll
    M llvm/test/CodeGen/AMDGPU/global_atomic_optimizer_fp_rtn.ll
    M llvm/test/CodeGen/AMDGPU/global_atomics_optimizer_fp_no_rtn.ll
    M llvm/test/Transforms/AtomicExpand/AMDGPU/expand-atomic-rmw-fadd.ll
    M llvm/test/Transforms/HardwareLoops/scalar-while-strictfp.ll

  Log Message:
  -----------
  Don't set strictfp on irrelevant calls


  Commit: ea5b37e4fc61a65992ca0a917b63f5339bf0dcda
      https://github.com/llvm/llvm-project/commit/ea5b37e4fc61a65992ca0a917b63f5339bf0dcda
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2025-02-17 (Mon, 17 Feb 2025)

  Changed paths:
    M clang/test/CodeGen/SystemZ/strictfp_builtins.c
    M clang/test/CodeGen/X86/strictfp_builtins.c
    M clang/test/CodeGen/cx-complex-range.c
    M clang/test/CodeGen/isfpclass.c
    M clang/test/CodeGen/strictfp-elementwise-bulitins.cpp
    M clang/test/CodeGen/strictfp_builtins.c
    M clang/test/CodeGenOpenCL/cl20-device-side-enqueue-attributes.cl
    M llvm/lib/IR/IRBuilder.cpp
    M llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-pown.ll
    M llvm/test/CodeGen/AMDGPU/global_atomic_optimizer_fp_rtn.ll
    M llvm/test/CodeGen/AMDGPU/global_atomics_optimizer_fp_no_rtn.ll
    M llvm/test/Transforms/AtomicExpand/AMDGPU/expand-atomic-rmw-fadd.ll
    M llvm/test/Transforms/HardwareLoops/scalar-while-strictfp.ll

  Log Message:
  -----------
  Revert "Don't set strictfp on irrelevant calls"

This change was discussed in
https://github.com/llvm/llvm-project/pull/122735. As it was decided,
current usage of strictfp on call sites remains intact.


  Commit: 36dc54bccb399f8d4d1903e470f4319f0006c004
      https://github.com/llvm/llvm-project/commit/36dc54bccb399f8d4d1903e470f4319f0006c004
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2025-02-17 (Mon, 17 Feb 2025)

  Changed paths:
    M llvm/docs/LangRef.rst
    M llvm/docs/ReleaseNotes.md

  Log Message:
  -----------
  Change documentation


  Commit: c41809efddd25b005325fc603456baae23f44024
      https://github.com/llvm/llvm-project/commit/c41809efddd25b005325fc603456baae23f44024
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2025-02-17 (Mon, 17 Feb 2025)

  Changed paths:
    M clang/test/CodeGen/cx-complex-range.c
    M clang/test/CodeGen/strictfp-elementwise-bulitins.cpp
    M clang/test/CodeGen/strictfp_builtins.c
    M clang/test/CodeGenOpenCL/cl20-device-side-enqueue-attributes.cl
    M llvm/include/llvm/IR/IRBuilder.h
    M llvm/include/llvm/IR/InstrTypes.h
    M llvm/include/llvm/Support/ModRef.h
    M llvm/lib/IR/IRBuilder.cpp
    M llvm/lib/IR/Instructions.cpp
    M llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-pown.ll
    M llvm/test/CodeGen/AMDGPU/global_atomic_optimizer_fp_rtn.ll
    M llvm/test/CodeGen/AMDGPU/global_atomics_optimizer_fp_no_rtn.ll
    M llvm/test/Transforms/AtomicExpand/AMDGPU/expand-atomic-rmw-fadd.ll
    M llvm/unittests/IR/IRBuilderTest.cpp

  Log Message:
  -----------
  Do not use strictfp call attribute as indicator of FPE awareness


  Commit: ac4271a3295330772597ead97b50bed165f55a59
      https://github.com/llvm/llvm-project/commit/ac4271a3295330772597ead97b50bed165f55a59
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2025-02-17 (Mon, 17 Feb 2025)

  Changed paths:
    M clang/test/CodeGen/strictfp_builtins.c
    M clang/test/CodeGenOpenCL/cl20-device-side-enqueue-attributes.cl
    M llvm/docs/LangRef.rst
    M llvm/include/llvm/IR/LLVMContext.h
    M llvm/lib/AsmParser/LLParser.cpp
    M llvm/lib/IR/IRBuilder.cpp
    M llvm/lib/IR/Instructions.cpp
    M llvm/lib/IR/LLVMContext.cpp
    M llvm/lib/IR/Verifier.cpp
    M llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
    M llvm/test/Bitcode/auto-upgrade-constrained.ll
    M llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-pown.ll
    M llvm/test/CodeGen/AMDGPU/global_atomic_optimizer_fp_rtn.ll
    M llvm/test/CodeGen/AMDGPU/global_atomics_optimizer_fp_no_rtn.ll
    M llvm/test/Transforms/AtomicExpand/AMDGPU/expand-atomic-rmw-fadd.ll
    M llvm/test/Verifier/fp-intrinsics.ll
    M llvm/unittests/IR/IRBuilderTest.cpp

  Log Message:
  -----------
  Rename fpe.* to fp.*


Compare: https://github.com/llvm/llvm-project/compare/868660b970ac...ac4271a32953

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