SuccessChanges

Summary

  1. [libc++] Add a utility script to run the Docker image used by builders (details)
  2. [flang][f18] Add missing line in help text (nfc) (details)
  3. [libcxx] [test] Fix a test error with condvars with trivial destruction (details)
  4. [AMDGPU] Make OMod explicit for V_CVT_{U,I}* (details)
  5. [gn build] fix llvm-jitlink tests on linux after ef2389235c5dec0 (details)
  6. [flang] Detect circularly defined interfaces of procedures (details)
  7. [SystemZ]  Assign the full space for promoted and split outgoing args. (details)
  8. [ARM] Use 0, not ZR during ISel for CSINC/INV/NEG (details)
  9. Fix `debuginfo-tests/llvm-prettyprinters` build after MLIR API change in e6260ad043d8 (NFC) (details)
  10. [AArch64] add select tests with partial vector undefs; NFC (details)
  11. [SDAG] allow partial undef vector constants with select->logic folds (details)
Commit c5659dd4cc84ec1e46b038c19c62ebb6051bd3c4 by Louis Dionne
[libc++] Add a utility script to run the Docker image used by builders

Several contributors have been asking me how to reproduce the CI
environment locally. This is the last step towards making that work
out-of-the-box. Basically, just run `libcxx/utils/ci/run-buildbot-container`
and you're good to go.

Differential Revision: https://reviews.llvm.org/D97782
The file was modifiedlibcxx/utils/ci/Dockerfile (diff)
The file was addedlibcxx/utils/ci/run-buildbot-container
Commit bf4dbc49843ca24e90e37f127ceef988286cd1c6 by andrzej.warzynski
[flang][f18] Add missing line in help text (nfc)
The file was modifiedflang/tools/f18/f18.cpp (diff)
Commit 4adb4bca05750a1c85dd931a72a6fece030fa01e by martin
[libcxx] [test] Fix a test error with condvars with trivial destruction

If the destructor is trivial (_LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION,
the constructor always is), the compiler warns about the
std::condition_variable being unused.

Add a cast to void to silence the warning about the object being unused.

Differential Revision: https://reviews.llvm.org/D97540
The file was modifiedlibcxx/test/std/thread/thread.condition/thread.condition.condvar/default.pass.cpp (diff)
Commit 5531f24cc2cc41178d82b2737f2dea8c43acee64 by Joseph.Nash
[AMDGPU] Make OMod explicit for V_CVT_{U,I}*

Make OMod explicit instead of implied by HasModifiers in the
operand list. Requires explicitly setting HasOMod=1 for
irregular OMod usage in instruction V_CVT_{U,I}*

Reviewed By: foad

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

Change-Id: I230e1476f529e816eec60e242531f23a99e3839f
The file was modifiedllvm/lib/Target/AMDGPU/SIInstrInfo.td (diff)
The file was modifiedllvm/test/MC/AMDGPU/gfx10_asm_vop1.s (diff)
The file was modifiedllvm/test/MC/AMDGPU/vop3-errs.s (diff)
The file was modifiedllvm/lib/Target/AMDGPU/VOP1Instructions.td (diff)
The file was modifiedllvm/test/MC/AMDGPU/gfx9_asm_vop3.s (diff)
Commit 253a6606fac7ee9f2401c9356350e1340c6d80ac by thakis
[gn build] fix llvm-jitlink tests on linux after ef2389235c5dec0
The file was modifiedllvm/utils/gn/secondary/llvm/tools/llvm-jitlink/BUILD.gn (diff)
Commit 95540f9dbf0369b3c3ed2fa44371a99440cf79a9 by psteinfeld
[flang] Detect circularly defined interfaces of procedures

It's possible to define a procedure whose interface depends on a procedure
which has an interface that depends on the original procedure.  Such a circular
definition was causing the compiler to fall into an infinite loop when
resolving the name of the second procedure.  It's also possible to create
circular dependency chains of more than two procedures.

I fixed this by adding the function HasCycle() to the class DeclarationVisitor
and calling it from DeclareProcEntity() to detect procedures with such
circularly defined interfaces.  I marked the associated symbols of such
procedures by calling SetError() on them.  When processing subsequent
procedures, I called HasError() before attempting to analyze their interfaces.
Unfortunately, this did not work.

With help from Tim, we determined that the SymbolSet used to track the
erroneous symbols was instantiated using a "<" operator which was defined using
the location of the name of the procedure.  But the location of the procedure
name was being changed by a call to ReplaceName() between the times that the
calls to SetError() and HasError() were made.  This caused HasError() to
incorrectly report that a symbol was not in the set of erroneous symbols.

