platform/upstream/llvm.git
2 years agoSuppress signedness-comparison warning
Jeremy Morse [Mon, 16 Aug 2021 14:28:56 +0000 (15:28 +0100)]
Suppress signedness-comparison warning

This is a follow-up to 54a61c94f93.

2 years ago[analyzer] MallocChecker: Add a visitor to leave a note on functions that could have...
Kristóf Umann [Mon, 5 Jul 2021 13:11:46 +0000 (15:11 +0200)]
[analyzer] MallocChecker: Add a visitor to leave a note on functions that could have, but did not change ownership on leaked memory

This is a rather common feedback we get from out leak checkers: bug reports are
really short, and are contain barely any usable information on what the analyzer
did to conclude that a leak actually happened.

This happens because of our bug report minimizing effort. We construct bug
reports by inspecting the ExplodedNodes that lead to the error from the bottom
up (from the error node all the way to the root of the exploded graph), and mark
entities that were the cause of a bug, or have interacted with it as
interesting. In order to make the bug report a bit less verbose, whenever we
find an entire function call (from CallEnter to CallExitEnd) that didn't talk
about any interesting entity, we prune it (click here for more info on bug
report generation). Even if the event to highlight is exactly this lack of
interaction with interesting entities.

D105553 generalized the visitor that creates notes for these cases. This patch
adds a new kind of NoStateChangeVisitor that leaves notes in functions that
took a piece of dynamically allocated memory that later leaked as parameter,
and didn't change its ownership status.

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

2 years ago[DebugInfo][InstrRef] Honour too-much-debug-info cutouts
Jeremy Morse [Mon, 16 Aug 2021 13:46:52 +0000 (14:46 +0100)]
[DebugInfo][InstrRef] Honour too-much-debug-info cutouts

VarLoc based LiveDebugValues will abandon variable location propagation if
there are too many blocks and variable assignments in the function. If it
didn't, and we had (say) 1000 blocks and 1000 variables in scope, we'd end
up with 1 million DBG_VALUEs just at the start of blocks.

Instruction-referencing LiveDebugValues should honour this limitation too
(because the same limitation applies to it). Hoist the relevant command
line options into LiveDebugValues.cpp and pass it down into the
implementation classes as an argument to ExtendRanges. I've duplicated all
the run-lines in live-debug-values-cutoffs.mir to have an
instruction-referencing flavour.

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

2 years ago[Polly][Isl] Move to the new-polly-generator branch version of isl-noexceptions.h...
Riccardo Mori [Mon, 16 Aug 2021 13:52:24 +0000 (15:52 +0200)]
[Polly][Isl] Move to the new-polly-generator branch version of isl-noexceptions.h. NFCI

This is part of an effort to reduce the differences between the custom C++ bindings used right now by polly in `lib/External/isl/include/isl/isl-noxceptions.h` and the official isl C++ interface.

With this commit we are moving from the `polly-generator` branch to the `new-polly-generator` branch that is more mantainable and is based on the official C++ interface `cpp-checked.h`.

Changes made:
 - There are now many sublcasses for `isl::ast_node` representing different isl types. Use `isl::ast_node_for`, `isl::ast_node_user`, `isl::ast_node_block` and `isl::ast_node_mark` where needed.
 - There are now many sublcasses for `isl::schedule_node` representing different isl types. Use `isl::schedule_node_mark`, `isl::schedule_node_extension`, `isl::schedule_node_band` and `isl::schedule_node_filter` where needed.
 - Replace the `isl::*::dump` with `dumpIslObj` since the isl dump method is not exposed in the C++ interface.
 - `isl::schedule_node::get_child` has been renamed to `isl::schedule_node::child`
 - `isl::pw_multi_aff::get_pw_aff` has been renamed to `isl::pw_multi_aff::at`
 - The constructor `isl::union_map(isl::union_pw_multi_aff)` has been replaced with the static method `isl::union_map::from()`
 - Replace usages of `isl::val::add_ui` with `isl::val::add`
 - `isl::union_set_list::alloc` is now a constructor
 - All the `isl_size` values are now wrapped inside the class `isl::size` use `isl::size::release` to get the internal `isl_size` value where needed.
 - `isl-noexceptions.h` has been generated by https://github.com/patacca/isl/commit/73f5ed1f4d1f72582f731590ef9e43d9ab1956ad

No functional change intended.

Reviewed By: Meinersbur

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

2 years ago[analyzer][NFC] Split the main logic of NoStoreFuncVisitor to an abstract NoStateChan...
Kristóf Umann [Wed, 7 Jul 2021 09:58:26 +0000 (11:58 +0200)]
[analyzer][NFC] Split the main logic of NoStoreFuncVisitor to an abstract NoStateChangeVisitor class

Preceding discussion on cfe-dev: https://lists.llvm.org/pipermail/cfe-dev/2021-June/068450.html

NoStoreFuncVisitor is a rather unique visitor. As VisitNode is invoked on most
other visitors, they are looking for the point where something changed -- change
on a value, some checker-specific GDM trait, a new constraint.
NoStoreFuncVisitor, however, looks specifically for functions that *didn't*
write to a MemRegion of interesting. Quoting from its comments:

/// Put a diagnostic on return statement of all inlined functions
/// for which  the region of interest \p RegionOfInterest was passed into,
/// but not written inside, and it has caused an undefined read or a null
/// pointer dereference outside.

It so happens that there are a number of other similar properties that are
worth checking. For instance, if some memory leaks, it might be interesting why
a function didn't take ownership of said memory:

void sink(int *P) {} // no notes

void f() {
  sink(new int(5)); // note: Memory is allocated
                    // Well hold on, sink() was supposed to deal with
                    // that, this must be a false positive...
} // warning: Potential memory leak [cplusplus.NewDeleteLeaks]

In here, the entity of interest isn't a MemRegion, but a symbol. The property
that changed here isn't a change of value, but rather liveness and GDM traits
managed by MalloChecker.

This patch moves some of the logic of NoStoreFuncVisitor to a new abstract
class, NoStateChangeFuncVisitor. This is mostly calculating and caching the
stack frames in which the entity of interest wasn't changed.

Descendants of this interface have to define 3 things:

* What constitutes as a change to an entity (this is done by overriding
wasModifiedBeforeCallExit)
* What the diagnostic message should be (this is done by overriding
maybeEmitNoteFor.*)
* What constitutes as the entity of interest being passed into the function (this
is also done by overriding maybeEmitNoteFor.*)

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

2 years ago[X86] Add PR46315 test case
Simon Pilgrim [Mon, 16 Aug 2021 12:12:13 +0000 (13:12 +0100)]
[X86] Add PR46315 test case

2 years ago[MLIR][DISC] Revise ParallelLoopTilingPass with inbound_check mode
tashuang.zk [Mon, 16 Aug 2021 11:41:55 +0000 (13:41 +0200)]
[MLIR][DISC] Revise ParallelLoopTilingPass with inbound_check mode

Expand ParallelLoopTilingPass with an inbound_check mode.

