SuccessChanges

Summary

  1. [clang] Selectively ena/disa-ble format-insufficient-args warning (details)
  2. [scudo][standalone] Remove unused atomic_compare_exchange_weak (details)
  3. [mlir][Affine][VectorOps] Fix super vectorizer utility (D85869) (details)
  4. Attempt to clear some msan errors in the libcxx atomic tests. (details)
  5. [clang][driver][AIX] Set compiler-rt as default rtlib (details)
  6. BPF: move AbstractMemberAccess and PreserveDIType passes to EP_EarlyAsPossible (details)
  7. BuildVectorType with a dependent (array) type is crashing the compiler  - Fix for PR-47542 (details)
  8. [RegisterCoalescer] Pass Undefs to extendToIndices() (details)
  9. [clang] Update warning-wall.c test (details)
  10. Ensure that we don't compute linkage for an anonymous class too early if (details)
  11. [gn build] Port 54d9f743c8b (details)
Commit 1e86d637eb4f88e03fcd4b9fd78192487dc2a302 by Jan Korous
[clang] Selectively ena/disa-ble format-insufficient-args warning

Differential Revision: https://reviews.llvm.org/D87176
The file was modifiedclang/include/clang/Basic/DiagnosticSemaKinds.td
The file was modifiedclang/include/clang/Basic/DiagnosticGroups.td
The file was modifiedclang/test/Misc/warning-wall.c
The file was addedclang/test/Sema/warn-printf-insufficient-data-args.c
Commit f668a84b58dcd816656236d7ba7e820dce52e7f8 by kostyak
[scudo][standalone] Remove unused atomic_compare_exchange_weak

`atomic_compare_exchange_weak` is unused in Scudo, and its associated
test is actually wrong since the weak variant is allowed to fail
spuriously (thanks Roland).

This lead to flakes such as:
```
[ RUN      ] ScudoAtomicTest.AtomicCompareExchangeTest
../../zircon/third_party/scudo/src/tests/atomic_test.cpp:98: Failure: Expected atomic_compare_exchange_weak(reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed) is true.
    Expected: true
    Which is: 01
    Actual  : atomic_compare_exchange_weak(reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed)
    Which is: 00
../../zircon/third_party/scudo/src/tests/atomic_test.cpp:100: Failure: Expected atomic_compare_exchange_weak( reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed) is false.
    Expected: false
    Which is: 00
    Actual  : atomic_compare_exchange_weak( reinterpret_cast<T *>(&V), &OldVal, NewVal, memory_order_relaxed)
    Which is: 01
../../zircon/third_party/scudo/src/tests/atomic_test.cpp:101: Failure: Expected OldVal == NewVal.
    Expected: NewVal
    Which is: 24
    Actual  : OldVal
    Which is: 42
[  FAILED  ] ScudoAtomicTest.AtomicCompareExchangeTest (0 ms)
[----------] 2 tests from ScudoAtomicTest (1 ms total)
```

So I am removing this, if someone ever needs the weak variant, feel
free to add it back with a test that is not as terrible. This test was
initially ported from sanitizer_common, but their weak version calls
the strong version, so it works for them.

Differential Revision: https://reviews.llvm.org/D88443
The file was modifiedcompiler-rt/lib/scudo/standalone/atomic_helpers.h
The file was modifiedcompiler-rt/lib/scudo/standalone/tests/atomic_test.cpp
Commit 93936da90479c4ac444f989ba060eedec4133154 by diego.caballero
[mlir][Affine][VectorOps] Fix super vectorizer utility (D85869)

Adding missing code that should have been part of "D85869: Utility to
vectorize loop nest using strategy."

Reviewed By: nicolasvasilache

Differential Revision: https://reviews.llvm.org/D88346
The file was modifiedmlir/test/Dialect/Affine/SuperVectorize/vector_utils.mlir
The file was modifiedmlir/include/mlir/Dialect/Affine/Utils.h
The file was modifiedmlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp
The file was modifiedmlir/test/lib/Dialect/Affine/TestVectorizationUtils.cpp
Commit 665dc4012b65589618cc1b22f44f1e59e021145c by ogiroux
Attempt to clear some msan errors in the libcxx atomic tests.
The file was modifiedlibcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/atomic_helpers.h
Commit ee80615b5c1c5b15c90a92d6954007b3a82825b0 by daltenty
[clang][driver][AIX] Set compiler-rt as default rtlib

Reviewed By: hubert.reinterpretcast

Differential Revision: https://reviews.llvm.org/D88182
The file was modifiedclang/lib/Driver/ToolChain.cpp
The file was modifiedclang/lib/Driver/ToolChains/AIX.h
The file was modifiedclang/lib/Driver/ToolChains/AIX.cpp
The file was addedclang/test/Driver/aix-rtlib.c
The file was modifiedclang/test/Driver/aix-ld.c
Commit 54d9f743c8b0f501288119123cf1828bf7ade69c by yhs
BPF: move AbstractMemberAccess and PreserveDIType passes to EP_EarlyAsPossible