I fixed this by changing SymbolSet to be an unordered set that uses the
contents of the name of the symbol as the basis for its hash function.  This
works because the contents of the name of the symbol is preserved by
ReplaceName() even though its location changes.

I also fixed the error message used when reporting recursively defined
dummy procedure arguments by removing extra apostrophes and sorting the
list of symbols.

I also added tests that will crash the compiler without this change.

Note that the "<" operator is used in other contexts, for example, in the map
of characterized procedures, maps of items in equivalence sets, maps of
structure constructor values, ...  All of these situations happen after name
resolution has been completed and all calls to ReplaceName() have already
happened and thus are not subject to the problem I ran into when ReplaceName()
was called when processing procedure entities.

Note also that the implementation of the "<" operator uses the relative
location in the cooked character stream as the basis of its implementation.
This is potentially problematic when symbols from diffent compilation units
(for example symbols originating in .mod files) are put into the same map since
their names will appear in two different source streams which may not be
allocated in the same relative positions in memory.  But I was unable to create
a test that caused a problem.  Using a direct comparison of the content of the
name of the symbol in the "<" operator has problems.  Symbols in enclosing or
parallel scopes can have the same name.  Also using the location of the symbol
in the cooked character stream has the advantage that it preserves the the
order of the symbols in a structure constructor constant, which makes matching
the values with the symbols relatively easy.

This patch supersedes D97749.

Differential Revision: https://reviews.llvm.org/D97774
The file was modifiedflang/test/Semantics/resolve102.f90 (diff)
The file was modifiedflang/lib/Evaluate/characteristics.cpp (diff)
The file was modifiedflang/include/flang/Semantics/semantics.h (diff)
The file was modifiedflang/include/flang/Semantics/symbol.h (diff)
The file was modifiedflang/lib/Semantics/resolve-names.cpp (diff)
Commit 52bbbf4d4459239e0f461bc302ada89e2c5d07fc by paulsson
[SystemZ]  Assign the full space for promoted and split outgoing args.

When a large "irregular" (e.g. i96) integer call argument is converted to
indirect, 64-bit parts are stored to the stack. The full stack space
(e.g. i128) was not allocated prior to this patch, but rather just the exact
space of the original type. This caused neighboring values on the stack to be
overwritten.

Thanks to Josh Stone for reporting this.

Review: Ulrich Weigand
Fixes https://bugs.llvm.org/show_bug.cgi?id=49322
Differential Revision: https://reviews.llvm.org/D97514
The file was addedllvm/test/CodeGen/SystemZ/args-11.ll
The file was modifiedllvm/lib/Target/SystemZ/SystemZISelLowering.cpp (diff)
Commit 438c98515c23a111992d332e316824d0a17f2ea4 by david.green
[ARM] Use 0, not ZR during ISel for CSINC/INV/NEG

Instead of converting the 0 into a ZR reg during lowering, do that with
tablegen by matching the zero immediate. This when combined with other
optimizations is more likely to use ZR and helps keep the DAG more
easily optimizable. It should not otherwise effect code generation.
The file was modifiedllvm/lib/Target/ARM/ARMInstrThumb2.td (diff)
The file was modifiedllvm/lib/Target/ARM/ARMISelLowering.cpp (diff)
Commit 068aa12f96afdb0aa31e2986fa23684f41197cd3 by joker.eph
Fix `debuginfo-tests/llvm-prettyprinters` build after MLIR API change in e6260ad043d8 (NFC)
The file was modifieddebuginfo-tests/llvm-prettyprinters/gdb/mlir-support.cpp (diff)
Commit 1b5ab13541319f1ec6fbda10d81048fba35c3abd by spatel
[AArch64] add select tests with partial vector undefs; NFC
The file was modifiedllvm/test/CodeGen/AArch64/select-with-and-or.ll (diff)
Commit 415c67ba4ce58b5ab29fa17f033b944e420e62bc by spatel
[SDAG] allow partial undef vector constants with select->logic folds

This is an enhancement suggested in the original review/commit:
D97730 / 7fce3322a283
The file was modifiedllvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (diff)
The file was modifiedllvm/test/CodeGen/AArch64/select-with-and-or.ll (diff)
The file was modifiedllvm/include/llvm/CodeGen/SelectionDAGNodes.h (diff)
The file was modifiedllvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (diff)