In default mode, the upper bound of the inner loop is from the min op; in
inbound_check mode, the upper bound of the inner loop is the step of the outer
loop and an additional inbound check will be emitted inside of the inner loop.

This was 'FIXME' in the original codes and a typical usage is for GPU backends,
thus the outer loop and inner loop can be mapped to blocks/threads in seperate.

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

2 years ago[InstCombine] Add PR38021 nuw test case.
Simon Pilgrim [Mon, 16 Aug 2021 11:57:05 +0000 (12:57 +0100)]
[InstCombine] Add PR38021 nuw test case.

2 years ago[InstCombine] Regenerate AddOverFlow.ll test checks.
Simon Pilgrim [Mon, 16 Aug 2021 11:30:52 +0000 (12:30 +0100)]
[InstCombine] Regenerate AddOverFlow.ll test checks.

2 years agoRevert "[NFCI][IndVars] rewriteLoopExitValues(): nowadays SCEV should not change...
Roman Lebedev [Mon, 16 Aug 2021 11:30:00 +0000 (14:30 +0300)]
Revert "[NFCI][IndVars] rewriteLoopExitValues(): nowadays SCEV should not change `GEP` base pointer"

https://bugs.llvm.org/show_bug.cgi?id=51490 was filed.

This reverts commit 35a8bdc775817ce13a6c9b5cf81502052634aa1f.

2 years agotsan: fix unused var warnings in a test
Dmitry Vyukov [Mon, 16 Aug 2021 11:08:35 +0000 (13:08 +0200)]
tsan: fix unused var warnings in a test

Reviewed By: melver

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

2 years ago[LoopPeel] Add test with multiple exit blocks branching to unreachable.
Florian Hahn [Mon, 16 Aug 2021 10:48:25 +0000 (11:48 +0100)]
[LoopPeel] Add test with multiple exit blocks branching to unreachable.

Add test as suggested by @ebedev.ri in D108108.

2 years ago[OpenMP] libomp: cleanup: minor fixes to silence static analyzer.
AndreyChurbanov [Mon, 16 Aug 2021 10:39:23 +0000 (13:39 +0300)]
[OpenMP] libomp: cleanup: minor fixes to silence static analyzer.

Added couple more checks to silence KlocWork static code analyzer.

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

2 years ago[CLANG][PATCH][FPEnv] Add support for option -ffp-eval-method and extend #pragma...
Kazushi (Jam) Marukawa [Fri, 13 Aug 2021 10:30:44 +0000 (19:30 +0900)]
[CLANG][PATCH][FPEnv] Add support for option -ffp-eval-method and extend #pragma float_control similarly

Need to update a clang regression test for VE after
https://reviews.llvm.org/D93769.

Reviewed By: simoll

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

2 years ago[NFC] Remove unused code in llvm::createSimpleTargetReduction
David Sherwood [Mon, 16 Aug 2021 08:21:39 +0000 (09:21 +0100)]
[NFC] Remove unused code in llvm::createSimpleTargetReduction

2 years ago[PhaseOrdering] Add test for missed vectorization with vector::at calls.
Florian Hahn [Fri, 13 Aug 2021 10:23:58 +0000 (11:23 +0100)]
[PhaseOrdering] Add test for missed vectorization with vector::at calls.

This test illustrates missed vectorization of loops with multiple
std::vector::at calls, like

    int sum(std::vector<int> *A, std::vector<int> *B, int N) {
      int cost = 0;
      for (int i = 0; i < N; ++i)
        cost += A->at(i) + B->at(i);
      return cost;
    }

https://clang.godbolt.org/z/KbYoaPhvq

2 years ago[LoopUnroll] Add peeling tests with unreachable exits.
Florian Hahn [Fri, 13 Aug 2021 09:39:03 +0000 (10:39 +0100)]
[LoopUnroll] Add peeling tests with unreachable exits.

2 years agotsan: add new trace
Dmitry Vyukov [Thu, 5 Aug 2021 15:18:17 +0000 (17:18 +0200)]
tsan: add new trace

Add structures for the new trace format,
functions that serialize and add events to the trace
and trace replaying logic.

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

2 years agoRevert "[sanitizer] Define 32bit uptr as uint"
Florian Hahn [Mon, 16 Aug 2021 07:58:37 +0000 (08:58 +0100)]
Revert "[sanitizer] Define 32bit uptr as uint"

This reverts commit 45138f788c9b3c4ac5d9ae4479841c411c15190e.

It looks like this breaks building sanitizers on Darwin platforms on
Green Dragon

