platform/upstream/llvm.git
3 years ago[libomptarget] Fix devicertl build
Jon Chesterfield [Mon, 15 Mar 2021 19:50:21 +0000 (19:50 +0000)]
[libomptarget] Fix devicertl build

[libomptarget] Fix devicertl build

The target specific functions in target_interface are extern C, but the
implementations for nvptx were mostly C++ mangling. That worked out as
a quirk of DEVICE macro expanding to nothing, except for shuffle.h which
only forward declared the functions with C++ linkage.

Also implements GetWarpSize, as used by shuffle, and includes target_interface
in nvptx target_impl.cu to help catch future divergence between interface and
implementation.

Reviewed By: jdoerfert

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

3 years ago[Polly] Fix deprecation warning. NFC.
Michael Kruse [Mon, 15 Mar 2021 19:27:48 +0000 (14:27 -0500)]
[Polly] Fix deprecation warning. NFC.

IRBuilder::CreateLoad without type parameter was deprecated in 6312c538
to prepare for opaque pointers.

3 years ago[CSSPGO] Load context profile for external functions in PreLink and populate ThinLTO...
Wenlei He [Sat, 13 Mar 2021 21:55:28 +0000 (13:55 -0800)]
[CSSPGO] Load context profile for external functions in PreLink and populate ThinLTO import list

For ThinLTO's prelink compilation, we need to put external inline candidates into an import list attached to function's entry count metadata. This enables ThinLink to treat such cross module callee as hot in summary index, and later helps postlink to import them for profile guided cross module inlining.

For AutoFDO, the import list is retrieved by traversing the nested inlinee functions. For CSSPGO, since profile is flatterned, a few things need to happen for it to work:

 - When loading input profile in extended binary format, we need to load all child context profile whose parent is in current module, so context trie for current module includes potential cross module inlinee.
 - In order to make the above happen, we need to know whether input profile is CSSPGO profile before start reading function profile, hence a flag for profile summary section is added.
 - When searching for cross module inline candidate, we need to walk through the context trie instead of nested inlinee profile (callsite sample of AutoFDO profile).
 - Now that we have more accurate counts with CSSPGO, we swtiched to use entry count instead of total count to decided if an external callee is potentially beneficial to inline. This make it consistent with how we determine whether call tagert is potential inline candidate.

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

3 years ago[dfsan] Updated check_custom_wrappers.sh to dedup function names
Jianzhou Zhao [Mon, 15 Mar 2021 19:10:34 +0000 (19:10 +0000)]
[dfsan] Updated check_custom_wrappers.sh to dedup function names

The origin wrappers added by https://reviews.llvm.org/D98359 reuse
those __dfsw_ functions.

3 years agoChange void getNoop(MCInst &NopInst) to MCInst getNop()
Fangrui Song [Mon, 15 Mar 2021 19:05:33 +0000 (12:05 -0700)]
Change void getNoop(MCInst &NopInst) to MCInst getNop()

Prefer (self-documenting) return values to output parameters (which are
liable to be used).
While here, rename Noop to Nop which is more widely used and improves
consistency with hasEmitNops/setEmitNops/emitNop/etc.

3 years ago[lld-macho] Place LC_FUNCTION_STARTS data at the right position
Jez Ng [Mon, 15 Mar 2021 18:54:18 +0000 (14:54 -0400)]
[lld-macho] Place LC_FUNCTION_STARTS data at the right position

This pleases the codesign

(Otherwise it complains about "function starts data out of place")

Reviewed By: #lld-macho, smeenai

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

3 years ago[dfsan] Do not check dfsan_get_origin by check_custom_wrappers.sh
Jianzhou Zhao [Mon, 15 Mar 2021 18:54:16 +0000 (18:54 +0000)]
[dfsan] Do not check dfsan_get_origin by check_custom_wrappers.sh

It is implemented like dfsan_get_label, and does not any code
in dfsan_custome.cpp.

3 years ago[RISCV] Add RISCVISD::BR_CC similar to RISCVISD::SELECT_CC.
Craig Topper [Mon, 15 Mar 2021 18:44:59 +0000 (11:44 -0700)]
[RISCV] Add RISCVISD::BR_CC similar to RISCVISD::SELECT_CC.

This allows me to introduce similar combines for branches as
we have recently added for SELECT_CC. Some of them are less
useful for standalone setccs and only help branch instructions.
By having a BR_CC node its easier to only affect branches.

I'm using CondCodeSDNode to make isel patterns easier to
write so we can refer to the codes by name. SELECT_CC uses a
constant instead.

I've translated the condition code just like SELECT_CC so
we need less patterns for the swapped conditions. This
includes special cases for X < 1 and X > -1 that get translated
to blez and bgez by using a 0 constant.

computeKnownBitsForTargetNode support for SELECT_CC is added
to allow MaskedValueIsZero to work for cases where the true
and false values of the SELECT_CC are setccs and the
result of the SELECT_CC is used by a BR_CC. This was needed
to avoid regressions in some of the overflow tests.

Reviewed By: luismarques

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

3 years ago[libomptarget] Drop assert.h, use freestanding for amdgcn devicertl
Jon Chesterfield [Mon, 15 Mar 2021 18:50:09 +0000 (18:50 +0000)]
[libomptarget] Drop assert.h, use freestanding for amdgcn devicertl

[libomptarget] Drop assert.h, use freestanding for amdgcn devicertl

Promotes the runtime assert to a link time error for the unimplemented
fallback functions. Enables amdgcn to build with only clang provided
headers, which makes it less likely to break other builds when enabled.

Reviewed By: jdoerfert

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

3 years ago[RISCV] Add isel-patterns to optimize (a < 1) into blez (a <= 0)
Philipp Tomsich [Mon, 15 Mar 2021 18:31:05 +0000 (11:31 -0700)]
[RISCV] Add isel-patterns to optimize (a < 1) into blez (a <= 0)

The following code-sequence showed up in a testcase (isolated from
SPEC2017) for if-conversion and vectorization when searching for the
maximum in an array:
        addi    a2, zero, 1
        blt     a1, a2, .LBB0_5
which can be expressed as `bge zero,a1,.LBB0_5`/`blez a1,/LBB0_5`.

More generally, we want to express (a < 1) as (a <= 0).

This adds the required isel-pattern and updates the testcases.

Reviewed By: craig.topper

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

3 years ago[Polly][Optimizer] Apply user-directed unrolling.
Michael Kruse [Mon, 15 Mar 2021 17:13:21 +0000 (12:13 -0500)]
[Polly][Optimizer] Apply user-directed unrolling.

