platform/upstream/llvm.git
3 years agoAdded and used new target pseudo for v_cvt_pk_i16_i32, changes due to code review.
Thomas Symalla [Wed, 13 Jan 2021 14:23:45 +0000 (15:23 +0100)]
Added and used new target pseudo for v_cvt_pk_i16_i32, changes due to code review.

3 years agoFormatting changes
Thomas Symalla [Tue, 12 Jan 2021 12:02:49 +0000 (13:02 +0100)]
Formatting changes

3 years agoFormatting changes.
Thomas Symalla [Tue, 12 Jan 2021 12:01:04 +0000 (13:01 +0100)]
Formatting changes.

3 years agoUpdating formatting changes.
Thomas Symalla [Tue, 12 Jan 2021 11:58:36 +0000 (12:58 +0100)]
Updating formatting changes.

3 years agoResolve formatting changes.
Thomas Symalla [Tue, 12 Jan 2021 11:50:04 +0000 (12:50 +0100)]
Resolve formatting changes.

3 years agoCode changes yielded from review.
Thomas Symalla [Tue, 12 Jan 2021 08:40:21 +0000 (09:40 +0100)]
Code changes yielded from review.

3 years agoFixed tests.
Thomas Symalla [Mon, 11 Jan 2021 14:09:47 +0000 (15:09 +0100)]
Fixed tests.

3 years agoMove step to PreLegalizer
Thomas Symalla [Mon, 11 Jan 2021 13:50:45 +0000 (14:50 +0100)]
Move step to PreLegalizer

3 years agoMove Combiner to PreLegalize step
Thomas Symalla [Mon, 11 Jan 2021 13:50:28 +0000 (14:50 +0100)]
Move Combiner to PreLegalize step

3 years agoRenamed identifiers in lit
Thomas Symalla [Tue, 5 Jan 2021 10:24:27 +0000 (11:24 +0100)]
Renamed identifiers in lit

3 years agoReverted unintended git-format change.
Thomas Symalla [Tue, 5 Jan 2021 08:59:17 +0000 (09:59 +0100)]
Reverted unintended git-format change.

3 years agoFixed the lit tests and a bug in the implementation.
Thomas Symalla [Tue, 5 Jan 2021 08:58:00 +0000 (09:58 +0100)]
Fixed the lit tests and a bug in the implementation.

3 years agoRefactored the pattern matching.
Thomas Symalla [Mon, 4 Jan 2021 14:23:44 +0000 (15:23 +0100)]
Refactored the pattern matching.

3 years agoRenames
Thomas Symalla [Mon, 4 Jan 2021 10:27:30 +0000 (11:27 +0100)]
Renames

3 years agoAdded early exit.
Thomas Symalla [Tue, 22 Dec 2020 15:04:26 +0000 (16:04 +0100)]
Added early exit.

3 years agoAdded comments.
Thomas Symalla [Tue, 22 Dec 2020 13:49:24 +0000 (14:49 +0100)]
Added comments.

3 years agoclang-format
Thomas Symalla [Tue, 22 Dec 2020 13:40:07 +0000 (14:40 +0100)]
clang-format

3 years agoAdded clamp i64 to i16 global isel pattern.
Thomas Symalla [Tue, 22 Dec 2020 13:37:49 +0000 (14:37 +0100)]
Added clamp i64 to i16 global isel pattern.

3 years ago[RISCV] Replace NoX0 SDNodeXForm with a ComplexPattern to do the selection of the...
Craig Topper [Tue, 2 Feb 2021 07:53:54 +0000 (23:53 -0800)]
[RISCV] Replace NoX0 SDNodeXForm with a ComplexPattern to do the selection of the VL operand.

I think this is a more standard way of doing this.

Reviewed By: rogfer01

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

3 years ago[CSSPGO] Call site prioritized inlining for sample PGO
Wenlei He [Mon, 4 Jan 2021 00:43:06 +0000 (16:43 -0800)]
[CSSPGO] Call site prioritized inlining for sample PGO

This change implemented call site prioritized BFS profile guided inlining for sample profile loader. The new inlining strategy maximize the benefit of context-sensitive profile as mentioned in the follow up discussion of CSSPGO RFC. The change will not affect today's AutoFDO as it's opt-in. CSSPGO now defaults to the new FDO inliner, but can fall back to today's replay inliner using a switch (`-sample-profile-prioritized-inline=0`).

Motivation

With baseline AutoFDO, the inliner in sample profile loader only replays previous inlining, and the use of profile is only for pruning previous inlining that turned out to be cold. Due to the nature of replay, the FDO inliner is simple with hotness being the only decision factor. It has the following limitations that we're improving now for CSSPGO.
 - It doesn't take inline candidate size into account. Since it's doing replay, the size growth is bounded by previous CGSCC inlining. With context-sensitive profile, FDO inliner is no longer limited by previous inlining, so we need to take size into account to avoid significant size bloat.
 - The way it looks at hotness is not accurate. It uses total samples in an inlinee as proxy for hotness, while what really matters for an inline decision is the call site count. This is an unfortunate fall back because call site count and callee entry count are not reliable due to dwarf based correlation, especially for inlinees. Now paired with pseudo-probe, we have accurate call site count and callee's entry count, so we can use that to gauge hotness more accurately.
 - It treats all call sites from a block as hot as long as there's one call site considered hot. This is normally true, but since total samples is used as hotness proxy, this transitiveness within block magnifies the inacurate hotness heuristic. With pseduo-probe and the change above, this is no longer an issue for CSSPGO.

