platform/upstream/llvm.git
2 years ago[flang][NFC] Fix file name typos
Valentin Clement [Mon, 20 Jun 2022 10:32:23 +0000 (12:32 +0200)]
[flang][NFC] Fix file name typos

2 years ago[AMDGPU][GlobalISel] Legalize G_FSUB for s16
Mirko Brkusanin [Mon, 20 Jun 2022 09:57:07 +0000 (11:57 +0200)]
[AMDGPU][GlobalISel] Legalize G_FSUB for s16

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

2 years ago[WebAssembly][NFC] Update reftype and table tests to use opaque pointers
Alex Bradbury [Mon, 20 Jun 2022 09:56:55 +0000 (10:56 +0100)]
[WebAssembly][NFC] Update reftype and table tests to use opaque pointers

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

2 years ago[NFC][Alignment] Remove dead code
Guillaume Chatelet [Mon, 20 Jun 2022 09:47:18 +0000 (09:47 +0000)]
[NFC][Alignment] Remove dead code

2 years ago[ARM] Allow distributing postinc with PHI uses
David Green [Mon, 20 Jun 2022 09:08:21 +0000 (10:08 +0100)]
[ARM] Allow distributing postinc with PHI uses

Although this doesn't usually come up, we can have uses of the
BaseAccess of a distributed postinc being a PHI. This doesn't need the
usual dominance check as we will dominate along the phi edge, allowing
us to still create a postinc load/store.

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

2 years ago[OpenCL][TableGen] Fix type extension guard emission
Sven van Haastregt [Mon, 20 Jun 2022 09:07:34 +0000 (10:07 +0100)]
[OpenCL][TableGen] Fix type extension guard emission

For certain cases (such as for the double subtype of AGenType), the
OpenCLBuiltinFileEmitterBase would not emit the extension #if-guard.
Fix that by looking at the extension of the actual type instead of the
argument type (which could be a GenType that does not carry any
extension information).

2 years ago[libunwind] Ensure test/libunwind_01.pass is not completely inlined
Alex Richardson [Mon, 20 Jun 2022 08:57:12 +0000 (08:57 +0000)]
[libunwind] Ensure test/libunwind_01.pass is not completely inlined

By adding noinline and calling fprintf before returning we ensure that
every function will have a distinct call frame and that the return address
will always be saved instead of saving the target in main as the result.

Before this change all backtraces were always backtrace -> main -> _start,
i.e. always exactly three entries. This happenend because all calls were
inlined in main() and the test just happenend to pass because there is at
least _start before main.

I found this while fixing some bugs in libunwind for CHERI and noticed that
the test was passing even though the code was completely broken.

Obtained from: https://github.com/CTSRD-CHERI/llvm-project

Reviewed By: #libunwind, ldionne, MaskRay

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

2 years ago[clang][sema] Generate builtin operator overloads for (volatile) _Atomic types
Jan Svoboda [Wed, 8 Jun 2022 11:40:14 +0000 (13:40 +0200)]
[clang][sema] Generate builtin operator overloads for (volatile) _Atomic types

We observed a failed assert in overloaded compound-assignment operator resolution:

```
Assertion failed: (Result.isInvalid() && "C++ binary operator overloading is missing candidates!"), function CreateOverloadedBinOp, file SemaOverload.cpp, line 13944.
...
frame #4: clang` clang::Sema::CreateOverloadedBinOp(..., Opc=BO_OrAssign, ..., PerformADL=true, AllowRewrittenCandidates=false, ...) at SemaOverload.cpp:13943
frame #5: clang` BuildOverloadedBinOp(..., Opc=BO_OrAssign, ...) at SemaExpr.cpp:15228
frame #6: clang` clang::Sema::BuildBinOp(..., Opc=BO_OrAssign, ...) at SemaExpr.cpp:15330
frame #7: clang` clang::Sema::ActOnBinOp(..., Kind=pipeequal, ...) at SemaExpr.cpp:15187
frame #8: clang` clang::Parser::ParseRHSOfBinaryExpression(..., MinPrec=Assignment) at ParseExpr.cpp:629
frame #9: clang` clang::Parser::ParseAssignmentExpression(..., isTypeCast=NotTypeCast) at ParseExpr.cpp:176
frame #10: clang` clang::Parser::ParseExpression(... isTypeCast=NotTypeCast) at ParseExpr.cpp:124
frame #11: clang` clang::Parser::ParseExprStatement(...) at ParseStmt.cpp:464
```

A simple reproducer is:

```
_Atomic unsigned an_atomic_uint;

enum { an_enum_value = 1 };

