platform/upstream/llvm.git
2 years ago[SCCP][IR] Landing pads are not safe to remove
Nikita Popov [Mon, 14 Mar 2022 13:34:01 +0000 (14:34 +0100)]
[SCCP][IR] Landing pads are not safe to remove

For landingpads with {} type, SCCP ended up dropping them, because
we considered them as safe to remove.

2 years ago[libc] Implement exp2f function that is correctly rounded for all rounding modes.
Tue Ly [Fri, 11 Mar 2022 15:08:47 +0000 (10:08 -0500)]
[libc] Implement exp2f function that is correctly rounded for all rounding modes.

Implement exp2f function that is correctly rounded for all rounding modes.

Reviewed By: sivachandra, zimmermann6

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

2 years agoImplement literal suffixes for _BitInt
Aaron Ballman [Mon, 14 Mar 2022 13:22:37 +0000 (09:22 -0400)]
Implement literal suffixes for _BitInt

WG14 adopted N2775 (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2775.pdf)
at our Feb 2022 meeting. This paper adds a literal suffix for
bit-precise types that automatically sizes the bit-precise type to be
the smallest possible legal _BitInt type that can represent the literal
value. The suffix chosen is wb (for a signed bit-precise type) which
can be combined with the u suffix (for an unsigned bit-precise type).

The preprocessor continues to operate as-if all integer types were
intmax_t/uintmax_t, including bit-precise integer types. It is a
constraint violation if the bit-precise literal is too large to fit
within that type in the context of the preprocessor (when still using
a pp-number preprocessing token), but it is not a constraint violation
in other circumstances. This allows you to make bit-precise integer
literals that are wider than what the preprocessor currently supports
in order to initialize variables, etc.

2 years agoHave cpu-specific variants set 'tune-cpu' as an optimization hint
Erich Keane [Thu, 10 Mar 2022 21:31:52 +0000 (13:31 -0800)]
Have cpu-specific variants set 'tune-cpu' as an optimization hint

Due to various implementation constraints, despite the programmer
choosing a 'processor' cpu_dispatch/cpu_specific needs to use the
'feature' list of a processor to identify it. This results in the
identified processor in source-code not being propogated to the
optimizer, and thus, not able to be tuned for.

This patch changes to use the actual cpu as written for tune-cpu so that
opt can make decisions based on the cpu-as-spelled, which should better
match the behavior expected by the programmer.

Note that the 'valid' list of processors for x86 is in
llvm/include/llvm/Support/X86TargetParser.def. At the moment, this list
contains only Intel processors, but other vendors may wish to add their
own entries as 'alias'es (or with different feature lists!).

If this is not done, there is two potential performance issues with the
patch, but I believe them to be worth it in light of the improvements to
behavior and performance.

1- In the event that the user spelled "ProcessorB", but we only have the
features available to test for "ProcessorA" (where A is B minus
features),
AND there is an optimization opportunity for "B" that negatively affects
"A", the optimizer will likely choose to do so.

2- In the event that the user spelled VendorI's processor, and the
feature
list allows it to run on VendorA's processor of similar features, AND
there
is an optimization opportunity for VendorIs that negatively affects
"A"s,
the optimizer will likely choose to do so. This can be fixed by adding
an
alias to X86TargetParser.def.

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

2 years ago[mlir][bufferization] Update public MLIR documentation
Matthias Springer [Mon, 14 Mar 2022 13:06:11 +0000 (22:06 +0900)]
[mlir][bufferization] Update public MLIR documentation

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

2 years ago[LV] Remove dead Loop argument from emitSCEVChecks. (NFC)
Florian Hahn [Mon, 14 Mar 2022 13:00:02 +0000 (13:00 +0000)]
[LV] Remove dead Loop argument from emitSCEVChecks. (NFC)

The argument is not used, remove it.

2 years ago[CoroSplit] Avoid self-replacement
Nikita Popov [Mon, 14 Mar 2022 12:52:59 +0000 (13:52 +0100)]
[CoroSplit] Avoid self-replacement

With opaque pointers, the bitcast might be a no-op, and this can
end up trying to replace a value with itself, which is illegal.

2 years ago[Clang][Sema] Avoid crashing for `__builtin_memcpy_inline` with an array argument
Egor Zhdan [Fri, 11 Mar 2022 15:57:01 +0000 (15:57 +0000)]
[Clang][Sema] Avoid crashing for `__builtin_memcpy_inline` with an array argument

This change teaches the Sema logic for `__builtin_memcpy_inline` to implicitly convert arrays passed as arguments to pointers, similarly to regular `memcpy`.

This code will no longer cause a compiler crash:
```
void f(char *p) {
    char s[1] = {0};
    __builtin_memcpy_inline(p, s, 1);
}
```

rdar://88147527

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

2 years ago[LV] Do not set insert point in completeLoopSkeleton. (NFCI)
Florian Hahn [Mon, 14 Mar 2022 12:21:20 +0000 (12:21 +0000)]
[LV] Do not set insert point in completeLoopSkeleton. (NFCI)

The insertion point for the builder used during VPlan code generation is
set during code generation. Setting the insert point here is dead code
and can be removed.

2 years ago[DeadArgElim] Guard against function type mismatch
Nikita Popov [Mon, 14 Mar 2022 12:03:04 +0000 (13:03 +0100)]
[DeadArgElim] Guard against function type mismatch

If the call function type and function type don't match, we should
consider the function live (there is effectively a bitcast
sitting in between).