https://green.lab.llvm.org/green/job/clang-stage1-RA/23332/console

    FAILED: lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizerNoHooks.ios.dir/sanitizer_stacktrace.cpp.o
    /Users/buildslave/jenkins/workspace/clang-stage1-RA@2/clang-build/./bin/clang++  -DHAVE_RPC_XDR_H=0 -I/Users/buildslave/jenkins/workspace/clang-stage1-RA@2/llvm-project/compiler-rt/lib/sanitizer_common/.. -Wall -std=c++14 -Wno-unused-parameter -O2 -g -DNDEBUG -arch armv7 -arch armv7s -arch arm64 -arch armv7k -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk    -stdlib=libc++ -miphoneos-version-min=9.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.5.sdk -fPIC -fno-builtin -fno-exceptions -funwind-tables -fno-stack-protector -fno-sanitize=safe-stack -fvisibility=hidden -fno-lto -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta -O3 -g -Wno-gnu -Wno-variadic-macros -Wno-c99-extensions -Wno-format-pedantic -nostdinc++ -Wno-format -fno-rtti -Wframe-larger-than=570 -Wglobal-constructors -DSANITIZER_SUPPORTS_WEAK_HOOKS=0 -MD -MT lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizerNoHooks.ios.dir/sanitizer_stacktrace.cpp.o -MF lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizerNoHooks.ios.dir/sanitizer_stacktrace.cpp.o.d -o lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizerNoHooks.ios.dir/sanitizer_stacktrace.cpp.o -c '/Users/buildslave/jenkins/workspace/clang-stage1-RA@2/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.cpp'
    In file included from /Users/buildslave/jenkins/workspace/clang-stage1-RA@2/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.cpp:13:
    In file included from /Users/buildslave/jenkins/workspace/clang-stage1-RA@2/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h:15:
    /Users/buildslave/jenkins/workspace/clang-stage1-RA@2/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_common.h:1068:14: error: 'operator new' takes type size_t ('unsigned long') as first parameter
    inline void *operator new(__sanitizer::operator_new_size_type size,
                 ^
    1 error generated.

2 years agoRevert "Reland [SimplifyCFG] performBranchToCommonDestFolding(): form block-closed...
Roman Lebedev [Mon, 16 Aug 2021 07:53:15 +0000 (10:53 +0300)]
Revert "Reland [SimplifyCFG] performBranchToCommonDestFolding(): form block-closed SSA form before cloning instructions (PR51125)"

This is still wrong, as failing bots suggest.

This reverts commit 3d9beefc7d713ad8462d92427ccd17b9532ce904.

2 years agosanitizers: compile with -O1 under debug
Dmitry Vyukov [Thu, 12 Aug 2021 13:43:09 +0000 (15:43 +0200)]
sanitizers: compile with -O1 under debug

Tsan's check_memcpy.c test was disabled under debug because it failed.
But it points to real issues and does not help to just disable it.
I tried to enable it and see what fail and the first hit was default ctor for:

  struct ChainedOriginDepotDesc {
    u32 here_id;
    u32 prev_id;
  };

initializing these fields to 0's help partially,
but compiler still emits memset before calling ctor.
I did not try to see what's the next failure, because if it fails
on such small structs, it won't be realistic to fix everything
and keep working.

Compile runtimes with -O1 under debug instead.
It seems to fix all current failures. At least I run check-tsan
under clang/gcc x debug/non-debug and all combinations passed.
-O1 does not usually use too aggressive optimizations
and sometimes even makes debugging easier because machine code
is not exceedingly verbose.

Reviewed By: vitalybuka

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

2 years ago[AArch64][SME] Disable NEON in streaming mode
Cullen Rhodes [Mon, 16 Aug 2021 07:31:55 +0000 (07:31 +0000)]
[AArch64][SME] Disable NEON in streaming mode

In streaming mode most of the NEON instruction set is illegal, disable
NEON when compiling with `+streaming-sve`, unless NEON is explictly
requested.

Subsequent patches will add support for the small subset of NEON
instructions that are legal in streaming mode.

Reviewed By: paulwalker-arm, david-arm

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

2 years agoReset all options in cl::ResetCommandLineParser()
Christian Sigg [Thu, 10 Jun 2021 06:56:15 +0000 (08:56 +0200)]
Reset all options in cl::ResetCommandLineParser()

Reset cl::Positional, cl::Sink and cl::ConsumeAfter options as well in cl::ResetCommandLineParser().

Reviewed By: rriddle, sammccall

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

2 years agosanitizer_common: fix format string in LibIgnore
Dmitry Vyukov [Mon, 16 Aug 2021 07:43:26 +0000 (09:43 +0200)]
sanitizer_common: fix format string in LibIgnore

uptr should be printed with %zu.

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

2 years ago[mlir] Set top-down traversal for LinalgElementwiseOpFusion
Tres Popp [Tue, 10 Aug 2021 11:53:59 +0000 (13:53 +0200)]
[mlir] Set top-down traversal for LinalgElementwiseOpFusion

The primary pattern for this pass clones many operations from producers
to consumers. Doing this top down prevents duplicated work when a
producer has multiple consumers, if it also is consuming another
linalg.generic.

As an example, a chain of ~2600 generics that are fused into ~70
generics was resulting in 16255 pattern invocations. This took 14
seconds on one machine but takes only 0.3 seconds with top-down
traversal.

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

2 years agoAdd support of the future Debian (Debian 12 - Bookworm)
Sylvestre Ledru [Mon, 16 Aug 2021 07:07:33 +0000 (09:07 +0200)]
Add support of the future Debian (Debian 12 - Bookworm)
https://wiki.debian.org/DebianBookworm

ETA: 2023

2 years ago[clangd] Do not show inlay hints pertaining to code in other files
Nathan Ridge [Wed, 28 Jul 2021 05:58:28 +0000 (01:58 -0400)]
[clangd] Do not show inlay hints pertaining to code in other files

Fixes https://github.com/clangd/clangd/issues/817

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

2 years ago[X86] Support avx512fp16 compare instructions in the IntelInstPrinter.
Craig Topper [Mon, 16 Aug 2021 04:31:12 +0000 (12:31 +0800)]
[X86] Support avx512fp16 compare instructions in the IntelInstPrinter.

This enables printing of the mnemonics that contain the predicate
in the Intel printer. This requires accounting for the memory size
that is explicitly printed in Intel syntax. Those changes have been
synced to the ATT printer as well.

Reviewed By: craig.topper

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

2 years ago[test] Change llvm-xray options to use the preferred double-dash forms and change...
Fangrui Song [Mon, 16 Aug 2021 04:19:04 +0000 (21:19 -0700)]
[test] Change llvm-xray options to use the preferred double-dash forms and change -f= to -f

2 years ago[docs] Change llvm-xray options to use the preferred double-dash forms
Fangrui Song [Mon, 16 Aug 2021 04:09:35 +0000 (21:09 -0700)]
[docs] Change llvm-xray options to use the preferred double-dash forms

2 years ago[Analysis][SimplifyLibCalls] improve function signature check for memcmp
Sanjay Patel [Sun, 15 Aug 2021 18:14:33 +0000 (14:14 -0400)]
[Analysis][SimplifyLibCalls] improve function signature check for memcmp

This would assert/crash as shown in:
https://llvm.org/PR50850

The matching for bcmp/bcopy should probably also be updated,
but that's another patch.

2 years agoAdd missing triple for test
David Blaikie [Sun, 15 Aug 2021 19:30:52 +0000 (12:30 -0700)]
Add missing triple for test

2 years ago[X86] Prevent accidentally accepting cmpeqsh as a valid mnemonic.
Craig Topper [Sun, 15 Aug 2021 19:00:54 +0000 (12:00 -0700)]
[X86] Prevent accidentally accepting cmpeqsh as a valid mnemonic.

We should only accept as vcmpeqsh.

Same for all the other 31 comparison values.

2 years ago[X86] Modify the commuted load isel pattern for VCMPSHZrm to match VCMPSSZrm/VCMPSDZrm.
Craig Topper [Sun, 15 Aug 2021 18:42:33 +0000 (11:42 -0700)]
[X86] Modify the commuted load isel pattern for VCMPSHZrm to match VCMPSSZrm/VCMPSDZrm.

This allows commuting any immediate value. The previous code only
commuted equality immediates. This was inherited from an earlier
version of VCMPSSZrm/VCMPSDZrm.

2 years agoDWARFVerifier: Check section-relative references at the end of the section
David Blaikie [Sat, 14 Aug 2021 19:46:08 +0000 (12:46 -0700)]
DWARFVerifier: Check section-relative references at the end of the section

This ensures that debug_types references aren't looked for in
debug_info section.

Behavior is still going to be questionable in an unlinked object file -
since cross-cu references could refer to symbols in another .debug_info
(or, in theory, .debug_types) chunk - but if a producer only uses
ref_addr to refer to things within the same .debug_info chunk in an
object file (eg: whole program optimization/LTO - producing two CUs into
a single .debug_info section in an object file - the ref_addrs there
could be resolved relative to that .debug_info chunk, not needing to
consider comdat  (DWARFv5 type units or other creatures) chunks of
.debug_info, etc)

2 years ago[X86] Add vcmpsh/vcmpph to X86InstrInfo::commuteInstructionImpl.
Craig Topper [Sun, 15 Aug 2021 18:35:20 +0000 (11:35 -0700)]
[X86] Add vcmpsh/vcmpph to X86InstrInfo::commuteInstructionImpl.

They were already added to findCommuteOpIndices, but they also
need to be in X86InstrInfo::commuteInstructionImpl in order
to adjust the immediate control.

2 years ago[X86] Add some tests to show incorrect commuting of vcmpsh instructions.
Craig Topper [Sun, 15 Aug 2021 18:32:28 +0000 (11:32 -0700)]
[X86] Add some tests to show incorrect commuting of vcmpsh instructions.

2 years ago[x86] split memcmp tests for 32/64-bit targets; NFC
Sanjay Patel [Sun, 15 Aug 2021 17:39:28 +0000 (13:39 -0400)]
[x86] split memcmp tests for 32/64-bit targets; NFC

memcmp is defined as taking a size_t length arg,
so that differs depending on pointer size of the
target.

We casually matched non-compliant function signatures
as memcmp, but that can cause crashing as seen with
PR50850.

If we fix that bug, these tests would no longer be
testing the expected behavior for a 32-bit target,
so I have duplicated all tests and adjusted them
to match the stricter definition of memcmp/bcmp
by changing the length arg to i32 on a 32-bit target.

2 years ago[DAGCombiner] Stop visitEXTRACT_SUBVECTOR creating illegal BITCASTs post legalisation.
Paul Walker [Sun, 15 Aug 2021 13:24:20 +0000 (14:24 +0100)]
[DAGCombiner] Stop visitEXTRACT_SUBVECTOR creating illegal BITCASTs post legalisation.

visitEXTRACT_SUBVECTOR can sometimes create illegal BITCASTs when
removing "redundant" INSERT_SUBVECTOR operations.  This patch adds
an extra check to ensure such combines only occur after operation
legalisation if any resulting BITBAST is itself legal.

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

2 years ago[gn build] (manually) port 957334382cd1
Nico Weber [Sun, 15 Aug 2021 17:21:36 +0000 (13:21 -0400)]
[gn build] (manually) port 957334382cd1

2 years ago[AsmParser] Remove MDSignedOrUnsignedField (NFC)
Kazu Hirata [Sun, 15 Aug 2021 16:31:39 +0000 (09:31 -0700)]
[AsmParser] Remove MDSignedOrUnsignedField (NFC)

The last use was removed on Apr 18, 2020 in commit
aad3d578da0ddf6d0d3d95e5e09a32e47f6dfeb8.

2 years ago[InstCombine] Add call to matchSAddSubSat from min/max
David Green [Sun, 15 Aug 2021 16:25:16 +0000 (17:25 +0100)]
[InstCombine] Add call to matchSAddSubSat from min/max

This adds a call to matchSAddSubSat from smin/smax instrinsics, allowing
the same patterns to match if the canonical form of a min/max is an
intrinsics, not a icmp/select.

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

2 years agoReland [SimplifyCFG] performBranchToCommonDestFolding(): form block-closed SSA form...
Roman Lebedev [Sun, 15 Aug 2021 16:01:44 +0000 (19:01 +0300)]
Reland [SimplifyCFG] performBranchToCommonDestFolding(): form block-closed SSA form before cloning instructions (PR51125)

... with test change this time.

LLVM IR SSA form is "implicit" in `@pr51125`. While is a valid LLVM IR,
and does not require any PHI nodes, that completely breaks the further logic
in `CloneInstructionsIntoPredecessorBlockAndUpdateSSAUses()`
that updates the live-out uses of the bonus instructions.

What i believe we need to do, is to first make the SSA form explicit,
by inserting tautological PHI nodes, and rewriting the offending uses.

```
$ /builddirs/llvm-project/build-Clang12/bin/opt -load /repositories/alive2/build-Clang-release/tv/tv.so -load-pass-plugin /repositories/alive2/build-Clang-release/tv/tv.so -tv -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -bonus-inst-threshold=10 -tv -o /dev/null /tmp/test.ll

----------------------------------------
@global_pr51125 = global 4 bytes, align 4

define i32 @pr51125() {
%entry:
  br label %L

%L:
  %ld = load i32, * @global_pr51125, align 4
  %iszero = icmp eq i32 %ld, 0
  br i1 %iszero, label %exit, label %L2

%L2:
  store i32 4294967295, * @global_pr51125, align 4
  %cmp = icmp eq i32 %ld, 4294967295
  br i1 %cmp, label %L, label %exit

%exit:
  %r = phi i32 [ %ld, %L2 ], [ %ld, %L ]
  ret i32 %r
}
=>
@global_pr51125 = global 4 bytes, align 4

define i32 @pr51125() {
%entry:
  %ld.old = load i32, * @global_pr51125, align 4
  %iszero.old = icmp eq i32 %ld.old, 0
  br i1 %iszero.old, label %exit, label %L2

%L2:
  %ld2 = phi i32 [ %ld.old, %entry ], [ %ld, %L2 ]
  store i32 4294967295, * @global_pr51125, align 4
  %cmp = icmp ne i32 %ld2, 4294967295
  %ld = load i32, * @global_pr51125, align 4
  %iszero = icmp eq i32 %ld, 0
  %or.cond = select i1 %cmp, i1 1, i1 %iszero
  br i1 %or.cond, label %exit, label %L2

%exit:
  %ld1 = phi i32 [ poison, %L2 ], [ %ld.old, %entry ]
  %r = phi i32 [ %ld2, %L2 ], [ %ld.old, %entry ]
  ret i32 %r
}
Transformation seems to be correct!

```

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

Reviewed By: nikic

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

2 years agoRevert "[SimplifyCFG] performBranchToCommonDestFolding(): form block-closed SSA form...
Roman Lebedev [Sun, 15 Aug 2021 16:15:09 +0000 (19:15 +0300)]
Revert "[SimplifyCFG] performBranchToCommonDestFolding(): form block-closed SSA form before cloning instructions (PR51125)"

Forgot to stage the test change.

This reverts commit 78af5cb213b2f9fe3f47bf23947f14ac07024155.

2 years ago[SimplifyCFG] performBranchToCommonDestFolding(): form block-closed SSA form before...
Roman Lebedev [Sun, 15 Aug 2021 16:01:44 +0000 (19:01 +0300)]
[SimplifyCFG] performBranchToCommonDestFolding(): form block-closed SSA form before cloning instructions (PR51125)

LLVM IR SSA form is "implicit" in `@pr51125`. While is a valid LLVM IR,
and does not require any PHI nodes, that completely breaks the further logic
in `CloneInstructionsIntoPredecessorBlockAndUpdateSSAUses()`
that updates the live-out uses of the bonus instructions.

What i believe we need to do, is to first make the SSA form explicit,
by inserting tautological PHI nodes, and rewriting the offending uses.

```
$ /builddirs/llvm-project/build-Clang12/bin/opt -load /repositories/alive2/build-Clang-release/tv/tv.so -load-pass-plugin /repositories/alive2/build-Clang-release/tv/tv.so -tv -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -bonus-inst-threshold=10 -tv -o /dev/null /tmp/test.ll

----------------------------------------
@global_pr51125 = global 4 bytes, align 4

define i32 @pr51125() {
%entry:
  br label %L

%L:
  %ld = load i32, * @global_pr51125, align 4
  %iszero = icmp eq i32 %ld, 0
  br i1 %iszero, label %exit, label %L2

%L2:
  store i32 4294967295, * @global_pr51125, align 4
  %cmp = icmp eq i32 %ld, 4294967295
  br i1 %cmp, label %L, label %exit

%exit:
  %r = phi i32 [ %ld, %L2 ], [ %ld, %L ]
  ret i32 %r
}
=>
@global_pr51125 = global 4 bytes, align 4

define i32 @pr51125() {
%entry:
  %ld.old = load i32, * @global_pr51125, align 4
  %iszero.old = icmp eq i32 %ld.old, 0
  br i1 %iszero.old, label %exit, label %L2

%L2:
  %ld2 = phi i32 [ %ld.old, %entry ], [ %ld, %L2 ]
  store i32 4294967295, * @global_pr51125, align 4
  %cmp = icmp ne i32 %ld2, 4294967295
  %ld = load i32, * @global_pr51125, align 4
  %iszero = icmp eq i32 %ld, 0
  %or.cond = select i1 %cmp, i1 1, i1 %iszero
  br i1 %or.cond, label %exit, label %L2

%exit:
  %ld1 = phi i32 [ poison, %L2 ], [ %ld.old, %entry ]
  %r = phi i32 [ %ld2, %L2 ], [ %ld.old, %entry ]
  ret i32 %r
}
Transformation seems to be correct!

```

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

Reviewed By: nikic

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

2 years ago[NFC][SimplifyCFG] Autogenerate check lines in a test to declutter further update
Roman Lebedev [Sun, 15 Aug 2021 16:02:32 +0000 (19:02 +0300)]
[NFC][SimplifyCFG] Autogenerate check lines in a test to declutter further update

2 years ago[NFCI][IndVars] rewriteLoopExitValues(): nowadays SCEV should not change `GEP` base...
Roman Lebedev [Sun, 15 Aug 2021 15:59:32 +0000 (18:59 +0300)]
[NFCI][IndVars] rewriteLoopExitValues(): nowadays SCEV should not change `GEP` base pointer

Currently/previously, while SCEV guaranteed that it produces the same value,
the way it was produced may be illegal IR, so we have an ugly check that
the replacement is valid.

But now that the SCEV strictness wrt the pointer/integer types has been improved,
i believe this invariant is already upheld by the SCEV itself, natively.

I think we should add an assertion, wait for a week, and then, if all is good,
rip out all this checking.
Or we could just do the latter directly i guess.

This reverts commit rL127839.

Reviewed By: nikic

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

2 years ago[IndVars] Don't check for pointer exit count (NFC)
Nikita Popov [Sun, 15 Aug 2021 14:47:27 +0000 (16:47 +0200)]
[IndVars] Don't check for pointer exit count (NFC)

After recent changes, exit counts and BE taken counts are always
integers, so convert these to assertions.

While here, also convert the loop invariance checks to asserts.
Exit counts are always loop invariant.

2 years ago[NFC] Simply update a FIXME comment
Qiu Chaofan [Sun, 15 Aug 2021 14:43:46 +0000 (22:43 +0800)]
[NFC] Simply update a FIXME comment

X86 overrided LowerOperationWrapper was moved to common implementation
in a7eae62.

2 years ago[FunctionImport] Fix build with old mingw (NFC)
Nikita Popov [Sun, 15 Aug 2021 13:46:25 +0000 (15:46 +0200)]
[FunctionImport] Fix build with old mingw (NFC)

std::errc::operation_not_supported is not universally supported.
Make use of LLVM's errc interoperability header, which lists
known-good errc values.

2 years ago[ExecutionEngine] Check for libunwind before calling __register_frame
Harald van Dijk [Sun, 15 Aug 2021 12:35:53 +0000 (13:35 +0100)]
[ExecutionEngine] Check for libunwind before calling __register_frame

libgcc and libunwind have different flavours of __register_frame. Both
 flavours are already correctly handled, except that the code to handle
the libunwind flavour is guarded by __APPLE__. This change uses the
presence of __unw_add_dynamic_fde in libunwind instead to detect whether
libunwind is used, rather than hardcoding it as Apple vs. non-Apple.

Fixes PR44074.

Thanks to Albert Jin <albert.jin@gmail.com> and Chris Schafmeister
<chris.schaf@verizon.net> for identifying the problem.

Reviewed By: lhames

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

2 years ago[Clang] Updated warning-wall.c test file
Dávid Bolvanský [Sun, 15 Aug 2021 11:54:58 +0000 (13:54 +0200)]
[Clang] Updated warning-wall.c test file

-Wbool-operation was moved to -Wall and test file needs to be adjusted.

2 years ago[Clang] Put -Wbool-operation under -Wall
Dávid Bolvanský [Sun, 15 Aug 2021 11:34:24 +0000 (13:34 +0200)]
[Clang] Put -Wbool-operation under -Wall

To keep compatibility with GCC.

2 years ago[LoopVectorize] Don't emit remarks about lack of scalable vectors unless they're...
Paul Walker [Fri, 13 Aug 2021 11:47:51 +0000 (12:47 +0100)]
[LoopVectorize] Don't emit remarks about lack of scalable vectors unless they're specifically requested.

Previously we emitted a "does not support scalable vectors"
remark for all targets whenever vectorisation is attempted. This
pollutes the output for architectures that don't support scalable
vectors and is likely confusing to the user.

Instead this patch introduces a debug message that reports when
scalable vectorisation is allowed by the target and only issues
the previous remark when scalable vectorisation is specifically
requested, for example:

  #pragma clang loop vectorize_width(2, scalable)

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

2 years ago[AArch64] Fix comparison peephole opt with non-0/1 immediate (PR51476)
Nikita Popov [Sat, 14 Aug 2021 21:35:27 +0000 (23:35 +0200)]
[AArch64] Fix comparison peephole opt with non-0/1 immediate (PR51476)

This is a non-intrusive fix for
https://bugs.llvm.org/show_bug.cgi?id=51476 intended for backport
to the 13.x release branch. It expands on the current hack by
distinguishing between CmpValue of 0, 1 and 2, where 0 and 1 have
the obvious meaning and 2 means "anything else". The new optimization
from D98564 should only be performed for CmpValue of 0 or 1.

For main, I think we should switch the analyzeCompare() and
optimizeCompare() APIs to use int64_t instead of int, which is in
line with MachineOperand's notion of an immediate, and avoids this
problem altogether.

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

2 years agoRevert "[Remarks] Emit optimization remarks for atomics generating CAS loop"
Dávid Bolvanský [Sun, 15 Aug 2021 09:44:13 +0000 (11:44 +0200)]
Revert "[Remarks] Emit optimization remarks for atomics generating CAS loop"

This reverts commit 435785214f73ff0c92e97f2ade6356e3ba3bf661. Still same compile time issues for -O0 -g, eg. +1.3% for sqlite3.

2 years ago[flang][nfc] Move `Semantics` from `FrontendAction` to `CompilerInstance`
Andrzej Warzynski [Fri, 13 Aug 2021 13:03:21 +0000 (13:03 +0000)]
[flang][nfc] Move `Semantics` from `FrontendAction` to `CompilerInstance`

`CompilerInstance` is a more appropriate place for a key component of
the frontend like `Semantics`.

This change opens a path for us to introduce new frontend actions that
will also run semantics, but for which inheriting from
`PrescanAndSemaAction` wouldn't make much sense. For example, for
code-gen actions we plan to introduce a dedicate hierarchy of action
classes.

I've also added a doxyment for `CompilerInstance` to add a bit of
context for this change (and also make future refactoring more informed).
As `CompilerInstance` in Flang has been inspired by its counterpart in
Clang, this comment is roughly a verbatim copy of the comment in Clang
(with some adjustments from me). Credits to Daniel Dunbar for the great
design and the original comment.

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

2 years ago[asan][test] Un-xfail Posix/unpoison-alternate-stack.cpp on Solaris again
Rainer Orth [Sun, 15 Aug 2021 07:21:08 +0000 (09:21 +0200)]
[asan][test] Un-xfail Posix/unpoison-alternate-stack.cpp on Solaris again

`Posix/unpoison-alternate-stack.cpp` currently `XPASS`es on Solaris.  The
`XFAIL` had already been removed in D97933
<https://reviews.llvm.org/D97933>, but reintroduced by commit
f03d29601e0951da2c88f07d4234128e14e87870
<https://reviews.llvm.org/rGf03d29601e0951da2c88f07d4234128e14e87870> which
was never posted or justified.

Given the `XPASS`, this obviously wasn't NFC, so I suggest to remove it again.

Tested on `amd64-pc-solaris2.11` and `x86_64-pc-linux-gnu`.

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

2 years ago[Remarks] Emit optimization remarks for atomics generating CAS loop
Anshil Gandhi [Sun, 15 Aug 2021 05:37:15 +0000 (23:37 -0600)]
[Remarks] Emit optimization remarks for atomics generating CAS loop

Implements ORE in AtomicExpand pass to report atomics generating
a compare and swap loop.

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

2 years ago[Linker] Import GlobalIFunc when importing symbols from another module
Itay Bookstein [Sun, 15 Aug 2021 05:01:10 +0000 (22:01 -0700)]
[Linker] Import GlobalIFunc when importing symbols from another module

Reviewed By: MaskRay

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

2 years ago[msan] Fix ppc64 format warning
Vitaly Buka [Sun, 15 Aug 2021 01:42:05 +0000 (18:42 -0700)]
[msan] Fix ppc64 format warning

2 years ago[sanitizer] Improve VSNPrintf internal diagnostics
Vitaly Buka [Sun, 15 Aug 2021 01:33:03 +0000 (18:33 -0700)]
[sanitizer] Improve VSNPrintf internal diagnostics

2 years ago[X86] Add parentheses around casts in X86 intrinsic headers.
Craig Topper [Sun, 15 Aug 2021 00:24:21 +0000 (17:24 -0700)]
[X86] Add parentheses around casts in X86 intrinsic headers.

Fixes PR51324.

2 years agosanitizer_common: support %l in format strings
Dmitry Vyukov [Sun, 15 Aug 2021 00:41:14 +0000 (17:41 -0700)]
sanitizer_common: support %l in format strings

Currently we only support %z and %ll width modifiers,
but surprisingly not %l. This makes it impossible to print longs
(sizeof(long) not necessary equal to sizeof(size_t)).
We had some printf's that printed longs with %zu,
but that's wrong and now with __attribute__((format)) in place
they are flagged by compiler. So we either have a choice of
doing static_cast<uptr>(long) everywhere or add %l.
Adding %l looks better, that's a standard modifier.

Reviewed By: vitalybuka

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

2 years ago[X86] AVX512FP16 instructions enabling 2/6
Wang, Pengfei [Sun, 15 Aug 2021 00:17:30 +0000 (08:17 +0800)]
[X86] AVX512FP16 instructions enabling 2/6

Enable FP16 binary operator instructions.

Ref.: https://software.intel.com/content/www/us/en/develop/download/intel-avx512-fp16-architecture-specification.html

Reviewed By: LuoYuanke

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

2 years ago[sanitizer] Define 32bit uptr as uint
Vitaly Buka [Sat, 14 Aug 2021 23:51:10 +0000 (16:51 -0700)]
[sanitizer] Define 32bit uptr as uint

This makes it consistent with uintptr_t.

2 years ago[sanitizer] Fix format string
Vitaly Buka [Sat, 14 Aug 2021 23:26:06 +0000 (16:26 -0700)]
[sanitizer] Fix format string

2 years ago[X86] Use a do {} while (0) in the _MM_EXTRACT_FLOAT implementation.
Craig Topper [Sat, 14 Aug 2021 23:41:50 +0000 (16:41 -0700)]
[X86] Use a do {} while (0) in the _MM_EXTRACT_FLOAT implementation.

Previously we just used {}, but that doesn't work in situations
like this.

if (1)
  _MM_EXTRACT_FLOAT(d, x, n);
else
  ...

The semicolon would terminate the if.

2 years ago[X86] Use __builtin_bit_cast _mm_extract_ps instead of type punning through a union...
Craig Topper [Sat, 14 Aug 2021 23:34:52 +0000 (16:34 -0700)]
[X86] Use __builtin_bit_cast _mm_extract_ps instead of type punning through a union. NFC

2 years ago[test] Avoid unportable echo in Other/lit-quoting.txt
Rainer Orth [Sat, 14 Aug 2021 22:20:47 +0000 (00:20 +0200)]
[test] Avoid unportable echo in Other/lit-quoting.txt

`LLVM :: Other/lit-quoting.txt` currently `FAIL`s on Solaris:

  llvm/test/Other/lit-quoting.txt:8:9: error: CHECK2: expected string not found in input
  CHECK2: {{^a\[b\\c$}}
          ^
  <stdin>:1:1: note: scanning from here
  a[b
  ^

This happens because echo with backslashes or special characters is
unportable, as extensively documented in the Autoconf manual.  In the case
at hand, `echo 'a[b\c'` yields `a[b\c` on Linux, but `a[b` (no newline) on
Solaris.

This patch fixes this by using the portable alternative suggested in the
Autoconf manual.

Tested on `amd64-pc-solaris2.11`, `sparcv9-sun-solaris2.11`, and
`x86_64-pc-linux-gnu`.

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

2 years agoSimplify a .mailmap entry
Nico Weber [Sat, 14 Aug 2021 21:58:21 +0000 (17:58 -0400)]
Simplify a .mailmap entry

Only one person committed with these email addresses, so there's no need to use
the map-different-names-for-one-email-address syntax.

No behavior change.

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

2 years ago[InstCombine] Extend sadd.sat tests to include min/max patterns. NFC
David Green [Sat, 14 Aug 2021 21:48:10 +0000 (22:48 +0100)]
[InstCombine] Extend sadd.sat tests to include min/max patterns. NFC

This tests code starting from smin/smax, as opposed to the icmp/select
form. Also adds a ARM MVE phase ordering test for vectorizing to
sadd.sat from the original IR.

2 years ago[MLIR] Move TestDialect to ::test namespace
Stephen Neuendorffer [Thu, 24 Sep 2020 18:54:46 +0000 (11:54 -0700)]
[MLIR] Move TestDialect to ::test namespace

While the changes are extensive, they basically fall into a few
categories:
1) Moving the TestDialect itself.
2) Updating C++ code in tablegen to explicitly use ::mlir, since it
will be put in a headers that shouldn't expect a 'using'.
3) Updating some generic MLIR Interface definitions to do the same thing.
4) Updating the Tablegen generator in a few places to be explicit about
namespaces
5) Doing the same thing for llvm references, since we no longer pick
up the definitions from mlir/Support/LLVM.h

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

