platform/upstream/llvm.git
2 years ago[LSR] Add test coverage for ICmpZero cases involving urem RHS
Philip Reames [Thu, 14 Jul 2022 00:12:48 +0000 (17:12 -0700)]
[LSR] Add test coverage for ICmpZero cases involving urem RHS

For the moment, we're pretty conservative here.  My motivating case is the vscale one (as that is idiomatic for scalable vectorized loops on RISCV).  There are two obvious approaches to fixing this, and I tried to add reasonable coverage for both even though I'll likely only fix one.

2 years ago[LV] Use PredRecipe directly instead of getOrAddVPValue (NFC).
Florian Hahn [Thu, 14 Jul 2022 00:01:42 +0000 (17:01 -0700)]
[LV] Use PredRecipe directly instead of getOrAddVPValue (NFC).

There is no need to look up the VPValue for Instr, PredRecipe can be
used directly.

2 years ago[flang] Avoid crash from forward referenced derived type
Peter Klausler [Mon, 11 Jul 2022 17:08:01 +0000 (10:08 -0700)]
[flang] Avoid crash from forward referenced derived type

Fortran permits forward references to derived types in contexts that don't
require knowledge of the derived type definition for semantic analysis,
such as in the declaration of a pointer or allocatable variable or component.
But when the forward-referenced derived type is used later for a component
reference, it is possible for the DerivedTypeSpec in he base variable or component
declaration to still have a null scope pointer even if the type has been defined,
since DerivedTypeSpec and TypeSpec objects are created in scopes of use
rather than in scopes of definition.  The fix is to call
DerivedTypeSpec::Instantiate() in the name resolution of each component
name so that the scope gets filled in if it is still null.

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

2 years ago[lldb] Add image dump pcm-info command
Dave Lee [Sat, 9 Jul 2022 00:34:10 +0000 (17:34 -0700)]
[lldb] Add image dump pcm-info command

Add `pcm-info` to the `target module dump` subcommands.

This dump command shows information about clang .pcm files. This command
effectively runs `clang -module-file-info` and produces identical output.

The .pcm file format is tightly coupled to the clang version. The clang
embedded in lldb is not guaranteed to match the version of the clang executable
available on the local system.

There have been times when I've needed to view the details about a .pcm file
produced by lldb's embedded clang, but because the clang executable was a
slightly different version, the `-module-file-info` invocation failed. With
this command, users can inspect .pcm files generated by lldb too.

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

2 years ago[flang] Error detection/avoidance for TRANSFER with empty MOLD= type
Peter Klausler [Fri, 8 Jul 2022 23:16:42 +0000 (16:16 -0700)]
[flang] Error detection/avoidance for TRANSFER with empty MOLD= type

When MOLD= is an array and there is no SIZE= in a call to TRANSFER(),
the size of an element of the MOLD= is used as the denominator in a
division to establish the extent of the vector result.  When the
total storage size of the SOURCE= is known to be zero, the result is
empty and no division is needed.

To avoid a division by zero at runtime, we need to check for a zero-sized
MOLD= element type when the storage size of SOURCE= is nonzero and there
is no SIZE=.  Further, in the compilation-time rewriting of calls to
SHAPE(TRANSFER(...)) and SIZE(TRANSFER(...)) for constant folding and
simplification purposes, we can't replace the call with an arithmetic
element count expression when the storage size of SOURCE= is not known
to be zero and the element size of MOLD= is not known to be nonzero at
compilation time.

These changes mostly affect tests using a MOLD= argument that is an
assumed-length character.

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

2 years ago[Support] Fix LLVM_ENABLE_ZLIB==0 builds
Fangrui Song [Wed, 13 Jul 2022 23:47:35 +0000 (16:47 -0700)]
[Support] Fix LLVM_ENABLE_ZLIB==0 builds

2 years ago[clang-format][NFC] Replace most of std::vector with SmallVector
owenca [Mon, 11 Jul 2022 06:49:16 +0000 (23:49 -0700)]
[clang-format][NFC] Replace most of std::vector with SmallVector

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

2 years ago[flang][runtime] Complete list-directed character input with DECIMAL='COMMA'
Peter Klausler [Fri, 8 Jul 2022 22:25:01 +0000 (15:25 -0700)]
[flang][runtime] Complete list-directed character input with DECIMAL='COMMA'

Most of the infrastructure for DECIMAL='COMMA' mode was in place
in the I/O runtime support library, but I dropped the ball for
list-directed character input, which has its own detection of
input separators.  Finish the job.

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

2 years ago[flang] Ensure name resolution visits "=>NULL()" in entity-decl
Peter Klausler [Fri, 8 Jul 2022 21:35:42 +0000 (14:35 -0700)]
[flang] Ensure name resolution visits "=>NULL()" in entity-decl

Most modern Fortran programs declare procedure pointers with a
procedure-declaration-stmt, but it's also possible to declare one
with a type-declaration-stmt with a POINTER attribute.  In this
case, e.g. "real, external, pointer :: p => null()" the initializer
is required to be a null-init.  The parse tree traversal in name
resolution would visit the null-init if the symbol were an object
pointer only, leading to a crash in the case of a procedure pointer.

That explanation of the bug is longer than the fix.  In short,
ensure that a null-init in an entity-decl is visited for both
species of pointers.

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

2 years ago[Support] Change compression::zlib::{compress,uncompress} to use uint8_t *
Fangrui Song [Wed, 13 Jul 2022 23:26:54 +0000 (16:26 -0700)]
[Support] Change compression::zlib::{compress,uncompress} to use uint8_t *

It's more natural to use uint8_t * (std::byte needs C++17 and llvm has
too much uint8_t *) and most callers use uint8_t * instead of char *.
The functions are recently moved into `llvm::compression::zlib::`, so
downstream projects need to make adaption anyway.

2 years ago[SimplifyCFG] Improve SwitchToLookupTable optimization
Alexander Shaposhnikov [Wed, 13 Jul 2022 23:21:45 +0000 (23:21 +0000)]
[SimplifyCFG] Improve SwitchToLookupTable optimization