2 years ago[GVN] Check load type in select PRE
Nikita Popov [Mon, 14 Mar 2022 11:46:10 +0000 (12:46 +0100)]
[GVN] Check load type in select PRE

This is no longer implicitly guaranteed with opaque pointers.

2 years ago[clang-format] Fix crash on asm block with label
Björn Schäpers [Sun, 13 Mar 2022 20:25:11 +0000 (21:25 +0100)]
[clang-format] Fix crash on asm block with label

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

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

2 years ago[clang-format][NFC] Left renamed to OpeningBrace...
Björn Schäpers [Sun, 13 Mar 2022 20:07:01 +0000 (21:07 +0100)]
[clang-format][NFC] Left renamed to OpeningBrace...

in TokenAnnotator::parseBrace. Left is misleading, because we have a
loop and Left does not move.

Also return early.

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

2 years ago[clang-format] Fix crash on invalid requires expression
Björn Schäpers [Sun, 13 Mar 2022 10:55:24 +0000 (11:55 +0100)]
[clang-format] Fix crash on invalid requires expression

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

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

2 years ago[clang-format][NFC] Rename Left to OpeningParen...
Björn Schäpers [Sun, 13 Mar 2022 20:49:15 +0000 (21:49 +0100)]
[clang-format][NFC] Rename Left to OpeningParen...

in TokenAnnotator::parseParens(). Left is misleading since we have a
loop and Left is not adjusted.

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

2 years agoExpose ScalarizerPass options to C++ (not just commandline)
Benoit Jacob [Mon, 14 Mar 2022 10:07:33 +0000 (11:07 +0100)]
Expose ScalarizerPass options to C++ (not just commandline)

Context: I needed this for https://github.com/google/iree/pull/8474 .
I found that TSan instrumentation expects vector sizes to be <= 16,
and in my project (IREE) we have tests with higher vector sizes.
That left some test functions uninstrumented, resulting in crashes as
instrumented code called into them.

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

2 years ago[clang-format] Clean up UnwrappedLineParser::parseRecord. NFC.
Marek Kurdej [Mon, 14 Mar 2022 10:59:41 +0000 (11:59 +0100)]
[clang-format] Clean up UnwrappedLineParser::parseRecord. NFC.

2 years ago[X86] Update AVX512 VBMI2 VL intrinsic tests to avoid adds
Simon Pilgrim [Mon, 14 Mar 2022 10:57:17 +0000 (10:57 +0000)]
[X86] Update AVX512 VBMI2 VL intrinsic tests to avoid adds

As noticed in D119654, by adding the masked intrinsics results together we can end up with the selects being canonicalized away from the intrinsic - this isn't what we want to test here so replace with a insertvalue chain into a aggregate instead to retain all the results.

2 years ago[mlir][linalg] Replace linalg.fill by OpDSL variant.
gysit [Mon, 14 Mar 2022 10:45:04 +0000 (10:45 +0000)]
[mlir][linalg] Replace linalg.fill by OpDSL variant.

The revision removes the linalg.fill operation and renames the OpDSL generated linalg.fill_tensor operation to replace it. After the change, all named structured operations are defined via OpDSL and there are no handwritten operations left.

A side-effect of the change is that the pretty printed form changes from:
```
%1 = linalg.fill(%cst, %0) : f32, tensor<?x?xf32> -> tensor<?x?xf32>
```
changes to
```
%1 = linalg.fill ins(%cst : f32) outs(%0 : tensor<?x?xf32>) -> tensor<?x?xf32>
```
Additionally, the builder signature now takes input and output value ranges as it is the case for all other OpDSL operations:
```
rewriter.create<linalg::FillOp>(loc, val, output)
```
changes to
```
rewriter.create<linalg::FillOp>(loc, ValueRange{val}, ValueRange{output})
```
All other changes remain minimal. In particular, the canonicalization patterns are the same and the `value()`, `output()`, and `result()` methods are now implemented by the FillOpInterface.

Depends On D120726

Reviewed By: nicolasvasilache

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

2 years ago[flang][NFC] Use TODO with location
Valentin Clement [Mon, 14 Mar 2022 10:49:50 +0000 (11:49 +0100)]
[flang][NFC] Use TODO with location

Use the TODO macro in `flang/Lower/Todo.h` with the converter location.

This patch is part of the upstreaming effort from fir-dev branch.

Reviewed By: jeanPerier

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

2 years ago[VE] Support more intrinsics
Kazushi (Jam) Marukawa [Sat, 12 Mar 2022 02:21:51 +0000 (11:21 +0900)]
[VE] Support more intrinsics

Support new intrinsics for following instrauctions.
  - VLDZ, VPCNT, VBRV
  - LCR, SCR, TSCR, FIDCR
  - FENCE
Also clean the intrinsics implementation of a following instruction.
  - SVOB

Reviewed By: simoll

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

2 years ago[VE] v256i32|64 reduction isel and tests
Simon Moll [Mon, 14 Mar 2022 09:39:30 +0000 (10:39 +0100)]
[VE] v256i32|64 reduction isel and tests

and|add|or|xor|smax v256i32|64 isel and tests for vp and vector.reduce
intrinsics

Reviewed By: kaz7

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

2 years ago[flang][NFC] Add todo in CallInterface
Valentin Clement [Mon, 14 Mar 2022 09:41:50 +0000 (10:41 +0100)]
[flang][NFC] Add todo in CallInterface

Add a todo for assumed shape dummy argument with VALUE attribute
since this is not implemented yet.

This patch is part of the upstreaming effort from fir-dev branch.