New FDO Inliner

Putting all the requirement for CSSPGO together, we need a top-down call site prioritized BFS inliner. Here're reasons why each component is needed.
 - Top-down: We need a top-down inliner to better leverage context-sensitive profile, so inlining is driven by accurate context profile, and post-inline is also accurate. This is already implemented in https://reviews.llvm.org/D70655.
 - Size Cap: For top-down inliner, taking function size into account for inline decision alone isn't sufficient to control size growth. We also need to explicitly cap size growth because with top-down inlining, we can grow inliner size significantly with large number of smaller inlinees even if each individually passes the cost/size check.
 - Prioritize call sites: With size cap, inlining order also becomes important, because if we stop inlining due to size budget limit, we'd want to use budget towards the most beneficial call sites.
 - BFS inline: Same as call site prioritization, if we stop inlining due to size budget limit, we want a balanced inline tree, rather than going deep on one call path.

Note that the new inliner avoids repeatedly evaluating same set of call site, so it should help with compile time too. For this reason, we could transition today's FDO inliner to use a queue with equal priority to avoid wasted reevaluation of same call site (TODO).

Speculative indirect call promotion and inlining is also supported now with CSSPGO just like baseline AutoFDO.

Tunings and knobs

I created tuning knobs for size growth/cap control, and for hot threshold separate from CGSCC inliner. The default values are selected based on initial tuning with CSSPGO.

Results