Make Polly look for unrolling metadata (https://llvm.org/docs/TransformMetadata.html#loop-unrolling) that is usually only interpreted by the LoopUnroll pass and apply it to the SCoP's schedule.

While not that useful by itself (there already is an unroll pass), it introduces mechanism to apply arbitrary loop transformation directives in arbitrary order to the schedule. Transformations are applied until no more directives are found. Since ISL's rescheduling would discard the manual transformations and it is assumed that when the user specifies the sequence of transformations, they do not want any other transformations to apply. Applying user-directed transformations can be controlled using the `-polly-pragma-based-opts` switch and is enabled by default.

This does not influence the SCoP detection heuristic. As a consequence, loop that do not fulfill SCoP requirements or the initial profitability heuristic will be ignored. `-polly-process-unprofitable` can be used to disable the latter.

Other than manually editing the IR, there is currently no way for the user to add loop transformations in an order other than the order in the default pipeline, or transformations other than the one supported by clang's LoopHint. See the `unroll_double.ll` test as example that clang currently is unable to emit. My own extension of `#pragma clang loop` allowing an arbitrary order and additional transformations is available here: https://github.com/meinersbur/llvm-project/tree/pragma-clang-loop. An effort to upstream this functionality as `#pragma clang transform` (because `#pragma clang loop` has an implicit transformation order defined by the loop pipeline) is D69088.

Additional transformations from my downstream pragma-clang-loop branch are tiling, interchange, reversal, unroll-and-jam, thread-parallelization and array packing. Unroll was chosen because it uses already-defined metadata and does not require correctness checks.

Reviewed By: sebastiankreutzer

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

3 years ago[AArch64] Implement __rndr, __rndrrs intrinsics
Stelios Ioannou [Tue, 9 Mar 2021 14:56:49 +0000 (14:56 +0000)]
[AArch64] Implement __rndr, __rndrrs intrinsics

This patch implements the __rndr and __rndrrs intrinsics to provide access to the random
number instructions introduced in Armv8.5-A. They are only defined for the AArch64
execution state and are available when __ARM_FEATURE_RNG is defined.

These intrinsics store the random number in their pointer argument and return a status
code if the generation succeeded. The difference between __rndr __rndrrs, is that the latter
intrinsic reseeds the random number generator.

The instructions write the NZCV flags indicating the success of the operation that we can
then read with a CSET.

[1] https://developer.arm.com/docs/101028/latest/data-processing-intrinsics
[2] https://bugs.llvm.org/show_bug.cgi?id=47838

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

Change-Id: I8f92e7bf5b450e5da3e59943b53482edf0df6efc

3 years ago[mlir] fix SPIR-V CPU and Vulkan runners after e2310704d890ad252aeb1ca28b4b84d29514b1d1
Alex Zinenko [Mon, 15 Mar 2021 17:35:40 +0000 (18:35 +0100)]
[mlir] fix SPIR-V CPU and Vulkan runners after e2310704d890ad252aeb1ca28b4b84d29514b1d1

The commit in question changed the syntax but did not update the runner
tests. This also required registering the MemRef dialect for custom
parser to work correctly.

3 years agoAllow __ieee128 as an alias to __float128 on ppc
serge-sans-paille [Wed, 3 Mar 2021 08:58:31 +0000 (09:58 +0100)]
Allow __ieee128 as an alias to __float128 on ppc

This matches gcc behavior.

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

3 years ago[NFC] Use higher level constructs to check for whitespace/newlines in the lexer
serge-sans-paille [Mon, 15 Mar 2021 17:18:55 +0000 (18:18 +0100)]
[NFC] Use higher level constructs to check for whitespace/newlines in the lexer

It turns out that according to valgrind and perf, it's also slightly faster.

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

3 years ago[OpenCL] Respect calling convention for builtin
Luke Drummond [Wed, 10 Mar 2021 18:14:42 +0000 (18:14 +0000)]
[OpenCL] Respect calling convention for builtin

`__translate_sampler_initializer` has a calling convention of
`spir_func`, but clang generated calls to it using the default CC.

Instruction Combining was lowering these mismatching calling conventions
to `store i1* undef` which itself was subsequently lowered to a trap
instruction by simplifyCFG resulting in runtime `SIGILL`

There are arguably two bugs here: but whether there's any wisdom in
converting an obviously invalid call into a runtime crash over aborting
with a sensible error message will require further discussion. So for
now it's enough to set the right calling convention on the runtime
helper.

Reviewed By: svenh, bader

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

3 years ago[flang][docs] Fix the time for the new Flang driver call
Andrzej Warzynski [Mon, 15 Mar 2021 17:24:35 +0000 (17:24 +0000)]
[flang][docs] Fix the time for the new Flang driver call

3 years ago[libcxx] [test] Fix the temp_directory_path test for windows
Martin Storsjö [Fri, 26 Feb 2021 13:15:36 +0000 (15:15 +0200)]
[libcxx] [test] Fix the temp_directory_path test for windows

Check a different set of env vars, don't check the exact value
of the fallback path. (GetTempPath falls back to returning the Windows
folder if nothing better is available in env vars.)

The test still fails one check on windows (due to relying on perms::none),
which will be addressed separately.

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

3 years ago[AssumeBundles] Add nonnull/align to op bundle if noundef exists
Juneyoung Lee [Tue, 16 Mar 2021 00:20:49 +0000 (09:20 +0900)]
[AssumeBundles] Add nonnull/align to op bundle if noundef exists

This is a patch to add nonnull and align to assume's operand bundle
only if noundef exists.
Since nonnull and align in fn attr have poison semantics, they should be
paired with noundef or noundef-implying attributes to be immediate UB.

Reviewed By: jdoerfert, Tyker

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

3 years ago[CodeGen] Fix issues with scalable-vector INSERT/EXTRACT_SUBVECTORs
Fraser Cormack [Fri, 12 Mar 2021 11:22:29 +0000 (11:22 +0000)]
[CodeGen] Fix issues with scalable-vector INSERT/EXTRACT_SUBVECTORs

This patch addresses a few issues when dealing with scalable-vector
INSERT_SUBVECTOR and EXTRACT_SUBVECTOR nodes.

When legalizing in DAGTypeLegalizer::SplitVecRes_INSERT_SUBVECTOR, we
store the low and high halves to the stack separately. The offset for
the high half was calculated incorrectly.

Additionally, we can optimize this process when we can detect that the
subvector is contained entirely within the low/high split vector type.
While this optimization is valid on scalable vectors, when performing
the 'high' optimization, the subvector must also be a scalable vector.
Note that the 'low' optimization is still conservative: it may be
possible to insert v2i32 into the low half of a split nxv1i32/nxv1i32,
but we can't guarantee it. It is always possible to insert v2i32 into
nxv2i32 or v2i32 into nxv4i32+2 as we know vscale is at least 1.

Lastly, in SelectionDAG::isSplatValue, we early-exit on the extracted subvector value
type being a scalable vector, forgetting that we can also extract a
fixed-length vector from a scalable one.

Reviewed By: craig.topper

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

3 years ago[Polly] Refactoring astScheduleDimIsParallel to take the C++ wrapper object. NFC
Kevin Zhou [Mon, 15 Mar 2021 13:15:02 +0000 (08:15 -0500)]
[Polly] Refactoring astScheduleDimIsParallel to take the C++ wrapper object. NFC

Polly currently needs to be slowly refactor to use the C++ wrapper objects to handle the reference counters automatically.
I took the function of astScheduleDimIsParallel and refactored it so that it uses the C++ wrapper function as much as possible.

There are some problems with the IsParallel since it expects the C objects, so the C++ wrapper functions must be .release() and .get() first before they are able to be used with IsParallel.

When checking the ReductionDependencies Parallelism with the Build's Schedule, I opted to keep the union map as a C object rather than a C++ object. Eventually, changes will need to be made to IsParallel to refactor it to the C++ wrappers. When this is done, this function will also need to be slightly refactored to not use the C object.

Reviewed By: Meinersbur

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

3 years ago[libomptarget][amdgcn] Drop use of inttypes.h, moving closer to freestanding
Jon Chesterfield [Mon, 15 Mar 2021 16:54:56 +0000 (16:54 +0000)]
[libomptarget][amdgcn] Drop use of inttypes.h, moving closer to freestanding

[libomptarget][amdgcn] Drop use of inttypes.h, moving closer to freestanding

The glibc headers are a periodic source of problems compiling the devicertl.
This patch resolves the following error run into while building llvm on a slightly
different linux system.
```
In file included from .../lib/clang/13.0.0/include/inttypes.h:21:
In file included from /usr/include/inttypes.h:25:
/usr/include/features.h:461:12: fatal error: 'sys/cdefs.h' file not found
#  include <sys/cdefs.h>
           ^~~~~~~~~~~~~
```
As a second patch, removing assert.h from shuffle will let amdgcn build as
-ffreestanding, at which point only the headers that clang itself provides are
used and interactions with the host glibc are eliminated. Doing the same for
nvptx is complicated by printf handling but also seems worthwhile.

Reviewed By: tianshilei1992

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

3 years ago[libcxx] [test] Fix the get_temp_file_name() function for mingw
Martin Storsjö [Thu, 25 Feb 2021 10:43:36 +0000 (12:43 +0200)]
[libcxx] [test] Fix the get_temp_file_name() function for mingw

Add the missing includes for getting the defines and functions used
in the mingw version of get_temp_file_name().

This fixes 31 tests when built in a mingw configuration.

Also remove a redundant ifdef; _WIN32 is defined in mingw targets too.

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

3 years ago[libcxx] [test] Disable some allocation checks in class.path tests on windows
Martin Storsjö [Thu, 25 Feb 2021 21:06:18 +0000 (23:06 +0200)]
[libcxx] [test] Disable some allocation checks in class.path tests on windows

On windows, the path internal representation is wchar_t, and
input/output often goes through utf8 inbetween, which causes extra
allocations.

MS STL also fails a number of strict allocation checks, so this
shouldn't be a standards compliance issue.

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

3 years ago[gn build] (semi-manually) port b136a74efc54
Nico Weber [Mon, 15 Mar 2021 16:50:45 +0000 (12:50 -0400)]
[gn build] (semi-manually) port b136a74efc54

3 years ago[CMake] Require python 3.6 if enabling LLVM test targets
Christopher Tetreault [Mon, 15 Mar 2021 16:33:31 +0000 (09:33 -0700)]
[CMake] Require python 3.6 if enabling LLVM test targets

The lit test suite uses python 3.6 features. Rather than a strange
python syntax error upon running the lit tests, we will require the
correct version in CMake.

Reviewed By: serge-sans-paille, yln

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

3 years ago[RISCV] Improve legalization of i32 UADDO/USUBO on RV64.
Craig Topper [Mon, 15 Mar 2021 16:20:26 +0000 (09:20 -0700)]
[RISCV] Improve legalization of i32 UADDO/USUBO on RV64.

The default legalization uses zero extends that require pair of shifts
on RISCV. Instead we can take advantage of the fact that unsigned
compares work equally well on sign extended inputs. This allows
us to use addw/subw and sext.w.

Reviewed By: luismarques

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

3 years ago[X86][SSE] isHorizontalBinOp - ensure we clear any unused source operands to improve...
Simon Pilgrim [Mon, 15 Mar 2021 16:15:05 +0000 (16:15 +0000)]
[X86][SSE] isHorizontalBinOp - ensure we clear any unused source operands to improve HADD/SUB matching

Our shuffle matching for HADD/SUB patterns wasn't clearing repeated ops in 'fake unary' style shuffle masks (unpack(x,x) etc.), preventing matching of add(fakeunary(),fakeunary()) style patterns.

3 years ago[mlir] make memref.cast implement ViewLikeOpInterface
Alex Zinenko [Mon, 15 Mar 2021 16:19:37 +0000 (17:19 +0100)]
[mlir] make memref.cast implement ViewLikeOpInterface

This was seemingly dropped in e2310704d890ad252aeb1ca28b4b84d29514b1d1,
potentially due to a misrebase. The absence of this trait makes aliasing
analysis incorrect, leading to, e.g., buffer deallocation pass inserting
deallocations too early.

3 years ago[dfsan] Add origin ABI wrappers for thread/signal/fork
Jianzhou Zhao [Wed, 10 Mar 2021 06:31:56 +0000 (06:31 +0000)]
[dfsan] Add origin ABI wrappers for thread/signal/fork

This is a part of https://reviews.llvm.org/D95835.

See https://github.com/llvm/llvm-project/commit/bb91e02efd00eda04296069a83228c8d9db105b7 about the similar issue of fork in MSan's origin tracking.

Reviewed By: morehouse

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

3 years ago[NFC] Fix "unused parameter" error revealed in the Linux self-build.
Zahira Ammarguellat [Mon, 15 Mar 2021 16:15:34 +0000 (12:15 -0400)]
[NFC] Fix "unused parameter" error revealed in the Linux self-build.

3 years ago[clang][patch] Solve PR49479, File scope fp pragma should propagate to functions...
Melanie Blower [Mon, 15 Mar 2021 14:06:33 +0000 (10:06 -0400)]
[clang][patch] Solve PR49479, File scope fp pragma should propagate to functions nested in struct, and initialization expressions

Previously, the CurFPFeatures state was set to command line settings before
semantic analysis of the nested member functions and initialization
expressions, that's not correct, it should use the pragma state which
is in effect at the lexical position.

Reviewed By: Erich Keane, Aaron Ballman

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

3 years ago[InstSimplify] ctlz({signbit} >>u x) --> x
Sanjay Patel [Mon, 15 Mar 2021 15:44:53 +0000 (11:44 -0400)]
[InstSimplify] ctlz({signbit} >>u x) --> x

The motivating pattern was handled in 0a2d69480d ,
but we should have this for symmetry.

But this really highlights that we could generalize for
any shifted constant if we match this in instcombine.

https://alive2.llvm.org/ce/z/MrmVNt

3 years ago[InstSimplify] add tests for ctlz of shifted constant; NFC
Sanjay Patel [Mon, 15 Mar 2021 15:20:27 +0000 (11:20 -0400)]
[InstSimplify] add tests for ctlz of shifted constant; NFC

3 years ago[RISCV][compiler-rt] Add support for save-restore
Edward Jones [Thu, 12 Nov 2020 16:33:03 +0000 (16:33 +0000)]
[RISCV][compiler-rt] Add support for save-restore

This adds the compiler-rt entry points required by the
-msave-restore option.

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

3 years agoStop traping on sNaN in __builtin_isinf
Thomas Preud'homme [Wed, 9 Dec 2020 22:18:32 +0000 (22:18 +0000)]
Stop traping on sNaN in __builtin_isinf

__builtin_isinf currently generates a floating-point compare operation
which triggers a trap when faced with a signaling NaN in StrictFP mode.
This commit uses integer operations instead to not generate any trap in
such a case.

Reviewed By: mibintc

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

3 years ago[libcxx] [docs] Update docs about how to build for Windows
Martin Storsjö [Sun, 21 Feb 2021 23:20:28 +0000 (01:20 +0200)]
[libcxx] [docs] Update docs about how to build for Windows

Refresh the existing paragraphs on building in MSVC configurations,
add a sample of one working configuration for MinGW, and add more
details on what's necessary to run the tests these days.

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

3 years ago[gn build] Port 13e49dcee48f
LLVM GN Syncbot [Mon, 15 Mar 2021 15:24:41 +0000 (15:24 +0000)]
[gn build] Port 13e49dcee48f

3 years ago[amdgpu] Implement lower function LDS pass
Jon Chesterfield [Mon, 15 Mar 2021 15:24:00 +0000 (15:24 +0000)]
[amdgpu] Implement lower function LDS pass

[amdgpu] Implement lower function LDS pass

Local variables are allocated at kernel launch. This pass collects global
variables that are used from non-kernel functions, moves them into a new struct
type, and allocates an instance of that type in every kernel. Uses are then
replaced with a constantexpr offset.

Prior to this pass, accesses from a function are compiled to trap. With this
pass, most such accesses are removed before reaching codegen. The trap logic
is left unchanged by this pass. It is still reachable for the cases this pass
misses, notably the extern shared construct from hip and variables marked
constant which survive the optimizer.

This is of interest to the openmp project because the deviceRTL runtime library
uses cuda shared variables from functions that cannot be inlined. Trunk llvm
therefore cannot compile some openmp kernels for amdgpu. In addition to the
unit tests attached, this patch applied to ROCm llvm with fixed-abi enabled
and the function pointer hashing scheme deleted passes the openmp suite.

This lowering will use more LDS than strictly necessary. It is intended to be
a functionally correct fallback for cases that are difficult to target from
future optimisation passes.

Reviewed By: arsenm

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

3 years ago[scudo][standalone] Add shared library to makefile
Kostya Kortchinsky [Thu, 11 Mar 2021 22:42:30 +0000 (14:42 -0800)]
[scudo][standalone] Add shared library to makefile

Since we are looking to remove the old Scudo, we have to have a .so for
parity purposes as some platforms use it.

I tested this on Fuchsia & Linux, not on Android though.

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

3 years ago[flang] Build intrinsic .mod files in include/flang
Tim Keith [Mon, 15 Mar 2021 15:02:58 +0000 (08:02 -0700)]
[flang] Build intrinsic .mod files in include/flang

The build was putting .mod files for intrinsic modules in
tools/flang/include/flang but the install puts them in include/flang,
as does the out-of-tree build. This confused things for the driver.
This change makes the build consistent with the install and simplifies
the flang script accordingly.

Also, clean up the cmake commands for building the .mod files.

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

3 years ago[X86][SSE] canonicalizeShuffleWithBinOps - handle target shuffles.
Simon Pilgrim [Mon, 15 Mar 2021 14:50:26 +0000 (14:50 +0000)]
[X86][SSE] canonicalizeShuffleWithBinOps - handle target shuffles.

Fold SHUFFLE(BINOP(SHUFFLE(X),SHUFFLE(Y))) -> BINOP(SHUFFLE'(X),SHUFFLE'(Y)) style patterns as well as the existing shuffles of constants.

3 years ago[asan] Fixed test failing on windows due to different printf behaviour.
Vy Nguyen [Sat, 13 Mar 2021 02:00:11 +0000 (21:00 -0500)]
[asan] Fixed test failing on windows due to different printf behaviour.

%p reported prints upper case hex chars on Windows.
The fix  is to switch to using %#lx

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

3 years ago[AArch64] Zero extended extract_vector_elt pattern
David Green [Mon, 15 Mar 2021 14:56:20 +0000 (14:56 +0000)]
[AArch64] Zero extended extract_vector_elt pattern

This adds a pattern for i64 zext_inreg(i32 extract_vector_elt X),
producing a single UMOVvi16 instruction that is already expected to
clear the top bits. The exact pattern that this matches is
and(anyext(vector_extract X, lane), 0xff), similar to the sext patterns
higher up in the same file.

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

3 years ago[clang-tidy] Enable modernize-concat-nested-namespaces also on headers
Dmitry Polukhin [Fri, 26 Feb 2021 17:07:20 +0000 (09:07 -0800)]
[clang-tidy] Enable modernize-concat-nested-namespaces also on headers

For some reason the initial implementation of the check had an explicit check
for the main file to avoid being applied in headers. This diff removes this
check and add a test for the check on a header.

Similar approach was proposed in D61989 but review there got stuck.

Test Plan: added new test case

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

3 years ago[clang-tidy] Fix readability-identifer-naming duplicating prefix or suffix for replac...
Nathan James [Mon, 15 Mar 2021 14:20:47 +0000 (14:20 +0000)]
[clang-tidy] Fix readability-identifer-naming duplicating prefix or suffix for replacements.

If a identifier has a correct prefix/suffix but a bad case, the fix won't strip them when computing the correct case, leading to duplication when the are added back.

Reviewed By: aaron.ballman

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

3 years ago[ASTMatchers] Don't forward matchers in MapAnyOf
Nathan James [Mon, 15 Mar 2021 14:16:51 +0000 (14:16 +0000)]
[ASTMatchers] Don't forward matchers in MapAnyOf

Forwarding these means that if an r-value reference is passed, the matcher will be moved. However it appears this happens for each mapped node matcher, resulting in use-after-move issues.

Reviewed By: steveire

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

3 years ago[clang][lex] Speculative fix for buffer overrun on raw string parse
Jan Svoboda [Mon, 15 Mar 2021 14:07:53 +0000 (15:07 +0100)]
[clang][lex] Speculative fix for buffer overrun on raw string parse

This attempts to fix a (non-deterministic) buffer overrun when parsing raw string literals during modular build.

Similar fix to 4e5b5c36f47c9a406ea7f6b4f89fae477693973a.

Reviewed By: beccadax

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

3 years ago[NFC][PowerPC] Add additional load/store test cases
Amy Kwan [Mon, 15 Mar 2021 06:07:42 +0000 (01:07 -0500)]
[NFC][PowerPC] Add additional load/store test cases

This patch adds additional load/store test cases involving scalars, vectors,
and PC-Rel in preparation for the refactored load and store implementation
introduced in D93370.

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

3 years ago[mlir] fix integration tests post e2310704d890ad252aeb1ca28b4b84d29514b1d1
Alex Zinenko [Mon, 15 Mar 2021 13:40:01 +0000 (14:40 +0100)]
[mlir] fix integration tests post e2310704d890ad252aeb1ca28b4b84d29514b1d1

The commit in question moved some ops across dialects but did not update
some of the target-specific integration tests that use these ops,
presumably because the corresponding target hardware was not available.
Fix these tests.

3 years ago[PATCH] fix location of test case
Wael Yehia [Mon, 15 Mar 2021 13:34:20 +0000 (09:34 -0400)]
[PATCH] fix location of test case

from D97507.

3 years ago[SystemZ][z/OS] Define _LIBCPP_ELAST
Muiez Ahmed [Mon, 15 Mar 2021 13:23:36 +0000 (09:23 -0400)]
[SystemZ][z/OS] Define _LIBCPP_ELAST

The aim is to define _LIBCPP_ELAST for z/OS libc++ since strerror/strerror_r can't handle out-of-range errno values.

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

3 years ago[mlir] enable Python bindings for the MemRef dialect
Alex Zinenko [Mon, 15 Mar 2021 13:06:25 +0000 (14:06 +0100)]
[mlir] enable Python bindings for the MemRef dialect

A previous commit moved multiple ops from Standard to MemRef dialect.
Some of these ops are exercised in Python bindings. Enable bindings for
the newly created MemRef dialect and update a test accordingly.

3 years ago[ASTMatchers][Dynamic] Add missing matchers from Registry
Nathan James [Mon, 15 Mar 2021 13:07:39 +0000 (13:07 +0000)]
[ASTMatchers][Dynamic] Add missing matchers from Registry

Add the `fixedPointLiteral`, `hasAnyBody` and `templateArgumentLoc` to the dynamic matcher registry.

Reviewed By: steveire

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

3 years ago[ASTMatchers] Fix documentation for hasAnyBody matcher
Nathan James [Mon, 15 Mar 2021 13:06:48 +0000 (13:06 +0000)]
[ASTMatchers] Fix documentation for hasAnyBody matcher

Looks like a oversight when the matcher was added.

Reviewed By: steveire

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

3 years agoRevert "[Sanitizer][RISCV][AArch64][Android] Adjust allocator tests"
Luís Marques [Mon, 15 Mar 2021 13:01:26 +0000 (13:01 +0000)]
Revert "[Sanitizer][RISCV][AArch64][Android] Adjust allocator tests"

This reverts commit a00347b56e36b30b26f9e54e947b965acf2b7eec due to a
test failure on the `sanitizer-x86_64-linux-android` buildbot.

3 years ago[SLP][Test] Precommit test for PR40522
Anton Afanasyev [Mon, 15 Mar 2021 12:52:07 +0000 (15:52 +0300)]
[SLP][Test] Precommit test for PR40522

3 years ago[ast-dump-tool] fix regression if --empty-implementation but --json-input-path is not
Nico Weber [Mon, 15 Mar 2021 12:44:05 +0000 (08:44 -0400)]
[ast-dump-tool] fix regression if --empty-implementation but --json-input-path is not

Looks like this broke in one of the relands of
https://reviews.llvm.org/D93164

3 years ago[AMDGPU] Fix shortfalls in WQM marking
Carl Ritson [Mon, 15 Mar 2021 12:32:09 +0000 (21:32 +0900)]
[AMDGPU] Fix shortfalls in WQM marking

When tracking defined lanes through phi nodes in the live range
graph each branch of the phi must be handled independently.
Also rewrite the marking algorithm to reduce unnecessary
operations.

Previously a shared set of defined lanes was used which caused
marking to stop prematurely. This was observable in existing lit
tests, but test patterns did not cover this detail.

Reviewed By: piotr

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

3 years ago[X86][SSE] canonicalizeShuffleWithBinOps - add X86ISD::PSHUFB handling.
Simon Pilgrim [Mon, 15 Mar 2021 12:38:03 +0000 (12:38 +0000)]
[X86][SSE] canonicalizeShuffleWithBinOps - add X86ISD::PSHUFB handling.

Recommit rGcd938ab162b0ac560dd0e9fee290980c7e0e47e5 with an early-out if the pshub would introduce zeros across the binop.

3 years ago[mlir] fix shared-lib build fallout of e2310704d890ad252aeb1ca28b4b84d29514b1d1
Alex Zinenko [Mon, 15 Mar 2021 12:32:36 +0000 (13:32 +0100)]
[mlir] fix shared-lib build fallout of e2310704d890ad252aeb1ca28b4b84d29514b1d1

The patch in question broke the build with shared libraries due to
missing dependencies, one of which would have been circular between
MLIRStandard and MLIRMemRef if added. Fix this by moving more code
around and swapping the dependency direction. MLIRMemRef now depends on
MLIRStandard, but MLIRStandard does _not_ depend on MLIRMemRef.
Arguably, this is the right direction anyway since numerous libraries
depend on MLIRStandard and don't necessarily need to depend on
MLIRMemref.

Other otable changes include:
- some EDSC code is moved inline to MemRef/EDSC/Intrinsics.h because it
  creates MemRef dialect operations;
- a utility function related to shape moved to BuiltinTypes.h/cpp
  because it only realtes to shaped types and not any particular dialect
  (standard dialect is erroneously believed to contain MemRefType);
- a Python test for the standard dialect is disabled completely because
  the ops it tests moved to the new MemRef dialect, but it is not
  exposed to Python bindings, and the change for that is non-trivial.

3 years ago[AArch64][SVE] Add unpredicated ld1/st1 patterns for reg+reg addressing modes
Bradley Smith [Thu, 28 Jan 2021 12:39:39 +0000 (12:39 +0000)]
[AArch64][SVE] Add unpredicated ld1/st1 patterns for reg+reg addressing modes

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

3 years agoRevert rG9ba577eca2e339726bfaad4e615c6324a705b292 "[X86][SSE] canonicalizeShuffleWith...
Simon Pilgrim [Mon, 15 Mar 2021 12:23:32 +0000 (12:23 +0000)]
Revert rG9ba577eca2e339726bfaad4e615c6324a705b292 "[X86][SSE] canonicalizeShuffleWithBinOps - handle target shuffles. NFCI."

Sorry this wasn't supposed to be committed yet (and certainly not tagged as NFCI....)

3 years agoRevert "[NFCI][ValueTracking] getUnderlyingObject(): gracefully handle cycles"
Nikita Popov [Mon, 15 Mar 2021 12:12:39 +0000 (13:12 +0100)]
Revert "[NFCI][ValueTracking] getUnderlyingObject(): gracefully handle cycles"

This reverts commit aa440ba24dc25e4c95f6dcf8ff647024f3b12661.

This has a non-trivial compile-time impact:
https://llvm-compile-time-tracker.com/compare.php?from=0c5b789c7342ee8384507c3242fc256e23248c4d&to=aa440ba24dc25e4c95f6dcf8ff647024f3b12661&stat=instructions

I don't believe this is the correct way to address the issue in
this case.

3 years ago[X86][SSE] canonicalizeShuffleWithBinOps - handle target shuffles. NFCI.
Simon Pilgrim [Mon, 15 Mar 2021 11:24:07 +0000 (11:24 +0000)]
[X86][SSE] canonicalizeShuffleWithBinOps - handle target shuffles. NFCI.

Fold SHUFFLE(BINOP(SHUFFLE(X),SHUFFLE(Y))) -> BINOP(SHUFFLE'(X),SHUFFLE'(Y)) style patterns as well as the existing shuffles of constants.

3 years ago[dexter] Check path != None before calling os.path.exists
OCHyams [Mon, 15 Mar 2021 11:28:28 +0000 (11:28 +0000)]
[dexter] Check path != None before calling os.path.exists

The test optnone-simple-functions.cpp added in D97668 fails on macOS.
os.path.exists raises an exception because we pass it None. Guard against this.

Related revision: https://reviews.llvm.org/D97668

3 years ago[LLDB] Skip TestExitDuringExpression on arm/linux buildbot
Muhammad Omair Javaid [Mon, 15 Mar 2021 11:01:02 +0000 (16:01 +0500)]
[LLDB] Skip TestExitDuringExpression on arm/linux buildbot

TestExitDuringExpression test_exit_before_one_thread_unwind fails
sporadically on arm/linux. This seems like a thread timing issue.
I am marking it skip for now.

3 years ago[Sanitizer][RISCV][AArch64][Android] Adjust allocator tests
Luís Marques [Mon, 15 Mar 2021 11:01:20 +0000 (11:01 +0000)]
[Sanitizer][RISCV][AArch64][Android] Adjust allocator tests

On 64-bit systems with small VMAs (e.g. 39-bit) we can't use
`SizeClassAllocator64` parameterized with size class maps containing a
large number of classes, as that will make the allocator region size too
small (< 2^32). Several tests were already disabled for Android because
of this.

This patch provides the correct allocator configuration for RISC-V
(riscv64), generalizes the gating condition for tests that can't be
enabled for small VMA systems, and tweaks the tests that can be made
compatible with those systems to enable them.

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

3 years ago[AST] Add generator for source location introspection
Stephen Kelly [Sun, 14 Mar 2021 16:18:54 +0000 (16:18 +0000)]
[AST] Add generator for source location introspection

Generate a json file containing descriptions of AST classes and their
public accessors which return SourceLocation or SourceRange.

Use the JSON file to generate a C++ API and implementation for accessing
the source locations and method names for accessing them for a given AST
node.

This new API can be used to implement 'srcloc' output in clang-query:

  http://ce.steveire.com/z/m_kTIo

The JSON file can also be used to generate bindings for other languages,
such as Python and Javascript:

  https://steveire.wordpress.com/2019/04/30/the-future-of-ast-matching

In this first version of this feature, only the accessors for Stmt
classes are generated, not Decls, TypeLocs etc.  Those can be added
after this change is reviewed, as this change is mostly about
infrastructure of these code generators.

Also in this version, the platforms/cmake configurations are excluded as
much as possible so that support can be added iteratively.  Currently a
break on any platform causes a revert of the entire feature.  This way,
the `OR WIN32` can be removed in a future commit and if it breaks the
buildbots, only that commit gets reverted, making the entire process
easier to manage.

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

3 years ago[NFCI][ValueTracking] getUnderlyingObject(): gracefully handle cycles
Roman Lebedev [Mon, 15 Mar 2021 08:51:23 +0000 (11:51 +0300)]
[NFCI][ValueTracking] getUnderlyingObject(): gracefully handle cycles

Normally, this function just doesn't bother about cycles,
and hopes that the caller supplied small-enough depth
so that at worst it will take a potentially large,
but limited amount of time. But that obviously doesn't work
if there is no depth limit.

This reapples 36f1c3db66f7268ea3183bcf0bbf05b3e1c570b4,
but without asserting, just bailout once cycle is detected.

3 years ago[RISCV] Support fixed-length vectors in the calling convention
Fraser Cormack [Tue, 2 Mar 2021 11:11:18 +0000 (11:11 +0000)]
[RISCV] Support fixed-length vectors in the calling convention

This patch adds fixed-length vector support to the calling convention
when RVV is used to lower fixed-length vectors. The scheme follows the
regular vector calling convention for the argument/return registers, but
uses scalable vector container types as the LocVTs, and converts to/from
the fixed-length vector value types as required.

Fixed-length vector types may be split when the combination of minimum
VLEN and the maximum allowable LMUL is not large enough to fully contain
the vector. In this case the behaviour differs between fixed-length
vectors passed as parameters and as return values:
1. For return values, vectors must be passed entirely via registers or
via the stack.
2. For parameters, unlike scalar values, split vectors continue to be
passed by value, and are split across multiple registers until there are
no remaining registers. Thus vector parameters may be found partly in
registers and partly on the stack.

As with scalable vectors, the first fixed-length mask vector is passed
via v0. Split mask fixed-length vectors are passed first via v0 and then
via the next available vector register: v8,v9,etc.

The handling of vector return values uses all available argument
registers v8-v23 which does not adhere to the calling convention we're
supposedly implementing, but since this issue affects both fixed-length
and scalable-vector values, it was left as-is.

Reviewed By: craig.topper

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

3 years ago[AMDGPU] Use depth first iterator instead of recursive DFS. NFCI.
Jay Foad [Fri, 12 Mar 2021 18:01:19 +0000 (18:01 +0000)]
[AMDGPU] Use depth first iterator instead of recursive DFS. NFCI.

The reason for this is to avoid deep recursion in DFS() which can cause
stack overflow on large CFGs, especially on Windows.

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

3 years ago[MLIR] Create memref dialect and move dialect-specific ops from std.
Julian Gross [Wed, 10 Feb 2021 12:53:11 +0000 (13:53 +0100)]
[MLIR] Create memref dialect and move dialect-specific ops from std.

Create the memref dialect and move dialect-specific ops
from std dialect to this dialect.

Moved ops:
AllocOp -> MemRef_AllocOp
AllocaOp -> MemRef_AllocaOp
AssumeAlignmentOp -> MemRef_AssumeAlignmentOp
DeallocOp -> MemRef_DeallocOp
DimOp -> MemRef_DimOp
MemRefCastOp -> MemRef_CastOp
MemRefReinterpretCastOp -> MemRef_ReinterpretCastOp
GetGlobalMemRefOp -> MemRef_GetGlobalOp
GlobalMemRefOp -> MemRef_GlobalOp
LoadOp -> MemRef_LoadOp
PrefetchOp -> MemRef_PrefetchOp
ReshapeOp -> MemRef_ReshapeOp
StoreOp -> MemRef_StoreOp
SubViewOp -> MemRef_SubViewOp
TransposeOp -> MemRef_TransposeOp
TensorLoadOp -> MemRef_TensorLoadOp
TensorStoreOp -> MemRef_TensorStoreOp
TensorToMemRefOp -> MemRef_BufferCastOp
ViewOp -> MemRef_ViewOp

The roadmap to split the memref dialect from std is discussed here:
https://llvm.discourse.group/t/rfc-split-the-memref-dialect-from-std/2667

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

3 years ago[mlir] better formatting in interface docs
Alex Zinenko [Mon, 15 Mar 2021 10:10:32 +0000 (11:10 +0100)]
[mlir] better formatting in interface docs

Start the description from a new line instead of putting the first
paragraph in the section header. Wrap the class name in backticks to
make it clear that it relates to the code.

3 years ago[mlir] fix cmake for generating data layout documentation
Alex Zinenko [Mon, 15 Mar 2021 10:01:35 +0000 (11:01 +0100)]
[mlir] fix cmake for generating data layout documentation

3 years agoFix MSVC "switch statement contains 'default' but no 'case' labels" warning. NFCI.
Simon Pilgrim [Mon, 15 Mar 2021 09:45:45 +0000 (09:45 +0000)]
Fix MSVC "switch statement contains 'default' but no 'case' labels" warning. NFCI.

3 years ago[X86][SSE] Attempt to merge single-op hops for slow targets.
Simon Pilgrim [Sun, 14 Mar 2021 22:27:57 +0000 (22:27 +0000)]
[X86][SSE] Attempt to merge single-op hops for slow targets.

For slow-hop targets, see if any single-op hops are duplicating work already done on another (dual-op) hop, which can sometimes occur as isHorizontalBinOp tries to find potential duplicates (but can't merge them itself). If so, reuse the other hop and shuffle the result.

3 years agoRevert "[Canonicalizer] Process regions top-down instead of bottom up & reuse existin...
Alex Zinenko [Mon, 15 Mar 2021 09:26:41 +0000 (10:26 +0100)]
Revert "[Canonicalizer] Process regions top-down instead of bottom up & reuse existing constants."

This reverts commit b5d9a3c92358349d5444ab28de8ab5b2bee33a01.

The commit introduced a memory error in canonicalization/operation
walking that is exposed when compiled with ASAN. It leads to crashes in
some "release" configurations.

3 years ago[AArch64][compiler-rt] Strip PAC from the link register.
Daniel Kiss [Mon, 15 Mar 2021 09:24:44 +0000 (10:24 +0100)]
[AArch64][compiler-rt] Strip PAC from the link register.

-mbranch-protection protects the LR on the stack with PAC.
When the frames are walked the LR need to be cleared.
This inline assembly later will be replaced with a new builtin.

Test: build with  -DCMAKE_C_FLAGS="-mbranch-protection=standard".

Reviewed By: kubamracek

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

3 years ago[MLIR] Add canonicalization for `shape.broadcast`
Frederik Gossen [Mon, 15 Mar 2021 09:10:07 +0000 (10:10 +0100)]
[MLIR] Add canonicalization for `shape.broadcast`

Remove redundant operands and fold if only one left.

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

3 years agoRevert "[NFCI][ValueTracking] getUnderlyingObject(): assert that no cycles are encoun...
Roman Lebedev [Mon, 15 Mar 2021 09:00:22 +0000 (12:00 +0300)]
Revert "[NFCI][ValueTracking] getUnderlyingObject(): assert that no cycles are encountered"

This reverts commit 36f1c3db66f7268ea3183bcf0bbf05b3e1c570b4.
Seems to make bots unhappy.

3 years ago[MLIR] Allow compatible shapes in `Elementwise` operations
Frederik Gossen [Mon, 15 Mar 2021 08:47:00 +0000 (09:47 +0100)]
[MLIR] Allow compatible shapes in `Elementwise` operations

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

3 years ago[NFCI][ValueTracking] getUnderlyingObject(): assert that no cycles are encountered
Roman Lebedev [Mon, 15 Mar 2021 08:51:23 +0000 (11:51 +0300)]
[NFCI][ValueTracking] getUnderlyingObject(): assert that no cycles are encountered

Jeroen Dobbelaere in
https://lists.llvm.org/pipermail/llvm-dev/2021-March/149206.html
is reporting that this function can end up in an endless loop
when called from SROA w/ full restrict patches.

For now, simply ensure that such problems are caught earlier/easier.

3 years ago[mlir][AVX512] Add while loop-based sparse vector-vector dot product variants.
Matthias Springer [Mon, 15 Mar 2021 07:52:40 +0000 (16:52 +0900)]
[mlir][AVX512] Add while loop-based sparse vector-vector dot product variants.

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

3 years ago[Test] Replace checks with auto-generated checks
Max Kazantsev [Mon, 15 Mar 2021 07:32:00 +0000 (14:32 +0700)]
[Test] Replace checks with auto-generated checks

3 years ago[NFC][Inliner] Debugging support to print funtion size after each inlining.
Hongtao Yu [Thu, 11 Mar 2021 18:38:15 +0000 (10:38 -0800)]
[NFC][Inliner] Debugging support to print funtion size after each inlining.

Reviewed By: wenlei

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

3 years agodebuginfo-tests: Fix check-gdb-mlir-support build after MLIR API change in a4bb667d831c
Nathan Chancellor [Mon, 15 Mar 2021 05:09:52 +0000 (05:09 +0000)]
debuginfo-tests: Fix check-gdb-mlir-support build after MLIR API change in a4bb667d831c

Reviewed By: mehdi_amini

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

3 years ago[m_Constant] Check #operands/results before hasTrait()
Chris Lattner [Mon, 15 Mar 2021 01:41:13 +0000 (18:41 -0700)]
[m_Constant] Check #operands/results before hasTrait()

We know that all ConstantLike operations have one result and no operands,
so check this first before doing the trait check.  This change speeds up
Canonicalize on a CIRCT testcase by ~5%.

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

3 years ago[RISCV] Support inline asm for vector instructions.
Hsiangkai Wang [Tue, 9 Mar 2021 00:53:02 +0000 (08:53 +0800)]
[RISCV] Support inline asm for vector instructions.

Types of fractional LMUL and LMUL=1 are all using VR register class. When
using inline asm, it will use the first type in the register class as the
type for the register. It is not necessary the same as the value type. We
need to use INSERT_SUBVECTOR/EXTRACT_SUBVECToR/BITCAST to make it legal
to put the value in the corresponding register class.

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

3 years ago[Canonicalizer] Process regions top-down instead of bottom up & reuse existing constants.
Chris Lattner [Sun, 14 Mar 2021 20:14:48 +0000 (13:14 -0700)]
[Canonicalizer] Process regions top-down instead of bottom up & reuse existing constants.

Two changes:
 1) Change the canonicalizer to walk the function in top-down order instead of
    bottom-up order.  This composes well with the "top down" nature of constant
    folding and simplification, reducing iterations and re-evaluation of ops in
    simple cases.
 2) Explicitly enter existing constants into the OperationFolder table before
    canonicalizing.  Previously we would "constant fold" them and rematerialize
    them, wastefully recreating a bunch fo constants, which lead to pointless
    memory traffic.

