platform/upstream/llvm.git
3 years ago[clang][deps] Move enabling system header deps from `clang-scan-deps` to `DependencyS...
Jan Svoboda [Mon, 14 Jun 2021 10:12:23 +0000 (12:12 +0200)]
[clang][deps] Move enabling system header deps from `clang-scan-deps` to `DependencyScanning` library

This patch moves enabling system header deps from `clang-scan-deps` into the `DependencyScanning` library. This will make it easier to preserve semantics of the original TU command-line for modular dependencies (see D104036).

Reviewed By: arphaman

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

3 years ago[clang][deps] Move injection of `-Wno-error` from `clang-scan-deps` to `DependencySca...
Jan Svoboda [Mon, 14 Jun 2021 10:09:54 +0000 (12:09 +0200)]
[clang][deps] Move injection of `-Wno-error` from `clang-scan-deps` to `DependencyScanning` library

This moves another piece of logic specific to `clang-scan-deps` into the `DependencyScanning` library. This makes it easier to check how the original command-line looked like in the library and will enable the library to stop inventing `-Wno-error` for modular dependencies (see D104036).

Reviewed By: arphaman

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

3 years ago[clang][deps] Move invocation adjustments from `clang-scan-deps` to `DependencyScanni...
Jan Svoboda [Mon, 14 Jun 2021 10:06:08 +0000 (12:06 +0200)]
[clang][deps] Move invocation adjustments from `clang-scan-deps` to `DependencyScanning` library

The `clang-scan-deps` tool has some logic that parses and modifies the original Clang command-line. The goal is to setup `DependencyOutputOptions` by injecting `-M -MT <target>` and prevent the creation of output files.

This patch moves the logic into the `DependencyScanning` library, and uses the parsed `CompilerInvocation` instead of the raw command-line. The code simpler and can be used from the C++ API as well.

The `-o /dev/null` arguments are not necessary, since the `DependencyScanning` library only runs a preprocessing action, so there's no way it'll produce an actual object file.

Related: The `-M` argument implies `-w`, which would appear on the command-line of modular dependencies even though it was not on the original TU command line (see D104036).

Some related tests were updated.

Reviewed By: arphaman

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

3 years ago[clang][deps] Move stripping of diagnostic serialization from `clang-scan-deps` to...
Jan Svoboda [Mon, 14 Jun 2021 10:02:19 +0000 (12:02 +0200)]
[clang][deps] Move stripping of diagnostic serialization from `clang-scan-deps` to `DependencyScanning` library

To prevent the creation of diagnostics file, `clang-scan-deps` strips the corresponding command-line argument. This behavior is useful even when using the C++ `DependencyScanner` library.

This patch transforms stripping of command-line in `clang-scan-deps` into stripping of `CompilerInvocation` in `DependencyScanning`.

AFAIK, the `clang-cl` driver doesn't even accept `--serialize-diagnostics`, so I've removed the test. (It would fail with an unknown command-line argument otherwise.)

Note: Since we're generating command-lines for modular dependencies from `CompilerInvocation`, the `--serialize-diagnostics` will be dropped. This was already happening in `clang-scan-deps` before this patch, but it will now happen also when using `DependencyScanning` library directly. This is resolved in D104036.

Reviewed By: dexonsmith, arphaman

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

3 years ago[Analyzer][solver] Simplify existing eq classes and constraints when a new constraint...
Gabor Marton [Fri, 28 May 2021 13:18:28 +0000 (15:18 +0200)]
[Analyzer][solver] Simplify existing eq classes and constraints when a new constraint is added

Update `setConstraint` to simplify existing equivalence classes when a
new constraint is added. In this patch we iterate over all existing
equivalence classes and constraints and try to simplfy them with
simplifySVal. This solves problematic cases where we have two symbols in
the tree, e.g.:
```
int test_rhs_further_constrained(int x, int y) {
  if (x + y != 0)
    return 0;
  if (y != 0)
    return 0;
  clang_analyzer_eval(x + y == 0); // expected-warning{{TRUE}}
  clang_analyzer_eval(y == 0);     // expected-warning{{TRUE}}
  return 0;
}
```

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

3 years ago[clang][deps] Handle modular dependencies present in PCH
Jan Svoboda [Mon, 14 Jun 2021 09:30:26 +0000 (11:30 +0200)]
[clang][deps] Handle modular dependencies present in PCH

When a translation unit uses a PCH and imports the same modules as the PCH, we'd prefer to resolve to those modules instead of inventing new modules and reporting them as modular dependencies. Since the PCH modules have already been built nudge the compiler to reuse them when deciding whether to build a new module and don't report them as regular modular dependencies.

Depends on D103524 & D103802.

Reviewed By: dexonsmith

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

3 years agoFix -Wswitch warning after 092c303955cd18be6c0b923b1c0a1b96e2c91893.
Haojian Wu [Mon, 14 Jun 2021 09:51:00 +0000 (11:51 +0200)]
Fix -Wswitch warning after 092c303955cd18be6c0b923b1c0a1b96e2c91893.

3 years ago[flang] Add POSIX implementation for CPU_TIME
Diana Picus [Wed, 9 Jun 2021 09:47:10 +0000 (09:47 +0000)]
[flang] Add POSIX implementation for CPU_TIME

Add an implementation for CPU_TIME using the POSIX function
clock_gettime. I think on most POSIX systems this will be included for
free via <ctime>, which corresponds to "time.h" (YMMV, we can fix the
code if the need arises).

Detecting that clock_gettime is available is tricky. For instance, commit
827407a86aa07 used the following incantation in f18-parse-demo.cpp:

  #if _POSIX_C_SOURCE >= 199309L && _POSIX_TIMERS > 0 && _POSIX_CPUTIME && \
    defined CLOCK_PROCESS_CPUTIME_ID

This doesn't work on my AArch64 Ubuntu system, which provides
clock_gettime but doesn't define _POSIX_TIMERS. Since finding the right
combination of macros requires infinite time, patience and access to
sundry POSIX systems, we should probably try a different approach.

This patch attempts to use SFINAE instead of the preprocessor to choose
an implementation for CPU_TIME. We define a helper function template
which helps us check if clock_gettime is available (and has the
interface we expect). I hope the comments explain it well enough.

This approach has the advantage that it keeps the detection of
clock_gettime close to the code that uses it. An alternative would be to
use CMake to check for the symbol (I personally haven't used this before
so I don't know if there are any quirks).

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

3 years ago[lldb] Correct "else if" to "elif" in TestRegisters
David Spickett [Mon, 14 Jun 2021 09:35:14 +0000 (09:35 +0000)]
[lldb] Correct "else if" to "elif" in TestRegisters

3 years agoRevert "[libc] Add a set of elementary operations"
Guillaume Chatelet [Mon, 14 Jun 2021 09:33:39 +0000 (09:33 +0000)]
Revert "[libc] Add a set of elementary operations"

This reverts commit e63f27a3cf8129cb66b8350ad50bf19633554a6b.

3 years ago[clang][deps] Handle precompiled headers' AST files
Jan Svoboda [Mon, 14 Jun 2021 09:15:03 +0000 (11:15 +0200)]
[clang][deps] Handle precompiled headers' AST files

The `PreprocessOnlyAction` doesn't support loading the AST file of a precompiled header. This is problematic for dependency scanning, since the `#include` manufactured for the PCH is treated as textual. This means the PCH contents get scanned with each TU, which is redundant. Moreover, dependencies of the PCH end up being considered dependency of the TU.