Reviewed By: jeanPerier

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

2 years ago[VE] v256.32|64 gather|scatter isel and tests
Simon Moll [Mon, 14 Mar 2022 08:19:27 +0000 (09:19 +0100)]
[VE] v256.32|64 gather|scatter isel and tests

This adds support for v256.32|64 scatter|gather isel.  vp.gather|scatter
and regular gather|scatter intrinsics are both lowered to the internal
VVP layer.  Splitting these ops on v512.32 is the subject of future
patches.

Reviewed By: kaz7

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

2 years ago[flang] Add runtime support for GET_COMMAND
Diana Picus [Wed, 2 Feb 2022 11:04:34 +0000 (11:04 +0000)]
[flang] Add runtime support for GET_COMMAND

Implement the GET_COMMAND intrinsic.
Add 2 new parameters (sourceFile and line) so we can create a terminator
for RUNTIME_CHECKs.

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

2 years agoAdd BasicTTIImpl cost model for llvm.get.active.lane.mask intrinsic
David Sherwood [Mon, 28 Feb 2022 17:03:22 +0000 (17:03 +0000)]
Add BasicTTIImpl cost model for llvm.get.active.lane.mask intrinsic

The vectoriser sometimes generates predicated vector loops using
the llvm.get.active.lane.mask intrinsic so it's important that we
are able to calculate a valid cost for the call instruction. When
SVE is enabled we are able to use a single whilelo instruction
for some vector types - in such cases I've marked the cost as 1.
For all other cases I've set the cost according to how the intrinsic
will be expanded.

Tests added here:

  Analysis/CostModel/AArch64/sve-intrinsics.ll
  Analysis/CostModel/ARM/active_lane_mask.ll
  Analysis/CostModel/RISCV/active_lane_mask.ll

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

2 years ago[flang] Add support for linkonce_odr in FIR
Jean Perier [Mon, 14 Mar 2022 09:24:17 +0000 (10:24 +0100)]
[flang] Add support for linkonce_odr in FIR

Add support for parsing and converting linkonce_odr in FIR.

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

2 years ago[VE] Transfer backend ownership
Simon Moll [Mon, 14 Mar 2022 08:18:33 +0000 (09:18 +0100)]
[VE] Transfer backend ownership

Kazushi Marukawa (kaz7) of NEC Solution Innovators will take over my
role as a code owner for the Vector Engine target. Erich Focht (efocht)
of NEC will assume the administrator role for the clang-ve-ninja
buildbot.

Reviewed By: kaz7

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

2 years ago[mlir][linalg] Use explicit replace in canonicalization pattern (NFC).
gysit [Mon, 14 Mar 2022 07:09:35 +0000 (07:09 +0000)]
[mlir][linalg] Use explicit replace in canonicalization pattern (NFC).

Introduce an explicit `replaceOp` call to enable the tracking of the producer LinalgOp.

Reviewed By: nicolasvasilache

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

2 years agoAdd cmake_parse_arguments() to `tablegen()` CMake function
Mehdi Amini [Mon, 14 Mar 2022 04:50:17 +0000 (04:50 +0000)]
Add cmake_parse_arguments() to `tablegen()` CMake function

This support "DEPENDS" and "EXTRA_INCLUDES", allowing in particular
to inject include paths to a tablegen targets without forcing to go
through the global INCLUDE_DIRECTORIES property.

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

2 years ago[clang][dataflow] Model the behavior of various optional members
Stanislav Gatev [Thu, 10 Mar 2022 15:25:42 +0000 (15:25 +0000)]
[clang][dataflow] Model the behavior of various optional members

Model `make_optional`, optional's default constructor, `emplace`,
`reset`, and `operator bool` members.

Reviewed-by: xazax.hun
Differential Revision: https://reviews.llvm.org/D121378

2 years agoCorrectly find builtins library with clang-cl
Tobias Hieta [Tue, 1 Mar 2022 07:22:53 +0000 (08:22 +0100)]
Correctly find builtins library with clang-cl

When using COMPILER_RT_USE_BUILTINS_LIBRARY=ON and clang-cl there
where several places where it didn't work as expected.

First -print-libgcc-file-name has to be prefixed with /clang:

Then the regex that matched the builtins library was wrong because
the builtins library is called clang_rt.builtins_<arch>.lib
and the regex only matched libclang_rt.builtins_arch.a

With this commit you can use a runtime build on Windows with this
option enabled.

Reviewed By: phosek

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

2 years ago[cmake] Add LLVM_THINLTO_CACHE_PATH
Tobias Hieta [Tue, 8 Mar 2022 15:15:20 +0000 (16:15 +0100)]
[cmake] Add LLVM_THINLTO_CACHE_PATH

This allows you to set a custom path to the ThinLTO cache so that
it can be shared when building in several different build directories.

Reviewed By: phosek

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

2 years ago[NFC] Fix go binding build
Kito Cheng [Mon, 14 Mar 2022 06:03:25 +0000 (14:03 +0800)]
[NFC] Fix go binding build

Fix test failure cause by D121332.

2 years ago[MCA] Removed unused variable.
Patrick Holland [Mon, 14 Mar 2022 04:55:13 +0000 (21:55 -0700)]
[MCA] Removed unused variable.

2 years ago[clang-format] Add option to align compound assignments like `+=`
sstwcw [Mon, 14 Mar 2022 01:24:32 +0000 (01:24 +0000)]
[clang-format] Add option to align compound assignments like `+=`

Reviewed By: curdeius, HazardyKnusperkeks, MyDeveloperDay

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

