platform/upstream/llvm.git
2 years ago[ELF] Rename BaseCommand to SectionCommand. NFC
Fangrui Song [Fri, 26 Nov 2021 04:24:23 +0000 (20:24 -0800)]
[ELF] Rename BaseCommand to SectionCommand. NFC

BaseCommand was picked when PHDRS/INSERT/etc were not implemented. Rename it to
SectionCommand to match `sectionCommands` and make it clear that the commands
are used in SECTIONS (except a special case for SymbolAssignment).

Also, improve naming of some BaseCommand variables (base -> cmd).

2 years ago[NFC] Fix typo in 95875d246acb
Jessica Clarke [Fri, 26 Nov 2021 03:58:36 +0000 (03:58 +0000)]
[NFC] Fix typo in 95875d246acb

2 years ago[mlir][linalg][bufferize][NFC] Pass BufferizationState to PostAnalysisStep
Matthias Springer [Fri, 26 Nov 2021 02:41:07 +0000 (11:41 +0900)]
[mlir][linalg][bufferize][NFC] Pass BufferizationState to PostAnalysisStep

Pass BufferizationStep instead of BufferizationAliasInfo. Note: BufferizationState contains BufferizationAliasInfo.

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

2 years ago[mlir][linalg][bufferize] Compose dialect-specific bufferization state
Matthias Springer [Fri, 26 Nov 2021 02:35:10 +0000 (11:35 +0900)]
[mlir][linalg][bufferize] Compose dialect-specific bufferization state

Use composition instead of inheritance for storing dialect-specific bufferization state. This is in preparation of adding "tensor dialect"-specific bufferization state.

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

2 years ago[mlir][linalg][bufferize][NFC] Allow returning arbitrary memrefs
Matthias Springer [Fri, 26 Nov 2021 02:25:46 +0000 (11:25 +0900)]
[mlir][linalg][bufferize][NFC] Allow returning arbitrary memrefs

If `allowReturnMemref` is set to true, arbitrary memrefs may be returned from FuncOps. Also remove allocation hoisting code, which is only partly implemented at the moment.

The purpose of this commit is to untangle `bufferize` from `aliasInfo`. (Even with this change, they are not fully untangled yet.)

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

2 years ago[mlir][linalg][bufferize][NFC] Extract func boundary bufferization
Matthias Springer [Fri, 26 Nov 2021 01:10:08 +0000 (10:10 +0900)]
[mlir][linalg][bufferize][NFC] Extract func boundary bufferization

Bufferization of function boundaries is extracted from ComprehensiveBufferize into a separate file. This will become its own build target in the future.

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

2 years ago[ELF] Make ExprValue smaller. NFC'
Fangrui Song [Fri, 26 Nov 2021 00:55:06 +0000 (16:55 -0800)]
[ELF] Make ExprValue smaller. NFC'

2 years ago[ELF] Rename OutputSection::sectionCommands to commands. NFC
Fangrui Song [Fri, 26 Nov 2021 00:47:07 +0000 (16:47 -0800)]
[ELF] Rename OutputSection::sectionCommands to commands. NFC

This partially reverts r315409: the description applies to LinkerScript, but not
to OutputSection.

The name "sectionCommands" is used in both LinkerScript::sectionCommands and
OutputSection::sectionCommands, which may lead to confusion.
"commands" in OutputSection has no ambiguity because there are no other types
of commands.

2 years ago[mlir][linalg][bufferize][NFC] Move Affine interface impl to new build target
Matthias Springer [Fri, 26 Nov 2021 00:21:04 +0000 (09:21 +0900)]
[mlir][linalg][bufferize][NFC] Move Affine interface impl to new build target

This makes ComprehensiveBufferize entirely independent of the Affine dialect.

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

2 years agoFix link to the other docs from the Bufferization dialect
Mehdi Amini [Fri, 26 Nov 2021 00:13:32 +0000 (00:13 +0000)]
Fix link to the other docs from the Bufferization dialect

2 years ago[ELF] Remove redundant part.dynSymTab creation. NFC
Fangrui Song [Thu, 25 Nov 2021 22:42:22 +0000 (14:42 -0800)]
[ELF] Remove redundant part.dynSymTab creation. NFC

2 years ago[ELF] Simplify GnuHashSection::write. NFC
Fangrui Song [Thu, 25 Nov 2021 22:23:25 +0000 (14:23 -0800)]
[ELF] Simplify GnuHashSection::write. NFC

2 years ago[ELF] Simplify DynamicSection content computation. NFC
Fangrui Song [Thu, 25 Nov 2021 22:12:34 +0000 (14:12 -0800)]
[ELF] Simplify DynamicSection content computation. NFC

The new code computes the content twice, but avoides the tricky
std::function<uint64_t()>. Removed 13KiB code in a Release build.

2 years ago[DebugInfo][InstrRef] Add extra indirection for NRVO tests
Jeremy Morse [Thu, 25 Nov 2021 21:41:55 +0000 (21:41 +0000)]
[DebugInfo][InstrRef] Add extra indirection for NRVO tests

In some scenarios, usually involving NRVO, we can issue indirect DBG_VALUEs
after SelectionDAG, even in instruction referencing mode (if the variable
is an argument). If the corresponding argument value is spilt to the stack,
then we have:
 * Indirection from it being on the stack,
 * Indirection from it being a dbg.declare or a dbg.addr.

However InstrRefBasedLDV only emits one level of indirection. This patch
adds the second, by adding an extra DW_OP_deref if necessary. The two
tests modified fail otherwise -- they feature some NRVO, and require two
levels of indirection to be correct.

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

2 years ago[clang][NFC] Inclusive terms: rename AccessDeclContextSanity to AccessDeclContextCheck
Zarko Todorovski [Thu, 25 Nov 2021 20:52:28 +0000 (15:52 -0500)]
[clang][NFC] Inclusive terms: rename AccessDeclContextSanity to AccessDeclContextCheck

Rename function to more inclusive name.

Reviewed By: quinnp

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

2 years ago[NFC] Inclusive language: rename master flag to main flag
Quinn Pham [Wed, 17 Nov 2021 15:39:43 +0000 (09:39 -0600)]
[NFC] Inclusive language: rename master flag to main flag

[NFC] As part of using inclusive language within the llvm project, this patch
renames master flag to main flag in these comments.

Reviewed By: ZarkoCA

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

2 years ago[NFC][flang] Inclusive language: remove instances of master
Quinn Pham [Mon, 15 Nov 2021 15:52:20 +0000 (09:52 -0600)]
[NFC][flang] Inclusive language: remove instances of master

[NFC] As part of using inclusive language within the llvm project, this patch:
- replaces master with main in C++style.md to match the renaming of the master
branch,
- removes master from `FortranIR.md` where it is superfluous,
- renames a logical variable in `pre-fir-tree04.f90` containing master.

Reviewed By: ZarkoCA

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