To handle AST file of PCH properly, this patch creates new `FrontendAction` that behaves the same way `PreprocessorOnlyAction` does, but treats the manufactured PCH `#include` as a normal compilation would (by not claiming it only uses a preprocessor and creating the default AST consumer).

The AST file is now reported as a file dependency of the TU.

Depends on D103519.

Reviewed By: Bigcheese

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

3 years ago[lldb] Add missing changes to a2363c0cf9b6a9a81c76ac652da667f73845d38b
David Spickett [Mon, 14 Jun 2021 09:23:05 +0000 (09:23 +0000)]
[lldb] Add missing changes to a2363c0cf9b6a9a81c76ac652da667f73845d38b

Completely forgot to actually update the change before relanding it.
This adds the Darwin AVX changes.

3 years agoReland "[lldb] Set return status to failed when adding a command error"
David Spickett [Mon, 14 Jun 2021 09:19:25 +0000 (09:19 +0000)]
Reland "[lldb] Set return status to failed when adding a command error"

This reverts commit db93e4e70aa453e5ba04ba0d9e01f581882b6c81.

This modifies TestRegsters.py to account for Darwin showing
AVX registers as part of "Floating Point Registers" instead
of in a separate "Advanced Vector Extensions" category.

3 years ago[clang][modules][pch] Allow loading PCH with different modules cache path
Jan Svoboda [Mon, 14 Jun 2021 08:51:04 +0000 (10:51 +0200)]
[clang][modules][pch] Allow loading PCH with different modules cache path

It's useful to be able to load explicitly-built PCH files into an implicit build (e.g. during dependency scanning). That's currently impossible, since the explicitly-built PCH has an empty modules cache path, while the current compilation has (and needs to have) a valid path, triggering an error in the `PCHValidator`.

This patch adds a preprocessor option and command-line flag that can be used to omit this check.

Reviewed By: dexonsmith

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

3 years ago[libc] Add a set of elementary operations
Guillaume Chatelet [Mon, 14 Jun 2021 09:01:06 +0000 (09:01 +0000)]
[libc] Add a set of elementary operations

Each of these elementary operations can be assembled to support higher order constructs (Overlapping access, Loop, Aligned Loop).
The patch does not compile yet as it depends on other ones (D100571, D100631) but it allows to get the conversation started.

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

3 years ago[clang][deps] NFC: Preserve the original frontend action
Jan Svoboda [Mon, 14 Jun 2021 08:32:48 +0000 (10:32 +0200)]
[clang][deps] NFC: Preserve the original frontend action

This patch stops adjusting the frontend action when `clang-scan-deps` is configured to use the full output format.

In a future patch, the dependency scanner needs to check whether the original compiler invocation builds a PCH. That's impossible when `-Eonly` et al. override `-emit-pch`.

The `-Eonly` flag is not needed - the dependency scanner explicitly sets up its own frontend action anyways.

Reviewed By: dexonsmith

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

3 years ago[llvm] remove Sequence::asSmallVector()
Guillaume Chatelet [Mon, 14 Jun 2021 08:27:41 +0000 (08:27 +0000)]
[llvm] remove Sequence::asSmallVector()

There's no need for `toSmallVector()` as `SmallVector.h` already provides a `to_vector` free function that takes a range.

Reviewed By: Quuxplusone

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

3 years ago[flang] Add initial implementation for CPU_TIME
Diana Picus [Wed, 9 Jun 2021 08:19:43 +0000 (08:19 +0000)]
[flang] Add initial implementation for CPU_TIME

Add an implementation for CPU_TIME based on std::clock(), which should
be available on all the platforms that we support.

Also add a test that's basically just a sanity check to make sure we
return positive values and that the value returned at the start of some
amount of work is larger than the one returned after the end.

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

3 years ago[VP] Binary floating-point intrinsics.
Simon Moll [Mon, 14 Jun 2021 06:51:24 +0000 (08:51 +0200)]
[VP] Binary floating-point intrinsics.

This patch implements vector-predicated intrinsics on IR level for fadd,
fsub, fmul, fdiv and frem.  There operate in the default floating-point
environment. We will use constrained fp operand bundles for constrained
vector-predicated fp math (D93455).

Reviewed By: craig.topper

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

3 years ago[mlir] Remove traits that require vector type support from ops in Complex dialect.
Adrian Kuegel [Fri, 11 Jun 2021 10:24:40 +0000 (12:24 +0200)]
[mlir] Remove traits that require vector type support from ops in Complex dialect.

Actually, no vector types are supported so far. We should add the traits once
the vector types are supported (e.g. ElementwiseMappable.traits).
Instead add Elementwise trait to each op.

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

3 years ago[mlir][linalg] Add support for scalar input operands.
Tobias Gysi [Mon, 14 Jun 2021 05:59:33 +0000 (05:59 +0000)]
[mlir][linalg] Add support for scalar input operands.

Up to now all structured op operands are assumed to be shaped. The patch relaxes this assumption and allows scalar input operands. In contrast to shaped operands scalar operands are not indexed and directly forwarded to the body of the operation. As all other operands, scalar operands are associated to an indexing map that in case of a scalar or a 0D-operand has an empty range.

We will use scalar operands as a replacement for the capture mechanism. In contrast to captures, the approach ensures we can generate the function signature from the operand list and it prevents outdated capture values in case a transformation updates only the capture operand but not the hidden body of a named operation.

Removing captures and updating existing operations such as linalg.fill is left for a later patch.

The patch depends on https://reviews.llvm.org/D103891 and https://reviews.llvm.org/D103890.

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

3 years ago[mlir][linalg] Lower PadTensorOps with non-constant pad value
Matthias Springer [Mon, 14 Jun 2021 06:00:30 +0000 (15:00 +0900)]
[mlir][linalg] Lower PadTensorOps with non-constant pad value

The padding of such ops is not generated in a vectorized way. Instead, emit a tensor::GenerateOp.

We may vectorize GenerateOps in the future.

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

3 years ago[mlir] Add ExpOp to Complex dialect.
Adrian Kuegel [Fri, 11 Jun 2021 11:37:51 +0000 (13:37 +0200)]
[mlir] Add ExpOp to Complex dialect.

Also add a conversion pattern from Complex to Standard/Math dialect.

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