2 years ago[clang-format] Extract doc for entire configuration structs
sstwcw [Mon, 14 Mar 2022 01:24:31 +0000 (01:24 +0000)]
[clang-format] Extract doc for entire configuration structs

Previously the comments for configuration structs as a whole like
`BraceWrappingFlags` did not go into the doc.

Reviewed By: curdeius

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

2 years ago[yamlio] Allow parsing an entire mapping as an enumeration
sstwcw [Mon, 14 Mar 2022 01:24:26 +0000 (01:24 +0000)]
[yamlio] Allow parsing an entire mapping as an enumeration

For when we want to change a configuration option from an enum into a
struct.  The need arose when working on D119599.

Reviewed By: jhenderson

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

2 years agoRemove include_directories() from cmake `mlir_tablegen()` function (NFC)
Mehdi Amini [Mon, 14 Mar 2022 04:09:56 +0000 (04:09 +0000)]
Remove include_directories() from cmake `mlir_tablegen()` function (NFC)

This is present since the beginning, but does not seem needed by any
in-tree target right now. This seems like the kind of thing to populate
by the caller if needed.

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

2 years ago[MCA] Moved six instruction flags from InstrDesc to InstructionBase.
Patrick Holland [Sat, 12 Mar 2022 03:52:36 +0000 (19:52 -0800)]
[MCA] Moved six instruction flags from InstrDesc to InstructionBase.

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

2 years ago[IRSim] Make sure the first instruction of a block doesn't get missed if it is the...
Andrew Litteken [Wed, 9 Mar 2022 18:33:06 +0000 (10:33 -0800)]
[IRSim] Make sure the first instruction of a block doesn't get missed if it is the first valid instruction in Module.

If an instruction is first legal instruction in the module, and is the only legal instruction in its basic block, it will be ignored by the outliner due to a length check inherited from the older version of the outliner that was restricted to outlining within a single basic block. This removes that check, and updates any tests that broke because of it.

Reviewer: paquette

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

2 years ago[RISCV] Add basic code modeling for fixed length vector reduction.
Yeting Kuo [Fri, 11 Mar 2022 08:39:29 +0000 (16:39 +0800)]
[RISCV] Add basic code modeling for fixed length vector reduction.

Reviewed By: craig.topper

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

2 years ago[RISCV] Merge ReplaceNodeResults code for SHFL and GREV/GORC. NFC
Craig Topper [Sun, 13 Mar 2022 20:57:43 +0000 (13:57 -0700)]
[RISCV] Merge ReplaceNodeResults code for SHFL and GREV/GORC. NFC

2 years ago[X86] Update avx512vbmi2vl intrinsic tests to avoid adds
Luo, Yuanke [Mon, 14 Mar 2022 01:16:53 +0000 (09:16 +0800)]
[X86] Update avx512vbmi2vl intrinsic tests to avoid adds

As noticed in D119654, by adding the masked intrinsics results together
we can end up with the selects being canonicalized away from the
intrinsic - this isn't what we want to test here so replace with a
insertvalue chain into a aggregate instead to retain all the results.

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

2 years ago[IRSim][IROutliner] Ignoring Musttail Function
Andrew Litteken [Wed, 9 Mar 2022 18:35:09 +0000 (10:35 -0800)]
[IRSim][IROutliner] Ignoring Musttail Function

Musttail calls require extra handling to properly propagate the calling convention information and tail call information. The outliner does not currently do this, so we ignore call instructions that utilize the swifttailcc and tailcc calling convention as well as functions marked with the attribute musttail.

Reviewers: paquette, aschwaighofer

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

2 years agoRevert "[IRSim][IROutliner] Ignoring Musttail Function"
Andrew Litteken [Mon, 14 Mar 2022 00:26:45 +0000 (19:26 -0500)]
Revert "[IRSim][IROutliner] Ignoring Musttail Function"

This reverts commit c7037c72572c9d1b2a50dbf56077be7975f83f09.

Pushed too soon

2 years ago[IRSim][IROutliner] Ignoring Musttail Function
Andrew Litteken [Wed, 9 Mar 2022 18:35:09 +0000 (10:35 -0800)]
[IRSim][IROutliner] Ignoring Musttail Function

2 years ago[VPlan] Ensure each iv user is only visited once in transform.
Florian Hahn [Sun, 13 Mar 2022 21:40:25 +0000 (21:40 +0000)]
[VPlan] Ensure each iv user is only visited once in transform.

If a recipe has multiple uses of an IV, we crash. It causes a crash when
building llvm-test-suite.

Exposed by 95f76bff1c40bc1c2f.

2 years ago[clang-format] Fix incorrect assertion on macro definitions with keyword class.
Marek Kurdej [Sun, 13 Mar 2022 21:17:48 +0000 (22:17 +0100)]
[clang-format] Fix incorrect assertion on macro definitions with keyword class.

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

2 years ago[clang-format] Correctly format variable templates.
Marek Kurdej [Fri, 11 Mar 2022 11:51:15 +0000 (12:51 +0100)]
[clang-format] Correctly format variable templates.

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

Reviewed By: MyDeveloperDay, HazardyKnusperkeks, owenpan

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

2 years ago[clang-format] Add space to comments starting with '#'.
Marek Kurdej [Tue, 1 Mar 2022 08:42:28 +0000 (09:42 +0100)]
[clang-format] Add space to comments starting with '#'.

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

Reviewed By: MyDeveloperDay, HazardyKnusperkeks, owenpan

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