Both changes together provide a 33% speedup for canonicalize on some mid-size
CIRCT examples.

One artifact of this change is that the constants generated in normal pattern
application get inserted at the top of the function as the patterns are applied.
Because of this, we get "inverted" constants more often, which is an aethetic
change to the IR but does permute some testcases.

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

3 years agoRevert "[AST] Add generator for source location introspection"
Stephen Kelly [Mon, 15 Mar 2021 01:16:10 +0000 (01:16 +0000)]
Revert "[AST] Add generator for source location introspection"

This reverts commit 91abaa1f8d97e8efa249c31686fd643ff5f1e2c2.

3 years agoRevert "Attempt to fix ARM buildbot"
Stephen Kelly [Mon, 15 Mar 2021 01:16:07 +0000 (01:16 +0000)]
Revert "Attempt to fix ARM buildbot"

This reverts commit 12dac66f6b33dd14b72076800726817f682ab785.

3 years ago[RISCV] Give an explicit error if 'generic' CPU is passed instead of 'generic-rv32...
Craig Topper [Mon, 15 Mar 2021 00:17:50 +0000 (17:17 -0700)]
[RISCV] Give an explicit error if 'generic' CPU is passed instead of 'generic-rv32' or 'generic-rv64'. Validate 64Bit feature against the triple.