3 years agoOnly consider built-in compound assignment operators for -Wunused-but-set-*
Stephan Bergmann [Mon, 14 Jun 2021 05:57:22 +0000 (07:57 +0200)]
Only consider built-in compound assignment operators for -Wunused-but-set-*

At least LibreOffice has, for mainly historic reasons that would be hard to
change now, a class Any with an overloaded operator >>= that semantically does
not assign to the LHS but rather extracts into the (by-reference) RHS.  Which
thus caused false positive -Wunused-but-set-parameter and
-Wunused-but-set-variable after those have been introduced recently.

This change is more conservative about the assumed semantics of overloaded
operators, excluding compound assignment operators but keeping plain operator =
ones.  At least for LibreOffice, that strikes a good balance of not producing
false positives but still finding lots of true ones.

(The change to the BinaryOperator case in MaybeDecrementCount is necessary
because e.g. the template f4 test code in warn-unused-but-set-variables-cpp.cpp
turns the += into a BinaryOperator.)

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

3 years ago[LoopVectorize] precommit pr50686.ll for D104148
Mindong Chen [Mon, 14 Jun 2021 05:55:14 +0000 (13:55 +0800)]
[LoopVectorize] precommit pr50686.ll for D104148

3 years ago[mlir][linalg] Vectorize linalg.pad_op source copying (improved)
Matthias Springer [Mon, 14 Jun 2021 05:41:07 +0000 (14:41 +0900)]
[mlir][linalg] Vectorize linalg.pad_op source copying (improved)

Vectorize linalg.pad_op source copying if source or result shape are static.

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

3 years ago[mlir][linalg] Vectorize linalg.pad_op source copying (static source shape)
Matthias Springer [Mon, 14 Jun 2021 05:30:02 +0000 (14:30 +0900)]
[mlir][linalg] Vectorize linalg.pad_op source copying (static source shape)

If the source operand of a linalg.pad_op operation has static shape, vectorize the copying of the source.

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

3 years ago[mlir][linalg] Lower PadTensorOp to InitTensorOp + FillOp + SubTensorInitOp
Matthias Springer [Mon, 14 Jun 2021 05:20:11 +0000 (14:20 +0900)]
[mlir][linalg] Lower PadTensorOp to InitTensorOp + FillOp + SubTensorInitOp

Currently limited to constant pad values. Any combination of dynamic/static tensor sizes and padding sizes is supported.

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

3 years agoAMD k8 family does not support SSE4.x which are required by x86-64-v2+
serge-sans-paille [Fri, 11 Jun 2021 13:42:26 +0000 (15:42 +0200)]
AMD k8 family does not support SSE4.x which are required by x86-64-v2+

So don't define __tune__k8__ for these micro architecture.

SSE, SSE2 and SSE3 appear in https://www.amd.com/system/files/TechDocs/25112.PDF
but not SSE4.x.

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

3 years ago[LLParser] Remove outdated deplibs
Xuanda Yang [Mon, 14 Jun 2021 04:46:12 +0000 (12:46 +0800)]
[LLParser] Remove outdated deplibs

The comment mentions deplibs should be removed in 4.0. Removing it in this patch.

Reviewed By: compnerd, dexonsmith, lattner

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

3 years ago[Testsuite] Change these tests to only have a single verification error, NFC.
Chris Lattner [Mon, 14 Jun 2021 04:35:24 +0000 (21:35 -0700)]
[Testsuite] Change these tests to only have a single verification error, NFC.

These are testing for various verification failures, but have missing returns
at the end of their function.  Add the returns to focus the tests better.

3 years ago[lld-macho] Try to fix MSAN "uninitialized memory" error
Jez Ng [Mon, 14 Jun 2021 03:30:33 +0000 (23:30 -0400)]
[lld-macho] Try to fix MSAN "uninitialized memory" error

I *think* this is the fix, with the regression being introduced by
D104199. Not 100% sure since MSAN isn't supported on my Mac machine, and
it'll take some time to spin up a Linux box... will look at the
buildbots for answers

3 years agoImplement DW_CFA_LLVM_* for Heterogeneous Debugging
RamNalamothu [Mon, 14 Jun 2021 01:27:58 +0000 (06:57 +0530)]
Implement DW_CFA_LLVM_* for Heterogeneous Debugging

Add support in MC/MIR for writing/parsing, and DebugInfo.

This is part of the Extensions for Heterogeneous Debugging defined at
https://llvm.org/docs/AMDGPUDwarfExtensionsForHeterogeneousDebugging.html

Specifically the CFI instructions implemented here are defined at
https://llvm.org/docs/AMDGPUDwarfExtensionsForHeterogeneousDebugging.html#cfa-definition-instructions

Reviewed By: clayborg

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

3 years agoCalculate getTerminator only when necessary
Aditya Kumar [Sun, 13 Jun 2021 18:32:28 +0000 (11:32 -0700)]
Calculate getTerminator only when necessary

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

3 years ago[ORC-RT] Fix an error check.
Lang Hames [Mon, 14 Jun 2021 00:35:20 +0000 (10:35 +1000)]
[ORC-RT] Fix an error check.

3 years ago[mlir][linalg] Remove generic PadTensorOp vectorization pattern
Matthias Springer [Mon, 14 Jun 2021 01:40:50 +0000 (10:40 +0900)]
[mlir][linalg] Remove generic PadTensorOp vectorization pattern

The generic vectorization pattern handles only those cases, where
low and high padding is zero. This is already handled by a
canonicalization pattern.

Also add a new canonicalization test case to ensure that tensor cast ops
are properly inserted.

A more general vectorization pattern will be added in a subsequent commit.

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

3 years ago[DominanceInfo] Make the ctor take a defaulted value for the operand. NFC.
Chris Lattner [Mon, 14 Jun 2021 01:24:53 +0000 (18:24 -0700)]
[DominanceInfo] Make the ctor take a defaulted value for the operand. NFC.

This allows it to be default constructible, which makes sense given it
ignores the operand.

3 years ago[mlir] Vectorize linalg.pad_tensor consumed by transfer_write
Matthias Springer [Mon, 14 Jun 2021 01:16:22 +0000 (10:16 +0900)]
[mlir] Vectorize linalg.pad_tensor consumed by transfer_write

Vectorize linalg.pad_tensor without generating a linalg.init_tensor when consumed by a transfer_write.

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

3 years ago[mlir] Vectorize linalg.pad_tensor consumed by subtensor_insert
Matthias Springer [Mon, 14 Jun 2021 00:58:26 +0000 (09:58 +0900)]
[mlir] Vectorize linalg.pad_tensor consumed by subtensor_insert

Vectorize linalg.pad_tensor without generating a linalg.init_tensor when consumed by a subtensor_insert.

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

3 years ago[mlir] Vectorize linalg.pad_tensor consumed by transfer_read
Matthias Springer [Mon, 14 Jun 2021 00:51:50 +0000 (09:51 +0900)]
[mlir] Vectorize linalg.pad_tensor consumed by transfer_read