2 years ago[DebugInfo][InstrRef] Avoid some quadratic behaviour in LiveDebugVariables
Jeremy Morse [Thu, 25 Nov 2021 19:27:08 +0000 (19:27 +0000)]
[DebugInfo][InstrRef] Avoid some quadratic behaviour in LiveDebugVariables

This is a performance patch -- LiveDebugVariables can behave quadratically
if a lot of debug instructions are inserted back into the same place, and
we have to repeatedly step-over hte ones we've already inserted.

To get around it, whenever we insert a debug instruction at a slot index,
check whether there are more debug instructions to insert at this point,
and insert them too. That avoids the repeated lookup and stepping through.
It relies on the container for unlinked debug instructions being recorded
in-order, which is how LiveDebugVariables currently does it.

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

2 years ago[libunwind] Fix testing with sanitizers enabled
Louis Dionne [Mon, 22 Nov 2021 19:51:09 +0000 (14:51 -0500)]
[libunwind] Fix testing with sanitizers enabled

When testing with sanitizers enabled, we need to link against a plethora
of system libraries. Using `-nodefaultlibs` like we used to breaks this,
and we would have to add all these system libraries manually, which is
not portable and error prone. Instead, stop using `-nodefaultlibs` so
that we get the libraries added by default by the compiler.

The only caveat with this approach is that we are now relying on the
fact that `-L <path-to-local-libunwind>` will cause the just built
libunwind to be selected before the system implementation (either of
libunwind or libgcc_s.so), which is somewhat fragile.

This patch also turns the 32 bit multilib build into a soft failure
since we are in the process of removing it anyway, see D114473 for
details. This patch is incompatible with the 32 bit multilib build
because Ubuntu does not provide a proper libstdc++ for 32 bits, and
that is required when running with sanitizers enabled.

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

2 years ago[ThreadPool] Use auto again for future with ENABLE_THREADS=Off.
Florian Hahn [Thu, 25 Nov 2021 20:18:33 +0000 (20:18 +0000)]
[ThreadPool] Use auto again for future with ENABLE_THREADS=Off.

This fixes a build failure with LLVM_ENABLE_THREADS=Off.

2 years ago[mlir][Vector] Support 0-D vectors in `VectorPrintOpConversion`
Michal Terepeta [Thu, 25 Nov 2021 20:10:02 +0000 (20:10 +0000)]
[mlir][Vector] Support 0-D vectors in `VectorPrintOpConversion`

Reviewed By: nicolasvasilache

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

2 years ago[AIX] Disable unsupported offloading gpu tests
Jake Egan [Thu, 25 Nov 2021 20:10:42 +0000 (15:10 -0500)]
[AIX] Disable unsupported offloading gpu tests

GPUs are not supported on AIX, so this patch sets these tests as unsupported.

Reviewed By: stevewan

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

2 years agoRecommit [ThreadPool] Support returning futures with results.
Florian Hahn [Thu, 25 Nov 2021 20:07:53 +0000 (20:07 +0000)]
Recommit [ThreadPool] Support returning futures with results.

This reverts commit 71a7c55f0f021b04b9a7303d0cd391b9161cf303.

The revert broken building llvm-reduce and it is not clear it fixes an
issue with LLVM_ENABLE_THREADS=OFF.

See discussion in https://reviews.llvm.org/D114183 for more details.

2 years ago[clang-format] Extend AllowShortBlocksOnASingleLine for else blocks
Jesses Gott [Thu, 25 Nov 2021 19:42:40 +0000 (19:42 +0000)]
[clang-format] Extend AllowShortBlocksOnASingleLine for else blocks

Extend AllowShortBlocksOnASingleLine for else blocks. See https://bugs.llvm.org/show_bug.cgi?id=49722

Reviewed By: HazardyKnusperkeks, owenpan, MyDeveloperDay

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

2 years ago[NFC][llvm] Inclusive language: replace master in llvm docs
Quinn Pham [Thu, 18 Nov 2021 20:13:03 +0000 (14:13 -0600)]
[NFC][llvm] Inclusive language: replace master in llvm docs

[NFC] As part of using inclusive language within the llvm project, this patch
removes instances of master in these files.

Reviewed By: ZarkoCA

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

2 years ago[clang-format] NFC update LLVM overall clang-formatted status
mydeveloperday [Thu, 25 Nov 2021 19:34:37 +0000 (19:34 +0000)]
[clang-format] NFC update LLVM overall clang-formatted status

Whilst the % clang-formatted remains the same, the number
of files added to the LLVM project has risen by almost by 259.

- 190 of them have been added clang-format clean.
- 69 files have been added unformatted. (lit tests should be excluded from this number)

- 291 files have been added to the list of files that are clang-format clean
- 101 files have either become unclean or have been removed

As this updates the clang-formatted-files there are now
8139 files that are clean which we can be used as a regression test when making changes to clang-format.

```
clang-format -verbose -n -files ./clang/docs/tools/clang-formatted-files.txt
```

2 years ago[NFC][compiler-rt] Inclusive language: replace master/slave with primary/secondary
Quinn Pham [Fri, 19 Nov 2021 17:00:14 +0000 (11:00 -0600)]
[NFC][compiler-rt] Inclusive language: replace master/slave with primary/secondary

[NFC] As part of using inclusive language within the llvm project, this patch
replaces master and slave with primary and secondary respectively in
`sanitizer_mac.cpp`.

Reviewed By: ZarkoCA

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

2 years ago[MLIR] NFC. Rename MLIR CAPI ExecutionEngine target for consistency
Uday Bondhugula [Thu, 25 Nov 2021 15:08:32 +0000 (20:38 +0530)]
[MLIR] NFC. Rename MLIR CAPI ExecutionEngine target for consistency

Rename MLIR CAPI ExecutionEngine target for consistency:
MLIRCEXECUTIONENGINE -> MLIRCAPIExecutionEngine in line with other
targets.

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

2 years ago[PowerPC] Prevent the optimizer from producing wide vector types in IR.
Amy Kwan [Thu, 25 Nov 2021 17:17:37 +0000 (11:17 -0600)]
[PowerPC] Prevent the optimizer from producing wide vector types in IR.

This patch prevents the optimizer from producing wide vectors in the IR,
specifically the MMA types (v256i1, v512i1). The idea is that on Power, we only
want to be producing these types only if the vector_pair and vector_quad types
are used specifically.

To prevent the optimizer from producing these types in the IR,
vectorCostAdjustmentFactor() is updated to return an instruction cost factor or
an invalid instruction cost if the current type is that of an MMA type. An
invalid instruction cost returned by this function signifies to other cost
computing functions to return the maximum instruction cost to inform the
optimizer that producing these types within the IR is expensive, and should not
be produced in the first place.

This issue was first seen in the test case included within this patch.

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

2 years ago[NFC][llvm] Inclusive language: replace master with main in dbg-call-site-spilled...
Quinn Pham [Wed, 17 Nov 2021 16:21:05 +0000 (10:21 -0600)]
[NFC][llvm] Inclusive language: replace master with main in dbg-call-site-spilled-arg.mir

[NFC] As part of using inclusive language within the llvm project, this patch
replaces master with main in `dbg-call-site-spilled-arg.mir`.

