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

Serge Pavlov via All-commits all-commits at lists.llvm.org
Sun Dec 1 21:36:10 PST 2024


  Branch: refs/heads/users/spavloff/floating-point-operator-bundles
  Home:   https://github.com/llvm/llvm-project
  Commit: a4b8a547130b843c60c7af73160b4e949f4861e8
      https://github.com/llvm/llvm-project/commit/a4b8a547130b843c60c7af73160b4e949f4861e8
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2024-12-02 (Mon, 02 Dec 2024)

  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: 2b2af2bde63a38759bc714aff9cf306f72d09fb7
      https://github.com/llvm/llvm-project/commit/2b2af2bde63a38759bc714aff9cf306f72d09fb7
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2024-12-02 (Mon, 02 Dec 2024)

  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: da73eadf9bda8f8d34d28feea9d910b769e63f67
      https://github.com/llvm/llvm-project/commit/da73eadf9bda8f8d34d28feea9d910b769e63f67
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2024-12-02 (Mon, 02 Dec 2024)

  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: 868660b970ac1a6af74e418e75097e05759350e2
      https://github.com/llvm/llvm-project/commit/868660b970ac1a6af74e418e75097e05759350e2
  Author: Serge Pavlov <sepavloff at gmail.com>
  Date:   2024-12-02 (Mon, 02 Dec 2024)

  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.


Compare: https://github.com/llvm/llvm-project/compare/a4b8a547130b%5E...868660b970ac

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