Vectorize linalg.pad_tensor without generating a linalg.init_tensor when consumed by a transfer_read.

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

3 years ago[mlir][linalg] Add constant padding helper to PadTensorOp
Matthias Springer [Mon, 14 Jun 2021 00:43:02 +0000 (09:43 +0900)]
[mlir][linalg] Add constant padding helper to PadTensorOp

* Add a helper function that returns the constant padding value (if applicable).
* Remove existing getConstantYieldValueFromBlock function, which does almost the same.
* Adapted from D103243.

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

3 years ago[Utils] Add missing freeze and poison keyword highlights
Juneyoung Lee [Mon, 14 Jun 2021 00:21:01 +0000 (09:21 +0900)]
[Utils] Add missing freeze and poison keyword highlights

This patch adds missing keyword highlights for freeze and poison

Reviewed By: MaskRay, porglezomp

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

3 years ago[lld-macho][nfc] Add `final` to classes where possible
Jez Ng [Sun, 13 Jun 2021 23:43:37 +0000 (19:43 -0400)]
[lld-macho][nfc] Add `final` to classes where possible

I wanted to see if we would get any perf wins out of this, but
it doesn't seem to be the case. But it still seems worth committing.

Reviewed By: MaskRay

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

3 years ago[lld-macho][nfc] Represent the image loader cache with a ConcatInputSection
Jez Ng [Sun, 13 Jun 2021 23:43:36 +0000 (19:43 -0400)]
[lld-macho][nfc] Represent the image loader cache with a ConcatInputSection

We don't need to define any special behavior for this section,
so creating a subclass for it is redundant.

Reviewed By: #lld-macho, thakis

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

3 years ago[lld-macho][nfc] Remove InputSection::outSecFileOff
Jez Ng [Sun, 13 Jun 2021 23:43:34 +0000 (19:43 -0400)]
[lld-macho][nfc] Remove InputSection::outSecFileOff

`outSecFileOff` and the associated `getFileOffset()` accessors were
unnecessary.

For all the cases we care about, `outSecFileOff` is the same as
`outSecOff`. The only time they deviate is if there are zerofill
sections within a given segment. But since zerofill sections are always
at the end of a segment, the only sections where the two values deviate
are zerofill sections themselves. And we never actually query the
outSecFileOff of zerofill sections.

As for `getFileOffset()`, the only place it was being used was to
calculate the offset of the entry symbol. However, we can compute that
value by just taking the difference between the address of the entry
symbol and the address of the Mach-O header. In fact, this appears to be
what ld64 itself does. This difference is the same as the file offset as
long as there are no intervening zerofill sections, but since `__text`
is the first section in `__TEXT`, this never happens, so our previous
use of `getFileOffset()` was not wrong -- just inefficient.

Reviewed By: #lld-macho, thakis

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

3 years ago[ms] [llvm-ml] When parsing MASM, "jmp short" instructions are case insensitive
Eric Astor [Sun, 13 Jun 2021 22:35:51 +0000 (18:35 -0400)]
[ms] [llvm-ml] When parsing MASM, "jmp short" instructions are case insensitive

Handle "short" in a case-insensitive fashion in MASM.

Required to correctly parse z_Windows_NT-586_asm.asm from the OpenMP runtime.

Reviewed By: thakis

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

3 years ago[ms] [llvm-ml] Fix capitalization of the ignored CPU directives
Eric Astor [Sun, 13 Jun 2021 22:27:06 +0000 (18:27 -0400)]
[ms] [llvm-ml] Fix capitalization of the ignored CPU directives

These directives are matched in lowercase, so make sure to use lowercase for their P suffix.

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

3 years agoFix misspelled instruction in X86 assembly parser
Eric Astor [Sun, 13 Jun 2021 22:33:55 +0000 (18:33 -0400)]
Fix misspelled instruction in X86 assembly parser

Did not correctly handle "jecxz short <address>".

Discovered while working on LLVM-ML; shows up in z_Windows_NT-586_asm.asm from the OpenMP runtime

Reviewed By: MaskRay

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

3 years agounwind: allow building with GCC
Saleem Abdulrasool [Sun, 13 Jun 2021 21:28:43 +0000 (14:28 -0700)]
unwind: allow building with GCC

This was regressed in adf1561d6ce8.  Since gcc does not support
`__has_feature`, this adjusts the build to use the
`__SANITIZE_ADDRESS__` macro which GCC defines to identify if ASAN is
enabled (similar to `__has_feature`).  This allows building libunwind
with gcc again.

Patch by Daniel Levin!

Reviewed By: compnerd

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

3 years ago[DSE] Extra multiblock loop tests, NFC.
David Green [Sun, 13 Jun 2021 21:30:42 +0000 (22:30 +0100)]
[DSE] Extra multiblock loop tests, NFC.

Some of these can be DSE'd, some of which cannot. Useful in D100464.

3 years agoIntroduce tensor.insert op to Tensor dialect.
Hanhan Wang [Sun, 13 Jun 2021 20:45:33 +0000 (13:45 -0700)]
Introduce tensor.insert op to Tensor dialect.

Add `tensor.insert` op to make `tensor.extract`/`tensor.insert` work in pairs
for `scalar` domain. Like `subtensor`/`subtensor_insert` work in pairs in
`tensor` domain, and `vector.transfer_read`/`vector.transfer_write` work in
pairs in `vector` domain.

Reviewed By: silvas

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

3 years ago[ELF] Add OVERWRITE_SECTIONS command
Fangrui Song [Sun, 13 Jun 2021 19:41:11 +0000 (12:41 -0700)]
[ELF] Add OVERWRITE_SECTIONS command

This implements https://sourceware.org/bugzilla/show_bug.cgi?id=26404

An `OVERWRITE_SECTIONS` command is a `SECTIONS` variant which contains several
output section descriptions. The output sections do not have specify an order.
Similar to `INSERT [BEFORE|AFTER]`, `LinkerScript::hasSectionsCommand` is not
set, so the built-in rules (see `docs/ELF/linker_script.rst`) still apply.
`OVERWRITE_SECTIONS` can be more convenient than `INSERT` because it does not
need an anchor section.

The initial syntax is intentionally narrow to facilitate backward compatible
extensions in the future. Symbol assignments cannot be used.

This feature is versatile. To list a few usage:

* Use `section : { KEEP(...) }` to retain input sections under GC
* Define encapsulation symbols (start/end) for an output section
* Use `section : ALIGN(...) : { ... }` to overalign an output section (similar to ld64 `-sectalign`)

When an output section is specified by both `OVERWRITE_SECTIONS` and
`INSERT`, `INSERT` is processed after overwrite sections. To make this work,
this patch changes `InsertCommand` to use name based matching instead of pointer
based matching. (This may cause a difference when `INSERT` moves one output
section more than once. Such duplicate commands should not be used in practice
(seems that in GNU ld the output sections may just disappear).)