Reviewed By: ZarkoCA

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

2 years ago[LLDB] Provide target specific directories to libclang
Pavel Kosov [Thu, 25 Nov 2021 18:27:02 +0000 (21:27 +0300)]
[LLDB] Provide target specific directories to libclang

On Linux some C++ and C include files reside in target specific directories, like /usr/include/x86_64-linux-gnu.
Patch adds them to libclang, so LLDB jitter has more chances to compile expression.

OS Laboratory. Huawei Russian Research Institute. Saint-Petersburg

Reviewed By: teemperor

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

2 years ago[libc++] Fix ssize test that made an assumption about ptrdiff_t being 'long'
Louis Dionne [Wed, 24 Nov 2021 21:41:03 +0000 (16:41 -0500)]
[libc++] Fix ssize test that made an assumption about ptrdiff_t being 'long'

On some platforms like armv7m, the size() method of containers returns
unsigned long, while ptrdiff_t is just int. Hence, std::ssize_t ends up
being long, which is not the same as ptrdiff_t. This is usually not an
issue because std::ptrdiff_t is long, so everything works out, but it
breaks on some more exotic architectures.

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

2 years ago[CMake] Add new cmake option to control adding comments in GenDAGISel
Lei Huang [Wed, 17 Nov 2021 21:43:35 +0000 (15:43 -0600)]
[CMake] Add new cmake option to control adding comments in GenDAGISel

Add new cmake option `LLVM_OMIT_DAGISEL_COMMENTS` to control adding
of comments in GenDAGISel for none debug builds

Ref: https://reviews.llvm.org/D78884

Reviewed By: nemanjai, MaskRay, #powerpc

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

2 years agotsan: new runtime (v3)
Dmitry Vyukov [Tue, 27 Apr 2021 11:55:41 +0000 (13:55 +0200)]
tsan: new runtime (v3)

This change switches tsan to the new runtime which features:
 - 2x smaller shadow memory (2x of app memory)
 - faster fully vectorized race detection
 - small fixed-size vector clocks (512b)
 - fast vectorized vector clock operations
 - unlimited number of alive threads/goroutimes

Depends on D112602.

Reviewed By: melver

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

2 years agoRevert "[ThreadPool] Support returning futures with results."
Daniel McIntosh [Thu, 25 Nov 2021 17:18:38 +0000 (12:18 -0500)]
Revert "[ThreadPool] Support returning futures with results."

This reverts commit 6149e57dc1313d32c85524f8009a1249e0b8f4d1.

The offending commit broke building with LLVM_ENABLE_THREADS=OFF.

2 years ago[NFC][clang-tools-extra] Inclusive language: replace master with main
Quinn Pham [Wed, 17 Nov 2021 16:48:25 +0000 (10:48 -0600)]
[NFC][clang-tools-extra] Inclusive language: replace master with main

[NFC] As part of using inclusive language within the llvm project, this patch
replaces master with main in `SubModule2.h`.

Reviewed By: sammccall

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

2 years ago[llvm] Use range-based for loops (NFC)
Kazu Hirata [Thu, 25 Nov 2021 16:55:16 +0000 (08:55 -0800)]
[llvm] Use range-based for loops (NFC)

2 years ago[libc++] Avoid overload resolution in path comparison operators
Joe Loser [Thu, 25 Nov 2021 03:48:40 +0000 (22:48 -0500)]
[libc++] Avoid overload resolution in path comparison operators

Rework `std::filesystem::path::operator==` and friends to avoid overload
resolution and atomic constraint caching issues shown from
https://reviews.llvm.org/D113161.

Always call `__compare(string_view)` from the comparison operators which avoids
overload resolution.

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

2 years ago[libc++] Fix constraints for string_view's iterator/sentinel constructor
Joe Loser [Wed, 24 Nov 2021 20:35:15 +0000 (15:35 -0500)]
[libc++] Fix constraints for string_view's iterator/sentinel constructor

The `string_view` constructor taking an iterator/sentinel uses concepts
instead of type traits like the Standard states. Using `same_as` instead
of `is_same_v` should be harmless. Prefer `std::is_same_v` instead which is
cheaper to compile. Replace `convertible_to` with `is_convertible_v` as
well.

This observation came up while working on
https://reviews.llvm.org/D113161

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

2 years agotsan: fix another potential deadlock in fork
Dmitry Vyukov [Thu, 25 Nov 2021 15:26:40 +0000 (16:26 +0100)]
tsan: fix another potential deadlock in fork

Linux/fork_deadlock.cpp currently hangs in debug mode in the following stack.
Disable memory access handling in OnUserAlloc/Free around fork.