2 years ago[Tests] Remove explicit -enable-mssa-loop-dependency options (NFC)
Nikita Popov [Sat, 14 Aug 2021 18:54:19 +0000 (20:54 +0200)]
[Tests] Remove explicit -enable-mssa-loop-dependency options (NFC)

This is enabled by default. Drop explicit uses in preparation for
removing the option.

Also drop RUN lines that are now the same (typically modulo a
-verify-memoryssa option).

2 years ago[JITLink] Unify x86-64 MachO and ELF 's optimize GOT/Stub function
luxufan [Sat, 14 Aug 2021 16:30:42 +0000 (00:30 +0800)]
[JITLink] Unify x86-64 MachO and ELF 's optimize GOT/Stub function

This patch  unify optimizeELF_x86_64_GOTAndStubs and optimizeMachO_x86_64_GOTAndStubs into a pure optimize_x86_64_GOTAndStubs

Reviewed By: lhames

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

2 years ago[Aarch64] Remove redundant c_str (NFC)
Kazu Hirata [Sat, 14 Aug 2021 15:49:40 +0000 (08:49 -0700)]
[Aarch64] Remove redundant c_str (NFC)

Identified with readability-redundant-string-cstr.

2 years ago[clang-format] Distinguish K&R C function definition and attribute
Owen [Thu, 12 Aug 2021 13:12:25 +0000 (06:12 -0700)]
[clang-format] Distinguish K&R C function definition and attribute