A linker script can be used without -T/--script. The traditional `SECTIONS`
commands are concatenated, so a wrong rule can be more noticeable from the
section order. This feature if misused can be less noticeable, just like
`INSERT`.

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

3 years ago[fuzzer] Fix build on musl
Khem Raj [Sun, 13 Jun 2021 19:32:07 +0000 (12:32 -0700)]
[fuzzer] Fix build on musl

cstddef is needed for size_t definition.
(Multiple headers can provide size_t but none of them exists.)

Reviewed By: MaskRay

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

3 years ago[clang-format] Adds a formatter for aligning arrays of structs
Fred Grim [Sun, 13 Jun 2021 14:36:42 +0000 (16:36 +0200)]
[clang-format] Adds a formatter for aligning arrays of structs

This adds a new formatter to arrange array of struct initializers into
neat columns.

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

3 years ago[SPARC] Legalize truncation and extension between fp128 and half
LemonBoy [Sun, 13 Jun 2021 18:03:42 +0000 (20:03 +0200)]
[SPARC] Legalize truncation and extension between fp128 and half

Lower truncations and expansions between fp128 and half values into libcalls.
Expand truncating stores into two separate truncation and a store operations.

Reviewed By: jrtc27

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

3 years agoDirectoryWatcher: also wait for the notifier thread
Saleem Abdulrasool [Sun, 13 Jun 2021 17:52:27 +0000 (10:52 -0700)]
DirectoryWatcher: also wait for the notifier thread

Ultimately the DirectoryWatcher is not ready until the notifier thread
is also active.  Failure to wait for the notifier thread may result in
loss of events.  While this is not catastrophic in practice, the tests
are sensitive to this as depending on the thread scheduler, the thread
may fail to being execution before the operations are completed by the
fixture.  Running this in a tight loop shows no regressions locally as
previously, but this failure mode was been sighted once on a builder.

3 years ago[lld/mac] clarify comment
Nico Weber [Sun, 13 Jun 2021 17:30:05 +0000 (13:30 -0400)]
[lld/mac] clarify comment

This is a "we should do X in the future" fixme, not an "X might go wrong"
fixme.

3 years ago[LoopUnroll] Test multi-exit runtime unrolling with predictable exit (NFC)
Nikita Popov [Sun, 13 Jun 2021 16:16:51 +0000 (18:16 +0200)]
[LoopUnroll] Test multi-exit runtime unrolling with predictable exit (NFC)

The (prior to prologue insertion) predictable exit shouldn't get
folded here. Make sure it isn't...

3 years agoRawError.h - remove unused <string> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 16:32:57 +0000 (17:32 +0100)]
RawError.h - remove unused <string> include. NFCI.

3 years agoBoundsChecking.cpp - tidy implicit header dependencies. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 16:08:15 +0000 (17:08 +0100)]
BoundsChecking.cpp - tidy implicit header dependencies. NFCI.

We don't use <vector> but we do use std::pair (<utility>)

3 years agoDIPrinter.h - tidy implicit header dependencies. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 16:00:15 +0000 (17:00 +0100)]
DIPrinter.h - tidy implicit header dependencies. NFCI.

We don't use <string> but we do use std::unique_ptr (<memory>) and llvm::Optional<>

3 years agoDetailedRecordsBackend.cpp - printSectionHeading - avoid std::string creation/copies.
Simon Pilgrim [Sun, 13 Jun 2021 15:49:40 +0000 (16:49 +0100)]
DetailedRecordsBackend.cpp - printSectionHeading - avoid std::string creation/copies.

Don't create std::string from constant c-strings or pass std::string by value - we can use StringRef instead.

3 years agoDetailedRecordsBackend.cpp - tidy implicit header dependencies. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 15:27:17 +0000 (16:27 +0100)]
DetailedRecordsBackend.cpp - tidy implicit header dependencies. NFCI.

We don't use <algorithm>, <set> or <vector>, but we do use std::pair (<utility>).

3 years agoProfiledCallGraph.h - remove unused <string> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 14:16:09 +0000 (15:16 +0100)]
ProfiledCallGraph.h - remove unused <string> include. NFCI.

3 years agoRegUsageInfoPropagate.cpp - remove unused <string> and <map> includes. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 14:07:14 +0000 (15:07 +0100)]
RegUsageInfoPropagate.cpp - remove unused <string> and <map> includes. NFCI.

3 years agoMachOObjectFile.cpp - remove unused <string> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 13:49:41 +0000 (14:49 +0100)]
MachOObjectFile.cpp - remove unused <string> include. NFCI.

3 years agoDWARFDebugFrame.cpp - remove unused <string> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 13:28:45 +0000 (14:28 +0100)]
DWARFDebugFrame.cpp - remove unused <string> include. NFCI.

3 years agofix comment typos to cycle bots
Nico Weber [Sun, 13 Jun 2021 14:18:51 +0000 (10:18 -0400)]
fix comment typos to cycle bots

3 years agoGVN.cpp - remove unused <vector> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 12:54:57 +0000 (13:54 +0100)]
GVN.cpp - remove unused <vector> include. NFCI.

3 years agoLoopUnrollAndJamPass.cpp - remove unused <vector> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 12:53:03 +0000 (13:53 +0100)]
LoopUnrollAndJamPass.cpp - remove unused <vector> include. NFCI.

3 years ago[ARM] Introduce t2WhileLoopStartTP
David Green [Sun, 13 Jun 2021 12:55:34 +0000 (13:55 +0100)]
[ARM] Introduce t2WhileLoopStartTP

This adds t2WhileLoopStartTP, similar to the t2DoLoopStartTP added in
D90591. It keeps a reference to both the tripcount register and the
element count register, so that the ARMLowOverheadLoops pass in the
backend can pick the correct one without having to search for it from
the operand of a VCTP.

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

3 years ago[clang][NFC] Add IsAnyDestructorNoReturn field to CXXRecord instead of calculating...
Markus Böck [Sun, 13 Jun 2021 12:48:27 +0000 (14:48 +0200)]
[clang][NFC] Add IsAnyDestructorNoReturn field to CXXRecord instead of calculating it on demand

This patch addresses a performance issue I noticed when using clang-12 to compile projects of mine. Even though the files weren't too large (around 1k cpp), the compiler was taking more than a minute to compile the source file, much longer than either GCC or MSVC.

Using a profiler it turned out the issue was the isAnyDestructorNoReturn function in CXXRecordDecl. In particular it being recursive, recalculating the property for every invocation, for every field and base class. This showed up in tracebacks in the profiler.

This patch instead adds IsAnyDestructorNoReturn as a Field to the data inside of CXXRecord and updates when a new base class, destructor, or record field member is added.

After this patch the problematic file of mine went from a compile time of 81s, down to 12s.

The patch itself should not change any functionality, just improve performance.

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