2 years ago[clang-format] Handle attributes before case label.
Marek Kurdej [Wed, 9 Mar 2022 10:05:34 +0000 (11:05 +0100)]
[clang-format] Handle attributes before case label.

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

Reviewed By: MyDeveloperDay, HazardyKnusperkeks, owenpan

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

2 years ago[X86] Update AVX512 intrinsic tests to avoid adds
Simon Pilgrim [Sun, 13 Mar 2022 17:28:18 +0000 (17:28 +0000)]
[X86] Update AVX512 intrinsic tests to avoid adds

As noticed in D119654, by adding the masked intrinsics results together we can end up with the selects being canonicalized away from the intrinsic - this isn't what we want to test here so replace with a insertvalue chain into a aggregate instead to retain all the results.

2 years ago[PhaseOrdering] Update naming of blocks after 95f76bff1c40.
Florian Hahn [Sun, 13 Mar 2022 17:23:25 +0000 (17:23 +0000)]
[PhaseOrdering] Update naming of blocks after 95f76bff1c40.

2 years ago[X86] Update AVX512VL intrinsic tests to avoid adds
Simon Pilgrim [Sun, 13 Mar 2022 17:20:12 +0000 (17:20 +0000)]
[X86] Update AVX512VL intrinsic tests to avoid adds

As noticed in D119654, by adding the masked intrinsics results together we can end up with the selects being canonicalized away from the intrinsic - this isn't what we want to test here so replace with a insertvalue chain into a aggregate instead to retain all the results.

2 years ago[LV] Create & use VPScalarIVSteps for all scalar users.
Florian Hahn [Sun, 13 Mar 2022 17:15:24 +0000 (17:15 +0000)]
[LV] Create & use VPScalarIVSteps for all scalar users.

This patch is a follow-up to D115953. It updates optimizeInductions
to also introduce new VPScalarIVStepsRecipes if an IV has both vector
and scalar uses.

It updates all uses that only need scalar values to use the newly
created recipe for the scalar steps.

This completes untangling of VPWidenIntOrFpInductionRecipe
code-generation. Now the recipe *only* creates the widened vector
values, as it says on the tin.

The code to genereate IR has been moved directly to
VPWidenIntOrFpInductionRecipe::execute.

Note that the recipe has been updated to hold a reference to
ScalarEvolution, which is needed to expand the step, until we can place
the corresponding SCEV expansion in the pre-header.

Depends on D120827.

Reviewed By: Ayal

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

2 years ago[clang-tidy][docs] Fix wrong url in DontModifyStdNamespaceCheck
Balazs Benics [Sun, 13 Mar 2022 16:51:00 +0000 (17:51 +0100)]
[clang-tidy][docs] Fix wrong url in DontModifyStdNamespaceCheck

It was probably a copy-paste mistake.
The check was added as `cert-dcl58-cpp`, so the doc should point there.

Reviewed By: aaron.ballman

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

2 years ago[clang-tidy][docs][NFC] Update URL and docs of PostfixOperatorCheck
Balazs Benics [Sun, 13 Mar 2022 16:51:00 +0000 (17:51 +0100)]
[clang-tidy][docs][NFC] Update URL and docs of PostfixOperatorCheck

The docs URL was dangling, and the docs suggested that it has no fixits,
but it actually had.

Reviewed By: aaron.ballman

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

2 years ago[clang-tidy][docs][NFC] Refer to the CERT rule in bugprone-shared-ptr-array-mismatch...
Balazs Benics [Sun, 13 Mar 2022 16:51:00 +0000 (17:51 +0100)]
[clang-tidy][docs][NFC] Refer to the CERT rule in bugprone-shared-ptr-array-mismatch docs

Document the connection between this checker and the corresponding CERT
rule.

Reviewed By: aaron.ballman

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

2 years ago[libc++] Replace _LIBCPP_HAS_NO_CONCEPTS with _LIBCPP_STD_VER > 17. NFCI.
Joe Loser [Sat, 12 Mar 2022 15:46:57 +0000 (10:46 -0500)]
[libc++] Replace _LIBCPP_HAS_NO_CONCEPTS with _LIBCPP_STD_VER > 17. NFCI.

All supported compilers that support C++20 now support concepts. So, remove
`_LIB_LIBCPP_HAS_NO_CONCEPTS` in favor of `_LIBCPP_STD_VER > 17`. Similarly in
the tests, remove `// UNSUPPORTED: libcpp-no-concepts`.

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

2 years ago[SDAG] simplify bitwise logic with repeated operand
Sanjay Patel [Sun, 13 Mar 2022 15:06:53 +0000 (11:06 -0400)]
[SDAG] simplify bitwise logic with repeated operand

We do not have general reassociation here (and probably
do not need it), but I noticed these were missing in
patches/tests motivated by D111530, so we can at
least handle the simplest patterns.

The VE test diff looks correct, but we miss that
pattern in IR currently:
https://alive2.llvm.org/ce/z/u66_PM

2 years ago[AArch64] add tests for bitwise logic reassociation; NFC
Sanjay Patel [Sun, 13 Mar 2022 14:29:27 +0000 (10:29 -0400)]
[AArch64] add tests for bitwise logic reassociation; NFC

Chooses from a variety of scalar/vector/illegal types
because that should not inhibit any folds.

2 years ago[InstCombine] Add additional icmp eq/ne test coverage for Issue #32161
Simon Pilgrim [Sun, 13 Mar 2022 14:40:34 +0000 (14:40 +0000)]
[InstCombine] Add additional icmp eq/ne test coverage for Issue #32161