This is a follow-up to https://reviews.llvm.org/D107950 which
missed user-defined types in K&R C.

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

2 years ago[LoopIdiom] let the pass deal with runtime memset size
eopXD [Sat, 14 Aug 2021 07:58:05 +0000 (15:58 +0800)]
[LoopIdiom] let the pass deal with runtime memset size

The current LIR does not deal with runtime-determined memset-size. This patch
utilizes SCEV and check if the PointerStrideSCEV and the MemsetSizeSCEV are equal.
Before comparison the pass would try to fold the expression that is already
protected by the loop guard.

Testcase file `memset-runtime.ll`, `memset-runtime-debug.ll` added.

This patch deals with proper loop-idiom. Proceeding patch wants to deal with SCEV-s
that are inequal after folding with the loop guards.

Reviewed By: lebedev.ri, Whitney

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

2 years ago[clang-tidy] [PR50069] readability-braces-around-statements doesn't work well with...
mydeveloperday [Sat, 14 Aug 2021 11:05:21 +0000 (12:05 +0100)]
[clang-tidy] [PR50069] readability-braces-around-statements doesn't work well with [[likely]] [[unlikely]]

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

When clang-tidy sees:

```
if (true) [[unlikely]] {
    ...
}
```

It thinks the braces are missing and add them again.