1  0x000000000042c54b in __sanitizer::internal_sched_yield () at sanitizer_linux.cpp:452
2  0x000000000042da15 in __sanitizer::StaticSpinMutex::LockSlow (this=0x57ef02 <__sanitizer::internal_allocator_cache_mu>) at sanitizer_mutex.cpp:24
3  0x0000000000423927 in __sanitizer::StaticSpinMutex::Lock (this=0x57ef02 <__sanitizer::internal_allocator_cache_mu>) at sanitizer_mutex.h:32
4  0x000000000042354c in __sanitizer::GenericScopedLock<__sanitizer::StaticSpinMutex>::GenericScopedLock (this=this@entry=0x7ffcabfca0b8, mu=0x1) at sanitizer_mutex.h:367
5  0x0000000000423653 in __sanitizer::RawInternalAlloc (size=size@entry=72, cache=cache@entry=0x0, alignment=8, alignment@entry=0) at sanitizer_allocator.cpp:52
6  0x00000000004235e9 in __sanitizer::InternalAlloc (size=size@entry=72, cache=0x1, cache@entry=0x0, alignment=4, alignment@entry=0) at sanitizer_allocator.cpp:86
7  0x000000000043aa15 in __sanitizer::SymbolizedStack::New (addr=4802655) at sanitizer_symbolizer.cpp:45
8  0x000000000043b353 in __sanitizer::Symbolizer::SymbolizePC (this=0x7f578b77a028, addr=4802655) at sanitizer_symbolizer_libcdep.cpp:90
9  0x0000000000439dbe in __sanitizer::(anonymous namespace)::StackTraceTextPrinter::ProcessAddressFrames (this=this@entry=0x7ffcabfca208, pc=4802655) at sanitizer_stacktrace_libcdep.cpp:36
10 0x0000000000439c89 in __sanitizer::StackTrace::PrintTo (this=this@entry=0x7ffcabfca2a0, output=output@entry=0x7ffcabfca260) at sanitizer_stacktrace_libcdep.cpp:109
11 0x0000000000439fe0 in __sanitizer::StackTrace::Print (this=0x18) at sanitizer_stacktrace_libcdep.cpp:132
12 0x0000000000495359 in __sanitizer::PrintMutexPC (pc=4802656) at tsan_rtl.cpp:774
13 0x000000000042e0e4 in __sanitizer::InternalDeadlockDetector::Lock (this=0x7f578b1ca740, type=type@entry=2, pc=pc@entry=4371612) at sanitizer_mutex.cpp:177
14 0x000000000042df65 in __sanitizer::CheckedMutex::LockImpl (this=<optimized out>, pc=4) at sanitizer_mutex.cpp:218
15 0x000000000042bc95 in __sanitizer::CheckedMutex::Lock (this=0x600001000000) at sanitizer_mutex.h:127
16 __sanitizer::Mutex::Lock (this=0x600001000000) at sanitizer_mutex.h:165
17 0x000000000042b49c in __sanitizer::GenericScopedLock<__sanitizer::Mutex>::GenericScopedLock (this=this@entry=0x7ffcabfca370, mu=0x1) at sanitizer_mutex.h:367
18 0x000000000049504f in __tsan::TraceSwitch (thr=0x7f578b1ca980) at tsan_rtl.cpp:656
19 0x000000000049523e in __tsan_trace_switch () at tsan_rtl.cpp:683
20 0x0000000000499862 in __tsan::TraceAddEvent (thr=0x7f578b1ca980, fs=..., typ=__tsan::EventTypeMop, addr=4499472) at tsan_rtl.h:624
21 __tsan::MemoryAccessRange (thr=0x7f578b1ca980, pc=4499472, addr=135257110102784, size=size@entry=16, is_write=true) at tsan_rtl_access.cpp:563
22 0x000000000049853a in __tsan::MemoryRangeFreed (thr=thr@entry=0x7f578b1ca980, pc=pc@entry=4499472, addr=addr@entry=135257110102784, size=16) at tsan_rtl_access.cpp:487
23 0x000000000048f6bf in __tsan::OnUserFree (thr=thr@entry=0x7f578b1ca980, pc=pc@entry=4499472, p=p@entry=135257110102784, write=true) at tsan_mman.cpp:260
24 0x000000000048f61f in __tsan::user_free (thr=thr@entry=0x7f578b1ca980, pc=4499472, p=p@entry=0x7b0400004300, signal=true) at tsan_mman.cpp:213
25 0x000000000044a820 in __interceptor_free (p=0x7b0400004300) at tsan_interceptors_posix.cpp:708
26 0x00000000004ad599 in alloc_free_blocks () at fork_deadlock.cpp:25
27 __tsan_test_only_on_fork () at fork_deadlock.cpp:32
28 0x0000000000494870 in __tsan::ForkBefore (thr=0x7f578b1ca980, pc=pc@entry=4904437) at tsan_rtl.cpp:510
29 0x000000000046fcb4 in syscall_pre_fork (pc=1) at tsan_interceptors_posix.cpp:2577
30 0x000000000046fc9b in __sanitizer_syscall_pre_impl_fork () at sanitizer_common_syscalls.inc:3094
31 0x00000000004ad5f5 in myfork () at syscall.h:9
32 main () at fork_deadlock.cpp:46

Depends on D114595.

Reviewed By: melver

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

2 years agotsan: fix Java heap block begin in reports
Dmitry Vyukov [Thu, 25 Nov 2021 15:06:23 +0000 (16:06 +0100)]
tsan: fix Java heap block begin in reports

We currently use a wrong value for heap block
(only works for C++, but not for Java).
Use the correct value (we already computed it before, just forgot to use).

Depends on D114593.

Reviewed By: melver

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

2 years agotsan: add a benchmark for vector memory accesses
Dmitry Vyukov [Thu, 25 Nov 2021 14:42:56 +0000 (15:42 +0100)]
tsan: add a benchmark for vector memory accesses

Depends on D114592.

Reviewed By: melver

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

2 years agotsan: add a test for vector memory accesses
Dmitry Vyukov [Thu, 25 Nov 2021 14:41:15 +0000 (15:41 +0100)]
tsan: add a test for vector memory accesses

Add a basic test that checks races between vector/non-vector
read/write accesses of different sizes/offsets in different orders.
This gives coverage of __tsan_read/write16 callbacks.

Depends on D114591.

Reviewed By: melver

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

2 years agotsan: enable -msse4 when compiling tests
Dmitry Vyukov [Thu, 25 Nov 2021 14:38:58 +0000 (15:38 +0100)]
tsan: enable -msse4 when compiling tests

Vector SSE accesses make compiler emit __tsan_[unaligned_]read/write16 callbacks.
Make it possible to test these.

Reviewed By: melver

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

2 years ago[ARM] Convert fptoi.sat to fixed point multiply
David Green [Thu, 25 Nov 2021 15:43:45 +0000 (15:43 +0000)]
[ARM] Convert fptoi.sat to fixed point multiply

This is a very small addition to the existing MVE fixed point vcvt code
to also create them from FP_TO_SINT_SAT and FP_TO_UINT_SAT nodes, which
should be equally valid for native saturating converts under MVE.

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

2 years ago[llvm][ubsan] Inclusive language: replace use of blacklist HandleLLVMOptions.cmake...
Zarko Todorovski [Thu, 25 Nov 2021 13:18:08 +0000 (08:18 -0500)]
[llvm][ubsan] Inclusive language: replace use of blacklist HandleLLVMOptions.cmake but use old option name

Retry at https://reviews.llvm.org/D113689, this time with using the old option name
to support older versions of clang.

Reviewed By: bjope

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

2 years ago[DebugInfo][InstrRef] Track variable assignments in out-of-scope blocks
Jeremy Morse [Thu, 25 Nov 2021 14:46:34 +0000 (14:46 +0000)]
[DebugInfo][InstrRef] Track variable assignments in out-of-scope blocks

DBG_INSTR_REF's and  DBG_VALUE's can end up in blocks that aren't in the
lexical scope of their variable. It's arguable as to what we should do
about this, however VarLocBasedLDV permits such variable locations to be
propagated, so let's allow it in InstrRefBasedLDV.

It's necessary for the modified test to work.

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

2 years ago[ARM] Add fptosi.sat variants of the fixed point vcvt tests. NFC
David Green [Thu, 25 Nov 2021 14:41:20 +0000 (14:41 +0000)]
[ARM] Add fptosi.sat variants of the fixed point vcvt tests. NFC

2 years ago[clang][OpenMP][DebugInfo] Debug support for private variables inside an OpenMP task...
Alok Kumar Sharma [Wed, 24 Nov 2021 05:08:19 +0000 (10:38 +0530)]
[clang][OpenMP][DebugInfo] Debug support for private variables inside an OpenMP task construct

Currently variables appearing inside private/firstprivate/lastprivate
clause of openmp task construct are not visible inside lldb debugger.
This is because compiler does not generate debug info for it.

Please consider the testcase debug_private.c attached with patch.