2 years ago[MLIR][Presburger][NFC] Fix doc for PresburgerSpace::numLocals
Groverkss [Sun, 13 Mar 2022 14:34:23 +0000 (20:04 +0530)]
[MLIR][Presburger][NFC] Fix doc for PresburgerSpace::numLocals

2 years ago[PhaseOrdering] loop-rotation-vs-common-code-hoisting.ll - merge equivalent check...
Simon Pilgrim [Sun, 13 Mar 2022 14:15:35 +0000 (14:15 +0000)]
[PhaseOrdering] loop-rotation-vs-common-code-hoisting.ll - merge equivalent check-prefixes

2 years ago[MLIR][NFC] Fix deprecation message.
Christian Sigg [Sun, 13 Mar 2022 13:17:08 +0000 (14:17 +0100)]
[MLIR][NFC] Fix deprecation message.

2 years ago[MLIR][Presburger] Add support for PresburgerRelation
Groverkss [Sun, 13 Mar 2022 11:36:10 +0000 (17:06 +0530)]
[MLIR][Presburger] Add support for PresburgerRelation

This patch adds supports for union of relations (PresburgerRelation).  Along
with this, support for PresburgerSet is also maintained.

This patch is part of a series of patches to add support for relations in
Presburger library.

Reviewed By: arjunp

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

2 years ago[X86] combineCMP - peek through zero-extensions for X86cmp(zext(x0),0) zero tests...
Simon Pilgrim [Sun, 13 Mar 2022 11:38:40 +0000 (11:38 +0000)]
[X86] combineCMP - peek through zero-extensions for X86cmp(zext(x0),0) zero tests (PR38960)

If we're comparing a value against zero, strip away any zero-extension and perform the comparison on the pre-extended value

Fixes #38308

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

2 years ago[RISCV][RVV] Fix vslide1up/down intrinsics overflow bug for SEW=64 on RV32
Lehua Ding [Sun, 13 Mar 2022 10:06:09 +0000 (18:06 +0800)]
[RISCV][RVV] Fix vslide1up/down intrinsics overflow bug for SEW=64 on RV32

Reviewed By: craig.topper, kito-cheng

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

2 years ago[AMDGPU] Add llvm.amdgcn.s.setprio intrinsic
Austin Kerbow [Fri, 4 Mar 2022 07:59:26 +0000 (23:59 -0800)]
[AMDGPU] Add llvm.amdgcn.s.setprio intrinsic

Reviewed By: rampitec, arsenm

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

2 years ago[NFC][flang][OpenMP] Fixes formatting issues with D110714
Nimish Mishra [Sun, 13 Mar 2022 11:30:23 +0000 (17:00 +0530)]
[NFC][flang][OpenMP] Fixes formatting issues with D110714

This NFC fixes formatting issues introduced with https://reviews.llvm.org/D110714

Reviewed By: peixin, shraiysh

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

2 years ago[MLIR][Python] Add SCFIfOp Python binding
chhzh123 [Sun, 13 Mar 2022 05:24:00 +0000 (05:24 +0000)]
[MLIR][Python] Add SCFIfOp Python binding

Current generated Python binding for the SCF dialect does not allow
users to call IfOp to create if-else branches on their own.
This PR sets up the default binding generation for scf.if operation
to address this problem.

Reviewed By: ftynse

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

2 years ago[RISCV] Add DAGCombine to fold (bitreverse (bswap X)) to brev8 with Zbkb.
Craig Topper [Sun, 13 Mar 2022 00:23:17 +0000 (16:23 -0800)]
[RISCV] Add DAGCombine to fold (bitreverse (bswap X)) to brev8 with Zbkb.

If the type is less than XLenVT, type legalization will turn this
into (srl (bitreverse (bswap (srl (bswap X), C))), C). We can't
completely recover from these shifts. They introduce zeros into
the upper bits of the result and we can't easily tell if they are
needed. By doing a DAG combine early, we avoid introducing these
shifts.

2 years ago[RISCV] Add Zbp command lines to bswap-bitreverse.ll. NFC
Craig Topper [Sun, 13 Mar 2022 00:13:54 +0000 (16:13 -0800)]
[RISCV] Add Zbp command lines to bswap-bitreverse.ll. NFC

2 years ago[flang] Improve runtime crash messages
Peter Steinfeld [Fri, 11 Mar 2022 22:01:07 +0000 (14:01 -0800)]
[flang] Improve runtime crash messages

Where possible, I added additional information to the messages to help
programmers figure out what went wrong.  I also removed all uses of the word
"bad" from the messages since (to me) that implies a moral judgement rather
than a programming error.  I replaced it with either "invalid" or "unsupported"
where appropriate.

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

2 years ago[ELF] Simplify addCopyRelSymbol with invokeELFT. NFC
Fangrui Song [Sat, 12 Mar 2022 22:08:10 +0000 (14:08 -0800)]
[ELF] Simplify addCopyRelSymbol with invokeELFT. NFC

2 years ago[clang-format][docs] Fix incorrect 'clang-format 12' option markers
Krystian Kuzniarek [Sat, 12 Mar 2022 21:49:43 +0000 (22:49 +0100)]
[clang-format][docs] Fix incorrect 'clang-format 12' option markers

Introduced by 23a5090c6, some style option markers indicated
'clang-format 12', though their respective options were available in
earlier releases.

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

2 years ago[clang-format] Handle builtins in constraint expression
Björn Schäpers [Tue, 1 Mar 2022 22:15:09 +0000 (23:15 +0100)]
[clang-format] Handle builtins in constraint expression

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

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

