[all-commits] [llvm/llvm-project] 1e661e: [MLIR] Temporary workaround for calling the LLD EL...

Alexandre Ganea via All-commits all-commits at lists.llvm.org
Tue Feb 8 16:12:30 PST 2022

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 1e661e583d8406d5fce5269e803b287987332831
  Author: Alexandre Ganea <alexandre.ganea at legionlabs.com>
  Date:   2022-02-08 (Tue, 08 Feb 2022)

  Changed paths:
    M lld/Common/CommonLinkerContext.cpp
    M lld/include/lld/Common/Driver.h
    M mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp

  Log Message:
  [MLIR] Temporary workaround for calling the LLD ELF driver as-a-lib

This fixes the situation described in https://github.com/llvm/llvm-project/issues/53475 with a repro exposed by https://github.com/ROCmSoftwarePlatform/D108850-lld-bug-reproduction

This is purposely just a workaround to unblock users. This could be transplanted to the release/14.x branch if need be. A proper fix will later be provided in https://reviews.llvm.org/D119049.

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

  Commit: bb8be26a7ec36d32c605a5a15b92b5614453391f
  Author: Alexandre Ganea <alexandre.ganea at legionlabs.com>
  Date:   2022-02-08 (Tue, 08 Feb 2022)

  Changed paths:
    A lld/test/ELF/amdgpu-duplicate-sym.s
    M lld/tools/lld/lld.cpp

  Log Message:
  [LLD] Fix issue in HIP due to unspecified order of evaluation of the function object

This fixes the issue raised in https://reviews.llvm.org/D108850#3303452

Before C++17, the function object is evaluated in a unspecified order. In the following example: https://godbolt.org/z/8ao4vdsr7 the function object is either evaluated before or after the arguments, depending on the compiler. With MSVC and /std:c++14 the function object is evaluated after the arguments; with clang and gcc, it is evaluated before. With C++17, the function object is guaranteed to be evaluated before the arguments, see: https://riptutorial.com/cplusplus/example/19369/evaluation-order-of-function-arguments

In our case, the issue was that the `args` conversion to `ArrayRef` was evaluated before the lambda call `link`, which internally was calling `parseFlavor()`, which in turned modified `args`. We ended with an `ArrayRef` argument that reflected the previous contents of `args`.

Add coverage for `-flavor` which we didn't have before.

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

Compare: https://github.com/llvm/llvm-project/compare/9b81d2fae8c0...bb8be26a7ec3

More information about the All-commits mailing list