3 years ago[InstCombine] fold ctlz/cttz of bool types
Sanjay Patel [Sun, 13 Jun 2021 12:21:23 +0000 (08:21 -0400)]
[InstCombine] fold ctlz/cttz of bool types

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

3 years agoSValExplainer.h - get APSInt values by const reference instead of value. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 12:05:17 +0000 (13:05 +0100)]
SValExplainer.h - get APSInt values by const reference instead of value. NFCI.

Avoid unnecessary copies.

3 years agoArgumentPromotion.cpp - remove unused <string> include. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 12:03:47 +0000 (13:03 +0100)]
ArgumentPromotion.cpp - remove unused <string> include. NFCI.

3 years agoVPlanSLP.cpp - tidy implicit header dependencies. NFCI.
Simon Pilgrim [Sun, 13 Jun 2021 11:36:51 +0000 (12:36 +0100)]
VPlanSLP.cpp - tidy implicit header dependencies. NFCI.

We don't use std::string and std::vector, but we do use std::pair and std::max.

3 years ago[ORC-RT] Remove unused header in unit test.
Lang Hames [Sun, 13 Jun 2021 10:45:20 +0000 (20:45 +1000)]
[ORC-RT] Remove unused header in unit test.

3 years ago[JITLink][MachO] Add missing testcase.
Lang Hames [Sun, 13 Jun 2021 10:43:49 +0000 (20:43 +1000)]
[JITLink][MachO] Add missing testcase.

This test was accidentally left out of f9649d123db.

3 years ago[ORC-RT] Fix a comment.
Lang Hames [Sun, 13 Jun 2021 09:31:36 +0000 (19:31 +1000)]
[ORC-RT] Fix a comment.

3 years ago[clang] Implement P2266 Simpler implicit move
Matheus Izvekov [Fri, 19 Mar 2021 02:32:06 +0000 (03:32 +0100)]
[clang] Implement P2266 Simpler implicit move

This Implements [[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2266r1.html|P2266 Simpler implicit move]].

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Reviewed By: Quuxplusone

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

3 years ago[ARM][NEON] Combine base address updates for vld1Ndup intrinsics
Kristina Bessonova [Wed, 2 Jun 2021 17:51:11 +0000 (19:51 +0200)]
[ARM][NEON] Combine base address updates for vld1Ndup intrinsics

Reviewed By: dmgreen

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

3 years ago[X86] Check immediate before get it.
Luo, Yuanke [Thu, 10 Jun 2021 14:50:20 +0000 (22:50 +0800)]
[X86] Check immediate before get it.

For CMP imm instruction, when the operand 1 is symbol address we should
check if it is immediate first. Here is the example code.
`CMP64mi32 $noreg, 8, killed renamable $rcx, @d, $noreg, @a, implicit-def
$eflags`
Many thanks to Craig, Topper for the test case to reproduce this issue.

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

3 years agoRevert "[X86] Check immediate before get it."
Luo, Yuanke [Sun, 13 Jun 2021 05:55:19 +0000 (13:55 +0800)]
Revert "[X86] Check immediate before get it."

This reverts commit 9eb2f723c24523194b833779d20b027bf89a4f55.

3 years ago[runtimes] Fix umbrella component targets
Shoaib Meenai [Sun, 13 Jun 2021 02:47:09 +0000 (19:47 -0700)]
[runtimes] Fix umbrella component targets

When we're building the runtimes for multiple platform targets, we
create umbrella build targets for each distribution component, but those
targets didn't have any dependencies and were just no-ops. Make the
umbrella target depend on the sub-targets for each platform to fix this,
which is consistent with the behavior of the umbrella targets for each
runtime, and also consistent with the behavior when we've only specified
the default target.

3 years agollvm-objcopy: fix section size truncation/extension when dumping sections
David Blaikie [Sun, 13 Jun 2021 01:54:08 +0000 (18:54 -0700)]
llvm-objcopy: fix section size truncation/extension when dumping sections

Since this only comes up with inputs containing sections at least 4GB
large (I guess I could use a bzero section or something, so the input
file doesn't have to be 4GB, but even then the output file would have to
be 4GB, right?) I've skipped testing this. If there's a nice way to test
this without needing 4GB inputs or output files.

The subtlety here is demonstrated by this code:

struct t { operator uint64_t(); };
static_assert(std::is_same_v<int, decltype(std::declval<bool>() ? 0 : std::declval<t>())>);
static_assert(std::is_same_v<uint64_t, decltype(std::declval<bool>() ? 0 : std::declval<uint64_t>())>);