2 years ago[DebugInfo] Include DW_TAG_skeleton_unit when looking for parent UnitDie
Wenlei He [Sat, 26 Feb 2022 07:09:45 +0000 (23:09 -0800)]
[DebugInfo] Include DW_TAG_skeleton_unit when looking for parent UnitDie

`DIE::getUnitDie` looks up parent DIE until compile unit or type unit is found. However for skeleton CU with debug fission, we would have DW_TAG_skeleton_unit instead of DW_TAG_compile_unit as top level DIE.

This change fixes the look up so we can get DW_TAG_skeleton_unit as UnitDie for skeleton CU.

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

2 years ago[mlirTranslateMain] Add a customization callback.
Chris Lattner [Fri, 4 Mar 2022 05:11:37 +0000 (21:11 -0800)]
[mlirTranslateMain] Add a customization callback.

mlir-translate and related tools currently have a fixed set
of flags that are built into Translation.cpp.  This works for
simple cases, but some clients want to change the default
globally (e.g. default to allowing unregistered dialects
without a command line flag), or support dialect-independent
translations without having those translations register every
conceivable dialect they could be used with (breaking
modularity).

This approach could also be applied to mlirOptMain to reduce
the significant number of flags it has accumulated.

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

2 years agoReplace forward declaration by actual declaration of MemoryBuffer in Object/Binary.h
serge-sans-paille [Sat, 12 Mar 2022 20:53:14 +0000 (21:53 +0100)]
Replace forward declaration by actual declaration of MemoryBuffer in Object/Binary.h

This is a partial undo of ed98c1b37661b0795a5e34517941485f0f0688d1, see
https://lab.llvm.org/buildbot#builders/37/builds/11529
for the actual error.

2 years agoAdd missing include under EXPENSIVE_CHECKS
serge-sans-paille [Sat, 12 Mar 2022 17:53:53 +0000 (18:53 +0100)]
Add missing include under EXPENSIVE_CHECKS

2 years ago[clang-format] Minimize the damage caused by AlignArrayOfStructures when working...
mydeveloperday [Sat, 12 Mar 2022 17:21:33 +0000 (17:21 +0000)]
[clang-format] Minimize the damage caused by AlignArrayOfStructures when working on non square arrays

I have lost count of the number of times this has been reported, but it fundamentally comes down to the fact that the "AlignArrayLeft/Right" function is fundamentally broken for non-square arrays.

As a result, a pointer can end up running off the end of the array structure, I've spent the last 2 weekends trying to rewrite this algorithm but I've struggled to get it aligned correctly.

This is an interim fix, that ignores all array that are non-square and leaves them alone. I think this can allow us to close out most of the crashes (if not all).

I think this can help reduce the number of bugs coming in that are duplicates.

https://github.com/llvm/llvm-project/issues/53748
https://github.com/llvm/llvm-project/issues/51767
https://github.com/llvm/llvm-project/issues/51277

Reviewed By: curdeius, HazardyKnusperkeks, feg208

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

2 years ago[gn build] Port 999fa9f68788
LLVM GN Syncbot [Sat, 12 Mar 2022 17:10:56 +0000 (17:10 +0000)]
[gn build] Port 999fa9f68788

2 years ago[BOLT][NFC] Use getShortOpcodeArith in X86MCPlusBuilder
Amir Ayupov [Thu, 10 Mar 2022 20:21:39 +0000 (12:21 -0800)]
[BOLT][NFC] Use getShortOpcodeArith in X86MCPlusBuilder

Unify `llvm::X86::getRelaxedOpcodeArith` and `getShortArithOpcode` in
X86MCPlusBuilder.cpp.

Addresses https://lists.llvm.org/pipermail/llvm-dev/2022-January/154526.html

Reviewed By: rafauler

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

2 years ago[X86][NFC] Move table from getRelaxedOpcodeArith into its own class
Amir Ayupov [Fri, 21 Jan 2022 07:34:53 +0000 (23:34 -0800)]
[X86][NFC] Move table from getRelaxedOpcodeArith into its own class

Move out the table and prepare the code to reuse it for the reverse mapping.
Follows the example of memory folding/unfolding tables in X86InstrFoldTables.cpp

Preparation step to unify `llvm::X86::getRelaxedOpcodeArith` and
`getShortArithOpcode` in BOLT X86MCPlusBuilder.cpp.

Addresses https://lists.llvm.org/pipermail/llvm-dev/2022-January/154526.html

Reviewed By: skan, MaskRay

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

2 years agoCleanup includes: DebugInfo & CodeGen
serge-sans-paille [Wed, 9 Mar 2022 21:29:31 +0000 (22:29 +0100)]
Cleanup includes: DebugInfo & CodeGen

Discourse thread: https://discourse.llvm.org/t/include-what-you-use-include-cleanup
Differential Revision: https://reviews.llvm.org/D121332

2 years ago[clang][deps] Update helper script documentation
Jan Svoboda [Sat, 12 Mar 2022 15:55:38 +0000 (16:55 +0100)]
[clang][deps] Update helper script documentation

Since D118986, clang-scan-deps returns the whole command line even for the original translation units.

2 years ago[clang][deps] Simplify PREFIX definitions in tests
Jan Svoboda [Sat, 12 Mar 2022 15:44:29 +0000 (16:44 +0100)]
[clang][deps] Simplify PREFIX definitions in tests

