platform/upstream/llvm.git
2 years ago[RISCV][NFC] Add some tail agnostic tests for nomask operations.
Zakk Chen [Thu, 17 Feb 2022 04:49:25 +0000 (20:49 -0800)]
[RISCV][NFC] Add some tail agnostic tests for nomask operations.

Improve test coverage for tail agnostic nomask vslidedown/up, vmv.s.x
vfmv.s.f and vcompress.

Reviewed By: rogfer01

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

2 years ago[RISCV][NFC] Add tail agnostic tests for nomask Vector Reduction IR intrinsics.
Zakk Chen [Wed, 16 Feb 2022 08:38:51 +0000 (00:38 -0800)]
[RISCV][NFC] Add tail agnostic tests for nomask Vector Reduction IR intrinsics.

Improve test coverage for tail agnostic nomask Vector Reduction IR.

Reviewed By: monkchiang

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

2 years ago[WebAssembly] Make EH/SjLj vars unconditionally thread local
Heejin Ahn [Thu, 17 Feb 2022 00:11:29 +0000 (16:11 -0800)]
[WebAssembly] Make EH/SjLj vars unconditionally thread local

This makes three thread local variables (`__THREW__`, `__threwValue`,
and `__wasm_lpad_context`) unconditionally thread local. If the target
doesn't support TLS, they will be downgraded to normal variables in
`stripThreadLocals`. This makes the object not linkable with other
objects using shared memory, which is what we intend here; these
variables should be thread local when used with shared memory. This is
what we initially tried in D88262.

But D88323 changed this: It only created these variables when threads
were supported, because `__THREW__` and `__threwValue` were always
generated even if Emscripten EH/SjLj was not used, making all objects
built without threads not linkable with shared memory, which was too
restrictive. But sometimes this is not safe. If we build an object using
variables such as `__THREW__` without threads, it can be linked to other
objects using shared memory, because the original object's `__THREW__`
was not created thread local to begin with.

So this CL basically reverts D88323 with some additional improvements:
- This checks each of the functions and global variables created within
  `LowerEmscriptenEHSjLj` pass and removes it if it's not used at the
  end of the pass. So only modules using those variables will be
  affected.
- Moves `CoalesceFeaturesAndStripAtomics` and `AtomicExpand` passes
  after all other IR pasess that can create thread local variables. It
  is not sufficient to move them to the end of `addIRPasses`, because
  `__wasm_lpad_context` is created in `WasmEHPrepare`, which runs inside
  `addPassesToHandleExceptions`, which runs before `addISelPrepare`. So
  we override `addISelPrepare` and move atomic/TLS stripping and
  expanding passes there.

This also removes merges `TLS` and `NO-TLS` FileCheck lines into one
`CHECK` line, because in the bitcode level we always create them as
thread local. Also some function declarations are deleted `CHECK` lines
because they are unused.

Reviewed By: tlively, sbc100

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

2 years ago[gn build] Port 19bdf44d8508
LLVM GN Syncbot [Thu, 17 Feb 2022 23:56:17 +0000 (23:56 +0000)]
[gn build] Port 19bdf44d8508

2 years agoRevert "Reland "[memprof] Extend the index prof format to include memory profiles.""
Snehasish Kumar [Thu, 17 Feb 2022 23:45:10 +0000 (15:45 -0800)]
Revert "Reland "[memprof] Extend the index prof format to include memory profiles.""

This reverts commit 807ba7aace188ada83ddb4477265728e97346af1.

2 years agoRevert "[memprof] Fix frame deserialization on big endian systems."
Snehasish Kumar [Thu, 17 Feb 2022 23:42:02 +0000 (15:42 -0800)]
Revert "[memprof] Fix frame deserialization on big endian systems."

This reverts commit c74389b4b58d8db3f8262ce15b9d514d62fe265c.

This broke the ml-opt-x86-64 build.
https://lab.llvm.org/buildbot#builders/9/builds/4127

2 years agoAMDGPU: Try to fix expensive_checks bot tests failures
Matt Arsenault [Thu, 17 Feb 2022 23:42:06 +0000 (18:42 -0500)]
AMDGPU: Try to fix expensive_checks bot tests failures

2 years ago[memprof] Fix frame deserialization on big endian systems.
Snehasish Kumar [Thu, 17 Feb 2022 23:14:47 +0000 (15:14 -0800)]
[memprof] Fix frame deserialization on big endian systems.

We write the memprof internal call frame data in little endian format.
However when reading the frame information we were casting it directly
to a MemProfRecord::Frame pointer. In this change we add a separate
deserialization method which uses an endian reader to read the bytes as
little endian.

This fixes https://lab.llvm.org/buildbot/#/builders/100/builds/12940

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

2 years agoRegAllocGreedy: Fix last chance recolor assert in impossible case
Matt Arsenault [Thu, 17 Feb 2022 21:52:02 +0000 (16:52 -0500)]
RegAllocGreedy: Fix last chance recolor assert in impossible case

This example is not compilable without handling eviction of specific
subregisters. Last chance recoloring was deciding it could try
evicting an overlapping superregister, which doesn't help make any
progress. The LiveIntervalUnion would then assert due to an
overlapping / identical range when trying the new assignment.

Unfortunately this is also producing a verifier error after the
allocation fails. I've seen a number of these, and not sure if we
should just start deleting the function on error rather than trying to
figure out how to put together valid MIR.

I'm not super confident this is the right place to fix this. I also
have a number of failing testcases I need to fix by handling partial
evictions of superregisters.

2 years agoFix typo in Swift.def, it is swift5_protocol_conformances not swift5_protocol_confrom...
Shubham Sandeep Rastogi [Thu, 17 Feb 2022 22:59:50 +0000 (14:59 -0800)]
Fix typo in Swift.def, it is swift5_protocol_conformances not swift5_protocol_confromances

2 years ago[clang] Remove Address::deprecated() in emitVoidPtrDirectVAArg()
Arthur Eubanks [Thu, 17 Feb 2022 23:00:43 +0000 (15:00 -0800)]
[clang] Remove Address::deprecated() in emitVoidPtrDirectVAArg()