I encountered a project that uses llvm that passes "generic" by
default. While I could fix that project, I wouldn't be surprised
if other projects did something similar. So it seems like
a good idea to provide a better error here.

I've also added validation of the 64Bit feature against the
triple so that we can catch a mismatched CPU before failing in
a mysterious way. We can make it pretty far in isel because we
calculate XLenVT from the triple and use that to set up the legal
integer type.

Reviewed By: luismarques, khchen

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

3 years agoAttempt to fix ARM buildbot
Stephen Kelly [Mon, 15 Mar 2021 00:20:39 +0000 (00:20 +0000)]
Attempt to fix ARM buildbot

3 years ago[AST] Add generator for source location introspection
Stephen Kelly [Sun, 14 Mar 2021 16:18:54 +0000 (16:18 +0000)]
[AST] Add generator for source location introspection

Generate a json file containing descriptions of AST classes and their
public accessors which return SourceLocation or SourceRange.

Use the JSON file to generate a C++ API and implementation for accessing
the source locations and method names for accessing them for a given AST
node.

This new API can be used to implement 'srcloc' output in clang-query:

  http://ce.steveire.com/z/m_kTIo

The JSON file can also be used to generate bindings for other languages,
such as Python and Javascript:

  https://steveire.wordpress.com/2019/04/30/the-future-of-ast-matching