Instead of outputting the test directory into the JSON result file, parsing it with `FileCheck` and then potentially stripping it, simply use `FileCheck`'s `-D` option.

Note that we use `%/t` instead of `%t` in order to normalize to forward slashes on Windows, which matches what we do with `sed 's:\\\\\?:/:g'`.

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

2 years ago[MLIR] Fix block label parsing bug
Uday Bondhugula [Sat, 12 Mar 2022 02:08:10 +0000 (07:38 +0530)]
[MLIR] Fix block label parsing bug

Fix bug in `Block` label parsing:
https://github.com/llvm/llvm-project/issues/54343

The `parseOptionalBlockArgList` method was doing the wrong thing
(contrary to its doc comment) and its calling context was also
incorrect. This led to a parse failure for something like "^bb0()".

Fixes #54343

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

2 years ago[libc++] Remove unneeded tests.
Mark de Wever [Sat, 12 Mar 2022 11:15:26 +0000 (12:15 +0100)]
[libc++] Remove unneeded tests.

As suggested in D120742.

2 years ago[libc++][NFC] Use TEST_HAS_NO_EXCEPTIONS.
Mark de Wever [Sat, 12 Mar 2022 11:11:00 +0000 (12:11 +0100)]
[libc++][NFC] Use TEST_HAS_NO_EXCEPTIONS.

The test should use the already available test macro.

2 years ago[libc++] Add a missing test case.
Mark de Wever [Sat, 12 Mar 2022 11:07:54 +0000 (12:07 +0100)]
[libc++] Add a missing test case.

2 years ago[clang][deps] Attempt to fix Windows test failure
Jan Svoboda [Sat, 12 Mar 2022 11:09:10 +0000 (12:09 +0100)]
[clang][deps] Attempt to fix Windows test failure

2 years ago[clang][deps] Remove '-fmodules-cache-path=' arguments
Jan Svoboda [Sat, 12 Mar 2022 10:42:04 +0000 (11:42 +0100)]
[clang][deps] Remove '-fmodules-cache-path=' arguments

With explicit modules build, the '-fmodules-cache-path=' argument is unused.

This patch removes the argument to avoid warnings or errors (with '-Werror') stemming from that.

Depends on D118915.

Reviewed By: dexonsmith

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

2 years ago[clang][deps] Generate '-fmodule-file=' only for direct dependencies
Jan Svoboda [Sat, 12 Mar 2022 10:32:47 +0000 (11:32 +0100)]
[clang][deps] Generate '-fmodule-file=' only for direct dependencies

The `clang-scan-deps` tool currently generates `-fmodule-file=` command-line arguments for the whole transitive closure of modular dependencies. This is not necessary, we only need to provide the direct dependencies on the command line. Information about transitive dependencies is stored within the `.pcm` files of direct dependencies. This makes the command lines shorter, but should be a NFC otherwise (unless there are bugs in the loading mechanism for explicit modules).

Depends on D120465.

Reviewed By: Bigcheese

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

2 years ago[clang][deps] Disable implicit module maps
Jan Svoboda [Sat, 12 Mar 2022 10:04:17 +0000 (11:04 +0100)]
[clang][deps] Disable implicit module maps

Since D113473, we don't report any module map files via `-fmodule-map-file=` in explicit builds. The ultimate goal here is to make sure Clang doesn't open/read/parse/evaluate unnecessary module maps.

However, implicit module maps still end up reading all reachable module maps. This patch disables implicit module maps in explicit builds.

Unfortunately, we still need to report some module map files that aren't encoded in PCM files of dependencies: module maps that are necessary to correctly evaluate includes in modules marked as `[no_undeclared_includes]`.

Depends on D120464.

Reviewed By: dexonsmith

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

2 years ago[Attributor] Remove capture tracker usage and follow uses explicitly
Johannes Doerfert [Tue, 8 Mar 2022 21:49:26 +0000 (15:49 -0600)]
[Attributor] Remove capture tracker usage and follow uses explicitly

Before we used the capture tracker to follow pointer uses, now we do it
explicitly ourselves through the Attributor API. There are multiple
benefits: For one, the boilerplate is cut down by a lot. The class,
potential copies vector, etc. is all not needed anymore. We also do
avoid explicitly looking through memory here, something that was
duplicated and should only live in the `checkForAllUses~ helper. More
importantly, as we do simplifications we need to make sure all parties
are in sync when they reason about uses. The old way did not allow us to
do this but the new one does as every use visiting AA goes through
`checkForAllUses` now..

2 years ago[CaptureTracking][NFCI] Expose capture tracking logic
Johannes Doerfert [Tue, 8 Mar 2022 21:02:36 +0000 (15:02 -0600)]
[CaptureTracking][NFCI] Expose capture tracking logic

The logic exposed by this patch via `llvm::DetermineUseCaptureKind` was
part of `llvm::PointerMayBeCaptured`. In the Attributor we want to keep
track of the work list items but still reuse the logic if a use might
capture a value. A follow up for the Attributor removes ~100 lines of
code and complexity while making future handling of simplified values
possible.

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

2 years ago[lsan] ppc64: dynamically pick address range for allocator
Fangrui Song [Sat, 12 Mar 2022 04:16:17 +0000 (20:16 -0800)]
[lsan] ppc64: dynamically pick address range for allocator

For ppc64 PIE, it seems that [0xa00000000000,0xc00000000000) may be occupied
which will lead to a segfault in certain kernel configurations
(clang-ppc64le-rhel). Use the `!kUsingConstantSpaceBeg` code path like Fuchsia.

Reviewed By: jsji

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