```
if (true)  { [[unlikely]] {
    ...
  }
}
```

This revision aims to prevent that incorrect code generation

Reviewed By: aaron.ballman

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

2 years ago[clang-format] NFC update the ClangFormatStyleOption.rst following previous change
mydeveloperday [Sat, 14 Aug 2021 09:29:07 +0000 (10:29 +0100)]
[clang-format] NFC update the ClangFormatStyleOption.rst following previous change

clang/docs/tool/dump_format_style.py was not run as part of  {D99840}

Bring ClangFormatStyleOptions.rst back in line.

Reviewed By: HazardyKnusperkeks

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

2 years ago[NFC][DSE] Clean up KnownNoReads and MemorySSAScanLimit in DSE
Dawid Jurczak [Tue, 10 Aug 2021 10:56:44 +0000 (12:56 +0200)]
[NFC][DSE] Clean up KnownNoReads and MemorySSAScanLimit in DSE

Another simple cleanups set in DSE. CheckCache is removed since 1f1145006b32 and in consequence KnownNoReads is useless.
Also update description of MemorySSAScanLimit which default value is 150 instead 100.

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

2 years ago[JITLink][x86-64] Rename *Relaxable edges to *REXRelaxable.
Lang Hames [Sat, 14 Aug 2021 08:27:16 +0000 (18:27 +1000)]
[JITLink][x86-64] Rename *Relaxable edges to *REXRelaxable.