void enum1() { an_atomic_uint += an_enum_value; }
```

This patch fixes the issue by generating builtin operator overloads for (volatile) _Atomic types.

Reviewed By: aaron.ballman

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

2 years ago[NFC][Alignment] Remove max functions between Align and MaybeAlign
Guillaume Chatelet [Sat, 18 Jun 2022 14:34:11 +0000 (14:34 +0000)]
[NFC][Alignment] Remove max functions between Align and MaybeAlign

`llvm::max(Align, MaybeAlign)` and `llvm::max(MaybeAlign, Align)` are
not used often enough to be required. They also make the code more opaque.

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

2 years ago[Alignment] Remove multiply by MaybeAlign
Guillaume Chatelet [Mon, 20 Jun 2022 08:02:09 +0000 (08:02 +0000)]
[Alignment] Remove multiply by MaybeAlign

2 years ago[SimplifyCFG] Try to merge edge block when threading (PR55765)
Nikita Popov [Tue, 7 Jun 2022 13:09:04 +0000 (15:09 +0200)]
[SimplifyCFG] Try to merge edge block when threading (PR55765)

When threading, we always create a new block for the threaded edge
(even if the edge is not critical), which will later get folded back
into the predecessor if possible. Depending on precise processing
order, this separate block may break the detection of trivial
cycles in the threading code, which normally avoids infinite
threading of loops. Explicitly merge the created edge block into
the predecessor to avoid this.

Fixes https://github.com/llvm/llvm-project/issues/55765.

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

2 years ago[gn build] Port 60f3b071185b
LLVM GN Syncbot [Mon, 20 Jun 2022 08:23:18 +0000 (08:23 +0000)]
[gn build] Port 60f3b071185b

2 years ago[Coroutines] Only do symmetric transfer if optimization is on
Chuanqi Xu [Mon, 20 Jun 2022 07:54:23 +0000 (15:54 +0800)]
[Coroutines] Only do symmetric transfer if optimization is on

Symmetric transfer is not a part of C++ standards. So the vendors is not
forced to implement it any way. Given the symmetric transfer nowadays is
an optimization. It makes more sense to enable it only if the
optimization is enabled. It is also helpful for the compilation speed in
O0.

2 years ago[mlir] move SCF headers to SCF/{IR,Transforms} respectively
Alex Zinenko [Fri, 17 Jun 2022 13:47:15 +0000 (15:47 +0200)]
[mlir] move SCF headers to SCF/{IR,Transforms} respectively

This aligns the SCF dialect file layout with the majority of the dialects.

Reviewed By: jpienaar

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

2 years ago[flang][NFC] Small refactor for `IsProcedurePointer`
Daniil Dudkin [Mon, 20 Jun 2022 08:08:21 +0000 (11:08 +0300)]
[flang][NFC] Small refactor for `IsProcedurePointer`

Instead of manually checking for procedure-like details in Symbol,
defer it to IsProcedure function.

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

2 years ago[clang][analyzer] Add checker for bad use of 'errno'.
Balázs Kéri [Mon, 20 Jun 2022 07:42:19 +0000 (09:42 +0200)]
[clang][analyzer] Add checker for bad use of 'errno'.

Extend checker 'ErrnoModeling' with a state of 'errno' to indicate
the importance of the 'errno' value and how it should be used.
Add a new checker 'ErrnoChecker' that observes use of 'errno' and
finds possible wrong uses, based on the "errno state".
The "errno state" should be set (together with value of 'errno')
by other checkers (that perform modeling of the given function)
in the future. Currently only a test function can set this value.
The new checker has no user-observable effect yet.

Reviewed By: martong, steakhal

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

2 years ago[analyzer] SATest: Weaken assumption about HTML files
Marco Antognini [Tue, 3 May 2022 14:07:06 +0000 (16:07 +0200)]
[analyzer] SATest: Weaken assumption about HTML files

Instead of assuming there is an HTML file for each diagnostics, consider
the HTML files only when they exist, individually of each other.

After generating the reference data, running

  python /scripts/SATest.py build --projects simbody

was resulting in this error:

    File "/scripts/CmpRuns.py", line 250, in read_single_file
      assert len(d['HTMLDiagnostics_files']) == 1
  KeyError: 'HTMLDiagnostics_files'

Reviewed By: steakhal

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

2 years ago[analyzer] SATest: Ensure Docker image can be built
Marco Antognini [Tue, 3 May 2022 13:07:35 +0000 (15:07 +0200)]
[analyzer] SATest: Ensure Docker image can be built

Solve build issues occurring when running `docker build`.

Fix the version of cmake-data to solve the following issue:

  The following packages have unmet dependencies:
   cmake : Depends: cmake-data (= 3.20.5-0kitware1) but 3.23.1-0kitware1ubuntu18.04.1 is to be installed

Install libjpeg to solve this issue when installing Python
requirements:

  The headers or library files could not be found for jpeg,
  a required dependency when compiling Pillow from source.

Reviewed By: steakhal

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

2 years ago[DAG] Fold (srl (shl x, c1), c2) -> and(shl/srl(x, c3), m)
Simon Pilgrim [Mon, 20 Jun 2022 07:37:25 +0000 (08:37 +0100)]
[DAG] Fold (srl (shl x, c1), c2) -> and(shl/srl(x, c3), m)

Similar to the existing (shl (srl x, c1), c2) fold

Part of the work to fix the regressions in D77804

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

2 years agoUpdate link job for flang on windows
Diana Picus [Fri, 10 Dec 2021 22:02:32 +0000 (22:02 +0000)]
Update link job for flang on windows

When linking a Fortran program, we need to add the runtime libraries to
the command line. This is exactly what we do for Linux/Darwin, but the
MSVC interface is slightly different (e.g. -libpath instead of -L).

We also remove oldnames and libcmt, since they're not needed at the
moment and they bring in more dependencies.

We also pass `/subsystem:console` to the linker so it can figure out the
right entry point. This is only needed for MSVC's `link.exe`. For LLD it
is redundant but doesn't hurt.

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

Co-authored-by: Markus Mützel <markus.muetzel@gmx.de>
2 years ago[AMDGPU] Limit GFX11 to using 128 VGPRs
Jay Foad [Thu, 17 Feb 2022 17:49:45 +0000 (17:49 +0000)]
[AMDGPU] Limit GFX11 to using 128 VGPRs

This is a temporary measure to avoid generating incorrect code until the
compiler understands the new way that GFX11 encodes 16-bit operands in
VOP instructions.

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

2 years ago[mlir] Fix ClangTidy performance finding (NFC)
Adrian Kuegel [Mon, 20 Jun 2022 06:47:00 +0000 (08:47 +0200)]
[mlir] Fix ClangTidy performance finding (NFC)

2 years ago[SelectionDAG] Enable WidenVecOp_VECREDUCE_SEQ for scalable vector
Lian Wang [Tue, 14 Jun 2022 02:45:44 +0000 (02:45 +0000)]
[SelectionDAG] Enable WidenVecOp_VECREDUCE_SEQ for scalable vector

Reviewed By: sdesmalen

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

2 years ago[clang][dataflow] Extend flow condition in the body of a for loop
Stanislav Gatev [Fri, 17 Jun 2022 13:51:05 +0000 (13:51 +0000)]
[clang][dataflow] Extend flow condition in the body of a for loop

Extend flow condition in the body of a for loop.

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

2 years ago[InstCombine] Update icmp-and-shift check-next name; NFC
chenglin.bi [Mon, 20 Jun 2022 03:49:16 +0000 (11:49 +0800)]
[InstCombine] Update icmp-and-shift check-next name; NFC

2 years ago[InstCombine] add vector support for (A >> C) == (B >> C) --> (A^B) u< (1 << C)
Chenbing Zheng [Mon, 20 Jun 2022 02:55:47 +0000 (10:55 +0800)]
[InstCombine] add vector support for (A >> C) == (B >> C) --> (A^B) u< (1 << C)

Reviewed By: spatel, RKSimon

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

2 years ago[RISCV] Merge two similar asserts from different if/else blocks. NFC
Craig Topper [Mon, 20 Jun 2022 02:31:14 +0000 (19:31 -0700)]
[RISCV] Merge two similar asserts from different if/else blocks. NFC

2 years ago[LoongArch] Add codegen support for part of conversion operations
Weining Lu [Mon, 20 Jun 2022 01:46:37 +0000 (09:46 +0800)]
[LoongArch] Add codegen support for part of conversion operations

These operations include `sext`, `zext` and `trunc`.

Reference:
https://llvm.org/docs/LangRef.html#conversion-operations

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

2 years ago[Basic] Use has_value (NFC)
Kazu Hirata [Mon, 20 Jun 2022 01:59:56 +0000 (18:59 -0700)]
[Basic] Use has_value (NFC)

2 years ago[LoongArch] Perform `and` combination with a shifted mask
Weining Lu [Mon, 20 Jun 2022 01:46:31 +0000 (09:46 +0800)]
[LoongArch] Perform `and` combination with a shifted mask

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

2 years ago[LoongArch] Add codegen support for the bitwise binary operations and part of other...
Weining Lu [Mon, 20 Jun 2022 01:46:24 +0000 (09:46 +0800)]
[LoongArch] Add codegen support for the bitwise binary operations and part of other operations

Reference:
https://llvm.org/docs/LangRef.html#bitwise-binary-operations
https://llvm.org/docs/LangRef.html#other-operations

The reason why other operations are implemented here is that some
bitwise binary operations depend on them. For example, on loongarch32,
`shl` over i64 data requires `select`.

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

2 years ago[LoongArch] Add codegen support for fneg
Weining Lu [Mon, 20 Jun 2022 01:44:38 +0000 (09:44 +0800)]
[LoongArch] Add codegen support for fneg

Reference:
https://llvm.org/docs/LangRef.html#fneg-instruction

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

2 years ago[LoongArch] Add codegen support for the binary operations
Weining Lu [Mon, 20 Jun 2022 01:22:42 +0000 (09:22 +0800)]
[LoongArch] Add codegen support for the binary operations

These binary operations include sub/fadd/fsub/fmul/fdiv. Others ops
like mul/udiv/sdiv/urem/srem would be added later since they depend on
`shift` and `truncate` that have not been supported.

Note `add` has been added in a previous patch.

Reference:
https://llvm.org/docs/LangRef.html#binary-operations

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

2 years ago[lld] Remove lld/include/lld/Core
Nico Weber [Sun, 19 Jun 2022 22:20:52 +0000 (18:20 -0400)]
[lld] Remove lld/include/lld/Core

This is all dead code that we forgot to delete in
https://reviews.llvm.org/D114842

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

2 years ago[ADT] Use value instead of getValue() (NFC)
Kazu Hirata [Mon, 20 Jun 2022 01:34:33 +0000 (18:34 -0700)]
[ADT] Use value instead of getValue() (NFC)

Since Optional<clang::FileEntryRef> uses a custom storage class, this
patch adds value to MapEntryOptionalStorage.

2 years ago[ADT] Use has_value (NFC)
Kazu Hirata [Mon, 20 Jun 2022 01:10:12 +0000 (18:10 -0700)]
[ADT] Use has_value (NFC)

This patch switches to has_value within Optional.

Since Optional<clang::FileEntryRef> uses custom storage class, this
patch adds has_entry to MapEntryOptionalStorage.

2 years ago[mlir][complex] Convert complex.conj to libm
lewuathe [Mon, 20 Jun 2022 00:38:31 +0000 (09:38 +0900)]
[mlir][complex] Convert complex.conj to libm

Add conversion for complex.conj to libm call

Reviewed By: bixia

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

2 years ago[BOLT] Split functions with exceptions in shared objects and PIEs
Maksim Panchenko [Thu, 10 Mar 2022 20:08:57 +0000 (12:08 -0800)]
[BOLT] Split functions with exceptions in shared objects and PIEs

Add functionality to allow splitting code with C++ exceptions in shared
libraries and PIEs. To overcome a limitation in exception ranges format,
for functions with fragments spanning multiple sections, add trampoline
landing pads in the same section as the corresponding throwing range.

Reviewed By: Amir

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

2 years ago[GlobalOpt] Preserve CFG analyses
Arthur Eubanks [Sun, 19 Jun 2022 19:20:11 +0000 (12:20 -0700)]
[GlobalOpt] Preserve CFG analyses

The only place we modify the CFG is when calling
removeUnreachableBlocks(), so insert a callback there which invalidates
analyses for that function (or recomputes DT in the legacy PM).

Small compile time wins across the board:
https://llvm-compile-time-tracker.com/compare.php?from=f444ea8ce0aaaa5ec1a4129809389da15cc41396&to=698f41f4fc26cbf1006ed5d88e9d658edfc5b749&stat=instructions

Reviewed By: nikic

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

2 years ago[DAGCombiner][ARM][RISCV] Teach ShrinkLoadReplaceStoreWithStore to use truncstore.
Craig Topper [Sun, 19 Jun 2022 21:34:03 +0000 (14:34 -0700)]
[DAGCombiner][ARM][RISCV] Teach ShrinkLoadReplaceStoreWithStore to use truncstore.

The VT we want to shrink to may not be legal especially after type
legalization.

Fixes PR56110.

Reviewed By: RKSimon

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

2 years agofix comment typos to cycle bots
Nico Weber [Sun, 19 Jun 2022 22:34:12 +0000 (18:34 -0400)]
fix comment typos to cycle bots

2 years ago[lld] Wrap rst file to 80 cols and fix "precense" typo
Nico Weber [Sun, 19 Jun 2022 22:24:52 +0000 (18:24 -0400)]
[lld] Wrap rst file to 80 cols and fix "precense" typo

2 years agoRename parallelForEachN to just parallelFor
Nico Weber [Sun, 19 Jun 2022 16:30:06 +0000 (12:30 -0400)]
Rename parallelForEachN to just parallelFor

Patch created by running:

  rg -l parallelForEachN | xargs sed -i '' -c 's/parallelForEachN/parallelFor/'

No behavior change.

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

2 years ago[libc] Revert: Temporary disable environment tests for PATH variable.
Siva Chandra Reddy [Sun, 19 Jun 2022 21:38:16 +0000 (21:38 +0000)]
[libc] Revert: Temporary disable environment tests for PATH variable.

This reverts commit 2846c2bb4fa4e50b2eb4ff4231825d73840c8c1c. The reason
for the disable is not relevant anymore.

2 years ago[InstCombine] Optimize test for same-sign of values
Eric Gullufsen [Sun, 19 Jun 2022 20:12:57 +0000 (16:12 -0400)]
[InstCombine] Optimize test for same-sign of values

(icmp slt (X & Y), 0) | (icmp sgt (X | Y), -1) -> (icmp sgt (X ^ Y), -1)
(icmp slt (X | Y), 0) & (icmp sgt (X & Y), -1) -> (icmp slt (X ^ Y), 0)

[[ https://alive2.llvm.org/ce/z/qXxEFP | alive2 example ]]
[[ https://godbolt.org/z/aWf9c6j74 | godbolt  ]]

[[ https://godbolt.org/z/5Ydn5TehY | godbolt for inverted form ]]
[[ https://alive2.llvm.org/ce/z/93AODr | alive2 for inverted form ]]
[[ https://github.com/llvm/llvm-project/issues/55988 | issue #55988 ]]

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

2 years ago[CallGraph] Don't preserve CallGraph when function CFG analyses are preserved
Arthur Eubanks [Sun, 19 Jun 2022 19:10:45 +0000 (12:10 -0700)]
[CallGraph] Don't preserve CallGraph when function CFG analyses are preserved

The call graph has nothing to with function CFGs.

Fixes a crash in a future change that exposes this bug.

2 years ago[ValueTracking] recognize sub X, (X -nuw Y) as not overflowing
Sanjay Patel [Sun, 19 Jun 2022 18:13:27 +0000 (14:13 -0400)]
[ValueTracking] recognize sub X, (X -nuw Y) as not overflowing

This extends a similar pattern from D125500 and D127754.
If we know that operand 1 (RHS) of a subtract is itself a
non-overflowing subtract from operand 0 (LHS), then the
final/outer subtract is also non-overflowing:
https://alive2.llvm.org/ce/z/Bqan8v

InstCombine uses this analysis to trigger a narrowing
optimization, so that is what the first changed test shows.

The last test models a motivating case from issue #48013.
In that example, we determine 'nuw' on the first sub from
the urem, then we determine that the 2nd sub can be narrowed,
and that leads to eliminating both subtracts.

here are still several missing subtract narrowing optimizations
demonstrated in the tests above the diffs shown here - those
should be handled in InstCombine with another set of patches.

2 years ago[InstCombine] add tests for 'sub nuw' with zext; NFC
Sanjay Patel [Sun, 19 Jun 2022 18:10:03 +0000 (14:10 -0400)]
[InstCombine] add tests for 'sub nuw' with zext; NFC

2 years ago[ADT] Rename value to alt (NFC)
Kazu Hirata [Sun, 19 Jun 2022 19:00:03 +0000 (12:00 -0700)]
[ADT] Rename value to alt (NFC)

This patch renames value to alt so that the parameter won't collide
with member function value().

2 years agoFix an unused-variable warning in release build, NFC.
Haojian Wu [Sun, 19 Jun 2022 18:52:00 +0000 (20:52 +0200)]
Fix an unused-variable warning in release build, NFC.

2 years ago[TableGen][X86] Add Size field to X86MemOperand class
Amir Ayupov [Sun, 19 Jun 2022 18:46:35 +0000 (11:46 -0700)]
[TableGen][X86] Add Size field to X86MemOperand class

Set Size appropriately in operand definitions and query it for dumping memory
operand size table `getMemOperandSize` (follow-up use D126116) and
`X86Disassembler::getMemOperandSize`.

Excerpt from a produced `getMemOperandSize` table for X86:

```
static int getMemOperandSize(int OpType) {
  switch (OpType) {
  default: return 0;
  case OpTypes::i8mem:
  case OpTypes::i8mem_NOREX:
    return 8;

  case OpTypes::f16mem:
  case OpTypes::i16mem:
    return 16;

  case OpTypes::f32mem:
  case OpTypes::i32mem:
    return 32;
...
```

Reviewed By: skan, pengfei

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

2 years ago[BOLT] Use 32-bit MOV to zero 64-bit register in instrumentation code
Amir Ayupov [Mon, 13 Jun 2022 21:31:06 +0000 (14:31 -0700)]
[BOLT] Use 32-bit MOV to zero 64-bit register in instrumentation code

Instead of `movabsq $0x0, %rax` emit shorter equivalent `movl $0x0, %eax`.
Intel SDM, 3.4.1.1 General-Purpose Registers in 64-Bit Mode:
>32-bit operands generate a 32-bit result, zero-extended to a 64-bit result in
> the destination general-purpose register.

Reviewed By: rafauler

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

2 years ago[MachinePipeliner] Handle failing constrainRegClass
David Green [Sun, 19 Jun 2022 17:55:19 +0000 (18:55 +0100)]
[MachinePipeliner] Handle failing constrainRegClass

The included test hits a verifier problems as one of the instructions:
```
%113:tgpreven, %114:tgprodd = MVE_VMLSLDAVas16 %12:tgpreven(tied-def 0), %11:tgprodd(tied-def 1), %7:mqpr, %8:mqpr, 0, $noreg, $noreg
```
Has two inputs that come from different PHIs with the same base reg, but
conflicting regclasses:
```
%11:tgprodd = PHI %103:gpr, %bb.1, %16:gpr, %bb.2
%12:tgpreven = PHI %103:gpr, %bb.1, %17:gpr, %bb.2
```

The MachinePipeliner would attempt to use %103 for both the %11 and %12
operands in the prolog, constraining the register class to the common
subset of both. Unfortunately there are no registers that are both odd
and even, so the second constrainRegClass fails. Fix this situation by
inserting a COPY for the second if the call to constrainRegClass fails.

The register allocation can then fold that extra copy away. The register
allocation of Q regs changed with this test, but the R regs were the
same and no new instructions are needed in the final assembly.

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

2 years agoUse value_or instead of getValueOr (NFC)
Kazu Hirata [Sun, 19 Jun 2022 17:34:41 +0000 (10:34 -0700)]
Use value_or instead of getValueOr (NFC)

2 years ago[GlobalOpt] Perform store->dominated load forwarding for stored once globals
Arthur Eubanks [Sat, 18 Jun 2022 21:14:04 +0000 (14:14 -0700)]
[GlobalOpt] Perform store->dominated load forwarding for stored once globals

Compile time tracker:
https://llvm-compile-time-tracker.com/compare.php?from=1e556f459b44dd0ca4073e932f66ecb6f40fe31a&to=6d7bed4e1e72c6a8592748626091274209740a40&stat=instructions

Reviewed By: nikic

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

2 years ago[X86] Add common CHECK prefix to nontemporal-3.ll tests
Simon Pilgrim [Sun, 19 Jun 2022 17:21:56 +0000 (18:21 +0100)]
[X86] Add common CHECK prefix to nontemporal-3.ll tests

2 years ago[flang][OpenMP][NFC] Refactor code related to OpenMP atomic memory order clause semantics
Nimish Mishra [Wed, 15 Jun 2022 09:01:41 +0000 (14:31 +0530)]
[flang][OpenMP][NFC] Refactor code related to OpenMP atomic memory order clause semantics

Reviewed By: peixin

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

2 years ago[DAG] Add MaskedVectorIsZero helper
Simon Pilgrim [Sun, 19 Jun 2022 16:56:17 +0000 (17:56 +0100)]
[DAG] Add MaskedVectorIsZero helper

Equivalent to MaskedValueIsZero, except its checking if all of the demanded vectors elements are known to be zero

2 years ago[lldb] Use value_or instead of getValueOr (NFC)
Kazu Hirata [Sun, 19 Jun 2022 16:12:01 +0000 (09:12 -0700)]
[lldb] Use value_or instead of getValueOr (NFC)

2 years ago[InstCombine] add fold for (ShiftC >> X) <u C
Sanjay Patel [Sun, 19 Jun 2022 14:59:05 +0000 (10:59 -0400)]
[InstCombine] add fold for (ShiftC >> X) <u C

https://alive2.llvm.org/ce/z/RcdzM-

This fixes a regression noted in issue #56046.

2 years ago[DAG] SimplifyDemandedBits - add DemandedElts handling to ISD::SIGN_EXTEND_INREG...
Simon Pilgrim [Sun, 19 Jun 2022 14:35:29 +0000 (15:35 +0100)]
[DAG] SimplifyDemandedBits - add DemandedElts handling to ISD::SIGN_EXTEND_INREG simplification

2 years ago[DAG] SimplifyDemandedBits - add ISD::VSELECT handling
Simon Pilgrim [Sun, 19 Jun 2022 14:11:07 +0000 (15:11 +0100)]
[DAG] SimplifyDemandedBits - add ISD::VSELECT handling

2 years ago[InstCombine] add/adjust tests for signbit tests; NFC
Sanjay Patel [Sun, 19 Jun 2022 14:09:56 +0000 (10:09 -0400)]
[InstCombine] add/adjust tests for signbit tests; NFC

Additonal coverage for D127903.

2 years ago[InstCombine] add baseline tests for signbit cmp folds; NFC
Eric Gullufsen [Sun, 19 Jun 2022 13:03:28 +0000 (09:03 -0400)]
[InstCombine] add baseline tests for signbit cmp folds; NFC

D127903 / issue #55988

2 years ago[X86] Remove isTargetShuffleSplat and just use SelectionDAG::isSplatValue
Simon Pilgrim [Sun, 19 Jun 2022 10:22:57 +0000 (11:22 +0100)]
[X86] Remove isTargetShuffleSplat and just use SelectionDAG::isSplatValue

shuffle(splat(x)) -> splat(x), it doesn't have to be a target specific broadcast

2 years ago[lld] Use value_or instead of getValueOr (NFC)
Kazu Hirata [Sun, 19 Jun 2022 07:29:41 +0000 (00:29 -0700)]
[lld] Use value_or instead of getValueOr (NFC)

2 years ago[AST] Fix an unused variable warning
Kazu Hirata [Sun, 19 Jun 2022 07:20:58 +0000 (00:20 -0700)]
[AST] Fix an unused variable warning

This paptch fixes:

  warning: unused variable ‘DD’ [-Wunused-variable]

2 years ago[clang-tools-extra] Use value_or instead of getValueOr (NFC)
Kazu Hirata [Sun, 19 Jun 2022 07:13:38 +0000 (00:13 -0700)]
[clang-tools-extra] Use value_or instead of getValueOr (NFC)

2 years ago[clang] Use value_or instead of getValueOr (NFC)
Kazu Hirata [Sun, 19 Jun 2022 06:21:34 +0000 (23:21 -0700)]
[clang] Use value_or instead of getValueOr (NFC)

2 years ago[Driver][Gnu] Don't passs --dynamic-linker in -r mode
Fangrui Song [Sun, 19 Jun 2022 06:13:19 +0000 (23:13 -0700)]
[Driver][Gnu] Don't passs --dynamic-linker in -r mode

No behavior change as GNU ld/gold/ld.lld ignore --dynamic-linker in -r mode.
This change makes the intention clearer as we already suppress --dynamic-linker
for -shared, -static, and -static-pie.

2 years ago[llvm] Use value_or instead of getValueOr (NFC)
Kazu Hirata [Sun, 19 Jun 2022 06:07:11 +0000 (23:07 -0700)]
[llvm] Use value_or instead of getValueOr (NFC)

2 years ago[test][GlobalOpt] Update precommitted test
Arthur Eubanks [Sun, 19 Jun 2022 04:58:16 +0000 (21:58 -0700)]
[test][GlobalOpt] Update precommitted test

2 years ago[test][GlobalOpt] Regenerate some tests
Arthur Eubanks [Sun, 19 Jun 2022 04:34:11 +0000 (21:34 -0700)]
[test][GlobalOpt] Regenerate some tests

2 years ago[VE][NFC] Remove obsoleted function declaration
Kazushi (Jam) Marukawa [Sat, 26 Mar 2022 06:46:27 +0000 (15:46 +0900)]
[VE][NFC] Remove obsoleted function declaration

2 years ago[NFC][GlobalOpt] Remove unused parameters
Arthur Eubanks [Sun, 19 Jun 2022 04:23:20 +0000 (21:23 -0700)]
[NFC][GlobalOpt] Remove unused parameters

2 years ago[ADT] Add has_value, value, value_or to llvm::Optional
Kazu Hirata [Sun, 19 Jun 2022 04:21:33 +0000 (21:21 -0700)]
[ADT] Add has_value, value, value_or to llvm::Optional

This patch adds has_value, value, value_or to llvm::Optional so that
llvm::Optional looks more like std::optional.

I will keep the existing functions while migrating their callers and
then remove them later.

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

2 years agoRevert "[MCParser] Use default member initialization (NFC)"
Kazu Hirata [Sun, 19 Jun 2022 04:02:09 +0000 (21:02 -0700)]
Revert "[MCParser] Use default member initialization (NFC)"

This reverts commit 68090a014cf5af8198a06bdecea0aeedc0c23023.

The patch seems to cause a build error on ppc64le:

https://lab.llvm.org/buildbot#builders/121/builds/20536

2 years ago[MCParser] Use default member initialization (NFC)
Kazu Hirata [Sun, 19 Jun 2022 03:54:56 +0000 (20:54 -0700)]
[MCParser] Use default member initialization (NFC)

Identified with modernize-use-default-member-init.

2 years ago[ADT] Rename value to val (NFC)
Kazu Hirata [Sun, 19 Jun 2022 03:19:18 +0000 (20:19 -0700)]
[ADT] Rename value to val (NFC)

I'd like to introduce functions, such as value, value_or, has_value,
etc to make llvm::Optional look more like std::optional.  Renaming
value to val avoids name conflicts.

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

2 years ago[libc] Temporary disable environment tests for PATH variable.
Tue Ly [Sun, 19 Jun 2022 03:04:33 +0000 (23:04 -0400)]
[libc] Temporary disable environment tests for PATH variable.

This is blocking fullbuild bot.

2 years ago[libc][Obvious] Fix c++20-designator warnings for tests that use TmHelper.h.
Tue Ly [Sun, 19 Jun 2022 02:54:37 +0000 (22:54 -0400)]
[libc][Obvious] Fix c++20-designator warnings for tests that use TmHelper.h.

2 years ago[test][GlobalOpt] Precommit more tests
Arthur Eubanks [Sun, 19 Jun 2022 02:36:00 +0000 (19:36 -0700)]
[test][GlobalOpt] Precommit more tests

And fix up existing tests to not have so much UB.

2 years ago[libomptarget]Add a trap for external omptarget from LLVM
Ye Luo [Sun, 19 Jun 2022 02:08:18 +0000 (21:08 -0500)]
[libomptarget]Add a trap for external omptarget from LLVM

Old LLVM installation may expose its internal omptarget CMake target when being used by find_package(LLVM) and caused issues in the CMake of libomptarget that is being built. Trap the issue early.

Reviewed By: tianshilei1992

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

2 years ago[mlir] Update accessors to prefixed form (NFC)
Jacques Pienaar [Sun, 19 Jun 2022 00:53:22 +0000 (17:53 -0700)]
[mlir] Update accessors to prefixed form (NFC)

Follow up from flipping dialects to both, flip accessor used to prefixed
variant ahead to flipping from _Both to _Prefixed. This just flips to
the accessors introduced in the preceding change which are just prefixed
forms of the existing accessor changed from.

Mechanical change using helper script
https://github.com/jpienaar/llvm-project/blob/main/clang-tools-extra/clang-tidy/misc/AddGetterCheck.cpp and clang-format.

2 years ago[Toolchains] Use llvm::is_contained (NFC)
Kazu Hirata [Sat, 18 Jun 2022 22:57:50 +0000 (15:57 -0700)]
[Toolchains] Use llvm::is_contained (NFC)

2 years ago[Vectorize] Use llvm::is_contained (NFC)
Kazu Hirata [Sat, 18 Jun 2022 22:49:15 +0000 (15:49 -0700)]
[Vectorize] Use llvm::is_contained (NFC)

2 years ago[Support] Use default member initialization (NFC)
Kazu Hirata [Sat, 18 Jun 2022 22:46:09 +0000 (15:46 -0700)]
[Support] Use default member initialization (NFC)

Identified with modernize-use-default-member-init.

2 years ago[test][GlobalOpt] Precommit test
Arthur Eubanks [Sat, 18 Jun 2022 22:44:09 +0000 (15:44 -0700)]
[test][GlobalOpt] Precommit test

2 years ago[IPO] Use default member initialization (NFC)
Kazu Hirata [Sat, 18 Jun 2022 22:41:20 +0000 (15:41 -0700)]
[IPO] Use default member initialization (NFC)

Identified with modernize-use-default-member-init.

2 years ago[Driver][OpenBSD] Use Arch reference instead of getArch(). NFC
Brad Smith [Sat, 18 Jun 2022 22:11:15 +0000 (18:11 -0400)]
[Driver][OpenBSD] Use Arch reference instead of getArch(). NFC

2 years ago[Driver] Pass -X to ld for riscv64-openbsd
Brad Smith [Sat, 18 Jun 2022 21:56:02 +0000 (17:56 -0400)]
[Driver] Pass -X to ld for riscv64-openbsd

Noticing D127826, add support for OpenBSD which uses lld on riscv64.

Reviewed By: MaskRay

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

2 years ago[Concepts] Implement overload resolution for destructors (P0848)
Roy Jacobson [Thu, 16 Jun 2022 17:52:12 +0000 (20:52 +0300)]
[Concepts] Implement overload resolution for destructors (P0848)

This patch implements a necessary part of P0848, the overload resolution for destructors.
It is now possible to overload destructors based on constraints, and the eligible destructor
will be selected at the end of the class.

The approach this patch takes is to perform the overload resolution in Sema::ActOnFields
and to mark the selected destructor using a new property in FunctionDeclBitfields.

CXXRecordDecl::getDestructor is then modified to use this property to return the correct
destructor.

This closes https://github.com/llvm/llvm-project/issues/45614.

Reviewed By: #clang-language-wg, erichkeane

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

2 years ago[X86] Add missing common AVX2 check prefix
Simon Pilgrim [Sat, 18 Jun 2022 19:19:24 +0000 (20:19 +0100)]
[X86] Add missing common AVX2 check prefix

2 years ago[RPOFuncAttrs] Fix norecurse detection
Arthur Eubanks [Fri, 17 Jun 2022 22:59:53 +0000 (15:59 -0700)]
[RPOFuncAttrs] Fix norecurse detection

We wanted to check if all uses of the function are direct calls, but the
code didn't account for passing the function as a parameter.

Reviewed By: nikic

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

2 years ago[IPO] Use default member initialization (NFC)
Kazu Hirata [Sat, 18 Jun 2022 19:17:09 +0000 (12:17 -0700)]
[IPO] Use default member initialization (NFC)

Identified with modernize-use-default-member-init.

2 years ago[X86] Use default member initialization (NFC)
Kazu Hirata [Sat, 18 Jun 2022 19:11:58 +0000 (12:11 -0700)]
[X86] Use default member initialization (NFC)

Identified with modernize-use-default-member-init.

2 years ago[X86] Use default member initialization (NFC)
Kazu Hirata [Sat, 18 Jun 2022 19:08:07 +0000 (12:08 -0700)]
[X86] Use default member initialization (NFC)

Identified with modernize-use-default-member-init.

2 years ago[X86] Use default member initialization (NFC)
Kazu Hirata [Sat, 18 Jun 2022 19:05:34 +0000 (12:05 -0700)]
[X86] Use default member initialization (NFC)

Identified with modernize-use-default-member-init.

2 years ago[CodeGen] Use default member initialization (NFC)
Kazu Hirata [Sat, 18 Jun 2022 19:01:34 +0000 (12:01 -0700)]
[CodeGen] Use default member initialization (NFC)

Identified with modernize-use-default-member-init.

2 years ago[BOLT] Allow function entry to be a cold fragment
Huan Nguyen [Sat, 18 Jun 2022 18:38:37 +0000 (11:38 -0700)]
[BOLT] Allow function entry to be a cold fragment

Allow cold fragment to get new address.

Our previous assumption is that a fragment (.cold) is only reached
through the main fragment of same function. In addition, .cold fragment
must be reached through either (a) direct transfer, or (b) split jump
table. For (a), we perform a simple fix-up. For (b), we currently mark
all relevant fragments as non-simple. Therefore, there is no need to
get new address for .cold fragment.

This is not always the case, as function entry can be rarely executed,
and is placed in .text.cold segment. Essentially we cannot tell which
the source-level function entry is based on hot and cold segments,
so we must treat each fragment a function on its own. Therfore, we
remove the assertion that a function entry cannot be cold fragment.

Test Plan:
```
ninja check-bolt
```

Reviewed By: Amir

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