Move abstractMemberAccess and PreserveDIType passes as early as
possible, right after clang code generation.

Currently, compiler may transform the above code
  p1 = llvm.bpf.builtin.preserve.struct.access(base, 0, 0);
  p2 = llvm.bpf.builtin.preserve.struct.access(p1, 1, 2);
  a = llvm.bpf.builtin.preserve_field_info(p2, EXIST);
  if (a) {
    p1 = llvm.bpf.builtin.preserve.struct.access(base, 0, 0);
    p2 = llvm.bpf.builtin.preserve.struct.access(p1, 1, 2);
    bpf_probe_read(buf, buf_size, p2);
  }
to
  p1 = llvm.bpf.builtin.preserve.struct.access(base, 0, 0);
  p2 = llvm.bpf.builtin.preserve.struct.access(p1, 1, 2);
  a = llvm.bpf.builtin.preserve_field_info(p2, EXIST);
  if (a) {
    bpf_probe_read(buf, buf_size, p2);
  }
and eventually assembly code looks like
  reloc_exist = 1;
  reloc_member_offset = 10; //calculate member offset from base
  p2 = base + reloc_member_offset;
  if (reloc_exist) {
    bpf_probe_read(bpf, buf_size, p2);
  }
if during libbpf relocation resolution, reloc_exist is actually
resolved to 0 (not exist), reloc_member_offset relocation cannot
be resolved and will be patched with illegal instruction.
This will cause verifier failure.

This patch attempts to address this issue by do chaining
analysis and replace chains with special globals right
after clang code gen. This will remove the cse possibility
described in the above. The IR typically looks like
  %6 = load @llvm.sk_buff:0:50$0:0:0:2:0
  %7 = bitcast %struct.sk_buff* %2 to i8*
  %8 = getelementptr i8, i8* %7, %6
for a particular address computation relocation.

But this transformation has another consequence, code sinking
may happen like below:
  PHI = <possibly different @preserve_*_access_globals>
  %7 = bitcast %struct.sk_buff* %2 to i8*
  %8 = getelementptr i8, i8* %7, %6

For such cases, we will not able to generate relocations since
multiple relocations are merged into one.

This patch introduced a passthrough builtin
to prevent such optimization. Looks like inline assembly has more
impact for optimizaiton, e.g., inlining. Using passthrough has
less impact on optimizations.

A new IR pass is introduced at the beginning of target-dependent
IR optimization, which does:
  - report fatal error if any reloc global in PHI nodes
  - remove all bpf passthrough builtin functions

Changes for existing CORE tests:
  - for clang tests, add "-Xclang -disable-llvm-passes" flags to
    avoid builtin->reloc_global transformation so the test is still
    able to check correctness for clang generated IR.
  - for llvm CodeGen/BPF tests, add "opt -O2 <ir_file> | llvm-dis" command
    before "llc" command since "opt" is needed to call newly-placed
    builtin->reloc_global transformation. Add target triple in the IR
    file since "opt" requires it.
  - Since target triple is added in IR file, if a test may produce
    different results for different endianness, two tests will be
    created, one for bpfeb and another for bpfel, e.g., some tests
    for relocation of lshift/rshift of bitfields.
  - field-reloc-bitfield-1.ll has different relocations compared to
    old codes. This is because for the structure in the test,
    new code returns struct layout alignment 4 while old code
    is 8. Align 8 is more precise and permits double load. With align 4,
    the new mechanism uses 4-byte load, so generating different
    relocations.
  - test intrinsic-transforms.ll is removed. This is used to test
    cse on intrinsics so we do not lose metadata. Now metadata is attached
    to global and not instruction, it won't get lost with cse.