2 years ago[mlir][sparse] remove unused test matrix file
Aart Bik [Thu, 17 Feb 2022 17:43:10 +0000 (09:43 -0800)]
[mlir][sparse] remove unused test matrix file

Reviewed By: bixia

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

2 years agoRevert "[CUDA][SPIRV] Assign global address space to CUDA kernel arguments"
Matthew Voss [Thu, 17 Feb 2022 22:18:54 +0000 (14:18 -0800)]
Revert "[CUDA][SPIRV] Assign global address space to CUDA kernel arguments"

This reverts commit 9de4fc0f2d3b60542956f7e5254951d049edeb1f.

Reverting due to test failure: https://lab.llvm.org/buildbot/#/builders/139/builds/17199

2 years ago[LLDB] Adding skipif for arm linux for TestStructuredBinding.py
Shafik Yaghmour [Thu, 17 Feb 2022 22:30:18 +0000 (14:30 -0800)]
[LLDB] Adding skipif for arm linux for TestStructuredBinding.py

2 years ago[clang] Remove Address::deprecated() in CGCXXABI.h
Arthur Eubanks [Thu, 17 Feb 2022 22:22:39 +0000 (14:22 -0800)]
[clang] Remove Address::deprecated() in CGCXXABI.h

2 years ago[M68k] Adopt VarLenCodeEmitter for bits instructions
Min-Yih Hsu [Thu, 17 Feb 2022 22:13:52 +0000 (14:13 -0800)]
[M68k] Adopt VarLenCodeEmitter for bits instructions

And introduce operand encoding fragments (i.e. MxEncMemOp record) for
addressing modes 'o' and 'e'.

2 years ago[libcxx][test] Let the library indicate support for int128
Casey Carter [Thu, 17 Feb 2022 20:23:58 +0000 (12:23 -0800)]
[libcxx][test] Let the library indicate support for int128

Define `TEST_HAS_NO_INT128` accordingly.

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

2 years ago[libcxx] [test] Use proper UTF-8 locales on Windows
Martin Storsjö [Tue, 25 Jan 2022 13:58:43 +0000 (13:58 +0000)]
[libcxx] [test] Use proper UTF-8 locales on Windows

Since Windows 10 version 1803 (10.0.17134.0) (or Windows Server 2019),
the Windows Universal C Runtime (UCRT) actually does support UTF-8
locales - they're available e.g. via the same names as commonly on Unices,
e.g. "en_US.UTF-8".

The UTF-8 locale support unfortunately has a bug which breaks a couple
tests that were passing previously. That bug is fixed in the very
latest version of the UCRT (in UCRT 10.0.20348.0, available in Windows
11 or Windows Server 2022), so it will get resolved at some point
eventually, provided that the CI environment does get upgraded to a
newer version of Windows Server.

While the net number of xfailed/passing tests in this patch is a loss,
this does allow fixing a lot more locale tests properly for Windows
in later patches.

Intentionally not touching the ISO-8859-1/2 locales used for testing;
they're not detected and tested/used right now, and fixing that up
is another project.

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

2 years ago[NFC][Flang] Add colon to CHECK-LABEL to exercise the check
Kiran Chandramohan [Thu, 17 Feb 2022 21:55:07 +0000 (21:55 +0000)]
[NFC][Flang] Add colon to CHECK-LABEL to exercise the check

Reviewed By: clementval

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

2 years ago[clang] Remove Address::deprecated() call in CGExprCXX.cpp
Arthur Eubanks [Thu, 17 Feb 2022 21:57:46 +0000 (13:57 -0800)]
[clang] Remove Address::deprecated() call in CGExprCXX.cpp

2 years agoRemove __uncvref; use __uncvref_t instead
Nikolas Klauser [Thu, 17 Feb 2022 21:53:20 +0000 (22:53 +0100)]
Remove __uncvref; use __uncvref_t instead

Reviewed By: Quuxplusone, #libc

Spies: libcxx-commits

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

2 years ago[MTE] Instrument use-after-scope for optnone functions.
Florian Mayer [Thu, 17 Feb 2022 00:32:09 +0000 (16:32 -0800)]
[MTE] Instrument use-after-scope for optnone functions.

We always need the Dominator and PostDominatorTree for use-after-scope.

Reviewed By: eugenis

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

2 years ago[clang] Pass more flags to ld64.lld
Nico Weber [Sat, 12 Feb 2022 03:13:28 +0000 (22:13 -0500)]
[clang] Pass more flags to ld64.lld

* ld64.lld now completely supports -export_dynamic (D119372), so map -rdynamic
  to -export_dynamic like already done for ld64

* ld64.lld has been supporting -object_path_lto for well over a year (D92537),
  so pass it like already done for ld64

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

2 years ago[gn build] Port 807ba7aace18
LLVM GN Syncbot [Thu, 17 Feb 2022 21:41:09 +0000 (21:41 +0000)]
[gn build] Port 807ba7aace18

2 years ago[MLIR][GPU] Remove call to cudaSetDevice(), which no longer exists
Krzysztof Drewniak [Thu, 17 Feb 2022 21:37:15 +0000 (21:37 +0000)]
[MLIR][GPU] Remove call to cudaSetDevice(), which no longer exists

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

2 years ago[ASan] Fix TLS teardown.
Mitch Phillips [Thu, 17 Feb 2022 21:27:13 +0000 (13:27 -0800)]
[ASan] Fix TLS teardown.

TLS teardown is currently broken, as we unpoison the shadow a little bit
and to the right of the TLS section, rather than the full TLS section
itself. This currently breaks at -O0, and breaks with some upcoming
globals code that I have.

Reviewed By: vitalybuka

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

2 years agounbreak Modules/cxx20-export-import.cpp with LLVM_APPEND_VC_REV after 32b73bc6ab82
Nico Weber [Thu, 17 Feb 2022 21:33:24 +0000 (16:33 -0500)]
unbreak Modules/cxx20-export-import.cpp with LLVM_APPEND_VC_REV after 32b73bc6ab82