In this first version of this feature, only the accessors for Stmt
classes are generated, not Decls, TypeLocs etc.  Those can be added
after this change is reviewed, as this change is mostly about
infrastructure of these code generators.

Also in this version, the platforms/cmake configurations are excluded as
much as possible so that support can be added iteratively.  Currently a
break on any platform causes a revert of the entire feature.  This way,
the `OR WIN32` can be removed in a future commit and if it breaks the
buildbots, only that commit gets reverted, making the entire process
easier to manage.

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

3 years agoRevert "[AST] Add generator for source location introspection"
Stephen Kelly [Sun, 14 Mar 2021 22:51:45 +0000 (22:51 +0000)]
Revert "[AST] Add generator for source location introspection"

This reverts commit 477e4b974653f92960c0bf569d88da7baacef68a.

3 years agoRevert "Ensure that cache variable is set when not building introspection"
Stephen Kelly [Sun, 14 Mar 2021 22:51:40 +0000 (22:51 +0000)]
Revert "Ensure that cache variable is set when not building introspection"

This reverts commit 6b010c6f6e354966569e02841180c77df45bbd76.

3 years agoEnsure that cache variable is set when not building introspection
Stephen Kelly [Sun, 14 Mar 2021 22:44:38 +0000 (22:44 +0000)]
Ensure that cache variable is set when not building introspection