```
   28   #pragma omp task shared(res) private(priv1, priv2) firstprivate(fpriv)
   29       {
   30         priv1 = n;
   31         priv2 = n + 2;
   32         printf("Task n=%d,priv1=%d,priv2=%d,fpriv=%d\n",n,priv1,priv2,fpriv);
   33
-> 34         res = priv1 + priv2 + fpriv + foo(n - 1);
   35       }
   36   #pragma omp taskwait
   37       return res;
(lldb) p priv1
error: <user expression 0>:1:1: use of undeclared identifier 'priv1'
priv1
^
(lldb) p priv2
error: <user expression 1>:1:1: use of undeclared identifier 'priv2'
priv2
^
(lldb) p fpriv
error: <user expression 2>:1:1: use of undeclared identifier 'fpriv'
fpriv
^
```

After the current patch, lldb is able to show the variables

```
(lldb) p priv1
(int) $0 = 10
(lldb) p priv2
(int) $1 = 12
(lldb) p fpriv
(int) $2 = 14
```

Reviewed By: djtodoro

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

2 years agoDon't store nullptrs in mlir::FuncOp::getAll*Attrs' result
Tres Popp [Mon, 22 Nov 2021 11:49:00 +0000 (12:49 +0100)]
Don't store nullptrs in mlir::FuncOp::getAll*Attrs' result

These methods for results and arguments would create an ArrayRef full
of nullptrs when there were no argument attributes. This is problematic
because this result could not be passed to the FuncOp::build creator
without causing a segfault. Now the list will have empty attributes.

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