Try to use the original value as an index (in the lookup table)
in more cases (to avoid one subtraction and shorten the dependency chain)
(https://github.com/llvm/llvm-project/issues/56189).

Test plan:
1/ ninja check-all
2/ bootstrapped LLVM + Clang pass tests

Differential revision: https://reviews.llvm.org/D128897

2 years ago[flang][runtime] Keep frame buffer in sync with file when truncating
Peter Klausler [Thu, 7 Jul 2022 21:51:40 +0000 (14:51 -0700)]
[flang][runtime] Keep frame buffer in sync with file when truncating

When the I/O runtime is truncating an external file due to an
implied ENDFILE or explicit ENDFILE, ensure that the unit's frame
buffer for the file discards any data that have become obsolete.

This bug caused trouble with ACCESS='STREAM' I/O using POS= on
a WRITE, but it may have not been limited to that scenario.

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

2 years ago[flang][runtime] Refine list-directed REAL(2) output
Peter Klausler [Thu, 7 Jul 2022 16:32:21 +0000 (09:32 -0700)]
[flang][runtime] Refine list-directed REAL(2) output

The rule used by list-directed REAL output editing to select
between Ew.d and Fw.d output editing breaks down for 16-bit
floating-point data, since the number of significant decimal
digits is so low that Ew,d output editing is nearly always selected.
Cap the test so that five-digit values will be output with Fw.d
editing.

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

2 years ago[gn build] (semi-manually) Port 5acd47169884
Nico Weber [Wed, 13 Jul 2022 22:35:25 +0000 (18:35 -0400)]
[gn build] (semi-manually) Port 5acd47169884

2 years ago[flang] Fold TRANSFER()
Peter Klausler [Tue, 5 Jul 2022 23:32:59 +0000 (16:32 -0700)]
[flang] Fold TRANSFER()

Fold usage of the raw data reinterpretation intrinsic function TRANSFER().

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

2 years ago[ORC] Add a shared-memory based orc::MemoryMapper.
Anubhab Ghosh [Tue, 12 Jul 2022 23:15:19 +0000 (16:15 -0700)]
[ORC] Add a shared-memory based orc::MemoryMapper.

This is an implementation of orc::MemoryMapper that maps shared memory
pages in both executor and controller process and writes directly to
them avoiding transferring content over EPC. All allocations are properly
deinitialized automatically on the executor side at shutdown by the
ExecutorSharedMemoryMapperService.

Reviewed By: lhames

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

2 years ago[BPF] Handle anon record for CO-RE relocations
Yonghong Song [Tue, 12 Jul 2022 19:21:11 +0000 (12:21 -0700)]
[BPF] Handle anon record for CO-RE relocations

When doing experiment in kernel, for kernel data structure sockptr_t
in CO-RE operation, I hit an assertion error. The sockptr_t definition
and usage look like below:
  #pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record)
  typedef struct {
        union {
                void    *kernel;
                void    *user;
        };
        unsigned is_kernel : 1;
  } sockptr_t;
  #pragma clang attribute pop
  int test(sockptr_t *arg) {
    return arg->is_kernel;
  }
The assertion error looks like
  clang: ../lib/Target/BPF/BPFAbstractMemberAccess.cpp:878: llvm::Value*
   {anonymous}::BPFAbstractMemberAccess::computeBaseAndAccessKey(llvm::CallInst*,
   {anonymous}::BPFAbstractMemberAccess::CallInfo&, std::__cxx11::string&,
   llvm::MDNode*&): Assertion `TypeName.size()' failed.

In this particular, the clang frontend attach the debuginfo metadata associated
with anon structure with the preserve_access_info IR intrinsic. But the first
debuginfo type has to be a named type so libbpf can have a sound start to
do CO-RE relocation.

Besides the above approach using pragma to push attribute, the below typedef/struct
definition can have preserve_access_index directly applying to the anon struct.
  typedef struct {
        union {
                void    *kernel;
                void    *user;
        };
        unsigned is_kernel : 1;
  } __attribute__((preserve_access_index) sockptr_t;

This patch fixed the issue by preprocessing function argument/return types
and local variable types used by other CO-RE intrinsics. For any
   typedef struct/union { ... } typedef_name
an association of <anon struct/union, typedef> is recorded to replace
the IR intrinsic metadata 'anon struct/union' to 'typedef'.
It is possible that two different 'typedef' types may have identical
anon struct/union type. For such a case, the association will be
<anon struct/union, nullptr> to indicate the invalid case.

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

2 years ago[hwasan] Add __hwasan_add_frame_record to the hwasan interface
Leonard Chan [Wed, 13 Jul 2022 22:07:59 +0000 (15:07 -0700)]
[hwasan] Add __hwasan_add_frame_record to the hwasan interface

Hwasan includes instructions in the prologue that mix the PC and SP and store
it into the stack ring buffer stored at __hwasan_tls. This is a thread_local
global exposed from the hwasan runtime. However, if TLS-mechanisms or the
hwasan runtime haven't been setup yet, it will be invalid to access __hwasan_tls.
This is the case for Fuchsia where we instrument libc, so some functions that
are instrumented but can run before hwasan initialization will incorrectly
access this global. Additionally, libc cannot have any TLS variables, so we
cannot weakly define __hwasan_tls until the runtime is loaded.

A way we can work around this is by moving the instructions into a hwasan
function that does the store into the ring buffer and creating a weak definition
of that function locally in libc. This way __hwasan_tls will not actually be
referenced. This is not our long-term solution, but this will allow us to roll
out hwasan in the meantime.

This patch includes:

- A new llvm flag for choosing to emit a libcall rather than instructions in the
  prologue (off by default)
- The libcall for storing into the ringbuffer (__hwasan_add_frame_record)

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

2 years ago[llvm] fix zlib buffer truncate edge cases and fix nits in tests
Cole Kissane [Wed, 13 Jul 2022 22:08:40 +0000 (15:08 -0700)]
[llvm] fix zlib buffer truncate edge cases and fix nits in tests

- add check before truncating (un)compressed data buffer if the buffer is already a perfect length, to avoid triggering truncate assertion in edge case.
- explictly coerce LLVM_ENABLE_ZLIB to a 0 or 1 value in OFF case, to match current ON, FORCE_ON behavior.
- fix code style nits in zlib tests

Reviewed By: phosek

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

2 years agoRevert "[hwasan] Add __hwasan_record_frame_record to the hwasan interface"
Leonard Chan [Wed, 13 Jul 2022 22:06:07 +0000 (15:06 -0700)]
Revert "[hwasan] Add __hwasan_record_frame_record to the hwasan interface"

This reverts commit 4956620387ee45a48a394853a47ddd65195c4cc6.

This broke a sanitizer builder: https://lab.llvm.org/buildbot/#/builders/77/builds/19597

2 years ago[GlobalISel] Fix and(load)->zextload combine crash.
Amara Emerson [Wed, 13 Jul 2022 21:30:51 +0000 (14:30 -0700)]
[GlobalISel] Fix and(load)->zextload combine crash.

We shouldn't use getOpcodeDef() if we need to guarantee the def has only one
user since under the hood it may look through copies and optimization hints,
which themselves may have multiple users.

2 years ago[flang] Refine semantic checks for procedure pointer assignment
Peter Klausler [Fri, 8 Jul 2022 20:38:31 +0000 (13:38 -0700)]
[flang] Refine semantic checks for procedure pointer assignment

Some procedure pointers and EXTERNAL procedures have neither
explicit interfaces nor result types; these procedures are obviously
not known to be functions, but they could be, so semantics must not
assume that they are necessarily subroutines.  Refine the procedure
pointer / dummy procedure compatibility check to handle these more
ambiguous cases and not elicit inappropriate error messages.

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

2 years ago[DOC] Add DR1734 and DR1496 Clang's cxx_dr_status as not implemented
Roy Jacobson [Tue, 12 Jul 2022 19:24:19 +0000 (22:24 +0300)]
[DOC] Add DR1734 and DR1496 Clang's cxx_dr_status as not implemented

Those two DRs about the (copy) triviality of types with deleted special member functions are not implemented in Clang.
Document them as such.

Reviewed By: aaron.ballman

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

2 years ago[LV] Move VPBranchOnMaskRecipe::execute to VPlanRecipes.cpp (NFC).
Florian Hahn [Wed, 13 Jul 2022 21:39:59 +0000 (14:39 -0700)]
[LV] Move VPBranchOnMaskRecipe::execute to VPlanRecipes.cpp (NFC).

2 years ago[RISCV] Fold (sra (sext_inreg (shl X, C1), i32), C2) -> (sra (shl X, C1+32), C2+32).
Craig Topper [Wed, 13 Jul 2022 19:50:49 +0000 (12:50 -0700)]
[RISCV] Fold (sra (sext_inreg (shl X, C1), i32), C2) -> (sra (shl X, C1+32), C2+32).

The former pattern will select as slliw+sraiw while the latter
will select as slli+srai. This can enable the slli+srai to be
compressed.

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

2 years ago[docs] Add BOLT Office Hours
Maksim Panchenko [Fri, 8 Jul 2022 23:07:13 +0000 (16:07 -0700)]
[docs] Add BOLT Office Hours

Reviewed By: rafauler

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

2 years ago[hwasan] Add __hwasan_record_frame_record to the hwasan interface
leonardchan [Wed, 6 Jul 2022 21:47:43 +0000 (05:47 +0800)]
[hwasan] Add __hwasan_record_frame_record to the hwasan interface

Hwasan includes instructions in the prologue that mix the PC and SP and store
it into the stack ring buffer stored at __hwasan_tls. This is a thread_local
global exposed from the hwasan runtime. However, if TLS-mechanisms or the
hwasan runtime haven't been setup yet, it will be invalid to access __hwasan_tls.
This is the case for Fuchsia where we instrument libc, so some functions that
are instrumented but can run before hwasan initialization will incorrectly
access this global. Additionally, libc cannot have any TLS variables, so we
cannot weakly define __hwasan_tls until the runtime is loaded.

A way we can work around this is by moving the instructions into a hwasan
function that does the store into the ring buffer and creating a weak definition
of that function locally in libc. This way __hwasan_tls will not actually be
referenced. This is not our long-term solution, but this will allow us to roll
out hwasan in the meantime.

This patch includes:

- A new llvm flag for choosing to emit a libcall rather than instructions in the
  prologue (off by default)
- The libcall for storing into the ringbuffer (__hwasan_record_frame_record)

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

2 years ago[clang][deps] Silence a GCC warning about missing returns after a fully covered switc...
Martin Storsjö [Wed, 13 Jul 2022 20:56:27 +0000 (23:56 +0300)]
[clang][deps] Silence a GCC warning about missing returns after a fully covered switch. NFC.

2 years ago[lldb] Silence a GCC warning about missing returns after a fully covered switch....
Martin Storsjö [Wed, 13 Jul 2022 20:56:03 +0000 (23:56 +0300)]
[lldb] Silence a GCC warning about missing returns after a fully covered switch. NFC.

2 years ago[libc][NFC] Make all integration tests depend on the threads implementation.
Siva Chandra Reddy [Wed, 13 Jul 2022 20:51:12 +0000 (20:51 +0000)]
[libc][NFC] Make all integration tests depend on the threads implementation.

The integration tests use the loader which sets up the main thread's
self object. So, all integration tests have to depend on the threads
implementation.

2 years ago[libc] Linux threads - Setup TLS area of a new thread and cleanup at exit.
Siva Chandra Reddy [Mon, 11 Jul 2022 22:12:47 +0000 (22:12 +0000)]
[libc] Linux threads - Setup TLS area of a new thread and cleanup at exit.

Reviewed By: lntue

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

2 years ago[gn build] Port 3ce78cbd2392
LLVM GN Syncbot [Wed, 13 Jul 2022 20:38:59 +0000 (20:38 +0000)]
[gn build] Port 3ce78cbd2392

2 years ago[Analysis] clang-format InlineAdvisor.cpp (NFC)
Kazu Hirata [Wed, 13 Jul 2022 20:38:50 +0000 (13:38 -0700)]
[Analysis] clang-format InlineAdvisor.cpp (NFC)

2 years ago[test] Fix macOS triple check
Ben Langmuir [Wed, 13 Jul 2022 19:10:20 +0000 (12:10 -0700)]
[test] Fix macOS triple check

While the inferred host triple for macOS is something like
<arch>-apple-darwin, it's also valid to have <arch>-apple-macos.
Currently that globally changes whether an SDKROOT is provided in tests,
so make this check more portable.

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

2 years ago[clang][deps] Fix handling of -MT in module command-line
Ben Langmuir [Tue, 12 Jul 2022 23:55:11 +0000 (16:55 -0700)]
[clang][deps] Fix handling of -MT in module command-line

Follow-up to 6626f6fec3d3, this fixes the handling of -MT
* If no targets are provided, we need to invent one since cc1 expects
  the driver to have handled it. The default is to use -o, quoting as
  necessary for a make target.
* Fix the splitting for empty string, which was incorrectly treated as
  {""} instead of {}.
* Add a way to test this behaviour in clang-scan-deps.

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

2 years ago[lld-macho] Accept dylibs with LC_DYLD_EXPORTS_TRIE
Daniel Bertalan [Sat, 9 Jul 2022 22:05:13 +0000 (00:05 +0200)]
[lld-macho] Accept dylibs with LC_DYLD_EXPORTS_TRIE

This load command specifies the offset and size of the exports trie.
This information used to be a field in LC_DYLD_INFO, but in newer
libraries, it has a dedicated load command: LC_DYLD_EXPORTS_TRIE.

The format of the trie is the same for both load commands, so the code
for parsing it can be shared.

LLD does not generate this yet; it is mainly useful when chained fixups
are in use, as the other members of LC_DYLD_INFO are unused then, so the
smaller LC_DYLD_EXPORTS_TRIE can be output instead.

LLDB gained support for this in D107673.

Fixes #54550

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

2 years ago[gn build] Port a5c0638dec83
LLVM GN Syncbot [Wed, 13 Jul 2022 20:25:34 +0000 (20:25 +0000)]
[gn build] Port a5c0638dec83

2 years ago[libc++][ranges] implement `std::ranges::set_symmetric_difference`
Hui Xie [Mon, 11 Jul 2022 22:39:59 +0000 (23:39 +0100)]
[libc++][ranges] implement `std::ranges::set_symmetric_difference`

[libc++][ranges] implement `std::ranges::set_symmetric_difference`

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

2 years ago[libc] Specify rounding mode for strto[f|d] tests
Alex Brachet [Wed, 13 Jul 2022 20:20:30 +0000 (20:20 +0000)]
[libc] Specify rounding mode for strto[f|d] tests

The specified rounding mode will be used and restored
to what it was before the test ran.

Additionally, it moves ForceRoundingMode and RoundingMode
out of MPFRUtils to be used in more places.

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

2 years agoChange shebang from python to python3 in update_cc_test_checks.py
Roman Rusyaev [Wed, 13 Jul 2022 20:02:32 +0000 (13:02 -0700)]
Change shebang from python to python3 in update_cc_test_checks.py

All update_test_checks.py scripts were updated in this revision
https://reviews.llvm.org/D70730 except for update_cc_test_checks.py.

Reviewed By: barannikov88

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

2 years ago[CUDA][HIP][NFC] Do not add `-fgpu-rdc` flag twice
Joseph Huber [Wed, 13 Jul 2022 19:56:15 +0000 (15:56 -0400)]
[CUDA][HIP][NFC] Do not add `-fgpu-rdc` flag twice

Summary:
We currently add the `-fgpu-rdc` flag twice. Once unconditionally for
both the host and device phases of compilation, and a second time only
for the host. When we moved to an unconditional addition of this flag it
the old one was most likely not removed. This patch simply removes the
redundant flag and changes no functionality.

2 years ago[RISCV] Add test case show missed opportunity to turn slliw+sraiw into slli+srai.
Craig Topper [Wed, 13 Jul 2022 19:45:18 +0000 (12:45 -0700)]
[RISCV] Add test case show missed opportunity to turn slliw+sraiw into slli+srai.

slliw and sraiw have no compressed encodings. slli and srai
do have compressed encodings.

Pre-commit for D129688

2 years ago[LinkerWrapper] Fix deleted constructor error on older compilers
Joseph Huber [Wed, 13 Jul 2022 19:44:08 +0000 (15:44 -0400)]
[LinkerWrapper] Fix deleted constructor error on older compilers

Summary:
The previous patch moved some functoinality into a new function and
returned it. The vector contained move-only members. Newer compilers
should figure this out and I didn't notice any problems, but other ones
have problems. Explicitly move this vector to hopefully solve the issue.

2 years ago[NFC] Minor cleanup of usage of FloatModeKind with bitmask enums
Jolanta Jensen [Fri, 8 Jul 2022 13:55:08 +0000 (14:55 +0100)]
[NFC] Minor cleanup of usage of FloatModeKind with bitmask enums

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

2 years ago[LinkerWrapper] Support time tracing in the linker wrapper
Joseph Huber [Wed, 13 Jul 2022 18:55:55 +0000 (14:55 -0400)]
[LinkerWrapper] Support time tracing in the linker wrapper

Summary:
This patch adds the new `--wrapper-time-trace=` option to write a time
tracing JSON file indicating where time was spent in the linker wrapper.
We also reformat and group some of the existing code to make
constraining the scope easier for time tracing.  We use the `--wrapper`
prefix to set this apart from the time tracing that lld may use.

2 years ago[LinkerWrapper] Add support for timescope tracing
Joseph Huber [Wed, 13 Jul 2022 17:35:39 +0000 (13:35 -0400)]
[LinkerWrapper] Add support for timescope tracing

2 years ago[Clang][Sema][AIX][PowerPC] Emit byval alignment warning only when struct is passed...
Zarko Todorovski [Wed, 13 Jul 2022 19:32:16 +0000 (15:32 -0400)]
[Clang][Sema][AIX][PowerPC] Emit byval alignment warning only when struct is passed to a function

Previous warning went on whenever a struct with a struct member with alignment => 16
was declared. This led to too many false positives and led to diagnostic lit failures
due to it being emitted too frequently. Only emit the warning when such a struct and
that struct contains a member that has an alignment of 16 bytes is passed to a caller
function since this is where the potential binary compatibility issue with XL 16.1.0
and older exists.

Reviewed By: sfertile, aaron.ballman

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

2 years ago[trace][intel pt] Support dumping the trace info in json
ymeng [Thu, 7 Jul 2022 13:52:04 +0000 (06:52 -0700)]
[trace][intel pt] Support dumping the trace info in json

Thanks to ymeng@fb.com for coming up with this change.

`thread trace dump info` can dump some metrics that can be useful for
analyzing the performance and quality of a trace. This diff adds a --json
option for dumping this information in json format that can be easily
understood my machines.

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

2 years ago[trace][intel pt] Add a cgroup filter
Gaurav Gaur [Wed, 29 Jun 2022 20:09:12 +0000 (13:09 -0700)]
[trace][intel pt] Add a cgroup filter

It turns out that cgroup filtering is relatively trivial and works
really nicely. Thid diffs adds automatic cgroup filtering when in
per-cpu mode, unless a new --disable-cgroup-filtering flag is passed in
the start command. At least on Meta machines, all processes are spawned
inside a cgroup by default, which comes super handy, because per cpu
tracing is now much more precise.

A manual test gave me this result

- Without filtering:
    Total number of trace items: 36083
    Total number of continuous executions found: 229
    Number of continuous executions for this thread: 2
    Total number of PSB blocks found: 98
    Number of PSB blocks for this thread 2
    Total number of unattributed PSB blocks found: 38

- With filtering:
    Total number of trace items: 87756
    Total number of continuous executions found: 123
    Number of continuous executions for this thread: 2
    Total number of PSB blocks found: 10
    Number of PSB blocks for this thread 3
    Total number of unattributed PSB blocks found: 2

Filtering gives us great results. The number of instructions collected
more than double (probalby because we have less noise in the trace), and
we have much less unattributed PSBs blocks and unrelated PSBs in
general. The ones that are unrelated probably belong to other processes
in the same cgroup.

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

2 years ago[trace][intel pt] Create a CPU change event and expose it in the dumper
Walter Erquinigo [Fri, 8 Jul 2022 01:31:18 +0000 (18:31 -0700)]
[trace][intel pt] Create a CPU change event and expose it in the dumper

Thanks to fredzhou@fb.com for coming up with this feature.

When tracing in per-cpu mode, we have information of in which cpu we are execution each instruction, which comes from the context switch trace. This diff makes this information available as a `cpu changed event`, which an additional accessor in the cursor `GetCPU()`. As cpu changes are very infrequent, any consumer should listen to cpu change events instead of querying the actual cpu of a trace item. Once a cpu change event is seen, the consumer can invoke GetCPU() to get that information. Also, it's possible to invoke GetCPU() on an arbitrary instruction item, which will return the last cpu seen. However, this call is O(logn) and should be used sparingly.

Manually tested with a sample program that starts on cpu 52, then goes to 18, and then goes back to 52.

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

2 years ago[mlir][NVGPU] Verifiers for nvgpu.mma.sync Op
Manish Gupta [Wed, 13 Jul 2022 17:53:52 +0000 (17:53 +0000)]
[mlir][NVGPU] Verifiers for nvgpu.mma.sync Op

- Adds verification for `nvgpu.mma.sync` op
- Adds tests to `mlir/test/Dialect/NVGPU/invalid.mlir`
- `nvgpu.mma.sync` verifier caught a bug and triggered a failure in m16n8k4_tf32_f32 variant in `mlir/test/Conversion/NVGPUToNVVM/nvgpu-to-nvvm.mlir`
     - The output shape of vector holding thread-level accumulators was inconsistent  and fixed in this change

Reviewed By: ThomasRaoux

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

2 years ago[asan][ubsan][test] Add weak attributes for dyld Mach-O weak-def-coalescing
Roy Sundahl [Mon, 11 Jul 2022 02:55:10 +0000 (19:55 -0700)]
[asan][ubsan][test] Add weak attributes for dyld Mach-O weak-def-coalescing

Apple's dynamic linker won't weak-def_coalesce from a file unless there is
at least one weak symbol in the compilation unit so  local __ubsan_on_report
never has the chance to override the weak one even though the dynamic linker
may see it first. This works around the issue by adding an unused weak symbol.
(Amended: Remove excessive clang-format artifacts)

rdar://95244261

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

2 years ago[trace] Add an option to save a compact trace bundle
Walter Erquinigo [Wed, 6 Jul 2022 23:05:25 +0000 (16:05 -0700)]
[trace] Add an option to save a compact trace bundle

A trace bundle contains many trace files, and, in the case of intel pt, the
largest files are often the context switch traces because they are not
compressed by default. As a way to improve this, I'm adding a --compact option
to the `trace save` command that filters out unwanted processes from the
context switch traces. Eventually we can do the same for intel pt traces as
well.

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

2 years ago[RISCV][test][NFC] Regenerate RISC-V tests with update_llc_test_checks.py -u
Alex Bradbury [Wed, 13 Jul 2022 18:34:46 +0000 (19:34 +0100)]
[RISCV][test][NFC] Regenerate RISC-V tests with update_llc_test_checks.py -u

If a change alters more than a couple of tests it's really handy to be
able to regenerate any that were created by update_llc_test_checks.py
with something like `update_llc_test_checks.py -u
llvm/test/CodeGen/RISCV`. I noticed this causes some extraneous changes
(perhaps due to hand editing). This commit addresses that by updating
any fails that are modified by update_llc_test_checks.py -u.

2 years ago[gn build] Port 101d1e9b3c86
LLVM GN Syncbot [Wed, 13 Jul 2022 18:31:08 +0000 (18:31 +0000)]
[gn build] Port 101d1e9b3c86

2 years ago[libc++] Implement ranges::find_end, ranges::search{, _n}
Nikolas Klauser [Wed, 13 Jul 2022 16:07:26 +0000 (18:07 +0200)]
[libc++] Implement ranges::find_end, ranges::search{, _n}

Reviewed By: var-const, #libc, huixie90

Spies: thakis, h-vetinari, huixie90, libcxx-commits, mgorny

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

2 years ago[flang] Document the Intrinsic Types
Steve Scalpone [Wed, 13 Jul 2022 18:21:01 +0000 (11:21 -0700)]
[flang] Document the Intrinsic Types

Describe the built-in integer, real, complex and logical
types implemented in flang, capturing the as-implemented
characteristics.

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

2 years ago[GlobalOpt] Add more tests with large number of stores to globals.
Florian Hahn [Wed, 13 Jul 2022 18:13:21 +0000 (11:13 -0700)]
[GlobalOpt] Add more tests with large number of stores to globals.

Add a few more test cases for D129525.

2 years ago[trace][intel pt] Measure the time it takes to decode a thread in per-cpu mode
Peicong Wu [Wed, 29 Jun 2022 18:42:14 +0000 (11:42 -0700)]
[trace][intel pt] Measure the time it takes to decode a thread in per-cpu mode

This metric was missing. We were only measuring in per-thread mode, and
this completes the work.

For a sample trace I have, the `dump info` command shows

```
Timing for this thread:
    Decoding instructions: 0.12s

```

I also improved a bit the TaskTime function so that callers don't need to
specify the template argument

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

2 years ago[RISCV] Exploit fact that vscale is always power of two to replace urem sequence
Philip Reames [Tue, 12 Jul 2022 20:47:07 +0000 (13:47 -0700)]
[RISCV] Exploit fact that vscale is always power of two to replace urem sequence

When doing scalable vectorization, the loop vectorizer uses a urem in the computation of the vector trip count. The RHS of that urem is a (possibly shifted) call to @llvm.vscale.

vscale is effectively the number of "blocks" in the vector register. (That is, types such as <vscale x 8 x i8> and <vscale x 1 x i8> both fill one 64 bit block, and vscale is essentially how many of those blocks there are in a single vector register at runtime.)

We know from the RISCV V extension specification that VLEN must be a power of two between ELEN and 2^16. Since our block size is 64 bits, the must be a power of two numbers of blocks. (For everything other than VLEN<=32, but that's already broken.)

It is worth noting that AArch64 SVE specification explicitly allows non-power-of-two sizes for the vector registers and thus can't claim that vscale is a power of two by this logic.

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

2 years ago[trace][intel pt] Add a nice parser for the trace size
rnofenko [Tue, 12 Jul 2022 17:05:14 +0000 (10:05 -0700)]
[trace][intel pt] Add a nice parser for the trace size

Thanks to rnofenko@fb.com for coming up with these changes.

This diff adds support for passing units in the trace size inputs. For example,
it's now possible to specify 64KB as the trace size, instead of the
problematic 65536. This makes the user experience a bit friendlier.

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

2 years ago[flang] Intrinsic module file update
V Donaldson [Tue, 12 Jul 2022 16:27:40 +0000 (09:27 -0700)]
[flang] Intrinsic module file update

Use symbolic iostat values in iso_fortran_env.f90.
Add generic names to the interfaces in __fortran_ieee_exceptions.f90.

2 years ago[docs][llvm-objcopy] Fix unpaired `<align>``
Fangrui Song [Wed, 13 Jul 2022 17:14:25 +0000 (10:14 -0700)]
[docs][llvm-objcopy] Fix unpaired `<align>``

2 years ago[llvm-objcopy][ELF] Add --set-section-type
Fangrui Song [Wed, 13 Jul 2022 17:04:21 +0000 (10:04 -0700)]
[llvm-objcopy][ELF] Add --set-section-type

The request is mentioned on D129053. I feel that having this functionality is
mildly useful (not strong).

* Rename .ctors to .init_array and change sh_type to SHT_INIT_ARRAY (GNU objcopy
  detects the special name but we don't).
* Craft tests for a new SHT_LLVM_* extension

Reviewed By: jhenderson

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

2 years ago[libc][NFC] Make explicit casts for gcc
Alex Brachet [Wed, 13 Jul 2022 16:53:39 +0000 (16:53 +0000)]
[libc][NFC] Make explicit casts for gcc

2 years ago[libc] Add explicit casts for gcc
Alex Brachet [Wed, 13 Jul 2022 16:52:13 +0000 (16:52 +0000)]
[libc] Add explicit casts for gcc

2 years ago[DAG] SimplifyDemandedVectorElts - adjust demanded elements for selection mask for...
Simon Pilgrim [Wed, 13 Jul 2022 16:35:38 +0000 (17:35 +0100)]
[DAG] SimplifyDemandedVectorElts - adjust demanded elements for selection mask for known zero results

If an element is known zero from both selections then it shouldn't matter what the selection mask element is.

2 years ago[LinkerWrapper] Fix linker-wrapper not working with host-LTO
Joseph Huber [Wed, 13 Jul 2022 16:31:29 +0000 (12:31 -0400)]
[LinkerWrapper] Fix linker-wrapper not working with host-LTO

2 years agolowerParallel is also called on unit-size, one-sided reduction dims
Benoit Jacob [Mon, 4 Jul 2022 20:25:24 +0000 (20:25 +0000)]
lowerParallel is also called on unit-size, one-sided reduction dims

See: https://gist.github.com/bjacob/d8be8ec7e70ed0be4b3a5794ced2a7e8

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

2 years agoRevert "[clang] Implement ElaboratedType sugaring for types written bare"
Jonas Devlieghere [Wed, 13 Jul 2022 16:11:45 +0000 (09:11 -0700)]
Revert "[clang] Implement ElaboratedType sugaring for types written bare"

This reverts commit bdc6974f92304f4ed542241b9b89ba58ba6b20aa because it
breaks all the LLDB tests that import the std module.

  import-std-module/array.TestArrayFromStdModule.py
  import-std-module/deque-basic.TestDequeFromStdModule.py
  import-std-module/deque-dbg-info-content.TestDbgInfoContentDequeFromStdModule.py
  import-std-module/forward_list.TestForwardListFromStdModule.py
  import-std-module/forward_list-dbg-info-content.TestDbgInfoContentForwardListFromStdModule.py
  import-std-module/list.TestListFromStdModule.py
  import-std-module/list-dbg-info-content.TestDbgInfoContentListFromStdModule.py
  import-std-module/queue.TestQueueFromStdModule.py
  import-std-module/stack.TestStackFromStdModule.py
  import-std-module/vector.TestVectorFromStdModule.py
  import-std-module/vector-bool.TestVectorBoolFromStdModule.py
  import-std-module/vector-dbg-info-content.TestDbgInfoContentVectorFromStdModule.py
  import-std-module/vector-of-vectors.TestVectorOfVectorsFromStdModule.py

https://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/45301/

2 years ago[llvm-reduce] Fix crash when reducing integer vectors to 1
Fraser Cormack [Wed, 13 Jul 2022 10:10:41 +0000 (11:10 +0100)]
[llvm-reduce] Fix crash when reducing integer vectors to 1

Integer vectors were previously ignored when reducing operands. When
6b8bd0f72 introduced support for reducing floating-point
scalars/vectors, the vector case was written to only handle
floating-point values. It would crash when creating an invalid
ConstantFP from the integer element type.

Instead of reinstating the old integer vector behaviour, we might as
well reduce integer vectors to all-one splats.

A couple of existing tests has also been renamed from "remove" to
"reduce" to better reflect the deltas they test.

Reviewed By: arsenm

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

2 years ago[mlir] Plumb through default attribute populate for extensible dialect.
Jacques Pienaar [Wed, 13 Jul 2022 16:05:04 +0000 (09:05 -0700)]
[mlir] Plumb through default attribute populate for extensible dialect.

2 years agoUpdate sanitize_* IR documentation.
Mitch Phillips [Wed, 13 Jul 2022 15:39:35 +0000 (08:39 -0700)]
Update sanitize_* IR documentation.

sanitize_none was never actually committed, and should be removed.

no_sanitize_memtag is to be removed in D128950.

sanitize_memtag is new in D128950.

Also update the comments on other no_sanitize_* to indicate that they're
impacted by the sanitizer ignorelist and the global-disable attribute.

Reviewed By: eugenis

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

2 years agoAdd missing sanitizer metadata plumbing from CFE.
Mitch Phillips [Wed, 13 Jul 2022 15:39:31 +0000 (08:39 -0700)]
Add missing sanitizer metadata plumbing from CFE.

clang misses attaching sanitizer metadata for external globals.

Reviewed By: eugenis

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

2 years agoRemove 'no_sanitize_memtag'. Add 'sanitize_memtag'.
Mitch Phillips [Wed, 13 Jul 2022 15:39:26 +0000 (08:39 -0700)]
Remove 'no_sanitize_memtag'. Add 'sanitize_memtag'.

For MTE globals, we should have clang emit the attribute for all GV's
that it creates, and then use that in the upcoming AArch64 global
tagging IR pass. We need a positive attribute for this sanitizer (rather
than implicit sanitization of all globals) because it needs to interact
with other parts of LLVM, including:

  1. Suppressing certain global optimisations (like merging),
  2. Emitting extra directives by the ASM writer, and
  3. Putting extra information in the symbol table entries.

While this does technically make the LLVM IR / bitcode format
non-backwards-compatible, nobody should have used this attribute yet,
because it's a no-op.

Reviewed By: eugenis

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

2 years ago[libc] Reset rounding mode after fsetround tests
Alex Brachet [Wed, 13 Jul 2022 15:42:47 +0000 (15:42 +0000)]
[libc] Reset rounding mode after fsetround tests

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

2 years ago[SystemZ] Enable `-mtune=` option in clang.
Kai Nacke [Wed, 13 Jul 2022 14:08:44 +0000 (10:08 -0400)]
[SystemZ] Enable `-mtune=` option in clang.

https://reviews.llvm.org/D128910 enabled handling of
attribute "tune-cpu" in LLVM. This PR now enables
option `-mtune` in clang, which then generates the
new attribute.

Reviewed By: uweigand

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

2 years ago[libc++][format] Improves parsing speed.
Mark de Wever [Sat, 9 Jul 2022 14:14:40 +0000 (16:14 +0200)]
[libc++][format] Improves parsing speed.

A format string like "{}" is quite common. In this case avoid parsing
the format-spec when it's not present. Before the parsing was always
called, therefore some refactoring is done to make sure the formatters
work properly when their parse member isn't called.

From the wording it's not entirely clear whether this optimization is
allowed

[tab:formatter]
```
  and the range [pc.begin(), pc.end()) from the last call to f.parse(pc).
```
Implies there's always a call to `f.parse` even when the format-spec
isn't present. Therefore this optimization isn't done for handle
classes; it's unclear whether that would break user defined formatters.

The improvements give a small reduciton is code size:
 719408   12472     488  732368   b2cd0 before
 718824   12472     488  731784   b2a88 after

The performance benefits when not using a format-spec are:

```
Comparing ./formatter_int.libcxx.out-baseline to ./formatter_int.libcxx.out
Benchmark                                                               Time             CPU      Time Old      Time New       CPU Old       CPU New
----------------------------------------------------------------------------------------------------------------------------------------------------
BM_Basic<uint32_t>                                                   -0.0688         -0.0687            67            62            67            62
BM_Basic<int32_t>                                                    -0.1105         -0.1107            73            65            73            65
BM_Basic<uint64_t>                                                   -0.1053         -0.1049            95            85            95            85
BM_Basic<int64_t>                                                    -0.0889         -0.0888            93            85            93            85
BM_BasicLow<__uint128_t>                                             -0.0655         -0.0655            96            90            96            90
BM_BasicLow<__int128_t>                                              -0.0693         -0.0694            97            90            97            90
BM_Basic<__uint128_t>                                                -0.0359         -0.0359           256           247           256           247
BM_Basic<__int128_t>                                                 -0.0414         -0.0414           239           229           239           229
```

For the cases where a format-spec is used the results remain similar,
some are faster some are slower, differing per run.

Reviewed By: ldionne, #libc

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

2 years ago[DAGCombine] fold (urem x, (lshr pow2, y)) -> (and x, (add (lshr pow2, y), -1))
Philip Reames [Wed, 13 Jul 2022 00:22:55 +0000 (17:22 -0700)]
[DAGCombine] fold (urem x, (lshr pow2, y)) -> (and x, (add (lshr pow2, y), -1))

We have the same fold in InstCombine - though implemented via OrZero flag on isKnownToBePowerOfTwo. The reasoning here is that either a) the result of the lshr is a power-of-two, or b) we have a div-by-zero triggering UB which we can ignore.

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

2 years ago[Flang] Fix path strings in CreateFIRLangRef.py
Dylan Fleming [Wed, 13 Jul 2022 14:20:59 +0000 (14:20 +0000)]
[Flang] Fix path strings in CreateFIRLangRef.py

In D129186, CreateFIRLangRef.py was created to help fix
formatting problems with FIRLangRef.md.

However, due to an error while rebasing, the last edit was lost,
as such the current path variables are Unix-style.

This patch addresses what was discussed in the previous patch and
now uses os.path.join instead.

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

2 years ago[InstCombine] Enable strtol folding with nonnull endptr
Martin Sebor [Wed, 13 Jul 2022 15:18:00 +0000 (09:18 -0600)]
[InstCombine] Enable strtol folding with nonnull endptr

Reviewed By: nikic

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

2 years ago[libc++][chrono] Adds operator<=> for day.
Mark de Wever [Sun, 26 Jun 2022 08:58:02 +0000 (10:58 +0200)]
[libc++][chrono] Adds operator<=> for day.

Since the calendar classes were introduced in C++20 there's no need to
keep the old comparison operators.

This commit does the day calender class, the other calendar classes will
be in a followup commit.

Implements parts of:
- P1614R2 The mothership has landed

Reviewed By: #libc, ldionne

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

2 years ago[clangd] Enable designator inlay hints by default.
Sam McCall [Tue, 12 Jul 2022 21:08:17 +0000 (23:08 +0200)]
[clangd] Enable designator inlay hints by default.

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

2 years ago[SCCP] Fix typo in previous commit
Nikita Popov [Wed, 13 Jul 2022 14:22:40 +0000 (16:22 +0200)]
[SCCP] Fix typo in previous commit

Ooops, I tested a build from the wrong checkout.

2 years ago[SCCP] Avoid ConstantExpr::get() call
Nikita Popov [Wed, 13 Jul 2022 14:20:34 +0000 (16:20 +0200)]
[SCCP] Avoid ConstantExpr::get() call

Use ConstantFoldUnaryOpOperand() API instead. This is in
preparation for removing fneg constant expressions.

2 years ago[TargetFolder] Use DL-aware folding for icmp
Nikita Popov [Wed, 13 Jul 2022 13:35:13 +0000 (15:35 +0200)]
[TargetFolder] Use DL-aware folding for icmp

The Fold() call was accidentally dropped in
138fcc5f7619b5f066b9529a41ed47695149c8df, though it doesn't seem
to make a difference in practice (no test changes).

2 years ago[IRBuilder] Migrate fneg to fold infrastructure
Nikita Popov [Wed, 13 Jul 2022 12:51:04 +0000 (14:51 +0200)]
[IRBuilder] Migrate fneg to fold infrastructure

Make use of a single FoldUnOpFMF() API, though in practice FNeg
is the only unary operation that exists.

This is likely NFC in practice, because users of InstSimplifyFolder
don't create fneg.

2 years ago[clang] Ignore DependentSizeArray in -Warray-parameter
serge-sans-paille [Wed, 13 Jul 2022 12:53:04 +0000 (14:53 +0200)]
[clang] Ignore DependentSizeArray in -Warray-parameter

Acknowledge we don't know how to handle those yet.

2 years ago[AArch64] Regenerate arm64-vshuffle.ll test checks
Simon Pilgrim [Wed, 13 Jul 2022 12:52:07 +0000 (13:52 +0100)]
[AArch64] Regenerate arm64-vshuffle.ll test checks

Not quite ready to use the update script, but can clean it up slightly so the diffs aren't so great.

2 years ago[AArch64] Regenerate arm64-vselect.ll test checks
Simon Pilgrim [Wed, 13 Jul 2022 12:50:30 +0000 (13:50 +0100)]
[AArch64] Regenerate arm64-vselect.ll test checks

The ushll -> sshll FIXME had been fixed long ago, but nobody noticed because the test wasn't checking for either.....

2 years ago[ARM] Regenerate select_xform.ll test checks
Simon Pilgrim [Wed, 13 Jul 2022 12:48:46 +0000 (13:48 +0100)]
[ARM] Regenerate select_xform.ll test checks

2 years ago[Fixed Point] Fix C++20 compilation error
Antonio Frighetto [Wed, 13 Jul 2022 12:36:04 +0000 (08:36 -0400)]
[Fixed Point] Fix C++20 compilation error

Due to how operator== changed after operator<=> landing in C++20
(error: use of overloaded operator '==' is ambiguous (with operand
types 'const llvm::APSInt' and 'const unsigned long')),
CheckIntPartMin/CheckIntPartMax interfaces are now leveraging
APSInt::compareValues.

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

2 years agoRevert "Move instruction predicate verification to emitInstruction"
David Green [Wed, 13 Jul 2022 12:28:11 +0000 (13:28 +0100)]
Revert "Move instruction predicate verification to emitInstruction"

This reverts commit e2fb8c0f4b940e0285ee36c112469fa75d4b60ff as it does
not build for Release builds, and some buildbots are giving more warning
than I saw locally. Reverting to fix those issues.

2 years ago[IndVars][NFC] Make IVOperand parameter an instruction
Max Kazantsev [Wed, 13 Jul 2022 12:03:03 +0000 (19:03 +0700)]
[IndVars][NFC] Make IVOperand parameter an instruction

2 years ago[CodeGen] Keep track of decls that were deferred and have been emitted.
Jun Zhang [Wed, 13 Jul 2022 10:00:06 +0000 (18:00 +0800)]
[CodeGen] Keep track of decls that were deferred and have been emitted.

This patch adds a new field called EmittedDeferredDecls in CodeGenModule
that keeps track of decls that were deferred and have been emitted.

The intention of this patch is to solve issues in the incremental c++,
we'll lose info of decls that are lazily emitted when we undo their
usage.

See example below:

clang-repl> inline int foo() { return 42;}
clang-repl> int bar = foo();
clang-repl> %undo
clang-repl> int baz = foo();
JIT session error: Symbols not found: [ _Z3foov ]
error: Failed to materialize symbols: { (main, { baz, $.incr_module_2.inits.0,
orc_init_func.incr_module_2 }) }

Signed-off-by: Jun Zhang <jun@junz.org>
Differential Revision: https://reviews.llvm.org/D128782

2 years ago[clang][dataflow] Generate readable form of input and output of satisfiability checking.
Wei Yi Tee [Tue, 12 Jul 2022 18:38:52 +0000 (18:38 +0000)]
[clang][dataflow] Generate readable form of input and output of satisfiability checking.

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

2 years ago[SCEV][NFC] Make getStrengthenedNoWrapFlagsFromBinOp return optional
Max Kazantsev [Wed, 13 Jul 2022 11:53:29 +0000 (18:53 +0700)]
[SCEV][NFC] Make getStrengthenedNoWrapFlagsFromBinOp return optional

2 years agoMove instruction predicate verification to emitInstruction
David Green [Wed, 13 Jul 2022 11:53:32 +0000 (12:53 +0100)]
Move instruction predicate verification to emitInstruction

D25618 added a method to verify the instruction predicates for an
emitted instruction, through verifyInstructionPredicates added into
<Target>MCCodeEmitter::encodeInstruction. This is a very useful idea,
but the implementation inside MCCodeEmitter made it only fire for object
files, not assembly which most of the llvm test suite uses.

This patch moves the code into the <Target>_MC::verifyInstructionPredicates
method, inside the InstrInfo.  The allows it to be called from other
places, such as in this patch where it is called from the
<Target>AsmPrinter::emitInstruction methods which should trigger for
both assembly and object files. It can also be called from other places
such as verifyInstruction, but that is not done here (it tends to catch
errors earlier, but in reality just shows all the mir tests that have
incorrect feature predicates). The interface was also simplified
slightly, moving computeAvailableFeatures into the function so that it
does not need to be called externally.

The ARM, AMDGPU (but not R600), AVR, Mips and X86 backends all currently
show errors in the test-suite, so have been disabled with FIXME
comments.

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

2 years ago[BOLT][AArch64] Handle gold linker veneers
Vladislav Khmelevsky [Wed, 6 Jul 2022 21:01:33 +0000 (00:01 +0300)]
[BOLT][AArch64] Handle gold linker veneers

The gold linker veneers are written between functions without symbols,
so we to handle it specially in BOLT.

Vladislav Khmelevsky,
Advanced Software Technology Lab, Huawei

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

2 years ago[LLDB] Fix TestConvenienceVariables.test AArch64/Windows
Muhammad Omair Javaid [Wed, 13 Jul 2022 11:44:19 +0000 (16:44 +0500)]
[LLDB] Fix TestConvenienceVariables.test AArch64/Windows

This patch fixes TestConvenienceVariables.test for AArch64 Windows.
Clang/LLD was unable to find printf apparently available as a macro
definition in stdio.h.