3 years ago[X86] Add -prefer-vector-width=256 tests for v16i8 smulo/umulo.
Craig Topper [Sun, 14 Mar 2021 22:17:03 +0000 (15:17 -0700)]
[X86] Add -prefer-vector-width=256 tests for v16i8 smulo/umulo.

3 years ago[AST] Add generator for source location introspection
Stephen Kelly [Sun, 14 Mar 2021 16:18:54 +0000 (16:18 +0000)]
[AST] Add generator for source location introspection

Generate a json file containing descriptions of AST classes and their
public accessors which return SourceLocation or SourceRange.

Use the JSON file to generate a C++ API and implementation for accessing
the source locations and method names for accessing them for a given AST
node.

This new API can be used to implement 'srcloc' output in clang-query:

  http://ce.steveire.com/z/m_kTIo

The JSON file can also be used to generate bindings for other languages,
such as Python and Javascript:

  https://steveire.wordpress.com/2019/04/30/the-future-of-ast-matching

In this first version of this feature, only the accessors for Stmt
classes are generated, not Decls, TypeLocs etc.  Those can be added
after this change is reviewed, as this change is mostly about
infrastructure of these code generators.

Also in this version, the platforms/cmake configurations are excluded as
much as possible so that support can be added iteratively.  Currently a
break on any platform causes a revert of the entire feature.  This way,
the `OR WIN32` can be removed in a future commit and if it breaks the
buildbots, only that commit gets reverted, making the entire process
easier to manage.

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