See revision b8b7a9dcdcbc for prior art.

2 years ago[MLIR][GPU] Add gpu.set_default_device op
Krzysztof Drewniak [Tue, 15 Feb 2022 20:23:44 +0000 (20:23 +0000)]
[MLIR][GPU] Add gpu.set_default_device op

This op is added to allow MLIR code running on multi-GPU systems to
select the GPU they want to execute operations on when no GPU is
otherwise specified.

Reviewed By: mehdi_amini

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

2 years agoFix race condition when launching and attaching.
Greg Clayton [Tue, 15 Feb 2022 01:05:03 +0000 (17:05 -0800)]
Fix race condition when launching and attaching.

We discovered that when using "launchCommands" or "attachCommands" that there was an issue where these commands were not being run synchronously. There were further problems in this case where we would get thread events for the process that was just launched or attached before the IDE was ready, which is after "configurationDone" was sent to lldb-vscode.

This fix introduces the ability to wait for the process to stop after the run or attach to ensure that we have a stopped process at the entry point that is ready for the debug session to proceed. This also allows us to run the normal launch or attach without needing to play with the async flag the debugger. We spin up the thread that listens for process events before we start the launch or attach, but we stop the first eStateStopped (with stop ID of zero) event from being delivered through the DAP protocol because the "configurationDone" request handler will deliver it manually as the IDE expects a stop after configuration done. The request_configurationDone will also only deliver the stop packet if the "stopOnEntry" is False in the launch configuration.

Also added a new "timeout" to the launch and attach launch configuration arguments that can be set and defaults to 30 seconds. Since we now poll to detect when the process is stopped, we need a timeout that can be changed in case certain workflows take longer that 30 seconds to attach. If the process is not stopped by the timeout, an error will be retured for the launch or attach.

Added a flag to the vscode.py protocol classes that detects and ensures that no "stopped" events are sent prior to "configurationDone" has been sent and will raise an error if it does happen.

