SuccessChanges

Summary

  1. [ARM] Extend narrow values to allow using truncating scatters (details)
  2. Remove unnecessary triple from test (details)
  3. [NFC] Remove redundant variable (details)
  4. [NFC][OpaquePtr] Avoid calling getPointerElementType() (details)
  5. Revert "[ARM] Extend narrow values to allow using truncating scatters" (details)
  6. [lldb] Make the ClassTemplateDecl merging logic in TypeSystemClang respect template parameters (details)
  7. [NewPM] Remove SpeculateAroundPHIs pass (details)
  8. [compiler-rt][hwasan] Add GetShadowOffset function (details)
  9. [AMDGPU] Fix lds superalign test. NFC. (details)
  10. [X86] avoid assert with varargs, soft float, and no-implicit-float (details)
  11. Support: Remove F_{None,Text,Append} compatibility synonyms, NFC (details)
  12. [libc++] [P0619] Add _LIBCPP_ABI_NO_BINDER_BASES and remove binder typedefs in C++20. (details)
  13. [PowerPC] Fix spilling of paired VSX registers (details)
  14. [PowerPC] Moving defineXLCompatMacros() definition (details)
  15. [libcxx][iwyu] ensures we IWYU as prep for modules (details)
  16. [NFC] Update renamed option in comments (details)
  17. Remove redundant test that was causing intermittent build bot failures. (details)
  18. Support lowering of index-cast on vector types. (details)
  19. [NFC] Fix "unused variable" warning (details)
  20. [asan] Remove Asan, Ubsan support of RTEMS and Myriad (details)
  21. [InstSimplify] Treat invariant group insts as bitcasts for load operands (details)
  22. [gn build] Port 6478ef61b1a4 (details)
  23. Adding the rest of the C11 papers to the status page. (details)
  24. [MCA] Adding the CustomBehaviour class to llvm-mca (details)
  25. Revert "[MCA] Adding the CustomBehaviour class to llvm-mca" (details)
Commit b9bd2936f9cf210deb611fe6398f3976caf86b34 by david.green
[ARM] Extend narrow values to allow using truncating scatters

As a minor adjustment to the existing lowering of offset scatters, this
extends any smaller-than-legal vectors into full vectors using a zext,
so that the truncating scatters can be used. Due to the way MVE
legalizes the vectors this should be cheap in most situations, and will
prevent the vector from being scalarized.

Differential Revision: https://reviews.llvm.org/D103704
The file was modifiedllvm/test/CodeGen/Thumb2/mve-scatter-ind8-unscaled.ll
The file was modifiedllvm/test/CodeGen/Thumb2/mve-scatter-ptrs.ll
The file was modifiedllvm/lib/Target/ARM/MVEGatherScatterLowering.cpp
The file was modifiedllvm/test/CodeGen/Thumb2/mve-scatter-ind32-unscaled.ll
Commit e32a92c6fe8e6dd8ca08b44be12eda6d88c2eaed by rnk
Remove unnecessary triple from test