Because of this difference, the original source code was getting an int
type (truncating the actual size) and then extending it again, resulting
in bogus values (I haven't thought through this hard enough to explain
why the resulting value was 0xffff... - sign extension, possible UB, but
in any case it's the wrong answer - in this particular case I was
looking at that resulted in a size so large that we couldn't open a file
large enough to write to and ended up with a rather vague:

error: 'file_name.o': Invalid argument

3 years ago[X86] Check immediate before get it.
Luo, Yuanke [Thu, 10 Jun 2021 14:50:20 +0000 (22:50 +0800)]
[X86] Check immediate before get it.

For CMP imm instruction, when the operand 1 is symbol address we should
check if it is immediate first. Here is the example code.
`CMP64mi32 $noreg, 8, killed renamable $rcx, @d, $noreg, @a, implicit-def
$eflags`
Many thanks to Craig, Topper for the test case to reproduce this issue.

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

3 years ago[ORC-RT] Split Simple-Packed-Serialization code into its own header.
Lang Hames [Sat, 12 Jun 2021 22:55:47 +0000 (08:55 +1000)]
[ORC-RT] Split Simple-Packed-Serialization code into its own header.

This will simplify integration of this code into LLVM -- The
Simple-Packed-Serialization code can be copied near-verbatim, but
WrapperFunctionResult will require more adaptation.

3 years agoSimplify getArgAttrDict/getResultAttrDict by removing unnecessary checks
Mehdi Amini [Sat, 12 Jun 2021 21:55:37 +0000 (21:55 +0000)]
Simplify getArgAttrDict/getResultAttrDict by removing unnecessary checks

There is a slight change in behavior: if the arg dictionnary is empty
then we return this empty dictionnary instead of a null attribute.
This is more consistent with accessing it through:

  ArrayAttr args_attr = func_op.getAllArgAttrs();
  args_attr[num].cast<DictionnaryAttr>() ...

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

3 years ago[NFC][X86][Codegen] Add shuffle test that would benefit from sorting in reduceBuildVe...
Roman Lebedev [Sat, 12 Jun 2021 21:00:28 +0000 (00:00 +0300)]
[NFC][X86][Codegen] Add shuffle test that would benefit from sorting in reduceBuildVecToShuffle()

3 years agoUse dyn_cast_or_null instead of dyn_cast in FunctionLike::verifyTrait (NFC)
Mehdi Amini [Sat, 12 Jun 2021 20:08:37 +0000 (20:08 +0000)]
Use dyn_cast_or_null instead of dyn_cast in FunctionLike::verifyTrait (NFC)

This is making the verifier more tolerant to cases where a "null"
Attribute would be inserted in the array of func arguments/results
attributes.

3 years ago[llvm-objcopy] Exclude empty sections in IHexWriter output
Ian McIntyre [Sat, 12 Jun 2021 19:23:07 +0000 (12:23 -0700)]
[llvm-objcopy] Exclude empty sections in IHexWriter output

IHexWriter was evaluating a section's physical address when deciding if
that section should be written to an output. This approach does not
account for a zero-sized section that has the same physical address as a
sized section. The behavior varies from GNU objcopy, and may result in a
HEX file that does not include all program sections.

The IHexWriter now excludes zero-sized sections when deciding what
should be written to the output. This affects the contents of the
writer's `Sections` collection; we will not try to insert multiple
sections that could have the same physical address. The behavior seems
consistent with GNU objcopy, which always excludes empty sections,
no matter the address.

The new test case evaluates the IHexWriter behavior when provided a
variety of empty sections that overlap or append a filled section. See
the input file's comments for more information. Given that test input,
and the change to the IHexWriter, GNU objcopy and llvm-objcopy produce
the same output.

Reviewed By: jhenderson, MaskRay, evgeny777

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

3 years ago[CHR] Don't run ControlHeightReduction if any BB has address taken
Xun Li [Sat, 12 Jun 2021 17:29:53 +0000 (10:29 -0700)]
[CHR] Don't run ControlHeightReduction if any BB has address taken

This patch is to address https://bugs.llvm.org/show_bug.cgi?id=50610.
In computed goto pattern, there are usually a list of basic blocks that are all targets of indirectbr instruction, and each basic block also has address taken and stored in a variable.
CHR pass could potentially clone these basic blocks, which would generate a cloned version of the indirectbr and clonved version of all basic blocks in the list.
However these basic blocks will not have their addresses taken and stored anywhere. So latter SimplifyCFG pass will simply remove all tehse cloned basic blocks, resulting in incorrect code.
To fix this, when searching for scopes, we skip scopes that contains BBs with addresses taken.
Added a few test cases.

Reviewed By: aeubanks, wenlei, hoy

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

3 years ago[X86] Add ISD::FREEZE and ISD::AssertAlign to the list of opcodes that don't guarante...
Craig Topper [Sat, 12 Jun 2021 16:49:32 +0000 (09:49 -0700)]
[X86] Add ISD::FREEZE and ISD::AssertAlign to the list of opcodes that don't guarantee upper 32 bits are zero.

The freeze issue was reported here
https://llvm.discourse.group/t/bug-or-feature-freeze-instruction/3639

I don't have a test for AssertAlign. I just noticed it was missing
and assume it should be similar to the other two Asserts.

Reviewed By: RKSimon

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

3 years agoRevert "Revert "DirectoryWatcher: add an implementation for Windows""
Saleem Abdulrasool [Sat, 12 Jun 2021 02:05:42 +0000 (19:05 -0700)]
Revert "Revert "DirectoryWatcher: add an implementation for Windows""

This reverts commit 0ec1cf13f2a4e31aa2c5ccc665c5fbdcd3a94577.

Restore the implementation with some minor tweaks:
- Use std::unique_ptr for the path instead of std::vector
  * Stylistic improvement as the buffer is already heap allocated, this
    just makes it clearer.
- Correct the notification buffer allocation size
  * Memory usage fix: we were allocating 4x the computed size
- Correct the passing of the buffer size to RDC
  * Memory usage fix: we were reporting 1/4th of the size
- Convert the operation event to auto-reset
  * Bug Fix: we never reset the event
- Remove `FILE_NOTIFY_CHANGE_LAST_ACCESS` from RDC events
  * Memory usage fix: we never needed this notification
- Fold events for the notification action
  * Stylistic improvement to be clear how the events map
- Update comment
  * Stylistic improvement to be clear what the RAII controls
- Fix the race condition that was uncovered previously
  * We would return from the construction before the watcher thread
    began execution.  The test would then proceed to begin execution,
    and we would miss the initial notifications.  We now ensure that the
    watcher thread is initialized before we return.  This ensures that
    we do not miss the initial notifications.

Running the test on a SSD was able to uncover the access pattern.  This
now seems to pass reliably where it was previously flaky locally.

3 years ago[clang] NRVO: Improvements and handling of more cases.
Matheus Izvekov [Fri, 19 Mar 2021 02:32:06 +0000 (03:32 +0100)]
[clang] NRVO: Improvements and handling of more cases.

This expands NRVO propagation for more cases:

Parse analysis improvement:
* Lambdas and Blocks with dependent return type can have their variables
  marked as NRVO Candidates.

Variable instantiation improvements:
* Fixes crash when instantiating NRVO variables in Blocks.
* Functions, Lambdas, and Blocks which have auto return type have their
  variables' NRVO status propagated. For Blocks with non-auto return type,
  as a limitation, this propagation does not consider the actual return
  type.

This also implements exclusion of VarDecls which are references to
dependent types.

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Reviewed By: Quuxplusone

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

3 years ago[VPlan] Add more sinking/merging tests with predicated loads/stores.
Florian Hahn [Sat, 12 Jun 2021 11:11:51 +0000 (12:11 +0100)]
[VPlan] Add more sinking/merging tests with predicated loads/stores.

3 years ago[MLIR] Simplify affine.if ops with trivial conditions
Shashij gupta [Sat, 12 Jun 2021 13:58:40 +0000 (19:28 +0530)]
[MLIR] Simplify affine.if ops with trivial conditions

The commit simplifies affine.if ops :
The affine if operation gets removed if the condition is universally true or false and then/else block is merged with the parent block.

Signed-off-by: Shashij Gupta shashij.gupta@polymagelabs.com
Reviewed By: bondhugula, pr4tgpt

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

3 years agoRevert "Allow signposts to take advantage of deferred string substitution"
Florian Hahn [Sat, 12 Jun 2021 11:03:59 +0000 (12:03 +0100)]
Revert "Allow signposts to take advantage of deferred string substitution"

This reverts commit 4fc93a3a1f95ef5a0a57750fc621f2411ea445a8 because it
breaks LLDB builds on certain macOS platform & SDK combinations, e.g.
http://green.lab.llvm.org/green/job/lldb-cmake-standalone/3288/consoleFull#-195476041949ba4694-19c4-4d7e-bec5-911270d8a58c

3 years ago[lit] Attempt for fix tests failing because of 'warning: non-portable path to file'
Kristina Bessonova [Wed, 19 May 2021 12:12:27 +0000 (14:12 +0200)]
[lit] Attempt for fix tests failing because of 'warning: non-portable path to file'

This is an attempt to fix clang test failures due to 'nonportable-include-path'
warnings on Windows when a path to llvm-project's base directory contains some
uppercase letters (excluding a drive letter).

The issue originates from 2 problems:
* discovery.py loads site config in lower case causing all the paths
based on __file__ and requested within the config file to be in lowercase as well,
* neither os.path.abspath() nor os.path.realpath() (both used to obtain paths of
config files, sources, object directories, etc) do not return paths in the correct
case for Windows (at least consistently for all python versions).

As os.path library doesn't seem to provide any relaible way to restore
the case for paths on Windows, this patch proposes to use pathlib.resolve().
pathlib is a part of Python 3.4 while llvm lit requires Python 3.6.

Reviewed By: Meinersbur

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

3 years agoRevert "[X86FixupLEAs] Transform the sequence LEA/SUB to SUB/SUB"
Florian Hahn [Sat, 12 Jun 2021 10:28:08 +0000 (11:28 +0100)]
Revert "[X86FixupLEAs] Transform the sequence LEA/SUB to SUB/SUB"

This reverts commit 1b748faf2bae246e2fc77d88420df13c2e60f4df because it
breaks building the llvm-test-suite with -verify-machineinstrs on X86:
http://green.lab.llvm.org/green/job/test-suite-verify-machineinstrs-x86_64-O3/9585/

Running llc -verify-machineinstr on X86 crashes on the IR below:

    target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"

    %struct.widget = type { i32, i32, i32, i32, i32*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [16 x [16 x i16]], [6 x [32 x i32]], [16 x [16 x i32]], [4 x [12 x [4 x [4 x i32]]]], [16 x i32], i8**, i32*, i32***, i32**, i32, i32, i32, i32, %struct.baz*, %struct.wobble.1*, i32, i32, i32, i32, i32, i32, %struct.quux.2*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32***, i32***, i32****, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x [2 x i32]], [3 x [2 x i32]], i32, i32, i64, i64, %struct.zot.3, %struct.zot.3, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
    %struct.baz = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.snork*, %struct.wombat.0*, %struct.wobble*, i32, i32*, i32*, i32*, i32, i32*, i32*, i32*, i32 (%struct.widget*, %struct.eggs*)*, i32, i32, i32, i32 }
    %struct.snork = type { %struct.spam*, %struct.zot, i32 (%struct.wombat*, %struct.widget*, %struct.snork*)* }
    %struct.spam = type { i32, i32, i32, i32, i8*, i32 }
    %struct.zot = type { i32, i32, i32, i32, i32, i8*, i32* }
    %struct.wombat = type { i32, i32, i32, i32, i32, i32, i32, i32, void (i32, i32, i32*, i32*)*, void (%struct.wombat*, %struct.widget*, %struct.zot*)* }
    %struct.wombat.0 = type { [4 x [11 x %struct.quux]], [2 x [9 x %struct.quux]], [2 x [10 x %struct.quux]], [2 x [6 x %struct.quux]], [4 x %struct.quux], [4 x %struct.quux], [3 x %struct.quux] }
    %struct.quux = type { i16, i8 }
    %struct.wobble = type { [2 x %struct.quux], [4 x %struct.quux], [3 x [4 x %struct.quux]], [10 x [4 x %struct.quux]], [10 x [15 x %struct.quux]], [10 x [15 x %struct.quux]], [10 x [5 x %struct.quux]], [10 x [5 x %struct.quux]], [10 x [15 x %struct.quux]], [10 x [15 x %struct.quux]] }
    %struct.eggs = type { [1000 x i8], [1000 x i8], [1000 x i8], i32, i32, i32, i32, i32, i32, i32, i32 }
    %struct.wobble.1 = type { i32, [2 x i32], i32, i32, %struct.wobble.1*, %struct.wobble.1*, i32, [2 x [4 x [4 x [2 x i32]]]], i32, i64, i64, i32, i32, [4 x i8], [4 x i8], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
    %struct.quux.2 = type { i32, i32, i32, i32, i32, %struct.quux.2* }
    %struct.zot.3 = type { i64, i16, i16, i16 }

    define void @blam(%struct.widget* %arg, i32 %arg1) local_unnamed_addr {
    bb:
      %tmp = load i32, i32* undef, align 4
      %tmp2 = sdiv i32 %tmp, 6
      %tmp3 = sdiv i32 undef, 6
      %tmp4 = load i32, i32* undef, align 4
      %tmp5 = icmp eq i32 %tmp4, 4
      %tmp6 = select i1 %tmp5, i32 %tmp3, i32 %tmp2
      %tmp7 = getelementptr inbounds [4 x [4 x i32]], [4 x [4 x i32]]* undef, i64 0, i64 0, i64 0
      %tmp8 = zext i16 undef to i32
      %tmp9 = zext i16 undef to i32
      %tmp10 = load i16, i16* undef, align 2
      %tmp11 = zext i16 %tmp10 to i32
      %tmp12 = zext i16 undef to i32
      %tmp13 = zext i16 undef to i32
      %tmp14 = zext i16 undef to i32
      %tmp15 = load i16, i16* undef, align 2
      %tmp16 = zext i16 %tmp15 to i32
      %tmp17 = zext i16 undef to i32
      %tmp18 = sub nsw i32 %tmp8, %tmp9
      %tmp19 = shl nsw i32 undef, 1
      %tmp20 = add nsw i32 %tmp19, %tmp18
      %tmp21 = sub nsw i32 %tmp11, %tmp12
      %tmp22 = shl nsw i32 undef, 1
      %tmp23 = add nsw i32 %tmp22, %tmp21
      %tmp24 = sub nsw i32 %tmp13, %tmp14
      %tmp25 = shl nsw i32 undef, 1
      %tmp26 = add nsw i32 %tmp25, %tmp24
      %tmp27 = sub nsw i32 %tmp16, %tmp17
      %tmp28 = shl nsw i32 undef, 1
      %tmp29 = add nsw i32 %tmp28, %tmp27
      %tmp30 = sub nsw i32 %tmp20, %tmp29
      %tmp31 = sub nsw i32 %tmp23, %tmp26
      %tmp32 = shl nsw i32 %tmp30, 1
      %tmp33 = add nsw i32 %tmp32, %tmp31
      store i32 %tmp33, i32* undef, align 4
      %tmp34 = mul nsw i32 %tmp31, -2
      %tmp35 = add nsw i32 %tmp34, %tmp30
      store i32 %tmp35, i32* undef, align 4
      %tmp36 = select i1 %tmp5, i32 undef, i32 undef
      br label %bb37

    bb37:                                             ; preds = %bb
      %tmp38 = load i32, i32* undef, align 4
      %tmp39 = ashr i32 %tmp38, %tmp6
      %tmp40 = load i32, i32* undef, align 4
      %tmp41 = sdiv i32 %tmp39, %tmp40
      store i32 %tmp41, i32* undef, align 4
      ret void
    }