2 years ago[PowerPC/ Regenerate fp128-bitcast-after-operation test checks
Simon Pilgrim [Thu, 25 Nov 2021 13:39:48 +0000 (13:39 +0000)]
[PowerPC/ Regenerate fp128-bitcast-after-operation test checks

2 years agoRevert "[SLP]Improve analysis/emission of vector operands for alternate nodes."
Alexey Bataev [Thu, 25 Nov 2021 13:17:30 +0000 (05:17 -0800)]
Revert "[SLP]Improve analysis/emission of vector operands for alternate nodes."

This reverts commit 496254cf802a21e1967b61dec48017b8ec831574 to fix
compiler crashes reported in D114101#3152982.

2 years ago[MLIR] [docs] Fix misguided examples in memref.subview operation.
seongwon bang [Thu, 25 Nov 2021 12:23:48 +0000 (21:23 +0900)]
[MLIR] [docs] Fix misguided examples in memref.subview operation.

The examples in `memref.subview` operation are misguided in that subview's strides operands mean "memref-rank number of strides that compose multiplicatively with the base memref strides in each dimension.".
So the below examples should be changed from `Strides: [64, 4, 1]` to `Strides: [1, 1, 1]`

Before changes
```
// Subview with constant offsets, sizes and strides.
%1 = memref.subview %0[0, 2, 0][4, 4, 4][64, 4, 1]
  : memref<8x16x4xf32, (d0, d1, d2) -> (d0 * 64 + d1 * 4 + d2)> to
    memref<4x4x4xf32, (d0, d1, d2) -> (d0 * 64 + d1 * 4 + d2 + 8)>
```

After changes
```
// Subview with constant offsets, sizes and strides.
%1 = memref.subview %0[0, 2, 0][4, 4, 4][1, 1, 1]
  : memref<8x16x4xf32, (d0, d1, d2) -> (d0 * 64 + d1 * 4 + d2)> to
    memref<4x4x4xf32, (d0, d1, d2) -> (d0 * 64 + d1 * 4 + d2 + 8)>
```

Also I fixed some syntax issues in docs related with memref layout map and added detailed explanation in subview rank reducing case.

Reviewed By: herhut

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

2 years ago[NFC][llvm] Inclusive language: reword uses of sanity test and check
Zarko Todorovski [Thu, 25 Nov 2021 02:56:49 +0000 (21:56 -0500)]
[NFC][llvm] Inclusive language: reword uses of sanity test and check

Part of continuing work to use more inclusive language. Reworded uses
of sanity check and sanity test in llvm/test/

2 years ago[clangd] Move IncludeCleaner tracer to the actual computation
Kirill Bobyrev [Thu, 25 Nov 2021 12:19:01 +0000 (13:19 +0100)]
[clangd] Move IncludeCleaner tracer to the actual computation

This way we won't get results with 0 ms for all the users with disabled
IncludeCleaner.

2 years ago[clang-format] [C++20] [Module] clang-format couldn't recognize partitions
mydeveloperday [Thu, 25 Nov 2021 11:50:34 +0000 (11:50 +0000)]
[clang-format] [C++20] [Module] clang-format couldn't recognize partitions

https://bugs.llvm.org/show_bug.cgi?id=52517

clang-format is butchering modules, this could easily become a barrier to entry for modules given clang-formats wide spread use.

Prevent the following from adding spaces around the  `:`  (cf was considering the ':' as an InheritanceColon)

Reviewed By: HazardyKnusperkeks, owenpan, ChuanqiXu

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

2 years ago[lldb/gdb-remote] Ignore spurious ACK packets
Pavel Labath [Wed, 24 Nov 2021 10:20:44 +0000 (11:20 +0100)]
[lldb/gdb-remote] Ignore spurious ACK packets

Although I cannot find any mention of this in the specification, both
gdb and lldb agree on sending an initial + packet after establishing the
connection.

OTOH, gdbserver and lldb-server behavior is subtly different. While
lldb-server *expects* the initial ack, and drops the connection if it is
not received, gdbserver will just ignore a spurious ack at _any_ point
in the connection.

This patch changes lldb's behavior to match that of gdb. An ACK packet
is ignored at any point in the connection (except when expecting an ACK
packet, of course). This is inline with the "be strict in what you
generate, and lenient in what you accept" philosophy, and also enables
us to remove some special cases from the server code. I've extended the
same handling to NAK (-) packets, mainly because I don't see a reason to
treat them differently here.

(The background here is that we had a stub which was sending spurious
+ packets. This bug has since been fixed, but I think this change makes
sense nonetheless.)

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

2 years ago[lldb/gdb-remote] Remove initial pipe-draining workaround
Pavel Labath [Wed, 24 Nov 2021 13:11:22 +0000 (14:11 +0100)]
[lldb/gdb-remote] Remove initial pipe-draining workaround

This code, added in rL197579 (Dec 2013) is supposed to work around what
was presumably a qemu bug, where it would send unsolicited stop-reply
packets after the initial connection.

At present, qemu does not exhibit such behavior. Also, the 10ms delay
introduced by this code is sufficient to mask bugs in other stubs, but
it is not sufficient to *reliably* mask those bugs. This resulted in
flakyness in one of our stubs, which was (incorrectly) sending a +
packet at the start of the connection, resulting in a small-but-annoying
number of dropped connections.

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

2 years ago[DAG] SimplifyDemandedBits - simplify rotl/rotr to shl/srl (REAPPLIED)
Simon Pilgrim [Thu, 25 Nov 2021 11:14:06 +0000 (11:14 +0000)]
[DAG] SimplifyDemandedBits - simplify rotl/rotr to shl/srl (REAPPLIED)

If we only demand bits from one half of a rotation pattern, see if we can simplify to a logical shift.

For the ARM/AArch64 rev16/32 patterns, I had to drop a fold to prevent srl(bswap()) -> rotr(bswap) -> srl(bswap) infinite loops. I've replaced this with an isel PatFrag which should do the same task.

Reapplied with fix for AArch64 rev patterns to matching the ARM fix.

https://alive2.llvm.org/ce/z/iroxki (rol -> shl by amt iff demanded bits has at least as many trailing zeros as the shift amount)
https://alive2.llvm.org/ce/z/4ez_U- (ror -> shl by revamt iff demanded bits has at least as many trailing zeros as the reverse shift amount)
https://alive2.llvm.org/ce/z/cD7dR- (ror -> lshr by amt iff demanded bits has at least as many leading zeros as the shift amount)
https://alive2.llvm.org/ce/z/_XGHtQ (rol -> lshr by revamt iff demanded bits has at least as many leading zeros as the reverse shift amount)

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

2 years ago[clang-format]NFC improve the comment to match the code
mydeveloperday [Thu, 25 Nov 2021 11:11:30 +0000 (11:11 +0000)]
[clang-format]NFC improve the comment to match the code

Missing from {D114519}

2 years ago[clang-format] [PR52595] clang-format does not recognize rvalue references to array
mydeveloperday [Thu, 25 Nov 2021 11:04:17 +0000 (11:04 +0000)]
[clang-format] [PR52595] clang-format does not recognize rvalue references to array

https://bugs.llvm.org/show_bug.cgi?id=52595

missing space between `T(&&)` but not between `T (&` due to && being incorrectly thought of as `UnaryOperator`  rather than `PointerOrReference`

```
int operator()(T (&)[N]) { return 0; }
int operator()(T(&&)[N]) { return 1; }
```

Existing Unit tests are changed because actually I think they are originally incorrect, and are inconsistent with the (&) cases that are 4 or 5 lines above them.

Reviewed By: curdeius

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

2 years ago[mlir] Move memref.[tensor_load|buffer_cast|clone] to "bufferization" dialect.
Alexander Belyaev [Thu, 25 Nov 2021 10:42:16 +0000 (11:42 +0100)]
[mlir] Move memref.[tensor_load|buffer_cast|clone] to "bufferization" dialect.

https://llvm.discourse.group/t/rfc-dialect-for-bufferization-related-ops/4712

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

2 years ago[mlir][linalg] Cleanup hoisting test (NFC).
Tobias Gysi [Thu, 25 Nov 2021 10:42:09 +0000 (10:42 +0000)]
[mlir][linalg] Cleanup hoisting test (NFC).

Rename the check prefixes to HOIST21 and HOIST32 to clarify the different flag configurations.

Depends On D114438

Reviewed By: nicolasvasilache

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

2 years ago[mlir][linalg] Perform checks early in hoist padding.
Tobias Gysi [Thu, 25 Nov 2021 10:37:00 +0000 (10:37 +0000)]
[mlir][linalg] Perform checks early in hoist padding.

Instead of checking for unexpected operations (any operation with a region except for scf::For and `padTensorOp` or operations with a memory effect) while cloning the packing loop nest perform the checks early. Update `dropNonIndexDependencies` to check for unexpected operations. Additionally, check all of these operations have index type operands only.

Depends On D114428

Reviewed By: nicolasvasilache

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

2 years ago[mlir][linalg] Limit hoist padding to constant paddings.
Tobias Gysi [Thu, 25 Nov 2021 10:31:19 +0000 (10:31 +0000)]
[mlir][linalg] Limit hoist padding to constant paddings.

Limit hoist padding to pad tensor ops that depend only on a constant value. Supporting arbitrary padding values that depend on computations part of the backward slice to hoist require complex analysis to ensure the computation can be hoisted.

Depends On D114420

Reviewed By: nicolasvasilache

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

2 years ago[mlir][linalg] Add backward slice filtering in hoist padding.
Tobias Gysi [Thu, 25 Nov 2021 10:23:28 +0000 (10:23 +0000)]
[mlir][linalg] Add backward slice filtering in hoist padding.

Adapt hoist padding to filter the backward slice before cloning the packing loop nest. The filtering removes all operations that are not used to index the hoisted pad tensor op and its extract slice op. The filtering is needed to support the more complex loop nests created after fusion. For example, fusing the producer of an output operand can added linalg ops and pad tensor ops to the backward slice. These operations have regions and currently prevent hoisting.

The following example demonstrates the effect of the newly introduced `dropNonIndexDependencies` method that filters the backward slice:
```
%source = linalg.fill(%cst, %arg0)
scf.for %i
  %unrelated = linalg.fill(%cst, %arg1)    // not used to index %source!
  scf.for %j (%arg2 = %unrelated)
    scf.for %k                             // not used to index %source!
      %ubi = affine.min #map(%i)
      %ubj = affine.min #map(%j)
      %slice = tensor.extract_slice %source [%i, %j] [%ubi, %ubj]
      %padded_slice = linalg.pad_tensor %slice
```
dropNonIndexDependencies(%padded_slice, %slice)
removes [scf.for %k, linalg.fill(%cst, %arg1)] from backwardSlice.

Depends On D114175

Reviewed By: nicolasvasilache

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

2 years ago[clangd] Add ObjC method support to prepareCallHierarchy
Sheldon Neuberger [Thu, 25 Nov 2021 10:22:56 +0000 (11:22 +0100)]
[clangd] Add ObjC method support to prepareCallHierarchy

This fixes "textDocument/prepareCallHierarchy" in clangd for ObjC methods. Details at https://github.com/clangd/vscode-clangd/issues/247.

clangd uses Decl::isFunctionOrFunctionTemplate to check if the decl given in a prepareCallHierarchy request is eligible for prepareCallHierarchy. We change to use isFunctionOrMethod which includes functions and ObjC methods.

Reviewed By: kadircet

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

2 years ago[SDAG] Allow Unknown sizes when refining MMO alignments. NFC
David Green [Thu, 25 Nov 2021 10:19:29 +0000 (10:19 +0000)]
[SDAG] Allow Unknown sizes when refining MMO alignments. NFC

The changes in D113888 / 32b6c17b29079e7d altered the memory size of a
masked store, as it will store an unknown number of bytes not the full
vector size. We can have situations where the masked stores is legalized
and then turned to a normal store, as the mask is known to be all ones.
This creates a store with an unknown size MMO that was hitting this
assert.

The store created can be given a better size in a followup patch. This
currently adjusts the assert to handle unknown sizes.

2 years ago[mlir][linalg][bufferize][NFC] Move SCF interface impl to new build target
Matthias Springer [Thu, 25 Nov 2021 08:56:16 +0000 (17:56 +0900)]
[mlir][linalg][bufferize][NFC] Move SCF interface impl to new build target

This makes ComprehensiveBufferize entirely independent of the SCF dialect.

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

2 years agoRevert "[mlir][SCF] Further simplify affine maps during `for-loop-canonicalization`"
Alexander Belyaev [Thu, 25 Nov 2021 09:53:29 +0000 (10:53 +0100)]
Revert "[mlir][SCF] Further simplify affine maps during `for-loop-canonicalization`"

This reverts commit ee1bf186723abb933b2c337e589c5958167f3cbe.

It breaks IREE lowering. Reverting the commit for now while we
investigate what's going on.

2 years ago[clang][driver] Add -fplugin-arg- to pass arguments to plugins
Timm Bäder [Thu, 4 Nov 2021 16:40:51 +0000 (17:40 +0100)]
[clang][driver] Add -fplugin-arg- to pass arguments to plugins

From GCC's manpage:
-fplugin-arg-name-key=value
   Define an argument called key with a value of value for the
   plugin called name.

Since we don't have a key-value pair similar to gcc's plugin_argument
struct, simply accept key=value here anyway and pass it along as-is to
plugins.

This translates to the already existing '-plugin-arg-pluginname arg'
that clang cc1 accepts.

There is an ambiguity here because in clang, both the plugin name
as well as the option name can contain dashes, so when e.g. passing

 -fplugin-arg-foo-bar-foo

it is not clear whether the plugin is foo-bar and the option is foo,
or the plugin is foo and the option is bar-foo. GCC solves this by
interpreting all dashes as part of the option name. So dashes can't be
part of the plugin name in this case.

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

2 years ago[mlir][spirv] arith::RemSIOp OpenCL lowering
Butygin [Thu, 28 Oct 2021 16:04:35 +0000 (19:04 +0300)]
[mlir][spirv] arith::RemSIOp OpenCL lowering

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

2 years ago[clangd] Disable hicpp-invalid-access-moved inside clangd
Kadir Cetinkaya [Thu, 25 Nov 2021 09:27:34 +0000 (10:27 +0100)]
[clangd] Disable hicpp-invalid-access-moved inside clangd

2 years ago[mlir][spirv] Float atomics should not imply Shader
Butygin [Thu, 28 Oct 2021 16:04:35 +0000 (19:04 +0300)]
[mlir][spirv] Float atomics should not imply Shader

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

2 years ago[mlir][interfaces] Add insideMutuallyExclusiveRegions helper
Matthias Springer [Thu, 25 Nov 2021 08:42:08 +0000 (17:42 +0900)]
[mlir][interfaces] Add insideMutuallyExclusiveRegions helper

Add a helper function to ControlFlowInterfaces for checking if two ops
are in mutually exclusive regions according to RegionBranchOpInterface.

Utilize this new helper in Linalg ComprehensiveBufferize. This makes the
analysis independent of the SCF dialect and generalizes it to other ops
that implement RegionBranchOpInterface.

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

2 years ago[clang-format] [PR47936] AfterControlStatement: MultiLine breaks AllowShortFunctionsO...
mydeveloperday [Thu, 25 Nov 2021 08:30:31 +0000 (08:30 +0000)]
[clang-format] [PR47936] AfterControlStatement: MultiLine breaks AllowShortFunctionsOnASingleLine

https://bugs.llvm.org/show_bug.cgi?id=47936

Using the MultiLine setting for BraceWrapping.AfterControlStatement appears to disable AllowShortFunctionsOnASingleLine, even in cases without any control statements

Reviewed By: HazardyKnusperkeks, curdeius

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

2 years agoRevert "[clang][AST] Check context of record in structural equivalence."
Balázs Kéri [Thu, 25 Nov 2021 08:31:41 +0000 (09:31 +0100)]
Revert "[clang][AST] Check context of record in structural equivalence."

Revert commit 6b96b2a0bf65ff838d4dbf909a5120d4d1083e29 because Windows
test failure.

2 years ago[lldb] Fix TestFileHandle.py
Pavel Labath [Thu, 25 Nov 2021 07:56:45 +0000 (08:56 +0100)]
[lldb] Fix TestFileHandle.py

- remove the decorator which is no longer available in main
- remove dependence on revision number, which are not available in all
  builds

2 years ago[ELF] Emit DF_STATIC_TLS only for -shared
Fangrui Song [Thu, 25 Nov 2021 07:17:13 +0000 (23:17 -0800)]
[ELF] Emit DF_STATIC_TLS only for -shared

This matches GNU ld and saves 2 words for executables.

2 years ago[ELF] Rename hasStaticTlsModel to hasTlsIe
Fangrui Song [Thu, 25 Nov 2021 05:06:04 +0000 (21:06 -0800)]
[ELF] Rename hasStaticTlsModel to hasTlsIe

and remove unneeded atomic.

2 years ago[ELF] Remove unneeded DF_STATIC_TLS for EM_386 local-exec TLS
Fangrui Song [Thu, 25 Nov 2021 04:43:58 +0000 (20:43 -0800)]
[ELF] Remove unneeded DF_STATIC_TLS for EM_386 local-exec TLS

which is also untested.

2 years ago[MLIR] Rename test/python/dialects/math.py -> math_dialect.py
Uday Bondhugula [Thu, 25 Nov 2021 03:26:19 +0000 (08:56 +0530)]
[MLIR] Rename test/python/dialects/math.py -> math_dialect.py

Rename test/python/dialects/math.py -> math_dialect.py to avoid a
collision with a Python standard package of the same name. These test
scripts are run by path and are not part of a package. Python apparently
implicitly adds the containing directory to its PYTHONPATH. As such,
test scripts with common names run the risk of conflicting with global
names and resolution of an import for the latter happens to the former.

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

2 years ago[mlir][SCF] Further simplify affine maps during `for-loop-canonicalization`
Matthias Springer [Thu, 25 Nov 2021 03:43:35 +0000 (12:43 +0900)]
[mlir][SCF] Further simplify affine maps during `for-loop-canonicalization`

* Implement `FlatAffineConstraints::getConstantBound(EQ)`.
* Inject a simpler constraint for loops that have at most 1 iteration.
* Taking into account constant EQ bounds of FlatAffineConstraint dims/symbols during canonicalization of the resulting affine map in `canonicalizeMinMaxOp`.

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

2 years ago[mlir][SCF] Fix off-by-one bug in affine analysis
Matthias Springer [Thu, 25 Nov 2021 03:36:12 +0000 (12:36 +0900)]
[mlir][SCF] Fix off-by-one bug in affine analysis

This change is NFC. There were two issues when passing/reading upper bounds into/from FlatAffineConstraints that negate each other, so the bug was not apparent. However, it made debugging harder because some constraints in the FlatAffineConstraints were off by one when dumping all constraints.

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

2 years ago[NFC] Improve debug message in getAsIntegerSet
Uday Bondhugula [Wed, 24 Nov 2021 08:12:20 +0000 (13:42 +0530)]
[NFC] Improve debug message in getAsIntegerSet

Improve debug message in getAsIntegerSet. Add missing trailing new line
and position info.

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

2 years agoGlobalISel: remove assert that memcpy Src and Dst addrspace must be identical
Jameson Nash [Thu, 21 Oct 2021 15:58:02 +0000 (11:58 -0400)]
GlobalISel: remove assert that memcpy Src and Dst addrspace must be identical

The LangRef does not require these arguments to have the same type.

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

2 years ago[mlir][linalg][bufferize][NFC] Move arith interface impl to new build target
Matthias Springer [Thu, 25 Nov 2021 01:06:16 +0000 (10:06 +0900)]
[mlir][linalg][bufferize][NFC] Move arith interface impl to new build target

This makes ComprehensiveBufferize entirely independent of the arith dialect.

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

2 years agoPromote readability by factoring out creation of min/max operation. Remove unnecessar...
bakhtiyar [Thu, 25 Nov 2021 00:11:48 +0000 (16:11 -0800)]
Promote readability by factoring out creation of min/max operation. Remove unnecessary divisions.

Reviewed By: ezhulenev

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

2 years ago[mlir][spirv] Change the return type for {Min|Max}VersionBase
Lei Zhang [Wed, 24 Nov 2021 22:28:58 +0000 (17:28 -0500)]
[mlir][spirv] Change the return type for {Min|Max}VersionBase

For synthesizing an op's implementation of the generated interface
from {Min|Max}Version, we need to define an `initializer` and
`mergeAction`. The `initializer` specifies the initial version,
and `mergeAction` specifies how version specifications from
different parts of the op should be merged to generate a final
version requirements.

Previously we use the specified version enum as the type for both
the initializer and thus the final return type. This means we need
to perform `static_cast` over some hopefully not used number (`~0u`)
as the initializer. This is quite opaque and sort of not guaranteed
to work. Also, there are ops that have an enum attribute where some
values declare version requirements (e.g., enumerant `B` requires
v1.1+) but some not (e.g., enumerant `A` requires nothing). Then a
concrete op instance with `A` will still declare it implements the
version interface (because interface implementation is static for
an op) but actually theirs no requirements for version.

So this commit changes to use an more explicit `llvm::Optional`
to wrap around the returned version enum.  This should make it
more clear.

Reviewed By: jpienaar

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

2 years ago[libc++] Value-initialize unique_ptr's deleter_type
Johan Berg [Wed, 24 Nov 2021 22:30:50 +0000 (17:30 -0500)]
[libc++] Value-initialize unique_ptr's deleter_type

According to the C++ standard, the stored pointer and the stored deleter
should be value-initialized.

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

2 years ago[LLVM][NFC]Inclusive language: remove occurances of sanity check/test from llvm
Zarko Todorovski [Wed, 24 Nov 2021 17:47:59 +0000 (12:47 -0500)]
[LLVM][NFC]Inclusive language: remove occurances of sanity check/test from llvm

Part of work to use more inclusive language in clang/llvm. Rewording
some comments and change function and variable names.

2 years agoDWARFVerifier: Don't parse all units twice
David Blaikie [Wed, 24 Nov 2021 21:47:42 +0000 (13:47 -0800)]
DWARFVerifier: Don't parse all units twice

Introduced/discussed in https://reviews.llvm.org/D38719

The header validation logic was also explicitly building the DWARFUnits
to validate. But then other calls, like "Units.getUnitForOffset" creates
the DWARFUnits again in the DWARFContext proper - so, let's avoid
creating the DWARFUnits twice by walking the DWARFContext's units rather
than building a new list explicitly.

This does reduce some verifier power - it means that any unit with a
header parsing failure won't get further validation, whereas the
verifier-created units were getting some further validation despite
invalid headers. I don't think this is a great loss/seems "right" in
some ways to me that if the header's invalid we should stop there.

Exposing the raw DWARFUnitVectors from DWARFContext feels a bit
sub-optimal, but gave simple access to the getUnitForOffset to keep the
rest of the code fairly similar.

2 years ago[libc++] Fix backdeployment annotations for std::filesystem
Louis Dionne [Tue, 23 Nov 2021 17:26:53 +0000 (12:26 -0500)]
[libc++] Fix backdeployment annotations for std::filesystem

In 1fa27f2a10e8, we made <filesystem>'s iterator types model concepts
from <ranges>, but we forgot to add the appropriate availability
annotations. This broke back-deployment to platforms that don't have
<filesystem> for which we have availability annotations.

For some reason, this wasn't caught by our back-deployment CI.
I believe this is due to the fact that we use a slightly older
compiler in the CI, and perhaps that compiler does not honour
our `#pragma clang attribute push` properly.

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

2 years ago[CVP] Add a cl::opt for canonicalization of signed relational comparisons
Artur Pilipenko [Wed, 24 Nov 2021 21:48:43 +0000 (13:48 -0800)]
[CVP] Add a cl::opt for canonicalization of signed relational comparisons

This canonicalization breaks the ability to discard checks in some cases.
Add a command line option to disable it. This option is on by default,
so the change is NFC.

See for details:
https://reviews.llvm.org/D112895#3149487

2 years ago[libc++] Handle armv7m in two architecture dependent tests
Louis Dionne [Wed, 24 Nov 2021 21:38:55 +0000 (16:38 -0500)]
[libc++] Handle armv7m in two architecture dependent tests

2 years ago[libc++] Fix two tests that were failing in freestanding mode
Louis Dionne [Wed, 24 Nov 2021 21:37:54 +0000 (16:37 -0500)]
[libc++] Fix two tests that were failing in freestanding mode

We were defining `main()` but never returning from it.

2 years ago[ConstraintElimination] Add additional tests.
Florian Hahn [Wed, 24 Nov 2021 21:32:49 +0000 (21:32 +0000)]
[ConstraintElimination] Add additional tests.

2 years agoMove some tests from instcombine to phase ordering. NFC.
Stanislav Mekhanoshin [Wed, 24 Nov 2021 20:17:26 +0000 (12:17 -0800)]
Move some tests from instcombine to phase ordering. NFC.

Tests from D113216 are now handled by Reassociate, GVN and BDCE
passes after D114462. Moving into phase ordering instead of
instcombine.

2 years ago[SLP]Improve analysis/emission of vector operands for alternate nodes.
Alexey Bataev [Wed, 17 Nov 2021 16:42:33 +0000 (08:42 -0800)]
[SLP]Improve analysis/emission of vector operands for alternate nodes.

Compiler has an analysis for perfect diamond matching but it does not
support nodes with main/alternate opcodes. The problem is that the
scalars themselves are different and might not match directly with other
nodes, but operands and main/alternate opcodes might match and compiler
might reuse some previously emitted vector instructions. Need to include
this analysis in the cost model and actual vector instructions emission
process.

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

2 years agoHeaders: exclude `#include_next <stdatomic.h>` on MSVC
Saleem Abdulrasool [Wed, 24 Nov 2021 18:44:38 +0000 (10:44 -0800)]
Headers: exclude `#include_next <stdatomic.h>` on MSVC

The 14.31.30818 toolset has the following in the `stdatomic.h`:
~~~
 #ifndef __cplusplus
 #error <stdatomic.h> is not yet supported when compiling as C, but this is planned for a future release.
 #endif
~~~

This results in clang failing to build existing code which relied on
`stdatomic.h` in C mode on Windows.  Simply fallback to the clang header
until that header is available as a complete implementation.