Evaluated with an internal LLVM fork couple months ago, plus another change to adjust hot-threshold cutoff for context profile (will send up after this one), the new inliner show ~1% geomean perf win on spec2006 with CSSPGO, while reducing code size too. The measurement was done using train-train setup, MonoLTO w/ new pass manager and pseudo-probe. Note that this is just a starting point - we hope that the new inliner will open up more opportunity with CSSPGO, but it will certainly take more time and effort to make it fully calibrated and ready for bigger workloads (we're working on it).

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

3 years ago[mlir][Standard] Extend n-D vector lowering to LLVM to [s|z]exti ops.
Nicolas Vasilache [Tue, 2 Feb 2021 07:41:07 +0000 (07:41 +0000)]
[mlir][Standard] Extend n-D vector lowering to LLVM to [s|z]exti ops.

[s|z]exti ops do not have the same operand and result type.
As a consequence, the lowering of the n-D vector form needs to be relaxed a bit.
This revision additionally performs a few NFC renamings of variables to make them more intuitive.

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

3 years ago[SelectionDAG] Prevent scalable vector warning from ComputeNumSignBits on extract_vec...
Craig Topper [Tue, 2 Feb 2021 07:08:46 +0000 (23:08 -0800)]
[SelectionDAG] Prevent scalable vector warning from ComputeNumSignBits on extract_vector_elt on a scalable vector.

3 years ago[NFC][Docs] Fix RAVFrontendAction doc's CMakelists.txt for Shared build
xgupta [Tue, 2 Feb 2021 07:23:45 +0000 (12:53 +0530)]
[NFC][Docs] Fix RAVFrontendAction doc's CMakelists.txt for Shared build

[[ https://clang.llvm.org/docs/RAVFrontendAction.html | Example tutorial ]] giving undefine reference error while building with BUILD_SHARED_LIBS=ON.

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

3 years agoRevert "[AArch64] Homogeneous Prolog and Epilog Size Optimization"
Puyan Lotfi [Tue, 2 Feb 2021 07:33:44 +0000 (02:33 -0500)]
Revert "[AArch64] Homogeneous Prolog and Epilog Size Optimization"

This reverts commit 0426be3df6180747bd68706db87a70580f064f0f.

Reverting due to some expensive-checks failures in tests.

3 years ago[test] Fix unused FileCheck prefixes in test/Reduce
Fangrui Song [Tue, 2 Feb 2021 07:05:46 +0000 (23:05 -0800)]
[test] Fix unused FileCheck prefixes in test/Reduce

3 years ago[test] Fix unused FileCheck prefixes in clang-tidy and one llvm/test/Reduce test
Fangrui Song [Tue, 2 Feb 2021 06:51:29 +0000 (22:51 -0800)]
[test] Fix unused FileCheck prefixes in clang-tidy and one llvm/test/Reduce test

3 years ago[ORC] Clear unused materializing info entries.
Lang Hames [Tue, 2 Feb 2021 06:44:12 +0000 (17:44 +1100)]
[ORC] Clear unused materializing info entries.

Once a symbol is Ready its MaterializingInfo entry is unused and can be removed
to free up some memory.

3 years ago[test] Fix unused FileCheck prefixes in compiler-rt
Fangrui Song [Tue, 2 Feb 2021 06:32:13 +0000 (22:32 -0800)]
[test] Fix unused FileCheck prefixes in compiler-rt

3 years ago[SCEV] Apply loop guards to divisibility tests
Gil Rapaport [Fri, 11 Dec 2020 08:09:51 +0000 (10:09 +0200)]
[SCEV] Apply loop guards to divisibility tests

Extend applyLoopGuards() to take into account conditions/assumes proving some
value %v to be divisible by D by rewriting %v to (%v / D) * D. This lets the
loop unroller and the loop vectorizer identify more loops as not requiring
remainder loops.

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

3 years ago[test] Default clang/test to FileCheck --allow-unused-prefixes=false
Fangrui Song [Tue, 2 Feb 2021 06:02:59 +0000 (22:02 -0800)]
[test] Default clang/test to FileCheck --allow-unused-prefixes=false

3 years ago[test] Fix unused FileCheck prefixes in lldb
Fangrui Song [Tue, 2 Feb 2021 05:45:51 +0000 (21:45 -0800)]
[test] Fix unused FileCheck prefixes in lldb

3 years ago[MLIR][TOSA] Comparison based elementwise operations for tosa-to-linalg
natashaknk [Tue, 2 Feb 2021 05:37:23 +0000 (21:37 -0800)]
[MLIR][TOSA] Comparison based elementwise operations for tosa-to-linalg

Comitted log, exp, maximum, minimum, comparison, ceil and floor conversions from TOSA to LinAlg. Support for signless integer and floating point.

Reviewed By: rsuderman

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

3 years ago[AArch64] Homogeneous Prolog and Epilog Size Optimization
Kyungwoo Lee [Tue, 2 Feb 2021 03:32:32 +0000 (22:32 -0500)]
[AArch64] Homogeneous Prolog and Epilog Size Optimization

Prologs and epilogs handle callee-save registers and tend to be irregular with
different immediate offsets that are not often handled by the MachineOutliner.
Commit D18619/a5335647d5e8 (combining stack operations) stretched irregularity
further.

This patch tries to emit homogeneous stores and loads with the same offset for
prologs and epilogs respectively. We have observed that this canonicalizes
(homogenizes) prologs and epilogs significantly and results in a greatly
increased chance of outlining, resulting in a code size reduction.

Despite the above results, there are still size wins to be had that the
MachineOutliner does not provide due to the special handling X30/LR. To handle
the LR case, his patch custom-outlines prologs and epilogs in place. It does
this by doing the following:

  * Injects HOM_Prolog and HOM_Epilog pseudo instructions during a Prolog and
    Epilog Injection Pass.
  * Lowers and optimizes said pseudos in a AArchLowerHomogneousPrologEpilog Pass.
  * Outlined helpers are created on demand. Identical helpers are merged by the linker.
  * An opt-in flag is introduced to enable this feature. Another threshold flag
    is also introduced to control the aggressiveness of outlining for application's need.

This reduced an average of 4% of code size on LLVM-TestSuite/CTMark targeting arm64/-Oz.

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

3 years ago[test] Fix unused FileCheck prefixes in compiler-rt/test
Fangrui Song [Tue, 2 Feb 2021 05:24:58 +0000 (21:24 -0800)]
[test] Fix unused FileCheck prefixes in compiler-rt/test

3 years agoclang-extra: fix incorrect use of std::lock_guard by adding variable name (identified...
Conrad Poelman [Tue, 2 Feb 2021 04:59:38 +0000 (05:59 +0100)]
clang-extra: fix incorrect use of std::lock_guard by adding variable name (identified by MSVC [[nodiscard]] error)

`std::lock_guard` is an RAII class that needs a variable name whose scope determines the guard's lifetime. This particular usage lacked a variable name, meaning the guard could be destroyed before the line that it was indented to protect.

This line was identified by building clang with the latest MSVC preview release, which declares the std::lock_guard constructor to be `[[nodiscard]]` to draw attention to such issues.

Reviewed By: kadircet

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

3 years ago[VFS] Add support to RedirectingFileSystem for mapping a virtual directory to one...
Nathan Hawes [Fri, 15 Jan 2021 07:33:52 +0000 (17:33 +1000)]
[VFS] Add support to RedirectingFileSystem for mapping a virtual directory to one in the external FS.

Previously file entries in the -ivfsoverlay yaml could map to a file in the
external file system, but directories had to list their contents in the form of
other file entries or directories. Allowing directory entries to map to a
directory in the external file system makes it possible to present an external
directory's contents in a different location and (in combination with the
'fallthrough' option) overlay one directory's contents on top of another.

rdar://problem/72485443
Differential Revision: https://reviews.llvm.org/D94844

3 years ago[TableGen] Use range-based for loops (NFC)
Kazu Hirata [Tue, 2 Feb 2021 04:55:08 +0000 (20:55 -0800)]
[TableGen] Use range-based for loops (NFC)

3 years ago[TableGen] Use ListSeparator (NFC)
Kazu Hirata [Tue, 2 Feb 2021 04:55:07 +0000 (20:55 -0800)]
[TableGen] Use ListSeparator (NFC)

3 years ago[llvm] Use pop_back_val (NFC)
Kazu Hirata [Tue, 2 Feb 2021 04:55:05 +0000 (20:55 -0800)]
[llvm] Use pop_back_val (NFC)

3 years ago[test] Fix unuses FileCheck prefixes in lld
Fangrui Song [Tue, 2 Feb 2021 04:52:33 +0000 (20:52 -0800)]
[test] Fix unuses FileCheck prefixes in lld

3 years ago[test] Fix unuses FileCheck prefixes in clang/test/Modules
Fangrui Song [Tue, 2 Feb 2021 03:46:23 +0000 (19:46 -0800)]
[test] Fix unuses FileCheck prefixes in clang/test/Modules

3 years ago[LoopVectorize] Relax a FCmpInst assert to dyn_cast after D95690
Fangrui Song [Tue, 2 Feb 2021 03:28:45 +0000 (19:28 -0800)]
[LoopVectorize] Relax a FCmpInst assert to dyn_cast after D95690

The instruction may be `icmp eq i32`. Noticed in an internal Halide+wasm JIT test.

3 years agoAMDGPU: Fix dbg_value handling when forming soft clause bundles
Matt Arsenault [Sat, 30 Jan 2021 22:10:51 +0000 (17:10 -0500)]
AMDGPU: Fix dbg_value handling when forming soft clause bundles

DBG_VALUES placed between memory instructions would change
codegen. Skip over these and re-insert them after the bundle instead
of giving up on bundling.

3 years ago[mlir] Add custom directive hooks for printing mixed integer or value operands.
MaheshRavishankar [Tue, 2 Feb 2021 03:03:12 +0000 (19:03 -0800)]
[mlir] Add custom directive hooks for printing mixed integer or value operands.

Add printer and parser hooks for a custom directive that allows
parsing and printing of idioms that can represent a list of values
each of which is either an integer or an SSA value. For example in

`subview %source[%offset_0, 1] [4, %size_1] [%stride_0, 3]`

each of the list (which represents offset, size and strides) is a mix
of either statically know integer values or dynamically computed SSA
values. Since this is used in many places adding a custom directive to
parse/print this idiom allows using assembly format on operations
which use this idiom.

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

3 years ago[Utils] Add a switch controlling prefix warnings in UpdateTestChecks
Mircea Trofin [Mon, 1 Feb 2021 23:21:55 +0000 (15:21 -0800)]
[Utils] Add a switch controlling prefix warnings in UpdateTestChecks

The switch controls both unused prefix warnings, and warnings about
functions which differ under different runs for a prefix, and, thus, end
up not having asserts for that prefix.

(If the latter case spans to all functions, then the former case kicks
in)

The switch is on by default, and can be disabled.

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

3 years ago[OpenMP][Libomptarget] Remove possible harmful copy constructor call for RTLsTy
Atmn Patel [Mon, 1 Feb 2021 00:18:41 +0000 (19:18 -0500)]
[OpenMP][Libomptarget] Remove possible harmful copy constructor call for RTLsTy

From https://bugs.llvm.org/show_bug.cgi?id=48973, we know that
`std::call_once(PM->RTLs.initFlag, &RTLsTy::LoadRTLs, PM->RTLs)` causes compile
time problems in libstdc++v3 5.3.1. This is because there was a defect in the
standard regarding the `call_once` (LWG 2442). This was fixed in libstdc++ soon
thereafter, but there are likely other standard libraries where this will fail.

By matching this function call with the other one, we fix this bug.

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

3 years ago[x86] introduce no_callee_saved_registers attribute
Philip Reames [Tue, 2 Feb 2021 00:07:01 +0000 (16:07 -0800)]
[x86] introduce no_callee_saved_registers attribute

This is directly analogous to the existing no_caller_saved_registers, but with the opposite intention.  A function or call so marked shifts the responsibility of spilling the usual CSRs to it's caller.

An indirect call site and callee which don't agree on the attribute is ill defined.

The motivation for this change is that being able to prune callee saves (without modifying other details of the calling convention) is sometimes useful when generating stubs and adapters.  There's no intention to expose this as a source language feature; this is expected to be used by frontends to implement adapters where warranted.

Some specific examples of use cases:
* GC compatible compiled code wants to call an externally defined library function without needing to track pointer values through CSRs.
* debug enabled code wants to call precompiled library which doesn't provide enough information to track CSRs while preserving debug quality in caller.
* adapter stub entering hand written assembler which doesn't follow normal calling conventions.

3 years ago[lldb] Use the host architecture in TestAppleSimulatorOSType.py
Jonas Devlieghere [Tue, 2 Feb 2021 00:12:48 +0000 (16:12 -0800)]
[lldb] Use the host architecture in TestAppleSimulatorOSType.py

3 years ago[obj2yaml, yaml2obj] Use Hex64 for BBAddressMap fields.
Rahman Lavaee [Sun, 31 Jan 2021 23:29:37 +0000 (15:29 -0800)]
[obj2yaml, yaml2obj] Use Hex64 for BBAddressMap fields.

This patch let the yaml encoding use Hex64 values for NumBlocks, BB AddressOffset, BB Size, and BB Metadata.
Additionally, it changes the decoded values in elf2yaml to uint64_t to match DataExtractor::getULEB128 return type.

Reviewed By: jhenderson

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

3 years ago[flang][NFC] Rename complex type.
Eric Schweitz [Sat, 30 Jan 2021 23:51:37 +0000 (15:51 -0800)]
[flang][NFC] Rename complex type.

This change renames the CplxType class to ComplexType.

3 years ago[NFC][X86] Use CallBase interface to simplify code
Philip Reames [Mon, 1 Feb 2021 22:02:30 +0000 (14:02 -0800)]
[NFC][X86] Use CallBase interface to simplify code

3 years ago[NFC][X86] Avoid redundant work inspecting callee
Philip Reames [Mon, 1 Feb 2021 21:51:10 +0000 (13:51 -0800)]
[NFC][X86] Avoid redundant work inspecting callee

3 years ago[InstrProfiling] Use !associated metadata for counters, data and values
Petr Hosek [Sat, 13 Jul 2019 21:02:07 +0000 (14:02 -0700)]
[InstrProfiling] Use !associated metadata for counters, data and values

C identifier name input sections such as __llvm_prf_* are GC roots so
they cannot be discarded. In LLD, the SHF_LINK_ORDER flag overrides the
C identifier name semantics.

The !associated metadata may be attached to a global object declaration
with a single argument that references another global object, and it
gets lowered to SHF_LINK_ORDER flag. When a function symbol is discarded
by the linker, setting up !associated metadata allows linker to discard
counters, data and values associated with that function symbol.

Note that !associated metadata is only supported by ELF, it does not have
any effect on non-ELF targets.

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

3 years ago[llvm-objcopy] -O binary: consider SHT_NOBITS sections to be empty
Patrick Oppenlander [Mon, 1 Feb 2021 23:01:25 +0000 (15:01 -0800)]
[llvm-objcopy] -O binary: consider SHT_NOBITS sections to be empty

This is consistent with BFD objcopy.

Previously llvm objcopy would allocate space for SHT_NOBITS sections
often resulting in enormous binary files.

New test case (binary-paddr.test %t6).

Reviewed By: jhenderson, MaskRay

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

3 years ago[AMDGPU] Set s-memtime-inst feature from clang
Stanislav Mekhanoshin [Sat, 30 Jan 2021 09:09:40 +0000 (01:09 -0800)]
[AMDGPU] Set s-memtime-inst feature from clang

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

3 years ago[CSSPGO] Tweaking inlining with pseudo probes.
Hongtao Yu [Mon, 1 Feb 2021 06:31:51 +0000 (22:31 -0800)]
[CSSPGO] Tweaking inlining with pseudo probes.

Fixing up a couple places where `getCallSiteIdentifier` is needed to support pseudo-probe-based callsites.

Also fixing an issue in the extbinary profile reader where the metadata section is not fully scanned based on the number of profiles loaded only for the current module.

Reviewed By: wmi, wenlei

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

3 years ago[clang-format] Add option to control the spaces in a line comment
Björn Schäpers [Fri, 29 Jan 2021 21:01:42 +0000 (22:01 +0100)]
[clang-format] Add option to control the spaces in a line comment

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

3 years ago[mlir][spirv] Add support for OpImageType
Weiwei Li [Mon, 1 Feb 2021 19:30:50 +0000 (14:30 -0500)]
[mlir][spirv] Add support for OpImageType

Support OpImageType in SPIRV Dialect.

This change doesn't support operand AccessQualifier since
it is optinal and only enables under Kernel capability.

co-authored-by: Alan Liu <alanliu.yf@gmail.com>

Reviewed By: antiagainst

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

3 years ago[tests] highlight cornercase w/deref hoisting from D95815
Philip Reames [Mon, 1 Feb 2021 21:25:42 +0000 (13:25 -0800)]
[tests] highlight cornercase w/deref hoisting from D95815

The main point of committing this early is to have a negative test in tree.  Nothing fails in the current tests if we implement this (currently unsound) optimization.

3 years agoNFC: Re-generate out-of-date matchers docs
Stephen Kelly [Mon, 1 Feb 2021 21:23:14 +0000 (21:23 +0000)]
NFC: Re-generate out-of-date matchers docs

3 years ago[LoopVectorize] improve IR fast-math-flags propagation in reductions
Sanjay Patel [Mon, 1 Feb 2021 19:21:24 +0000 (14:21 -0500)]
[LoopVectorize] improve IR fast-math-flags propagation in reductions

This is another step (see D95452) towards correcting fast-math-flags
bugs in vector reductions.

There are multiple bugs visible in the test diffs, and this is still
not working as it should. We still use function attributes (rather
than FMF) to drive part of the logic, but we are not checking for
the correct FP function attributes.

Note that FMF may not be propagated optimally on selects (example
in https://llvm.org/PR35607 ). That's why I'm proposing to union the
FMF of a fcmp+select pair and avoid regressions on existing vectorizer
tests.

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

3 years agoRevert "[libc++][format] Add basic_format_parse_context."
Mehdi Amini [Mon, 1 Feb 2021 21:18:11 +0000 (21:18 +0000)]
Revert "[libc++][format] Add basic_format_parse_context."

This reverts commit 35a57f39b5d126646335183f1ff0f7adb52d63bc.

A build is broken during clang bootstrap with:

In file included from ../libcxx/src/format.cpp:9:
/tmp/ci-nGNyLRM9V3/include/c++/v1/format:153:16: error: no member named 'is_constant_evaluated' in namespace 'std::__1'
    if (_VSTD::is_constant_evaluated() && __id >= __num_args_)
        ~~~~~~~^
1 error generated.

3 years agoAvoid string comparisons on the fast path of MLIR Identifier lookup (NFC)
Mehdi Amini [Mon, 1 Feb 2021 02:57:21 +0000 (02:57 +0000)]
Avoid string comparisons on the fast path of MLIR Identifier lookup (NFC)

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

3 years ago[ConstraintElimination] Add support for EQ predicates.
Florian Hahn [Thu, 28 Jan 2021 10:37:50 +0000 (10:37 +0000)]
[ConstraintElimination] Add support for EQ predicates.

A == B map to A >= B && A <= B
(https://alive2.llvm.org/ce/z/_dwxKn).

This extends the constraint construction to return a list of
constraints, which can be used to properly de-compose nested AND & OR.

3 years agoRevert "[mlir][spirv] Add support for OpImageType"
Lei Zhang [Mon, 1 Feb 2021 20:02:34 +0000 (15:02 -0500)]
Revert "[mlir][spirv] Add support for OpImageType"

This reverts commit 21f1462106b9ee1e646bf409c85528828320b34e.

3 years ago[mlir][spirv] Add support for OpImageType
Lei Zhang [Mon, 1 Feb 2021 19:30:50 +0000 (14:30 -0500)]
[mlir][spirv] Add support for OpImageType

Support OpImageType in SPIRV Dialect.

This change doesn't support operand AccessQualifier since
it is optinal and only enables under Kernel capability.

co-authored-by: Alan Liu <alanliu.yf@gmail.com>

Reviewed By: antiagainst

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

3 years ago[OpenMP] libomp: implement nteams-var and teams-thread-limit-var ICVs
AndreyChurbanov [Mon, 1 Feb 2021 19:54:11 +0000 (22:54 +0300)]
[OpenMP] libomp: implement nteams-var and teams-thread-limit-var ICVs

The change includes OMP_NUM_TEAMS, OMP_TEAMS_THREAD_LIMIT env variables,
omp_set_num_teams, omp_get_max_teams, omp_set_teams_thread_limit,
omp_get_teams_thread_limit routines.

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

3 years ago[Loads] Plumb through TLI argument [NFC]
Philip Reames [Mon, 1 Feb 2021 19:44:12 +0000 (11:44 -0800)]
[Loads] Plumb through TLI argument [NFC]

This is a (rather delayed) follow up to commit 0129cd5.  This commit is entirely NFC, the semantic change to leverage the new information will be submitted separate with a test case.

3 years ago[mlir][Linalg] Replace SimplePad with PadTensor in hoist-padding
Hanhan Wang [Mon, 1 Feb 2021 19:38:35 +0000 (11:38 -0800)]
[mlir][Linalg] Replace SimplePad with PadTensor in hoist-padding

This is the last revision to migrate using SimplePadOp to PadTensorOp, and the
SimplePadOp is removed in the patch. Update a bit in SliceAnalysis because the
PadTensorOp takes a region different from SimplePadOp. This is not covered by
LinalgOp because it is not a structured op.

Also, remove a duplicated comment from cpp file, which is already described in a
header file. And update the pseudo-mlir in the comment.

This is as same as D95615 but fixing one dep in CMakeLists.txt

Different from D95671, the fix was applied to run target.

Reviewed By: mravishankar

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

3 years ago[WebAssembly] fixed wasm64 data segment init exp not 64-bit
Wouter van Oortmerssen [Fri, 29 Jan 2021 00:38:24 +0000 (16:38 -0800)]
[WebAssembly] fixed wasm64 data segment init exp not 64-bit

As defined in the spec:
https://github.com/WebAssembly/memory64/blob/master/proposals/memory64/Overview.md

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

3 years ago[ConstantHoisting] Fix bug where constant materialization could insert into EH pad
Michael Holman [Mon, 1 Feb 2021 18:51:29 +0000 (10:51 -0800)]
[ConstantHoisting] Fix bug where constant materialization could insert into EH pad

If the incoming block to a phi node is an EH pad, then we will
materialize into an EH pad, which is not supposed to happen. To fix
this, I added a check to see if incoming block of a phi node is an EH
pad before using it as the insertion point.

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

3 years ago[libc++][format] Add basic_format_parse_context.
Mark de Wever [Sat, 5 Dec 2020 15:45:33 +0000 (16:45 +0100)]
[libc++][format] Add basic_format_parse_context.

Implements parts of:
- P0645 Text Formatting

Depends on D92214

Reviewed By: ldionne, curdeius, #libc

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

3 years ago[libc][NFC] Add a death test API adaptation macro
Michael Jones [Fri, 29 Jan 2021 00:11:35 +0000 (00:11 +0000)]
[libc][NFC] Add a death test API adaptation macro

Fuchsia's zxtest has a slightly different death test definition, and
this macro makes our death test API work on Fuchsia.

Reviewed By: sivachandra

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

3 years ago[ARM] Flatten identity shuffles through vqdmulh nodes
David Green [Mon, 1 Feb 2021 19:14:20 +0000 (19:14 +0000)]
[ARM] Flatten identity shuffles through vqdmulh nodes

Given a shuffle(vqdmulh(shuffle, shuffle), we can flatter the shuffles
out if they become an identity mask. This can come up during lane
interleaving, when we do that better.

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

3 years ago[NewPM][Unswitch] Add option to disable -O3 non-trivial unswitching
Arthur Eubanks [Mon, 1 Feb 2021 17:47:22 +0000 (09:47 -0800)]
[NewPM][Unswitch] Add option to disable -O3 non-trivial unswitching

Some benchmarks regress with non-trivial unswitching, so add an option
to opt-out of performing non-trivial unswitching while investigating.

Reviewed By: asbirlea

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

3 years ago[X86] Accept 64-bit GPRs for vextractps when using a register that requires EVEX.
Craig Topper [Mon, 1 Feb 2021 18:56:09 +0000 (10:56 -0800)]
[X86] Accept 64-bit GPRs for vextractps when using a register that requires EVEX.

This is consistent with the VEX version. It also fixes a sorting
issue in the matching table that caused the EVEX version to be
prioritized over VEX in intel syntax.

Fixes issue [2] from PR48991.

3 years ago[elfabi] Fix tests which failed on different timezones
Haowei Wu [Thu, 28 Jan 2021 22:13:20 +0000 (14:13 -0800)]
[elfabi] Fix tests which failed on different timezones

This patch fixes elfabi tests on machines using a GMT+X timezone
settings.

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

3 years ago[clang][PATCH] Fix bug 48848 assertion related to recoverFromMSUnqualifiedLookup
Melanie Blower [Tue, 26 Jan 2021 22:15:30 +0000 (14:15 -0800)]
[clang][PATCH] Fix bug 48848 assertion related to recoverFromMSUnqualifiedLookup

Reviewed By: rnk

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

3 years ago[InstCombine] try to narrow min/max intrinsics with constant operand
Sanjay Patel [Mon, 1 Feb 2021 17:27:04 +0000 (12:27 -0500)]
[InstCombine] try to narrow min/max intrinsics with constant operand

The constant trunc/ext may not be the optimal pre-condition,
but I think that handles the common cases.

Example of Alive2 proof:
https://alive2.llvm.org/ce/z/sREeLC

This is another step towards canonicalizing to the intrinsics.
Narrowing was identified as source of potential regression for
abs(), so we need to handle this for min/max - see:
https://llvm.org/PR48816

If this is not enough, we could process intrinsics in
the trunc-driven matching in canEvaluateTruncated().

3 years ago[InstCombine] add tests for min/max with extend and constant operand; NFC
Sanjay Patel [Sun, 31 Jan 2021 20:43:40 +0000 (15:43 -0500)]
[InstCombine] add tests for min/max with extend and constant operand; NFC

3 years ago[libc] Small adjustments to fenv tests
Michael Jones [Fri, 29 Jan 2021 00:30:23 +0000 (00:30 +0000)]
[libc] Small adjustments to fenv tests

Some libcs define non-standard FE_* macros and include them in
FE_ALL_EXCEPT. This change adjusts the fenv tests so that the
non-standard FE_* macros do not interfere when compiled with
fenv.h from another libc.

Reviewed By: sivachandra

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

3 years ago[NFC] Disallow unused prefixes under clang/test/Driver
Mircea Trofin [Fri, 29 Jan 2021 03:57:17 +0000 (19:57 -0800)]
[NFC] Disallow unused prefixes under clang/test/Driver

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

3 years ago[flang][directive] Enforce basic semantic check for all clauses
Valentin Clement [Mon, 1 Feb 2021 18:33:07 +0000 (13:33 -0500)]
[flang][directive] Enforce basic semantic check for all clauses

This patch is a follow up to D94821 to ensure the correct behavior of the
general directive structure checker.
This patch add the generation of the Enter function declaration for clauses in
the TableGen backend.
This helps to ensure each clauses declared in the TableGen file has at least
a basic check.

Reviewed By: kiranchandramohan

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

3 years ago[X86][AVX] Add 'OK' tests cases for PR48877
Simon Pilgrim [Mon, 1 Feb 2021 18:17:25 +0000 (18:17 +0000)]
[X86][AVX] Add 'OK' tests cases for PR48877

3 years ago[X86][SSE] LowerScalarImmediateShift - use APInt::getLowBitsSet for vXi8 ISD::SRL...
Simon Pilgrim [Mon, 1 Feb 2021 17:23:02 +0000 (17:23 +0000)]
[X86][SSE] LowerScalarImmediateShift - use APInt::getLowBitsSet for vXi8 ISD::SRL mask generation. NFCI.

Match what we do for ISD::SHL

3 years ago[OpenMP] Disable tests if FileCheck is not available in in-tree building
Shilei Tian [Mon, 1 Feb 2021 18:14:48 +0000 (13:14 -0500)]
[OpenMP] Disable tests if FileCheck is not available in in-tree building

FileCheck is required for OpenMP tests. The current detection can fail
if building OpenMP in-tree when user sets `LLVM_INSTALL_TOOLCHAIN_ONLY=ON`. As a
result, CMake will raise an error and the compilation will be broken. This patch
fixed the issue. When `FileCheck` is not a target, tests will just be skipped.

Reviewed By: jdoerfert, JonChesterfield

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

3 years ago[libc++] Implements concept default_initializable.
Mark de Wever [Thu, 17 Dec 2020 06:48:26 +0000 (07:48 +0100)]
[libc++] Implements concept default_initializable.

Implements:
- LWG3149 DefaultConstructible should require default initialization

Implements parts of:
 - P0898R3 Standard Library Concepts
 - P1754 Rename concepts to standard_case for C++20, while we still can

Depends on D91986

Reviewed By: ldionne, #libc

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

3 years ago[AArch64][GlobalISel] Emit G_ASSERT_ZEXT in assignValueToReg
Jessica Paquette [Wed, 27 Jan 2021 22:14:35 +0000 (14:14 -0800)]
[AArch64][GlobalISel] Emit G_ASSERT_ZEXT in assignValueToReg

When we have a zeroext parameter, emit G_ASSERT_ZEXT.

Add a check that we actually emit it.

This is a 0.1% code size win on CTMark/7zip and CTMark/consumer-typeset at -Os.

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

3 years ago[LTO] Move part of gold devirt test to v1.16 directory
Teresa Johnson [Mon, 1 Feb 2021 17:51:17 +0000 (09:51 -0800)]
[LTO] Move part of gold devirt test to v1.16 directory

Part of the gold test added in 1487747e990ce9f8851f3d92c3006a74134d7518
relies on more recent fixes to gold that fix the plugin behavior with
--export-dynamic-symbol and --dynamic-list. Extract those parts of the
new test into a v1.16 test.

3 years ago[RISCV] Add scalable vector support for floating point FMA instructions
Craig Topper [Mon, 1 Feb 2021 17:40:52 +0000 (09:40 -0800)]
[RISCV] Add scalable vector support for floating point FMA instructions

A follow up patch will add support for commuting operands or
changing opcode to vfmacc and friends.

Reviewed By: frasercrmck

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

3 years ago[RISCV] Update comment text from D95774. NFC
Craig Topper [Mon, 1 Feb 2021 17:40:16 +0000 (09:40 -0800)]
[RISCV] Update comment text from D95774. NFC

3 years ago[GlobalISel] Make sure G_ASSERT_ZEXT's src ends up with the same rc as dst
Jessica Paquette [Fri, 29 Jan 2021 23:33:23 +0000 (15:33 -0800)]
[GlobalISel] Make sure G_ASSERT_ZEXT's src ends up with the same rc as dst

When replacing the dst reg with the src reg, we need to make sure that we
propagate the dst reg's register class through to the src.

Otherwise, we aren't meeting the requirements for G_ASSERT_ZEXT, and so the
verifier will fail.

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

3 years ago[RISCV] Optimize (srl (and X, 0xffff), C) -> (srli (slli X, 16), 16 + C).
Craig Topper [Mon, 1 Feb 2021 17:21:43 +0000 (09:21 -0800)]
[RISCV] Optimize (srl (and X, 0xffff), C) -> (srli (slli X, 16), 16 + C).

Rather than materializing the 0xffff immediate for the AND, use
a shift left to remove the upper bits and then shift in zeros
from the right.

This pattern occurs when type legalizing an i16 right shift.

I've implemented this with custom selection code for a number of
reasons. I've limited this to the AND having a single use. We need
to compensate for SimplifyDemandedBits altering the AND mask. I'm
using *W opcodes on RV64. We may want to generlize this in the
future. For all these reason it seemed easiest to do it this way.

Reviewed By: luismarques

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

3 years ago[ConstraintElimination] Negate IR condition directly.
Florian Hahn [Thu, 28 Jan 2021 13:41:21 +0000 (13:41 +0000)]
[ConstraintElimination] Negate IR condition directly.

Instead of using ConstraintSystem::negate when adding new constraints,
flip the condition in IR.

The main advantage is that EQ predicates can be represented by 2
constraints, which makes negating based on the constraint tricky. The IR
condition can easily negated.

3 years ago[flang] Fix parsing of WRITE(I+J) with more accurate look-ahead
peter klausler [Sat, 30 Jan 2021 18:10:52 +0000 (10:10 -0800)]
[flang] Fix parsing of WRITE(I+J) with more accurate look-ahead

The parsing of I/O units uses look-ahead to discriminate between
keywords, variables and expressions as part of distinguishing internal
from external I/O.  The look-ahead was inaccurate for variables that
appear as the initial parts of expressions.

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

3 years ago[AMDGPU] Fix release build after 0397dca0.
Austin Kerbow [Mon, 1 Feb 2021 16:55:14 +0000 (08:55 -0800)]
[AMDGPU] Fix release build after 0397dca0.

3 years ago[AMDGPU] Fix crash with sgpr spills to vgpr disabled
Austin Kerbow [Mon, 1 Feb 2021 16:34:57 +0000 (08:34 -0800)]
[AMDGPU] Fix crash with sgpr spills to vgpr disabled

This would assert with amdgpu-spill-sgpr-to-vgpr disabled when trying to
spill the FP.

Fixes: SWDEV-262704

Reviewed By: RamNalamothu

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

3 years ago[compiler-rt] Fix AArch64 out-of-line atomics visibility on mach-o
Erik Pilkington [Mon, 1 Feb 2021 15:35:06 +0000 (10:35 -0500)]
[compiler-rt] Fix AArch64 out-of-line atomics visibility on mach-o

This fixes an apparent oversight in D91156, where the symbol was defined
without the leading underscore, then the visibility was later declared with it.
rdar://73364185

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

3 years ago[clangd] Remove some obsolete options that are now always on
Sam McCall [Wed, 27 Jan 2021 23:42:16 +0000 (00:42 +0100)]
[clangd] Remove some obsolete options that are now always on

 - always collect main-file refs when indexing
 - always build preambles asynchronously
 - always use dex for fast preamble index

Retire associated flags

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

3 years ago[OpenMP] Fix seg fault in libomptarget when using Info with multiple threads
Joseph Huber [Mon, 1 Feb 2021 15:31:09 +0000 (10:31 -0500)]
[OpenMP] Fix seg fault in libomptarget when using Info with multiple threads

Summary:
One option for the LIBOMPTARGET_INFO environment variable is to print the current status of the device's data mappings. These are a shared resource among threads so this needs to be protected when using multiple streams.

Reviewed By: jdoerfert

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