This should make our launching and attaching more reliable and avoid some deadlocks that were being seen (https://reviews.llvm.org/D119548).

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

2 years agoReland "[memprof] Extend the index prof format to include memory profiles."
Snehasish Kumar [Mon, 14 Feb 2022 19:52:42 +0000 (11:52 -0800)]
Reland "[memprof] Extend the index prof format to include memory profiles."

This reverts commit 85355a560a33897453df2ef959e255ee725eebce.

This patch adds support for optional memory profile information to be
included with and indexed profile. The indexed profile header adds a new
field which points to the offset of the memory profile section (if
present) in the indexed profile. For users who do not utilize this
feature the only overhead is a 64-bit offset in the header.

The memory profile section contains (1) profile metadata describing the
information recorded for each entry (2) an on-disk hashtable containing
the profile records indexed via llvm::md5(function_name). We chose to
introduce a separate hash table instead of the existing one since the
indexing for the instrumented fdo hash table is based on a CFG hash
which itself is perturbed by memprof instrumentation.

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

2 years ago[clang-format] Do not add space after return-like keywords in macros.
Marek Kurdej [Thu, 17 Feb 2022 10:10:41 +0000 (11:10 +0100)]
[clang-format] Do not add space after return-like keywords in macros.

Fixes https://github.com/llvm/llvm-project/issues/33336.

Reviewed By: HazardyKnusperkeks, owenpan

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

2 years ago[libc++][CI] Upload ABI lists for all jobs
Louis Dionne [Thu, 17 Feb 2022 15:00:29 +0000 (10:00 -0500)]
[libc++][CI] Upload ABI lists for all jobs

Some jobs might not produce those, but it makes the blocks easier to
copy-paste and makes sure that if a job does produce an ABI list, it
will be updloaded in the artifacts.

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

2 years ago[libc++] Implement P1165R1 (Make stateful allocator propagation more consistent)
Nikolas Klauser [Fri, 11 Feb 2022 18:24:31 +0000 (19:24 +0100)]
[libc++] Implement P1165R1 (Make stateful allocator propagation more consistent)

Reviewed By: Quuxplusone, ldionne, #libc

Spies: libcxx-commits

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

2 years ago[libcxx][test] Silence signed/unsigned comparison warnings
Casey Carter [Thu, 17 Feb 2022 20:55:51 +0000 (12:55 -0800)]
[libcxx][test] Silence signed/unsigned comparison warnings

2 years ago[clang][SemaTemplate] Fix a stack use after scope
Kadir Cetinkaya [Thu, 17 Feb 2022 16:18:43 +0000 (17:18 +0100)]
[clang][SemaTemplate] Fix a stack use after scope

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

2 years ago[mlir][memref] Switch ViewOp to the declarative assembly format
Benjamin Kramer [Thu, 17 Feb 2022 20:16:51 +0000 (21:16 +0100)]
[mlir][memref] Switch ViewOp to the declarative assembly format

2 years agoUse functions with prototypes when appropriate; NFC
Aaron Ballman [Thu, 17 Feb 2022 20:32:15 +0000 (15:32 -0500)]
Use functions with prototypes when appropriate; NFC

Now that the AST printer properly handles functions with no parameters
in C code, all of the tests relying on AST printing can be updated to
use prototypes where appropriate.

2 years ago[mlir] NFC NamedAttrList append with StringAttr
Mogball [Thu, 17 Feb 2022 20:29:25 +0000 (20:29 +0000)]
[mlir] NFC NamedAttrList append with StringAttr

NamedAttrList.append(StringAttr, StringAttr) fails to compile because it is
matched to the IteratorT append. Fixes the method to only match if the type is
an iterator.

2 years ago[ELF] Support (TYPE=<value>) to customize the output section type
Fangrui Song [Thu, 17 Feb 2022 20:10:58 +0000 (12:10 -0800)]
[ELF] Support (TYPE=<value>) to customize the output section type

The current output section type allows to set the ELF section type to
SHT_PROGBITS or SHT_NOLOAD. This patch allows an arbitrary section value
to be specified. Some common SHT_* literal names are supported as well.

```
SECTIONS {
  note (TYPE=SHT_NOTE) : { BYTE(8) *(note) }
  init_array ( TYPE=14 ) : { QUAD(14) }
  fini_array (TYPE = SHT_FINI_ARRAY) : { QUAD(15) }
}
```

When `sh_type` is specified, it is an error if an input section has a different type.

Our syntax is compatible with GNU ld 2.39 (https://sourceware.org/bugzilla/show_bug.cgi?id=28841).

Reviewed By: peter.smith

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

2 years ago{instsimplify] Precommit some tests for provable inequal pointers derived from allocas
Philip Reames [Thu, 17 Feb 2022 20:00:44 +0000 (12:00 -0800)]
{instsimplify] Precommit some tests for provable inequal pointers derived from allocas

2 years ago[EarlyCSE][OpaquePtr] Check access type when performing DSE
Arthur Eubanks [Thu, 17 Feb 2022 19:18:26 +0000 (11:18 -0800)]
[EarlyCSE][OpaquePtr] Check access type when performing DSE

This will bail out on target specific intrinsics. If those are deemed
important enough for EarlyCSE to handle, we can augment MemIntrinsicInfo
with an access type for TargetTransformInfo::getTgtMemIntrinsic() to
handle.

Reviewed By: #opaque-pointers, nikic

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

2 years ago[lld] Make error handling functions opaque
Fangrui Song [Thu, 17 Feb 2022 19:54:57 +0000 (11:54 -0800)]
[lld] Make error handling functions opaque

The inline `lld::error` expands to two function calls `errorHandler` and `error`
where the latter is opaque. Move the functions to .cpp files to decrease code
size.

My x86-64 lld executable is 9KiB smaller.

Reviewed By: #lld-macho, thakis

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

2 years agoReland "[InstrProf] Make the IndexedInstrProf header backwards compatible."
Snehasish Kumar [Mon, 14 Feb 2022 19:52:40 +0000 (11:52 -0800)]
Reland "[InstrProf] Make the IndexedInstrProf header backwards compatible."

This reverts commit 9fd2cb21fb3f763fc784eab198bf1297a24596fa.

Fixes an issue on big endian systems where the format version
was not converted to little endian prior to passing to GET_VERSION.

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

2 years agoAST: Move __va_list tag back to std conditionally on AArch64.
Peter Collingbourne [Thu, 6 Jan 2022 21:37:21 +0000 (13:37 -0800)]
AST: Move __va_list tag back to std conditionally on AArch64.

In post-commit feedback on D104830 Jessica Clarke pointed out that
unconditionally adding __va_list to the std namespace caused namespace
debug info to be emitted in C, which is not only inappropriate but
turned out to confuse the dtrace tool. Therefore, move __va_list back
to std only in C++ so that the correct debug info is generated. We
also considered moving __va_list to the top level unconditionally
but this would contradict the specification and be visible to AST
matchers and such, so make it conditional on the language mode.

To avoid breaking name mangling for __va_list, teach the Itanium
name mangler to always mangle it as if it were in the std namespace
when targeting ARM architectures. This logic is not needed for the
Microsoft name mangler because Microsoft platforms define va_list as
a typedef of char *.

Depends on D116773

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

2 years agoAST: Make getEffectiveDeclContext() a member function of ItaniumMangleContextImpl...
Peter Collingbourne [Thu, 17 Feb 2022 19:23:33 +0000 (11:23 -0800)]
AST: Make getEffectiveDeclContext() a member function of ItaniumMangleContextImpl. NFCI.

In an upcoming change we are going to need to access mangler state
from the getEffectiveDeclContext() function. Therefore, make it a
member function of ItaniumMangleContextImpl. Any callers that are
not currently members of ItaniumMangleContextImpl or CXXNameMangler
are made members of one or the other depending on where they are
called from.

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

2 years ago[OpenMP] Add RTL function to externalization RAII
Joseph Huber [Thu, 17 Feb 2022 18:20:51 +0000 (13:20 -0500)]
[OpenMP] Add RTL function to externalization RAII

This patch adds the '_kmpc_get_hardware_num_threads_in_block'
OpenMP RTL function to the externalization RAII struct. This was getting
optimized out and then being replaced with an undefined value once added
back in, causing bugs for complex reductions.

Fixes #53909.

Reviewed By: jdoerfert

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

2 years ago[LLDB] Fix TestStructuredBinding.py for libstdc++
Shafik Yaghmour [Thu, 17 Feb 2022 19:29:05 +0000 (11:29 -0800)]
[LLDB] Fix TestStructuredBinding.py for libstdc++

For the tuple case for the TestStructuredBinding.py the result type is different
between libc++ and libstdc++.

2 years ago[ifs] Add --strip-needed flag
Alex Brachet [Thu, 17 Feb 2022 19:24:53 +0000 (19:24 +0000)]
[ifs] Add --strip-needed flag

Reviewed By: haowei, mcgrathr

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

2 years ago[lld-macho] Allow order files and call graph sorting to be used together
Leonard Grey [Fri, 14 Jan 2022 19:37:00 +0000 (14:37 -0500)]
[lld-macho] Allow order files and call graph sorting to be used together

If both an order file and a call graph profile are present, the edges of the
call graph which use symbols present in the order file are not used. All of
the symbols in the order file will appear at the beginning of the section just
as they do currently. In other words, the highest priority derived from the
call graph will be below the lowest priority derived from the order file.

Practically, this change renames CallGraphSort.{h,cpp} to SectionPriorities.{h,cpp},
and most order file and call graph profile related code is moved into the new
file to reduce duplication.

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

2 years ago[DEBUGINFO] [LLDB] Add support for generating debug-info for structured bindings...
Shafik Yaghmour [Thu, 17 Feb 2022 19:13:46 +0000 (11:13 -0800)]
[DEBUGINFO] [LLDB] Add support for generating debug-info for structured bindings of structs and arrays

Currently we are not emitting debug-info for all cases of structured bindings a
C++17 feature which allows us to bind names to subobjects in an initializer.

A structured binding is represented by a DecompositionDecl AST node and the
binding are represented by a BindingDecl. It looks the original implementation
only covered the tuple like case which be represented by a DeclRefExpr which
contains a VarDecl.

If the binding is to a subobject of the struct the binding will contain a
MemberExpr and in the case of arrays it will contain an ArraySubscriptExpr.
This PR adds support emitting debug-info for the MemberExpr and ArraySubscriptExpr
cases as well as llvm and lldb tests for these cases as well as the tuple case.

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

2 years ago[AArch64] Add extra widening mul tests. NFC
David Green [Thu, 17 Feb 2022 19:11:45 +0000 (19:11 +0000)]
[AArch64] Add extra widening mul tests. NFC

Also regenerate arm64-neon-2velem-high.ll.

2 years ago[AMDGPU] Promote recursive loads from kernel argument to constant
Stanislav Mekhanoshin [Fri, 11 Feb 2022 20:00:05 +0000 (12:00 -0800)]
[AMDGPU] Promote recursive loads from kernel argument to constant

Not clobbered pointer load chains are promoted to global now. That
is possible to promote these loads itself into constant address
space. Loaded pointers still need to point to global because we
need to be able to store into that pointer and because an actual
load from it may occur after a clobber.

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

2 years ago[mlir] Switch {collapse,expand}_shape ops to the declarative assembly format
Benjamin Kramer [Thu, 17 Feb 2022 18:56:38 +0000 (19:56 +0100)]
[mlir] Switch {collapse,expand}_shape ops to the declarative assembly format

Same functionality, a lot less code.

2 years ago[NFC] Fix debug-info-hotpatch.cpp failure due to downstream regex issue.
Zahira Ammarguellat [Thu, 17 Feb 2022 16:19:40 +0000 (08:19 -0800)]
[NFC] Fix debug-info-hotpatch.cpp failure due to downstream regex issue.

In our downstream, we discovered that the that the .* wildcard
in debug-info-hotpatch.cpp (added https://reviews.llvm.org/D116511)
ended up matching the entire line on our Windows configurations, causing
the -function-padmin check to already be consumed. After digging into it
we weren't able to find any sort of reason why the platform would matter
here, however we suspect there must be some difference in the regex
matcher between systems.
This NFC patch replaces the regex with a more conservative regex that
prevents this from happening by replacing the . match with an 'everything
but double-quote match, [^"].

https://reviews.llvm.org/D120066

2 years ago[Clang] Add attributes alloc_size and alloc_align to mm_malloc
Dávid Bolvanský [Thu, 17 Feb 2022 18:58:12 +0000 (19:58 +0100)]
[Clang] Add attributes alloc_size and alloc_align to mm_malloc

LLVM optimizes source codes with mm_malloc better, especially due to alignment info.

alloc align https://clang.llvm.org/docs/AttributeReference.html#alloc-align
alloc size https://clang.llvm.org/docs/AttributeReference.html#alloc-size

Reviewed By: aaron.ballman

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

2 years ago[X86ISelLowering] permit BlockAddressSDNode "i" constraints for PIC
Nick Desaulniers [Thu, 17 Feb 2022 18:43:12 +0000 (10:43 -0800)]
[X86ISelLowering] permit BlockAddressSDNode "i" constraints for PIC

When building 32b x86 code as PIC, the existing handling of "i"
constraints is conservative since generally we have to go through the
GOT to find references to functions.

But generally, BlockAddresses from C code refer to the Function in the
current TU.  Permit BlockAddresses to be used with the "i" constraint
for those cases.

I regressed this in
commit 4edb9983cb8c ("[SelectionDAG] treat X constrained labels as i for asm")

Fixes: https://github.com/llvm/llvm-project/issues/53868

Reviewed By: efriedma, MaskRay

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

2 years agoFix the declaration printer to properly handle prototypes in C
Aaron Ballman [Thu, 17 Feb 2022 18:52:07 +0000 (13:52 -0500)]
Fix the declaration printer to properly handle prototypes in C

Previously, we would take a declaration like void f(void) and print it
as void f(). That's correct in C++ as far as it goes, but is incorrect
in C because that converts the function from having a prototype to one
which does not.

This turns out to matter for some of our tests that use the pretty
printer where we'd like to get rid of the K&R prototypes from the test
but can't because the test is checking the pretty printed function
signature, as done with the ARCMT tests.

2 years ago[Attributor][FIX] Ensure stable iteration order
Johannes Doerfert [Thu, 17 Feb 2022 18:48:32 +0000 (12:48 -0600)]
[Attributor][FIX] Ensure stable iteration order

With
https://github.com/llvm/llvm-project/commit/668c5c688be7ab0af37739bbbe2d653be82d5c6f
we introduced an ordering issue revealed by the reverse iteration
buildbot. Depending on the order of the map that tracks the AAIsDead AAs
we ended up with slightly different attributes. This is not totally
unexpected and can happen. We should however be deterministic in our
orderings to avoid such issues.

2 years ago[GlobalDCE] [VFE] Add a test for incorrect VFE behavior in presence of null/invalid...
Kuba Mracek [Thu, 17 Feb 2022 05:20:04 +0000 (21:20 -0800)]
[GlobalDCE] [VFE] Add a test for incorrect VFE behavior in presence of null/invalid vtable entries

Add a test for VFE where there's several vtables, and one of them contains an
invalid entry (from VFE's perspective), and which causes VFE to incorrectly skip
scanning subsequent vtables and drop their dependencies.

2 years ago[RewriteStatepointsForGC] Fix an incorrect assertion
Daniil Suchkov [Wed, 16 Feb 2022 23:21:15 +0000 (23:21 +0000)]
[RewriteStatepointsForGC] Fix an incorrect assertion

The assertion verifying that a newly computed value matches what is
already cached used stripPointerCasts() to strip bitcasts, however the
values can be not only pointers, but also vectors of pointers. That is
problematic because stripPointerCasts() doesn't handle vectors of
pointers. This patch introduces an ad-hoc utility function to strip all
bitcasts regardless of the value type.

Reviewed By: skatkov, reames

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

2 years agoRevert "[Driver][Fuchsia][NFC] Use GetLinkerPath to see if linker is lld"
Alex Brachet [Thu, 17 Feb 2022 18:41:49 +0000 (18:41 +0000)]
Revert "[Driver][Fuchsia][NFC] Use GetLinkerPath to see if linker is lld"

This reverts commit b9f4dff8ab40250aac2343e86c1289de46af5585.

2 years ago[OpenMP] Diagnose bad 'omp declare variant' that references itself.
Mike Rice [Wed, 16 Feb 2022 21:58:45 +0000 (13:58 -0800)]
[OpenMP] Diagnose bad 'omp declare variant' that references itself.

When an a variant is specified that is the same as the base function
the compiler will end up crashing in CodeGen. Give an error instead.

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

2 years ago[SystemZ] Improve emission of alignment hints.
Jonas Paulsson [Thu, 17 Feb 2022 01:12:06 +0000 (02:12 +0100)]
[SystemZ] Improve emission of alignment hints.

Handle multiple memoperands in lowerAlignmentHint().

Review: Ulrich Weigand

2 years ago[Driver][Fuchsia][NFC] Use GetLinkerPath to see if linker is lld
Alex Brachet [Thu, 17 Feb 2022 18:20:23 +0000 (18:20 +0000)]
[Driver][Fuchsia][NFC] Use GetLinkerPath to see if linker is lld

Reviewed By: phosek

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

2 years ago[analyzer] Fix a crash in NoStateChangeVisitor with body-farmed stack frames.
Artem Dergachev [Thu, 17 Feb 2022 05:09:09 +0000 (21:09 -0800)]
[analyzer] Fix a crash in NoStateChangeVisitor with body-farmed stack frames.

LocationContext::getDecl() isn't useful for obtaining the "farmed" body because
the (synthetic) body statement isn't actually attached to the (natural-grown)
declaration in the AST.

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

2 years ago[InstCombine][OpaquePtr] Check store type in DSE implementation
Arthur Eubanks [Thu, 17 Feb 2022 18:00:26 +0000 (10:00 -0800)]
[InstCombine][OpaquePtr] Check store type in DSE implementation

2 years ago[SLP][NFC]Add another test for swapped main/alternate cmp, NFC.
Alexey Bataev [Thu, 17 Feb 2022 17:34:58 +0000 (09:34 -0800)]
[SLP][NFC]Add another test for swapped main/alternate cmp, NFC.

2 years ago[instsimplify] When compare allocas, consider their minimal size
Philip Reames [Thu, 17 Feb 2022 17:50:32 +0000 (09:50 -0800)]
[instsimplify] When compare allocas, consider their minimal size

The code was using exact sizing only, but since what we really need is just to make sure the offsets are in bounds, a minimum bound on the object size is sufficient.

To demonstrate the difference, support computing minimum sizes from obects of scalable vector type.

2 years ago[CUDA][SPIRV] Assign global address space to CUDA kernel arguments
Shangwu Yao [Thu, 17 Feb 2022 17:38:06 +0000 (09:38 -0800)]
[CUDA][SPIRV] Assign global address space to CUDA kernel arguments

This patch converts CUDA pointer kernel arguments with default address space to
CrossWorkGroup address space (__global in OpenCL). This is because Generic or
Function (OpenCL's private) is not supported as storage class for kernel pointer types.

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

2 years ago[instsimplify] Fix a miscompile with zero sized allocas
Philip Reames [Thu, 17 Feb 2022 17:21:42 +0000 (09:21 -0800)]
[instsimplify] Fix a miscompile with zero sized allocas

Remove some code which tried to handle the case of comparing two allocas where an object size could not be precisely computed.  This code had zero coverage in tree, and at least one nasty bug.

The bug comes from the fact that the code uses the size of the result pointer as a proxy for whether the alloca can be of size zero.  Since the result of an alloca is *always* a pointer type, and a pointer type can *never* be empty, this check was a nop.  As a result, we blindly consider a zero offset from two allocas to never be equal.  They can in fact be equal when one or more of the allocas is zero sized.

This is particularly ugly because instcombine contains the exact opposite rule.  If instcombine reaches the allocas first, it combines them into one (making them equal).  If instsimplify reaches the compare first, it would consider them not equal.  This creates all kinds of fun scenarios for order of optimization reaching different and contradictory conclusions.

2 years ago[flang] Lower simple scalar assignment
Valentin Clement [Thu, 17 Feb 2022 17:23:22 +0000 (18:23 +0100)]
[flang] Lower simple scalar assignment

This patch hanlde lowering of simple scalar assignment.

This patch is part of the upstreaming effort from fir-dev branch.

Reviewed By: PeteSteinfeld

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

Co-authored-by: Jean Perier <jperier@nvidia.com>
2 years ago[libc] Add exit and atexit
Alex Brachet [Thu, 17 Feb 2022 17:21:55 +0000 (17:21 +0000)]
[libc] Add exit and atexit

Often atexit is implemented using __cxa_atexit. I have not implemented __cxa_atexit here because it potentially requires more discussion. It is unique for llvm-libc (I think) that it is an exported symbol that wouldn’t be defined in any spec file because it doesn’t have a header. Implementing it will be trivial given what is here already, but I figured it would be more contentious so it can be implemented later.

Reviewed By: lntue

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

2 years ago[clangd] Fix building SerializationTests unit test on OpenBSD
Brad Smith [Thu, 17 Feb 2022 17:15:14 +0000 (12:15 -0500)]
[clangd] Fix building SerializationTests unit test on OpenBSD

This fixes building the unit tests on OpenBSD. OpenBSD does not support RLIMIT_AS.

Reviewed By: kadircet

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

2 years ago[RuntimeDyld] Fix building on OpenBSD
Brad Smith [Thu, 17 Feb 2022 17:09:21 +0000 (12:09 -0500)]
[RuntimeDyld] Fix building on OpenBSD

With https://reviews.llvm.org/D105466 the tree does not build on OpenBSD/amd64.
Moritz suggested only building this code on Linux.

Reviewed By: MoritzS

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

2 years ago[instsimplify] Precommit a test showing an alloca equality miscompile
Philip Reames [Thu, 17 Feb 2022 17:12:17 +0000 (09:12 -0800)]
[instsimplify] Precommit a test showing an alloca equality miscompile

2 years ago[RISCV] Add the policy operand for nomask vector Multiply-Add IR intrinsics.
Zakk Chen [Wed, 16 Feb 2022 07:20:51 +0000 (23:20 -0800)]
[RISCV] Add the policy operand for nomask vector Multiply-Add IR intrinsics.

The goal is support tail and mask policy in RVV builtins.
We focus on IR part first.

The nomask vector Multiply-Add need a policy operand
because merge value could not be undef.

Reviewed By: monkchiang

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

2 years ago[AArch64][SVE] Add structured load/store opcodes to getMemOpInfo
Kerry McLaughlin [Thu, 17 Feb 2022 16:00:36 +0000 (16:00 +0000)]
[AArch64][SVE] Add structured load/store opcodes to getMemOpInfo

Currently, loading from or storing to a stack location with a structured load
or store crashes in isAArch64FrameOffsetLegal as the opcodes are not handled by
getMemOpInfo. This patch adds the opcodes for structured load/store instructions
with an immediate index to getMemOpInfo & getLoadStoreImmIdx, setting appropriate
values for the scale, width & min/max offsets.

Reviewed By: sdesmalen, david-arm

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

2 years ago[NFC][llvm-nm] refactor function dumpSymbolNamesFromFile
zhijian [Thu, 17 Feb 2022 17:04:04 +0000 (12:04 -0500)]
[NFC][llvm-nm] refactor function dumpSymbolNamesFromFile
Summary:
split the function into several small functions.

Reviewers: James Henderson,Fangrui Song
Differential Revision: https://reviews.llvm.org/D119974

2 years agoadd missing include
Adrian Prantl [Thu, 17 Feb 2022 17:02:19 +0000 (09:02 -0800)]
add missing include

2 years ago[clang] Sema::CheckEquivalentExceptionSpec - remove useless nullptr test
Simon Pilgrim [Thu, 17 Feb 2022 16:59:41 +0000 (16:59 +0000)]
[clang] Sema::CheckEquivalentExceptionSpec - remove useless nullptr test

We use castAs<> for NewProto/OldProto, which would assert if the cast failed.

2 years agoAdd support for floating-point option `ffp-eval-method` and for
Zahira Ammarguellat [Tue, 19 Oct 2021 16:12:57 +0000 (09:12 -0700)]
Add support for floating-point option `ffp-eval-method` and for
`pragma clang fp eval_method`.

https://reviews.llvm.org/D109239

2 years ago[clang] [NFC] More exhaustive tests for deducing void return types
Arthur O'Dwyer [Mon, 14 Feb 2022 20:11:47 +0000 (15:11 -0500)]
[clang] [NFC] More exhaustive tests for deducing void return types

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

2 years ago[mlir][linalg][sparse] add linalg optimization passes "upstream"
Aart Bik [Wed, 16 Feb 2022 20:56:43 +0000 (12:56 -0800)]
[mlir][linalg][sparse] add linalg optimization passes "upstream"

It is time to compose Linalg related optimizations with SparseTensor
related optimizations. This is a careful first start by adding some
general Linalg optimizations "upstream" of the sparse compiler in the
full sparse compiler pipeline. Some minor changes were needed to make
those optimizations aware of sparsity.

Note that after this, we will add a sparse specific fusion rule,
just to demonstrate the power of the new composition.

Reviewed By: bixia

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

2 years ago[SCEVExpander][OpaquePtr] Check GEP source type when finding identical GEP
Arthur Eubanks [Thu, 17 Feb 2022 04:34:55 +0000 (20:34 -0800)]
[SCEVExpander][OpaquePtr] Check GEP source type when finding identical GEP

Fixes an opaque pointers miscompile.

Reviewed By: #opaque-pointers, nikic

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

2 years ago[test][IndVarSimplify][OpaquePtr] Precommit test
Arthur Eubanks [Thu, 17 Feb 2022 04:34:08 +0000 (20:34 -0800)]
[test][IndVarSimplify][OpaquePtr] Precommit test

2 years ago[AArch64] Remove an unused variable in my previous patch
John Brawn [Thu, 17 Feb 2022 16:37:38 +0000 (16:37 +0000)]
[AArch64] Remove an unused variable in my previous patch

2 years agoTitle: Export unique symbol list with llvm-nm new option "--export-symbols"
zhijian [Thu, 17 Feb 2022 16:37:33 +0000 (11:37 -0500)]
Title: Export unique symbol list with llvm-nm new option "--export-symbols"

Summary:

the patch implement of following functionality.
1. export the symbols from archive or object files.
2. sort the export symbols. (based on same symbol name and visibility)
3. delete the duplicate export symbols (based on same symbol name and visibility)
4. print out the  unique and sorted export symbols (print the symbol name and visibility).

there are two new options are add in the patch
1. --export-symbols (enable the functionality of export unique symbol)
2. --no-rsrc (exclude the symbol name begin with "__rsrc" from be exporting from xcoff object file)

Export symbol list for xcoff object file has the same functionality as
The patch has the same functionality as
https://www.ibm.com/docs/en/xl-c-aix/13.1.0?topic=library-exporting-symbols-createexportlist-utility

Reviewers: James Henderson,Fangrui Song
Differential Revision: https://reviews.llvm.org/D112735

2 years ago[objcopy] followup patch after f75da0c8e65cf1b09012a8b62cd7f3e9a646bbc9
Alexey Lapshin [Thu, 17 Feb 2022 16:04:51 +0000 (19:04 +0300)]
[objcopy] followup patch after f75da0c8e65cf1b09012a8b62cd7f3e9a646bbc9

2 years ago[RISCV] Match shufflevector corresponding to slideup.
Craig Topper [Thu, 17 Feb 2022 16:17:41 +0000 (08:17 -0800)]
[RISCV] Match shufflevector corresponding to slideup.

This generalizes isElementRotate to work when there's only a single
slide needed. I've removed matchShuffleAsSlideDown which is now
redundant.

Reviewed By: frasercrmck, khchen

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

2 years ago[RISCV] Fix incorrect MemOperand copy converting splat+load to vlse.
Craig Topper [Thu, 17 Feb 2022 16:10:20 +0000 (08:10 -0800)]
[RISCV] Fix incorrect MemOperand copy converting splat+load to vlse.

Due to an incorrect copy/paste from load intrinsic handling we
checked if the splat node was a MemSDNode which of course it isn't.

Instead get the MemOperand from the LoadSDNode for the source of
the splat.

This enables LICM to see the load is loop invariant and hoist it
out of the loop.

Reviewed By: frasercrmck

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

2 years ago[AArch64] Add some missing strict FP vector lowering
John Brawn [Tue, 25 Jan 2022 17:53:58 +0000 (17:53 +0000)]
[AArch64] Add some missing strict FP vector lowering

Also add a test for the codegen of strict FP vector operations so
these changes get tested.

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

2 years ago[GlobalDCE] Simplify and return Changed = true less often
Jay Foad [Thu, 17 Feb 2022 14:17:36 +0000 (14:17 +0000)]
[GlobalDCE] Simplify and return Changed = true less often

Removing dead constants should not count as making a change to the
module. This means that RemoveUnusedGlobalValue simplifies to just
calling removeDeadConstantUsers, so inline it.

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

2 years ago[AArch64][SVE] Invert VSelect operand order and condition for predicated arithmetic...
Matt Devereau [Tue, 8 Feb 2022 14:24:03 +0000 (14:24 +0000)]
[AArch64][SVE] Invert VSelect operand order and condition for predicated arithmetic operations

   (vselect (setcc ( condcode) (_) (_)) (a)          (op (a) (b)))
=> (vselect (setcc (!condcode) (_) (_)) (op (a) (b)) (a))

As a follow up to D117689, invert the operand order and condition
in order to fold vselects into predicated instructions.

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

2 years ago[polly] Fix regression test after D110620.
Michael Kruse [Thu, 17 Feb 2022 15:42:15 +0000 (09:42 -0600)]
[polly] Fix regression test after D110620.

2 years agoRevert "[JITLink][RISCV] fix the extractBits behavior and add R_RISCV_JAL relocation."
fourdim [Thu, 17 Feb 2022 15:40:32 +0000 (23:40 +0800)]
Revert "[JITLink][RISCV] fix the extractBits behavior and add R_RISCV_JAL relocation."

This reverts commit 3af7bbca4a0ef64de64b8bb38d3b167673ec60f0.

2 years ago[InstCombine] push constant operand down/outside in sequence of min/max intrinsics
Sanjay Patel [Thu, 17 Feb 2022 15:34:48 +0000 (10:34 -0500)]
[InstCombine] push constant operand down/outside in sequence of min/max intrinsics

A generalization like this was suggested in D119754.
This is the inverse direction of D119851,
and we get all of the folds there plus the one that was missed.

There is precedence for this kind of transform in instcombine
with "or" instructions (but strangely only with that one opcode AFAICT).

Similar justification as in the other patch:
The line between instcombine and reassociate for these kinds of folds
is blurry. This doesn't appear to have much cost and gives us the
expected wins from repeated folds as seen in the last set of test diffs.

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

2 years ago[InstCombine] add test for min/max intrinsic with constant expression; NFC
Sanjay Patel [Wed, 16 Feb 2022 18:57:38 +0000 (13:57 -0500)]
[InstCombine] add test for min/max intrinsic with constant expression; NFC

2 years ago[OpenMP][Offloading] Fix test case issues in bug49334.cpp
Shilei Tian [Thu, 17 Feb 2022 15:22:16 +0000 (10:22 -0500)]
[OpenMP][Offloading] Fix test case issues in bug49334.cpp

`bug49334.cpp` has one issue that causes flaky result reported in #53730.
The root cause is `BlockedC` is never initialized but in `BlockMatMul_TargetNowait`
it is directly read and written (via `+=`). Fixes #53730.

Reviewed By: jhuber6

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

2 years ago[JITLink][RISCV] fix the extractBits behavior and add R_RISCV_JAL relocation.
fourdim [Thu, 17 Feb 2022 15:00:55 +0000 (23:00 +0800)]
[JITLink][RISCV] fix the extractBits behavior and add R_RISCV_JAL relocation.

This patch supports the R_RISCV_JAL relocation.
Moreover, it will fix the extractBits function's behavior as it extracts Size + 1 bits.
In the test ELF_jal.s:
Before:
```
Hi: 4294836480
extractBits(Hi, 12, 8): 480
```
After:
```
Hi: 4294836480
extractBits(Hi, 12, 8): 224
```

Reviewed By: StephenFan

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

2 years ago[RISCV] Add the passthru operand for vmv.vv/vmv.vx/vfmv.vf IR intrinsics.
Zakk Chen [Mon, 14 Feb 2022 02:09:27 +0000 (18:09 -0800)]
[RISCV] Add the passthru operand for vmv.vv/vmv.vx/vfmv.vf IR intrinsics.

Add the passthru operand for
VMV_V_X_VL, VFMV_V_F_VL and SPLAT_VECTOR_SPLIT_I64_VL also.

The goal is support tail and mask policy in RVV builtins.
We focus on IR part first.
If the passthru operand is undef, we use tail agnostic, otherwise
use tail undisturbed.

Reviewed By: rogfer01

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