Differential Revision: https://reviews.llvm.org/D87153
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-struct-anonymous.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-global-3.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-rshift-1.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-existence-3.ll
The file was addedllvm/test/CodeGen/BPF/CORE/field-reloc-bitfield-1-bpfeb.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-cast-union-2.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-1.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-signedness-3.ll
The file was modifiedllvm/lib/Target/BPF/CMakeLists.txt
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-struct-array.ll
The file was modifiedclang/test/CodeGen/bpf-attr-preserve-access-index-1.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-lshift-2.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-cast-struct-3.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-end-ret.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-typedef-array.ll
The file was modifiedllvm/lib/Target/BPF/BPFCORE.h
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-union.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-typeinfo-type-size-1.ll
The file was modifiedclang/test/CodeGen/bpf-attr-preserve-access-index-2.c
The file was modifiedclang/test/CodeGen/bpf-attr-preserve-access-index-3.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-cast-union-1.ll
The file was modifiedclang/test/CodeGen/bpf-attr-preserve-access-index-8.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-array.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-typedef-union-2.ll
The file was modifiedclang/test/CodeGen/builtins-bpf-preserve-field-info-1.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-typedef-struct-2.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-typedef.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-struct.ll
The file was modifiedclang/test/CodeGen/bpf-attr-preserve-access-index-4.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-array-2.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-rshift-3.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-cast-array-1.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-middle-chain.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-global-2.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-4.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-ignore.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-multi-array-2.ll
The file was modifiedllvm/lib/Target/BPF/BPFTargetMachine.cpp
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-existence-1.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-lshift-1.ll
The file was modifiedllvm/test/CodeGen/BPF/BTF/builtin-btf-type-id.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-signedness-1.ll
The file was modifiedclang/test/CodeGen/bpf-attr-preserve-access-index-7.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-2.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-existence-2.ll
The file was addedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-lshift-1-bpfeb.ll
The file was addedllvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2-bpfeb.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-pointer-2.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-basic.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-union.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-typedef-struct.ll
The file was modifiedllvm/include/llvm/IR/IntrinsicsBPF.td
The file was modifiedllvm/test/CodeGen/BPF/CORE/field-reloc-bitfield-1.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/no-narrow-load.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-cast-struct-2.ll
The file was modifiedclang/test/CodeGen/builtins-bpf-preserve-field-info-3.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-multilevel.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2.ll
The file was modifiedclang/test/CodeGen/builtin-preserve-access-index-typedef.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-signedness-2.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-typedef-union.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-cast-array-2.ll
The file was addedllvm/test/CodeGen/BPF/CORE/field-reloc-bitfield-2-bpfeb.ll
The file was removedllvm/test/CodeGen/BPF/CORE/intrinsic-transforms.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-cast-struct-1.ll
The file was addedllvm/lib/Target/BPF/BPFCheckAndAdjustIR.cpp
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-end-load.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-typeinfo-type-exist.ll
The file was modifiedllvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp
The file was modifiedllvm/test/CodeGen/BPF/CORE/field-reloc-alu32.ll
The file was modifiedclang/test/CodeGen/bpf-attr-preserve-access-index-6.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/store-addr.ll
The file was modifiedclang/test/CodeGen/builtins-bpf-preserve-field-info-2.c
The file was modifiedllvm/lib/Target/BPF/BPFPreserveDIType.cpp
The file was modifiedllvm/test/CodeGen/BPF/CORE/field-reloc-bitfield-2.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-multi-array-1.ll
The file was modifiedclang/test/CodeGen/bpf-preserve-access-index.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-rshift-2.ll
The file was modifiedclang/test/CodeGen/bpf-attr-preserve-access-index-5.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-1.ll
The file was modifiedllvm/lib/Target/BPF/BPF.h
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-typeinfo-type-size-2.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-global-1.ll
The file was modifiedclang/test/CodeGen/builtin-bpf-btf-type-id.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/no-elf-ama-symbol.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-fieldinfo-byte-size-3.ll
The file was modifiedclang/test/CodeGen/builtins-bpf-preserve-field-info-4.c
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-typeinfo-enum-value.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-access-str.ll
The file was modifiedllvm/test/CodeGen/BPF/CORE/offset-reloc-pointer-1.ll
Commit efd04721c9a2a856dd47e47a08c42d21efd5dd2b by rnk
BuildVectorType with a dependent (array) type is crashing the compiler  - Fix for PR-47542

Reviewed By: rnk

Differential Revision: https://reviews.llvm.org/D88150
The file was modifiedclang/test/SemaCXX/attr-gnu.cpp
The file was modifiedclang/lib/Sema/SemaType.cpp
Commit 73805329baa0f5c463b70d16f18555365d3a020e by ruiling.song
[RegisterCoalescer] Pass Undefs to extendToIndices()

When extending the subranges, the reaching-def may be an undefs. When
extending such kind of subrange, it will try to search for the reaching
def first. If the reaching def is an undef and we did not provide 'Undefs',
The findReachingDefs() will fail with message:
"Use of $noreg does not have a corresponding definition on every path:
LLVM ERROR: Use not jointly dominated by defs."
So we computeSubRangeUndefs() and pass the result to extendToIndices().

Reviewed By: arsenm

Differential Revision: https://reviews.llvm.org/D87744
The file was modifiedllvm/lib/CodeGen/RegisterCoalescer.cpp
The file was addedllvm/test/CodeGen/AMDGPU/coalescer-removepartial-extend-undef-subrange.mir
Commit 6fd8c69049a8fc119278097be6d0bdc3e781f1ba by Jan Korous
[clang] Update warning-wall.c test

Follow-up to 1e86d637eb4f:
[clang] Selectively ena/disa-ble format-insufficient-args warning
The file was modifiedclang/test/Misc/warning-wall.c
Commit c375635d05f6f10c7c95ecc74a0569213d176d8e by richard
Ensure that we don't compute linkage for an anonymous class too early if
it has a member whose name is the same as a builtin.

Fixes a regression from the introduction of BuiltinAttr.
The file was modifiedclang/lib/Sema/SemaDecl.cpp
The file was modifiedclang/test/SemaCXX/anonymous-struct.cpp
Commit 727c4223d714eb220ed65a9244c1cc499d0cd461 by llvmgnsyncbot
[gn build] Port 54d9f743c8b
The file was modifiedllvm/utils/gn/secondary/llvm/lib/Target/BPF/BUILD.gn