The existing relaxable edges all assume a REX prefix. ELF includes non-REX
relaxations, so rename these edges to make room for the new kinds.

2 years ago[JITLink][x86-64] Rename BranchPCRel32ToPtrJumpStub(Relaxable -> Bypassable).
Lang Hames [Sat, 14 Aug 2021 07:49:31 +0000 (17:49 +1000)]
[JITLink][x86-64] Rename BranchPCRel32ToPtrJumpStub(Relaxable -> Bypassable).

ELF allows for branch optimizations other than bypass, so rename this edge kind
to avoid any confusion.

2 years agoRevert "[Remarks] Emit optimization remarks for atomics generating CAS loop"
Anshil Gandhi [Sat, 14 Aug 2021 05:58:04 +0000 (23:58 -0600)]
Revert "[Remarks] Emit optimization remarks for atomics generating CAS loop"

This reverts commit c4e5425aa579d21530ef1766d7144b38a347f247.

2 years ago[Remarks] Emit optimization remarks for atomics generating CAS loop
Anshil Gandhi [Fri, 13 Aug 2021 22:32:02 +0000 (16:32 -0600)]
[Remarks] Emit optimization remarks for atomics generating CAS loop

Implements ORE in AtomicExpandPass to report atomics generating a compare
and swap loop.

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

2 years ago[clang-tidy] fix duplicate '{}' in cppcoreguidelines-pro-type-member-init
liuke [Sat, 14 Aug 2021 02:47:27 +0000 (10:47 +0800)]
[clang-tidy] fix duplicate '{}' in cppcoreguidelines-pro-type-member-init