PR27098(https://bugs.llvm.org/show_bug.cgi?id=27098) has been fixed so
the avoidance seems unnecessary.

Differential Revision: https://reviews.llvm.org/D68891
The file was modifiedclang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3.cpp
Commit 25b2126b9e9c28e48ce4e6e40af624767e5fb146 by aeubanks
[NFC] Remove redundant variable

Differential Revision: https://reviews.llvm.org/D103706
The file was modifiedllvm/lib/Target/PowerPC/PPCLoopInstrFormPrep.cpp
Commit be5d454f3f07607a7d9326078f5c47f2e1f3a8ee by aeubanks
[NFC][OpaquePtr] Avoid calling getPointerElementType()

Pointee types are going away soon.

For this, we mostly just care about store/load types, which are already
available without the pointee types. The other intrinsics always use
i8*.

Reviewed By: dblaikie

Differential Revision: https://reviews.llvm.org/D103719
The file was modifiedllvm/lib/Target/PowerPC/PPCLoopInstrFormPrep.cpp
Commit 93aa445e16f7e27df08f69204263b618ca0448a1 by david.green
Revert "[ARM] Extend narrow values to allow using truncating scatters"

This commit adds nodes that might not always be used, which the
expensive checks builder does not like. Reverting for now to think up a
better way of handling it.
The file was modifiedllvm/test/CodeGen/Thumb2/mve-scatter-ind8-unscaled.ll
The file was modifiedllvm/test/CodeGen/Thumb2/mve-scatter-ptrs.ll
The file was modifiedllvm/test/CodeGen/Thumb2/mve-scatter-ind32-unscaled.ll
The file was modifiedllvm/lib/Target/ARM/MVEGatherScatterLowering.cpp
Commit b8567559cf3872d0cc2a0ed24a171da8b1ff400f by Raphael Isemann
[lldb] Make the ClassTemplateDecl merging logic in TypeSystemClang respect template parameters

DWARF doesn't describe templates itself but only actual template instantiations.
Because of that LLDB has to infer the parameters of the class template
declarations from the actual instantiations when creating the internal Clang AST
from debug info

Because there is no dedicated DIE for the class template, LLDB also creates the
`ClassTemplateDecl` implicitly when parsing a template instantiation. To avoid
creating one ClassTemplateDecls for every instantiation,
`TypeSystemClang::CreateClassTemplateDecl` will check if there is already a
`ClassTemplateDecl` in the requested `DeclContext` and will reuse a found
fitting declaration.

The logic that checks if a found class template fits to an instantiation is
currently just comparing the name of the template. So right now we map
`template<typename T> struct S;` to an instantiation with the values `S<1, 2,
3>` even though they clearly don't belong together.

This causes crashes later on when for example the Itanium mangler's
`TemplateArgManglingInfo::needExactType` method tries to find fitting the class
template parameter that fits to an instantiation value. In the example above it
will try to find the parameter for the value `2` but will just trigger a
boundary check when retrieving the parameter with index 1 from the class
template.

There are two ways we can end up with an instantiation that doesn't fit to a
class template with the same name:

1. We have two TUs with two templates that have the same name and internal
   linkage.
2. A forward declared template instantiation is emitted by GCC and Clang
   without an empty list of parameter values.

This patch makes the check for whether a class template declaration can be
reused more sophisticated by also comparing whether the parameter values can fit
to the found class template. If we can't find a fitting class template we
justcreate a second class template with the fitting parameters.

Fixes rdar://76592821

Reviewed By: kastiglione

Differential Revision: https://reviews.llvm.org/D100662
The file was addedlldb/test/API/lang/cpp/incompatible-class-templates/TestCppIncompatibleClassTemplates.py
The file was addedlldb/test/API/lang/cpp/forward-declared-template-specialization/Makefile
The file was addedlldb/test/API/lang/cpp/incompatible-class-templates/main.cpp
The file was modifiedlldb/unittests/Symbol/TestTypeSystemClang.cpp
The file was addedlldb/test/API/lang/cpp/forward-declared-template-specialization/main.cpp
The file was addedlldb/test/API/lang/cpp/incompatible-class-templates/Makefile
The file was modifiedlldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
The file was modifiedlldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h
The file was addedlldb/test/API/lang/cpp/forward-declared-template-specialization/TestCppForwardDeclaredTemplateSpecialization.py
The file was addedlldb/test/API/lang/cpp/incompatible-class-templates/other.cpp
Commit e52364532afb2748c324f360bc1cc12605d314f3 by lebedev.ri
[NewPM] Remove SpeculateAroundPHIs pass

Addition of this pass has been botched.
There is no particular reason why it had to be sold as an inseparable part
of new-pm transition. It was added when old-pm was still the default,
and very *very* few users were actually tracking new-pm,
so it's effects weren't measured.

Which means, some of the turnoil of the new-pm transition
are actually likely regressions due to this pass.

Likewise, there has been a number of post-commit feedback
(post new-pm switch), namely
* https://reviews.llvm.org/D37467#2787157 (regresses HW-loops)
* https://reviews.llvm.org/D37467#2787259 (should not be in middle-end, should run after LSR, not before)
* https://reviews.llvm.org/D95789 (an attempt to fix bad loop backedge metadata)
and in the half year past, the pass authors (google) still haven't found time to respond to any of that.

Hereby it is proposed to backout the pass from the pipeline,
until someone who cares about it can address the issues reported,
and properly start the process of adding a new pass into the pipeline,
with proper performance evaluation.

Furthermore, neither google nor facebook reports any perf changes
from this change, so i'm dropping the pass completely.
It can always be re-reverted should/if anyone want to pick it up again.

Reviewed By: aeubanks

Differential Revision: https://reviews.llvm.org/D104099
The file was removedllvm/test/Transforms/SpeculateAroundPHIs/pr42991.ll
The file was modifiedllvm/lib/Transforms/Scalar/CMakeLists.txt
The file was modifiedllvm/test/Transforms/PhaseOrdering/loop-rotation-vs-common-code-hoisting.ll
The file was modifiedllvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
The file was modifiedllvm/test/Other/new-pm-thinlto-defaults.ll
The file was removedllvm/test/Transforms/SpeculateAroundPHIs/basic-x86.ll
The file was modifiedllvm/lib/Passes/PassBuilder.cpp
The file was modifiedclang/test/CodeGen/thinlto-distributed-newpm.ll
The file was modifiedllvm/utils/gn/secondary/llvm/lib/Transforms/Scalar/BUILD.gn
The file was removedllvm/test/Transforms/SpeculateAroundPHIs/convergent.ll
The file was modifiedllvm/test/Other/new-pm-defaults.ll
The file was modifiedllvm/test/Transforms/LoopUnroll/AArch64/runtime-unroll-generic.ll
The file was removedllvm/include/llvm/Transforms/Scalar/SpeculateAroundPHIs.h
The file was modifiedllvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
The file was modifiedllvm/test/Transforms/PhaseOrdering/AArch64/hoisting-sinking-required-for-vectorization.ll
The file was modifiedllvm/lib/Passes/PassRegistry.def
The file was removedllvm/lib/Transforms/Scalar/SpeculateAroundPHIs.cpp
Commit fc006b3e5dc3cb33e3dd55955f05664f187e8240 by leonardchan
[compiler-rt][hwasan] Add GetShadowOffset function

Similar to SHADOW_OFFSET on asan, we can use this for hwasan so platforms that
use a constant value for the start of shadow memory can just use the constant
rather than access a global.

Differential Revision: https://reviews.llvm.org/D104275
The file was modifiedcompiler-rt/lib/hwasan/hwasan_allocator.h
The file was modifiedcompiler-rt/lib/hwasan/hwasan_mapping.h
Commit a11880468e556d20ad9b0d43a1ff43daf62d49b2 by Stanislav.Mekhanoshin
[AMDGPU] Fix lds superalign test. NFC.
The file was modifiedllvm/test/CodeGen/AMDGPU/lower-kernel-lds-super-align.ll
Commit 3bc899b4de74d395b03d3969d700aac71f89bc12 by llvm
[X86] avoid assert with varargs, soft float, and no-implicit-float

Fixes:
- PR36507 Floating point varargs are not handled correctly with
   -mno-implicit-float
- PR48528 __builtin_va_start assumes it can pass SSE registers
   when using -Xclang -msoft-float -Xclang -no-implicit-float

On x86_64, floating-point parameters are normally passed in XMM
registers. For va_start, we spill those to memory so va_arg can
find them. There is an interaction here with -msoft-float and
-no-implicit-float:

When -msoft-float is in effect, instead of passing floating-point
parameters in XMM registers, they are passed in general-purpose
registers.

When -no-implicit-float is in effect, it "disables implicit
floating-point instructions" (per the LangRef). The intended
effect is to not have the compiler generate floating-point code
unless explicit floating-point operations are present in the
source code, but what exactly counts as an explicit floating-point
operation is not specified. The existing behavior of LLVM here has
led to some surprises and PRs.

This change modifies the behavior as follows:

  | soft | no-implicit | old behavior    | new behavior    |
  |  no  |   no        | spill XMM regs  | spill XMM regs  |
  | yes  |   no        | don't spill XMM | don't spill XMM |
  |  no  |  yes        | don't spill XMM | spill XMM regs  |
  | yes  |  yes        | assert          | don't spill XMM |

In particular, this avoids the assert that happens when
-msoft-float and -no-implicit-float are both in effect. This
seems like a perfectly reasonable combination: If we don't want
to rely on hardware floating-point support, we want to both
avoid using float registers to pass parameters and avoid having
the compiler generate floating-point code that wasn't in the
original program. Instead of crashing the compiler, the new
behavior is to not synthesize floating-point code in this
case. This fixes PR48528.

The other interesting case is when -no-implicit-float is in
effect, but -msoft-float is not. In that case, any floating-point
parameters that are present will be in XMM registers, and so we
have to spill them to correctly handle those. This fixes
PR36507. The spill is conditional on %al indicating that
parameters are present in XMM registers, so no floating-point
code will be executed unless the function is called with
floating-point parameters.

Reviewed By: rnk

Differential Revision: https://reviews.llvm.org/D104001
The file was modifiedllvm/lib/Target/X86/X86ISelLowering.cpp
The file was addedllvm/test/CodeGen/X86/varargs-softfloat.ll
Commit 3302af9d4c39642bebe64dd60a3aa162fefc44b2 by Duncan P. N. Exon Smith
Support: Remove F_{None,Text,Append} compatibility synonyms, NFC

Remove the compatibility spellings of `OF_{None,Text,Append}` that
were left behind by 1f67a3cba9b09636c56e2109d8a35ae96dc15782.

No functionality change here, just an API cleanup.

Differential Revision: https://reviews.llvm.org/D101506
The file was modifiedllvm/include/llvm/Support/FileSystem.h
Commit dc066888bd98c0500ca7b590317dc91ccce0fd38 by arthur.j.odwyer
[libc++] [P0619] Add _LIBCPP_ABI_NO_BINDER_BASES and remove binder typedefs in C++20.

Differential Revision: https://reviews.llvm.org/D103753
The file was modifiedlibcxx/docs/UsingLibcxx.rst
The file was modifiedlibcxx/test/std/utilities/function.objects/comparisons/equal_to.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/negators/unary_negate.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp
The file was modifiedlibcxx/test/libcxx/utilities/function.objects/refwrap/unary.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/arithmetic.operations/plus.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/logical.operations/logical_not.pass.cpp
The file was modifiedlibcxx/test/libcxx/utilities/function.objects/refwrap/binary.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/bitwise.operations/bit_or.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/arithmetic.operations/divides.pass.cpp
The file was modifiedlibcxx/include/__functional_base
The file was modifiedlibcxx/include/map
The file was modifiedlibcxx/test/std/utilities/function.objects/comparisons/greater_equal.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/logical.operations/logical_and.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/logical.operations/logical_or.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/arithmetic.operations/modulus.pass.cpp
The file was modifiedlibcxx/include/__memory/unique_ptr.h
The file was addedlibcxx/test/libcxx/depr/depr.func.adaptor.typedefs/typedefs.depr_in_cxx17.verify.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/comparisons/greater.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/arithmetic.operations/minus.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/unord.hash/pointer.pass.cpp
The file was modifiedlibcxx/include/utility
The file was modifiedlibcxx/docs/Cxx2aStatus.rst
The file was modifiedlibcxx/test/std/utilities/function.objects/unord.hash/floating.pass.cpp
The file was modifiedlibcxx/include/__config
The file was modifiedlibcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/negators/not2.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/negators/not1.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/comparisons/less.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/bitwise.operations/bit_and.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/bitwise.operations/bit_not.pass.cpp
The file was modifiedlibcxx/include/__memory/shared_ptr.h
The file was modifiedlibcxx/include/functional
The file was modifiedlibcxx/test/std/utilities/function.objects/negators/binary_negate.pass.cpp
The file was modifiedlibcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless/owner_less.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/comparisons/not_equal_to.pass.cpp
The file was modifiedlibcxx/include/optional
The file was modifiedlibcxx/test/std/utilities/function.objects/comparisons/less_equal.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/arithmetic.operations/negate.pass.cpp
The file was modifiedlibcxx/test/std/utilities/function.objects/unord.hash/integral.pass.cpp
Commit 821a8f680eec356be5894559bcea3f718e8bedd4 by nemanja.i.ibm
[PowerPC] Fix spilling of paired VSX registers

We have added STXVP/LXVP for spilling and restoring the registers
but we neglected to add FI elimination code for these. The result
is that we end up producing impossible MachineInstr's that have
register operands in place of immediates.
The file was addedllvm/test/CodeGen/PowerPC/spill-vec-pair.ll
The file was modifiedllvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
The file was modifiedllvm/test/CodeGen/PowerPC/mma-acc-spill.ll
The file was modifiedllvm/test/CodeGen/PowerPC/mma-intrinsics.ll
Commit 994bb937f020a014c7039151169649a7076ca9b1 by albionapc
[PowerPC] Moving defineXLCompatMacros() definition

Moving the definition of the defineXLCompatMacros function from
the header file clang/lib/Basic/Targets/PPC.h to the source file
clang/lib/Basic/Targets/PPC.cpp.

Differential revision: https://reviews.llvm.org/D104125
The file was modifiedclang/lib/Basic/Targets/PPC.cpp
The file was modifiedclang/lib/Basic/Targets/PPC.h
Commit 332da1c283564489c874737d3a9f2b103c15755c by cjdb
[libcxx][iwyu] ensures we IWYU as prep for modules

This has been broken out of D104170 since it should be merged whether or
not we go ahead with the module map changes.

Differential Revision: https://reviews.llvm.org/D104175
The file was modifiedlibcxx/include/__iterator/advance.h
The file was modifiedlibcxx/include/__iterator/prev.h
The file was modifiedlibcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong.pass.cpp
The file was modifiedlibcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp
The file was modifiedlibcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock.pass.cpp
The file was modifiedlibcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong_explicit.pass.cpp
The file was modifiedlibcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp
The file was modifiedlibcxx/include/__ranges/data.h
The file was modifiedlibcxx/test/std/utilities/format/format.formatter/format.parse.ctx/end.pass.cpp
The file was modifiedlibcxx/test/std/utilities/format/format.formatter/format.parse.ctx/next_arg_id.pass.cpp
The file was modifiedlibcxx/include/__ranges/view_interface.h
The file was modifiedlibcxx/include/__memory/pointer_safety.h
The file was modifiedlibcxx/test/std/utilities/format/format.formatter/format.parse.ctx/types.compile.pass.cpp
The file was modifiedlibcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_store_explicit.pass.cpp
The file was modifiedlibcxx/include/__memory/pointer_traits.h
The file was modifiedlibcxx/include/__ranges/empty.h
The file was modifiedlibcxx/test/std/utilities/format/format.formatter/format.parse.ctx/begin.pass.cpp
The file was modifiedlibcxx/include/__iterator/next.h
The file was modifiedlibcxx/test/std/utilities/format/format.formatter/format.parse.ctx/check_arg_id.pass.cpp
The file was modifiedlibcxx/include/__ranges/concepts.h
The file was modifiedlibcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp
The file was modifiedlibcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_weak_explicit.pass.cpp
The file was modifiedlibcxx/test/std/utilities/format/format.formatter/format.parse.ctx/ctor.pass.cpp
The file was modifiedlibcxx/include/__memory/allocator_traits.h
The file was modifiedlibcxx/include/__ranges/access.h
The file was modifiedlibcxx/include/__memory/allocation_guard.h
The file was modifiedlibcxx/include/__memory/auto_ptr.h
The file was modifiedlibcxx/test/std/utilities/format/format.formatter/format.parse.ctx/advance_to.pass.cpp
The file was modifiedlibcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_load_explicit.pass.cpp
The file was modifiedlibcxx/include/__ranges/size.h
The file was modifiedlibcxx/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp
The file was modifiedlibcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_exchange_explicit.pass.cpp
Commit 9ddb625890518d8ee079da896c9d28f21154a6d1 by Jinsong Ji
[NFC] Update renamed option in comments

c98ebda325c996b3a12f4fded0368734dc0fe28a Rename fp-op fusion option (yet
again) for compatibility with GCC option.

The comment in the header should be updated too to avoid confusion.
The file was modifiedllvm/include/llvm/Target/TargetOptions.h
Commit efebe76e93d50562a0d834e39f096eac24aa3c0c by douglas.yung
Remove redundant test that was causing intermittent build bot failures.

Patch by Fred Grim!

Reviewed By: MyDeveloperDay

Differential Revision: https://reviews.llvm.org/D104295
The file was removedclang/test/Format/struct-array-initializer.cpp
Commit dd1992efd3f1ebbaddc77edafcf17b967cafc1d9 by jpienaar
Support lowering of index-cast on vector types.

The index cast operation accepts vector types. Implement its lowering in this patch.

Reviewed By: ftynse

Differential Revision: https://reviews.llvm.org/D104280
The file was modifiedmlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
The file was modifiedmlir/test/Conversion/StandardToLLVM/convert-to-llvmir.mlir
The file was modifiedmlir/include/mlir/Dialect/StandardOps/IR/Ops.td
Commit a99f6d307119e3f6cee7c2f7ad731a95d320063c by Vitaly Buka
[NFC] Fix "unused variable" warning
The file was modifiedllvm/include/llvm/Support/GenericDomTreeConstruction.h
Commit 6478ef61b1a4dd86f520b199e0fd6762e8306353 by Vitaly Buka
[asan] Remove Asan, Ubsan support of RTEMS and Myriad

Differential Revision: https://reviews.llvm.org/D104279
The file was modifiedcompiler-rt/lib/sanitizer_common/sanitizer_errno.h
The file was modifiedcompiler-rt/lib/asan/asan_interceptors.cpp
The file was removedcompiler-rt/lib/asan/asan_rtems.cpp
The file was modifiedcompiler-rt/lib/asan/asan_flags.cpp
The file was modifiedcompiler-rt/lib/asan/asan_internal.h
The file was modifiedcompiler-rt/lib/asan/asan_rtl.cpp
The file was modifiedcompiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h
The file was modifiedcompiler-rt/lib/asan/asan_malloc_linux.cpp
The file was modifiedcompiler-rt/lib/asan/CMakeLists.txt
The file was modifiedcompiler-rt/lib/asan/asan_shadow_setup.cpp
The file was removedcompiler-rt/lib/sanitizer_common/sanitizer_rtems.cpp
The file was removedcompiler-rt/lib/asan/asan_mapping_myriad.h
The file was modifiedcompiler-rt/lib/asan/asan_poisoning.cpp
The file was modifiedcompiler-rt/lib/asan/asan_poisoning.h
The file was modifiedcompiler-rt/lib/sanitizer_common/sanitizer_platform.h
The file was modifiedcompiler-rt/lib/asan/asan_thread.cpp
The file was modifiedcompiler-rt/lib/asan/asan_new_delete.cpp
The file was modifiedcompiler-rt/lib/asan/asan_mapping.h
The file was removedcompiler-rt/lib/sanitizer_common/sanitizer_symbolizer_rtems.h
The file was modifiedcompiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cpp
The file was modifiedcompiler-rt/lib/ubsan/ubsan_platform.h
The file was removedcompiler-rt/lib/asan/asan_malloc_local.h
The file was modifiedcompiler-rt/lib/interception/interception.h
The file was modifiedcompiler-rt/lib/sanitizer_common/sanitizer_common.cpp
The file was modifiedcompiler-rt/lib/sanitizer_common/sanitizer_symbolizer_markup.cpp
The file was modifiedllvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
The file was modifiedcompiler-rt/lib/asan/asan_errors.cpp
The file was removedllvm/test/Instrumentation/AddressSanitizer/basic-myriad.ll
The file was modifiedcompiler-rt/lib/sanitizer_common/CMakeLists.txt
The file was modifiedcompiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h
The file was modifiedcompiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp
The file was modifiedllvm/utils/gn/secondary/compiler-rt/lib/asan/BUILD.gn
The file was removedcompiler-rt/lib/sanitizer_common/sanitizer_rtems.h
The file was modifiedcompiler-rt/lib/asan/asan_interceptors.h
The file was modifiedcompiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp
The file was modifiedclang/lib/Driver/ToolChains/CommonArgs.cpp
The file was modifiedcompiler-rt/lib/asan/asan_flags.inc
The file was modifiedllvm/utils/gn/secondary/compiler-rt/lib/sanitizer_common/BUILD.gn
Commit 9aa1428174ae5d0515f49d50a483a5517f4df2f4 by aeubanks
[InstSimplify] Treat invariant group insts as bitcasts for load operands

We can look through invariant group intrinsics for the purposes of
simplifying the result of a load.

Since intrinsics can't be constants, but we also don't want to
completely rewrite load constant folding, we convert the load operand to
a constant. For GEPs and bitcasts we just treat them as constants. For
invariant group intrinsics, we treat them as a bitcast.

Relanding with a check for self-referential values.

Reviewed By: lebedev.ri

Differential Revision: https://reviews.llvm.org/D101103
The file was modifiedllvm/lib/Analysis/InstructionSimplify.cpp
The file was modifiedllvm/test/Transforms/InstSimplify/invariant.group-load.ll
The file was addedllvm/test/Transforms/InstSimplify/invalid-load-operand-infinite-loop.ll
Commit e8bfeebeeb23cb32f1a8036e2c95d8d4b1c27c76 by llvmgnsyncbot
[gn build] Port 6478ef61b1a4
The file was modifiedllvm/utils/gn/secondary/compiler-rt/lib/asan/BUILD.gn
Commit dc3bd11e5b6be7a5430b32dc8155e2435a542918 by aaron
Adding the rest of the C11 papers to the status page.
The file was modifiedclang/www/c_status.html
Commit f7a23ecece524564a0c3e09787142cc6061027bb by andrea.dibiagio
[MCA] Adding the CustomBehaviour class to llvm-mca

Some instructions are not defined well enough within the target’s scheduling
model for llvm-mca to be able to properly simulate its behaviour. The ideal
solution to this situation is to modify the scheduling model, but that’s not
always a viable strategy. Maybe other parts of the backend depend on that
instruction being modelled the way that it is. Or maybe the instruction is quite
complex and it’s difficult to fully capture its behaviour with tablegen. The
CustomBehaviour class (which I will refer to as CB frequently) is designed to
provide intuitive scaffolding for developers to implement the correct modelling
for these instructions.

Implementation details:

llvm-mca does its best to extract relevant register, resource, and memory
information from every MCInst when lowering them to an mca::Instruction. It then
uses this information to detect dependencies and simulate stalls within the
pipeline. For some instructions, the information that gets captured within the
mca::Instruction is not enough for mca to simulate them properly. In these
cases, there are two main possibilities:

1. The instruction has a dependency that isn’t detected by mca.
2. mca is incorrectly enforcing a dependency that shouldn’t exist.

For the rest of this discussion, I will be focusing on (1), but I have put some
thought into (2) and I may revisit it in the future.

So we have an instruction that has dependencies that aren’t picked up by mca.
The basic idea for both pipelines in mca is that when an instruction wants to be
dispatched, we first check for register hazards and then we check for resource
hazards. This is where CB is injected. If no register or resource hazards have
been detected, we make a call to CustomBehaviour::checkCustomHazard() to give
the target specific CB the chance to detect and enforce any custom dependencies.

The return value for checkCustomHazaard() is an unsigned int representing the
(minimum) number of cycles that the instruction needs to stall for. It’s fine to
underestimate this value because when StallCycles gets down to 0, we’ll end up
checking for all the hazards again before the instruction is actually
dispatched. However, it’s important not to overestimate the value and the more
accurate your estimate is, the more efficient mca’s execution can be.

In general, for checkCustomHazard() to be able to detect these custom
dependencies, it needs information about the current instruction and also all of
the instructions that are still executing within the pipeline. The mca pipeline
uses mca::Instruction rather than MCInst and the current information encoded
within each mca::Instruction isn’t sufficient for my use cases. I had to add a
few extra attributes to the mca::Instruction class and have them get set by the
MCInst during instruction building. For example, the current mca::Instruction
doesn’t know its opcode, and it also doesn’t know anything about its immediate
operands (both of which I had to add to the class).

With information about the current instruction, a list of all currently
executing instructions, and some target specific objects (MCSubtargetInfo and
MCInstrInfo which the base CB class has references to), developers should be
able to detect and enforce most custom dependencies within checkCustomHazard. If
you need more information than is present in the mca::Instruction, feel free to
add attributes to that class and have them set during the lowering sequence from
MCInst.

Fortunately, in the in-order pipeline, it’s very convenient for us to pass these
arguments to checkCustomHazard. The hazard checking is taken care of within
InOrderIssueStage::canExecute(). This function takes a const InstRef as a
parameter (representing the instruction that currently wants to be dispatched)
and the InOrderIssueStage class maintains a SmallVector<InstRef, 4> which holds
all of the currently executing instructions. For the out-of-order pipeline, it’s
a bit trickier to get the list of executing instructions and this is why I have
held off on implementing it myself. This is the main topic I will bring up when
I eventually make a post to discuss and ask for feedback.

CB is a base class where targets implement their own derived classes. If a
target specific CB does not exist (or we pass in the -disable-cb flag), the base
class is used. This base class trivially returns 0 from its checkCustomHazard()
implementation (meaning that the current instruction needs to stall for 0 cycles
aka no hazard is detected). For this reason, targets or users who choose not to
use CB shouldn’t see any negative impacts to accuracy or performance (in
comparison to pre-patch llvm-mca).

Differential Revision: https://reviews.llvm.org/D104149
The file was modifiedllvm/include/llvm/MCA/Stages/InOrderIssueStage.h
The file was modifiedllvm/docs/CommandGuide/llvm-mca.rst
The file was modifiedllvm/lib/MCA/InstrBuilder.cpp
The file was modifiedllvm/tools/llvm-mca/Views/DispatchStatistics.cpp
The file was modifiedllvm/lib/MCA/Context.cpp
The file was addedllvm/lib/MCA/CustomBehaviour.cpp
The file was modifiedllvm/include/llvm/MCA/Context.h
The file was modifiedllvm/lib/MCA/CMakeLists.txt
The file was modifiedllvm/lib/MCA/Stages/InOrderIssueStage.cpp
The file was addedllvm/tools/llvm-mca/lib/AMDGPU/CMakeLists.txt
The file was addedllvm/tools/llvm-mca/lib/AMDGPU/AMDGPUCustomBehaviour.h
The file was addedllvm/tools/llvm-mca/lib/CMakeLists.txt
The file was modifiedllvm/include/llvm/MCA/HWEventListener.h
The file was modifiedllvm/include/llvm/MCA/Instruction.h
The file was modifiedllvm/tools/llvm-mca/llvm-mca.cpp
The file was addedllvm/tools/llvm-mca/lib/AMDGPU/AMDGPUCustomBehaviour.cpp
The file was addedllvm/include/llvm/MCA/CustomBehaviour.h
The file was modifiedllvm/tools/llvm-mca/CMakeLists.txt
Commit a04f01bab2da4650cc90a351fd734e626e6797af by andrea.dibiagio
Revert "[MCA] Adding the CustomBehaviour class to llvm-mca"

This reverts commit f7a23ecece524564a0c3e09787142cc6061027bb.

It appears to breaks buildbots that don't build the AMDGPU backend.
The file was modifiedllvm/include/llvm/MCA/HWEventListener.h
The file was modifiedllvm/include/llvm/MCA/Stages/InOrderIssueStage.h
The file was modifiedllvm/lib/MCA/Stages/InOrderIssueStage.cpp
The file was removedllvm/tools/llvm-mca/lib/AMDGPU/AMDGPUCustomBehaviour.cpp
The file was modifiedllvm/tools/llvm-mca/Views/DispatchStatistics.cpp
The file was modifiedllvm/lib/MCA/Context.cpp
The file was modifiedllvm/lib/MCA/InstrBuilder.cpp
The file was modifiedllvm/tools/llvm-mca/llvm-mca.cpp
The file was modifiedllvm/tools/llvm-mca/CMakeLists.txt
The file was removedllvm/tools/llvm-mca/lib/CMakeLists.txt
The file was modifiedllvm/docs/CommandGuide/llvm-mca.rst
The file was removedllvm/tools/llvm-mca/lib/AMDGPU/CMakeLists.txt
The file was removedllvm/include/llvm/MCA/CustomBehaviour.h
The file was modifiedllvm/include/llvm/MCA/Context.h
The file was removedllvm/tools/llvm-mca/lib/AMDGPU/AMDGPUCustomBehaviour.h
The file was modifiedllvm/include/llvm/MCA/Instruction.h
The file was modifiedllvm/lib/MCA/CMakeLists.txt
The file was removedllvm/lib/MCA/CustomBehaviour.cpp