The overload of the constructor will repeatedly fix the member variables that need to be initialized.
Removed the duplicate '{}'.

```
struct A {
  A() {}
  A(int) {}
  int _var;  // int _var{}{};  <--  wrong fix
};
```

Reviewed By: aaron.ballman

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

2 years agoMigrate DWARFVerifier tests to lit-based yaml instead of gtest with embedded yaml
David Blaikie [Fri, 13 Aug 2021 05:56:43 +0000 (22:56 -0700)]
Migrate DWARFVerifier tests to lit-based yaml instead of gtest with embedded yaml

Improves maintainability (edit/modify the tests without recompiling) and
error messages (previously the failure would be a gtest failure
mentioning nothing of the input or desired text) and the option to
improve tests with more checks.

(maybe these tests shouldn't all be in separate files - we could
probably have DWARF yaml that contains multiple errors while still being
fairly maintainable - the various invalid offsets (ref_addr, rnglists,
ranges, etc) could probably be all in one test, but for the simple sake
of the migration I just did the mechanical thing here)

2 years ago[GlobalISel] Narrow binops feeding into G_AND with a mask
Jessica Paquette [Wed, 11 Aug 2021 20:20:33 +0000 (13:20 -0700)]
[GlobalISel] Narrow binops feeding into G_AND with a mask

This is a fairly common pattern:

```
%mask = G_CONSTANT iN <mask val>
%add = G_ADD %lhs, %rhs
%and = G_AND %add, %mask
```

We have combines to eliminate G_AND with a mask that does nothing.

If we combined the above to this:

```
%mask = G_CONSTANT iN <mask val>
%narrow_lhs = G_TRUNC %lhs
%narrow_rhs = G_TRUNC %rhs
%narrow_add = G_ADD %narrow_lhs, %narrow_rhs
%ext = G_ZEXT %narrow_add
%and = G_AND %ext, %mask
```

We'd be able to take advantage of those combines using the trunc + zext.

For this to work (or be beneficial in the best case)

- The operation we want to narrow then widen must only be used by the G_AND
- The G_TRUNC + G_ZEXT must be free
- Performing the operation at a narrower width must not produce a different
  value than performing it at the original width *after masking.*

Example comparison between SDAG + GISel: https://godbolt.org/z/63jzb1Yvj

At -Os for AArch64, this is a 0.2% code size improvement on CTMark/pairlocalign.

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

2 years agoGlobalISel: Add helper function for getting EVT from LLT
Matt Arsenault [Sat, 31 Jul 2021 16:05:33 +0000 (12:05 -0400)]
GlobalISel: Add helper function for getting EVT from LLT

This can only give an imperfect approximation, but is enough to avoid
crashing in places where we call into EVT functions starting from LLTs.

2 years ago[RISCV] Support RISCVISD::SELECT_CC in ComputeNumSignBitsForTargetNode.
Craig Topper [Sat, 14 Aug 2021 00:39:52 +0000 (17:39 -0700)]
[RISCV] Support RISCVISD::SELECT_CC in ComputeNumSignBitsForTargetNode.

2 years agoAMDGPU: Stop attributor adding attributes to intrinsic declarations
Matt Arsenault [Thu, 12 Aug 2021 19:19:54 +0000 (15:19 -0400)]
AMDGPU: Stop attributor adding attributes to intrinsic declarations

2 years agoAMDGPU: Add indirect and extern calls to attributor test
Matt Arsenault [Wed, 11 Aug 2021 23:01:30 +0000 (19:01 -0400)]
AMDGPU: Add indirect and extern calls to attributor test

2 years agoAMDGPU: Respect compute ABI attributes with unknown OS
Matt Arsenault [Fri, 13 Aug 2021 13:20:17 +0000 (09:20 -0400)]
AMDGPU: Respect compute ABI attributes with unknown OS

Unfortunately Mesa is still using amdgcn-- as the triple for OpenGL,
so we still have the awkward unknown OS case to deal with. Previously
if the HSA ABI intrinsics appeared, we we would not add the ABI
registers to the function. We would emit an error later, but we still
need to produce some compile result. Start adding the registers to any
compute function, regardless of the OS. This keeps the internal state
more consistent, and will help avoid numerous test crashes in a future
patch which starts assuming the ABI inputs are present on functions by
default.

2 years ago[NFC] One more AttributeList::getAttribute(FunctionIndex) -> getFnAttr()
Arthur Eubanks [Fri, 13 Aug 2021 23:56:42 +0000 (16:56 -0700)]
[NFC] One more AttributeList::getAttribute(FunctionIndex) -> getFnAttr()

2 years ago[CallPromotion] Check for inalloca/byval mismatch
Arthur Eubanks [Sat, 7 Aug 2021 07:28:19 +0000 (00:28 -0700)]
[CallPromotion] Check for inalloca/byval mismatch

Previously we would allow promotion even if the byval/inalloca
attributes on the call and the callee didn't match.

It's ok if the byval/inalloca types aren't the same. For example, LTO
importing may rename types.

Fixes PR51397.

Reviewed By: rnk

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

2 years ago[NFC] One more AttributeList::getAttribute(FunctionIndex) -> getFnAttr()
Arthur Eubanks [Fri, 13 Aug 2021 23:49:05 +0000 (16:49 -0700)]
[NFC] One more AttributeList::getAttribute(FunctionIndex) -> getFnAttr()

2 years ago[NFC] Make AttributeList::hasAttribute(AttributeList::ReturnIndex) its own method
Arthur Eubanks [Fri, 13 Aug 2021 21:35:48 +0000 (14:35 -0700)]
[NFC] Make AttributeList::hasAttribute(AttributeList::ReturnIndex) its own method

AttributeList::hasAttribute() is confusing. In an attempt to change the
name to something that suggests using other methods, fix up some
existing uses.

2 years ago[NFC] Cleanup calls to AttributeList::getAttribute(FunctionIndex)
Arthur Eubanks [Fri, 13 Aug 2021 21:16:44 +0000 (14:16 -0700)]
[NFC] Cleanup calls to AttributeList::getAttribute(FunctionIndex)

getAttribute() is confusing, use a clearer method.

2 years ago[libcxx][ranges] Move `namespace views` into `namespace ranges` and add an alias.
zoecarver [Fri, 13 Aug 2021 18:36:55 +0000 (11:36 -0700)]
[libcxx][ranges] Move `namespace views` into `namespace ranges` and add an alias.

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

2 years ago[lldb] skip host build for lldb_tblgen with LLDB_TABLEGEN_EXE set
Manoj Gupta [Fri, 13 Aug 2021 20:25:14 +0000 (13:25 -0700)]
[lldb] skip host build for lldb_tblgen with LLDB_TABLEGEN_EXE set

When cross compiling lldb-server, do not create a host build
for building lldb-tblgeb when LLDB_TABLEGEN_EXE is already
provided. This avoids an expensive and time-consuming build step
if lldb-tblgen was already built previously for host.

Reviewed By: JDevlieghere

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