platform/upstream/llvm.git
18 months ago[clang-tidy] Implement CppCoreGuideline CP.53
Chris Cotter [Thu, 5 Jan 2023 12:58:34 +0000 (12:58 +0000)]
[clang-tidy] Implement CppCoreGuideline CP.53

Implement CppCoreGuideline CP.53 to warn when a coroutine accepts
references parameters. Although the guideline mentions that it is safe
to access a reference parameter before suspension points, the guideline
recommends flagging all coroutine parameter references.

Reviewed By: carlosgalvezp

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

18 months ago[flang][NFC] share Constant<SomeDerived> lowering
Jean Perier [Thu, 5 Jan 2023 13:45:14 +0000 (14:45 +0100)]
[flang][NFC] share Constant<SomeDerived> lowering

A previous patch (https://reviews.llvm.org/D136955) already refactored
intrinsic constant lowering to place in its own file and allow using it from
both the current lowering and the new lowering to HLFIR.

This patch does the same for derived types. The core function
"genStructComponentInInitializer" is moved from ConvertExpr.cpp and
renamed "genInlinedStructureCtorLitImpl" into ConvertConstant.cpp
without significant logic change.

Then, genScalarLit, genArrayLit (and genInlinedArrayLit/genOutlinedArrayLit)
are updated to support derived types.

The core aspect of derived type constant lowering that differs between
the current lowering and the HLFIR update is the way
addresses/initial target descriptors are built when part of a derived
type constant. This part happens in ConvertVariable.cpp (since the
address of a variable is taken in an initializer and is left TODO).

The mangling of derived type global literal constant is fixed: it did not embed
the derived type name and could cause "conflicts" between unrelated
derived types containing the same data. However, the hash remains
unstable between two compilation of the same file. This is not a
correctness issue and would require a lot of work to hash the derived
type constant data without hashing some irrelevant (but not out of bound)
data in the compile time data structure that holds derived type
constants (Constant<SomeDerived>). This may have to be revisited later.

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

18 months ago[Examples] Convert test to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 13:16:11 +0000 (14:16 +0100)]
[Examples] Convert test to opaque pointers (NFC)

18 months ago[DFSan] Convert test to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 13:13:58 +0000 (14:13 +0100)]
[DFSan] Convert test to opaque pointers (NFC)

Retaining the unused bitcasts in this test, as they are required
to reproduce the test behavior for whatever reason.

18 months agoMove from llvm::makeArrayRef to ArrayRef deduction guides - llvm/ part
serge-sans-paille [Wed, 4 Jan 2023 07:28:45 +0000 (08:28 +0100)]
Move from llvm::makeArrayRef to ArrayRef deduction guides - llvm/ part

Use deduction guides instead of helper functions.

The only non-automatic changes have been:

1. ArrayRef(some_uint8_pointer, 0) needs to be changed into ArrayRef(some_uint8_pointer, (size_t)0) to avoid an ambiguous call with ArrayRef((uint8_t*), (uint8_t*))
2. CVSymbol sym(makeArrayRef(symStorage)); needed to be rewritten as CVSymbol sym{ArrayRef(symStorage)}; otherwise the compiler is confused and thinks we have a (bad) function prototype. There was a few similar situation across the codebase.
3. ADL doesn't seem to work the same for deduction-guides and functions, so at some point the llvm namespace must be explicitly stated.
4. The "reference mode" of makeArrayRef(ArrayRef<T> &) that acts as no-op is not supported (a constructor cannot achieve that).

Per reviewers' comment, some useless makeArrayRef have been removed in the process.

This is a follow-up to https://reviews.llvm.org/D140896 that introduced
the deduction guides.

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

18 months ago[LoopSimplifyCFG] Convert test to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 13:04:32 +0000 (14:04 +0100)]
[LoopSimplifyCFG] Convert test to opaque pointers (NFC)

18 months ago[NFC][NVPTX] Move a comment back to its proper place
Luke Drummond [Thu, 5 Jan 2023 13:01:28 +0000 (13:01 +0000)]
[NFC][NVPTX] Move a comment back to its proper place

The comment introduced in b94bd05b952a5 was misplaced during
f14af1621942 and no longer comments on the relevant bit of code; move it
back so it makes sense.

18 months ago[mlir] Add function_entry_count to LLVMFuncOp
Christian Ulmann [Thu, 5 Jan 2023 12:21:57 +0000 (13:21 +0100)]
[mlir] Add function_entry_count to LLVMFuncOp

This commit introduces the function_entry_count metadata field to the
LLVMFuncOp and adds both the corresponding import and export
funtionalities.
The import of the function metadata uses the same infrastructure as the
instruction metadata, i.e., it dispatches through a dialect interface.

Reviewed By: gysit

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

18 months ago[X86] Support -march=emeraldrapids
Freddy Ye [Thu, 5 Jan 2023 12:27:13 +0000 (20:27 +0800)]
[X86] Support -march=emeraldrapids

Reviewed By: pengfei, skan

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

18 months ago[CodeGen] Convert some tests to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 12:13:06 +0000 (13:13 +0100)]
[CodeGen] Convert some tests to opaque pointers (NFC)

These are mostly MIR tests, which I did not handle during previous
conversions.

18 months ago[Verifier] Convert some tests to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 12:10:32 +0000 (13:10 +0100)]
[Verifier] Convert some tests to opaque pointers (NFC)

18 months ago[clang-format] Add an option for breaking after C++11 attributes
Owen Pan [Wed, 4 Jan 2023 07:07:15 +0000 (23:07 -0800)]
[clang-format] Add an option for breaking after C++11 attributes

Fixes #45968.
Fixes #54265.
Fixes #58102.

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

18 months ago[X86] Modify model value of meteorlake.
Freddy Ye [Thu, 5 Jan 2023 12:07:58 +0000 (20:07 +0800)]
[X86] Modify model value of meteorlake.

Reviewed By: pengfei

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

18 months ago[SCEVExpanderTest] Convert to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 12:01:24 +0000 (13:01 +0100)]
[SCEVExpanderTest] Convert to opaque pointers (NFC)

18 months ago[PredicateInfo] Enable test with broken REQUIRES condition (NFC)
Nikita Popov [Thu, 5 Jan 2023 11:50:39 +0000 (12:50 +0100)]
[PredicateInfo] Enable test with broken REQUIRES condition (NFC)

Add some extra uses of the comparisons, so that these do get
visited.

18 months ago[AArch64][GlobalISel] implement GPR (U/S)(MIN/MAX) instr support
Ties Stuij [Thu, 5 Jan 2023 11:19:56 +0000 (11:19 +0000)]
[AArch64][GlobalISel] implement GPR (U/S)(MIN/MAX) instr support

Lower umin, umax, smin, smax intrinsics to corresponding UMIN, UMAX, SMIN, SMAX
instructions when feat CSSC is available.

Reviewed By: aemerson

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

18 months ago[Transforms] Convert some tests to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 11:35:52 +0000 (12:35 +0100)]
[Transforms] Convert some tests to opaque pointers (NFC)

These are all tests where conversion worked automatically, and
required no manual fixup.

18 months ago[LoopVectorizer] Fix inloop reductions mask placement
David Green [Thu, 5 Jan 2023 11:37:37 +0000 (11:37 +0000)]
[LoopVectorizer] Fix inloop reductions mask placement

The validation of vplans could fail if an inloop reduction was created
with a block-in mask that did not dominate the reduction. This makes
sure that the insert point is set when creating the mask, to ensure it
dominates the reduction.

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

18 months ago[CVP] Convert tests to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 11:34:36 +0000 (12:34 +0100)]
[CVP] Convert tests to opaque pointers (NFC)

18 months ago[SLPVectorizer] Convert test to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 11:32:44 +0000 (12:32 +0100)]
[SLPVectorizer] Convert test to opaque pointers (NFC)

18 months ago[llvm-reduce] Remove typed pointer test (NFC)
Nikita Popov [Thu, 5 Jan 2023 11:26:39 +0000 (12:26 +0100)]
[llvm-reduce] Remove typed pointer test (NFC)

There already is a test using opaque pointers instead.

18 months ago[UpdateTestChecks] Convert tests to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 11:19:16 +0000 (12:19 +0100)]
[UpdateTestChecks] Convert tests to opaque pointers (NFC)

18 months ago[Driver] move NetBSD header search path management to the driver
Brad Smith [Thu, 5 Jan 2023 11:08:42 +0000 (06:08 -0500)]
[Driver] move NetBSD header search path management to the driver

This matches OpenBSD and FreeBSD. https://reviews.llvm.org/D138183

Reviewed By: MaskRay

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

18 months ago[GlobalISel] New combine to commute constant operands to the RHS
Jay Foad [Tue, 3 Jan 2023 17:06:59 +0000 (17:06 +0000)]
[GlobalISel] New combine to commute constant operands to the RHS

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

18 months ago[LinkModulesTest] Convert to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 11:11:12 +0000 (12:11 +0100)]
[LinkModulesTest] Convert to opaque pointers (NFC)

This requires switching to the ssa.copy intrinsic, otherwise
we don't preserve test intent.

18 months agoUse --pass-pipeline syntax for mlir/test/Dialect/LLVMIR/canonicalize.mlir (NFC)
Mehdi Amini [Wed, 4 Jan 2023 21:52:39 +0000 (21:52 +0000)]
Use --pass-pipeline syntax for mlir/test/Dialect/LLVMIR/canonicalize.mlir (NFC)

This is just a cleanup to make the scheduling of the pass pipeline
explicit.

18 months ago[OperationsTest] Convert to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 10:14:31 +0000 (11:14 +0100)]
[OperationsTest] Convert to opaque pointers (NFC)

18 months ago[RandomIRBuilderTest] Convert to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 10:08:23 +0000 (11:08 +0100)]
[RandomIRBuilderTest] Convert to opaque pointers (NFC)

The FirstClassTypes test is no longer relevant with opaque pointers,
or at least not in that form.

18 months ago[CodeGenOpenCLCXX] Convert tests to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 09:59:37 +0000 (10:59 +0100)]
[CodeGenOpenCLCXX] Convert tests to opaque pointers (NFC)

18 months ago[libc][NFC] Use a function instead of templated static member functions for TYPE_DESC
Guillaume Chatelet [Wed, 4 Jan 2023 12:48:01 +0000 (12:48 +0000)]
[libc][NFC] Use a function instead of templated static member functions for TYPE_DESC

I'm surprised that clang accepts the current code.
It seems odd to me to specialize templated static member variables.

GCC rejects them: https://godbolt.org/z/3ecE9Ps7T

This patch is in the context of https://github.com/llvm/llvm-project/issues/59368

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

18 months agoApply clang-tidy fixes for performance-unnecessary-value-param in AffineCanonicalizat...
Mehdi Amini [Thu, 5 Jan 2023 00:58:52 +0000 (00:58 +0000)]
Apply clang-tidy fixes for performance-unnecessary-value-param in AffineCanonicalizationUtils.cpp (NFC)

18 months ago[CodeGenOpenCL] Convert some tests to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 09:57:30 +0000 (10:57 +0100)]
[CodeGenOpenCL] Convert some tests to opaque pointers (NFC)

18 months ago[AsmParserTest] Convert to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 09:53:37 +0000 (10:53 +0100)]
[AsmParserTest] Convert to opaque pointers (NFC)

18 months ago[IVDescriptorsTest] Convert to opaque pointers (NFC)
Nikita Popov [Thu, 5 Jan 2023 09:48:29 +0000 (10:48 +0100)]
[IVDescriptorsTest] Convert to opaque pointers (NFC)

The LoopWithScalableTypes test is removed, because it is testing
a situation that cannot occur with opaque pointers. If we convert
this test to opaque pointers, it will not contain any scalable
types at all.

18 months ago[Hexagon][VE][WebAssembly] Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP macros
Brad Smith [Thu, 5 Jan 2023 09:39:46 +0000 (04:39 -0500)]
[Hexagon][VE][WebAssembly] Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP macros

Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP macros

Reviewed By: kparzysz, aheejin, MaskRay

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

18 months ago[NFC][Coroutines] Build DominatorTree only once before collecting frame allocas ...
Dawid Jurczak [Sun, 1 Jan 2023 12:18:58 +0000 (13:18 +0100)]
[NFC][Coroutines] Build DominatorTree only once before collecting frame allocas (PR58650)

Assuming that collecting frame allocas doesn't modify CFG we can safely
move DominatorTree construction outside loop and avoid expensive computations.

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

18 months ago[GlobalISel] Add G_BUILD_VECTOR[_TRUNC] to CSE
Diana Picus [Wed, 4 Jan 2023 10:58:58 +0000 (11:58 +0100)]
[GlobalISel] Add G_BUILD_VECTOR[_TRUNC] to CSE

Add G_BUILD_VECTOR and G_BUILD_VECTOR_TRUNC to the list of opcodes in
`shouldCSEOpc`. This simplifies the code generated for vector splats.

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

18 months ago[GlobalISel] Don't switch opcodes in MIRBuilder::buildInstr
Diana Picus [Wed, 4 Jan 2023 10:59:49 +0000 (11:59 +0100)]
[GlobalISel] Don't switch opcodes in MIRBuilder::buildInstr

At the moment, `MachineIRBuilder::buildInstr` may build an instruction
with a different opcode than the one passed in as parameter. This may
cause confusion for its consumers, such as `CSEMIRBuilder`, which will
memoize the instruction based on the new opcode, but will search
through the memoized instructions based on the original one (resulting
in missed CSE opportunities). This is all the more unpleasant since
buildInstr is virtual and may call itself recursively both directly
and via buildCast, so it's not always easy to follow what's going on.

This patch simplifies the API of `MachineIRBuilder` so that the `buildInstr`
method does the least surprising thing (i.e. builds an instruction with
the specified opcode) and only the convenience `buildX` methods
(`buildMerge` etc) are allowed freedom over which opcode to use. This can
still be confusing (e.g. one might write a unit test using
`buildBuildVectorTrunc` but instead get a plain `G_BUILD_VECTOR`), but at
least it's explained in the comments.

In practice, this boils down to 3 changes:
* `buildInstr(G_MERGE_VALUES)` will no longer call itself with
`G_BUILD_VECTOR` or `G_CONCAT_VECTORS`; this functionality is moved to
`buildMerge` and replaced with an assert;
* `buildInstr(G_BUILD_VECTOR_TRUNC)` will no longer call itself with
`G_BUILD_VECTOR`; this functionality is moved to `buildBuildVectorTrunc`
and replaced with an assert;
* `buildInstr(G_MERGE_VALUES)` will no longer call `buildCast` and will
instead assert if we're trying to merge a single value; no change is
needed in `buildMerge` since it was already asserting more than one
source operand.

This change is NFC for users of the `buildX` methods, but users that
call `buildInstr` with relaxed parameters will have to update their code
(such instances will hopefully be easy to find thanks to the asserts).

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

18 months ago[GlobalISel] Precommit a test for D140965
Diana Picus [Wed, 4 Jan 2023 13:15:31 +0000 (14:15 +0100)]
[GlobalISel] Precommit a test for D140965

Add a test for CSE-ing G_BUILD_VECTOR. This will be enabled in D140965.

18 months ago[NVPTX] Fix NVPTX lowering of frem when denominator is infinite.
Benjamin Chetioui [Thu, 5 Jan 2023 08:26:13 +0000 (09:26 +0100)]
[NVPTX] Fix NVPTX lowering of frem when denominator is infinite.

`frem x, {+,-}inf` must return x to match the specification of LLVM's frem.

Reviewed By: tra

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

18 months agoIntroduce environment variables to deal with JIT IR
Johannes Doerfert [Wed, 28 Dec 2022 07:50:42 +0000 (23:50 -0800)]
Introduce environment variables to deal with JIT IR

We can now dump the IR before and after JIT optimizations into the
files passed via `LIBOMPTARGET_JIT_PRE_OPT_IR_MODULE` and
`LIBOMPTARGET_JIT_POST_OPT_IR_MODULE`, respectively.

Similarly, users can set `LIBOMPTARGET_JIT_REPLACEMENT_MODULE` to
replace the IR in the image with a custom IR module in a file.
All options take file paths, documentation was added.

Reviewed by: tianshilei1992

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

18 months ago[LoopUnrollAndJam] Visit phi operand dependencies in post-order
Joshua Cao [Fri, 16 Dec 2022 09:00:56 +0000 (04:00 -0500)]
[LoopUnrollAndJam] Visit phi operand dependencies in post-order

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

The previous implementation visits operands in pre-order, but this does
not guarantee an instruction is visited before its uses. This can cause
instructions to be copied in the incorrect order. For example:

```
a = ...
b = add a, 1
c = add a, b
d = add b, a
```

Pre-order visits does not guarantee the order in which `a` and `b` are
visited. LoopUnrollAndJam may incorrectly insert `b` before `a`.

This patch implements post-order visits. By visiting dependencies first,
we guarantee that an instruction's dependencies are visited first.

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

18 months ago1: use class instead of MVT
Chen Zheng [Thu, 5 Jan 2023 07:53:59 +0000 (07:53 +0000)]
1: use class instead of MVT
2: minor fix for the comments

18 months ago[PowerPC][GISel]fcmp support
Chen Zheng [Tue, 3 Jan 2023 09:44:03 +0000 (09:44 +0000)]
[PowerPC][GISel]fcmp support

This patch also includes:
1: CRRegBank support
2: Some workarounds in PPC table gen for anyext/setcc patterns
   selection.

Reviewed By: arsenm

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

18 months ago[InstCombine][NFC] Regenerate test cases by update_test_checks.py
luxufan [Thu, 5 Jan 2023 06:38:08 +0000 (14:38 +0800)]
[InstCombine][NFC] Regenerate test cases by update_test_checks.py

18 months ago[InstCombine][NFC] Regenerate test cases by update_test_checks.py
luxufan [Thu, 5 Jan 2023 06:20:41 +0000 (14:20 +0800)]
[InstCombine][NFC] Regenerate test cases by update_test_checks.py

18 months ago[lldb] Remove unneeded .get() NFC
Fangrui Song [Thu, 5 Jan 2023 06:05:40 +0000 (22:05 -0800)]
[lldb] Remove unneeded .get() NFC

18 months ago[ObjC][ARC] Fix non-deterministic behavior in ProvenanceAnalysis
Akira Hatanaka [Thu, 5 Jan 2023 02:29:39 +0000 (18:29 -0800)]
[ObjC][ARC] Fix non-deterministic behavior in ProvenanceAnalysis

If the second value passed to relatedSelect is a select, check whether
neither arm of the select is related to the first value.

18 months ago[Instcombine] fold logic ops to select
chenglin.bi [Thu, 5 Jan 2023 03:03:42 +0000 (11:03 +0800)]
[Instcombine] fold logic ops to select

(C & X) | ~(C | Y) -> C ? X : ~Y

https://alive2.llvm.org/ce/z/4yLh_i

Reviewed By: spatel

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

18 months ago[LoopUnrollAndJam] Forget scalar evolution dispositions. Do no explicitly forget...
Joshua Cao [Wed, 4 Jan 2023 06:37:36 +0000 (22:37 -0800)]
[LoopUnrollAndJam] Forget scalar evolution dispositions. Do no explicitly forget subloop.

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

Scalar evolution dispositions need to be forgotten to pass verification.

We do not need to forget the subloop since it is automatically forgotten
when forgetting the parent loop.

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

18 months ago[RISCV][NFC] Update RISCVUsage.rst for Svnapot extension
Piyou Chen [Thu, 5 Jan 2023 02:44:18 +0000 (18:44 -0800)]
[RISCV][NFC] Update RISCVUsage.rst for Svnapot extension

Note: Support Svnapot extension in https://reviews.llvm.org/D136570

Reviewed By: kito-cheng

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

18 months ago[TargetLowering] Remove stale FIXME. NFC
Craig Topper [Thu, 5 Jan 2023 02:40:30 +0000 (18:40 -0800)]
[TargetLowering] Remove stale FIXME. NFC

This was implemented for scalars in D140750.

18 months ago[mlir][sparse] Add AOS optimization.
bixia1 [Wed, 4 Jan 2023 21:08:06 +0000 (13:08 -0800)]
[mlir][sparse] Add AOS optimization.

Use an array of structures to represent the indices for the tailing COO region
of a sparse tensor.

Reviewed By: aartbik

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

18 months agoRevert "[gn] port f29cfab55d1f"
Nico Weber [Thu, 5 Jan 2023 02:01:30 +0000 (21:01 -0500)]
Revert "[gn] port f29cfab55d1f"

This reverts commit 199563534a2fc38f72fa93c4fdd03221afe06996.
f29cfab55d1fd80 was reverted in c6c54132b76.

18 months agoamdgpu-arch: Prefer hsa/hsa.h over hsa.h
Matt Arsenault [Wed, 4 Jan 2023 21:35:59 +0000 (16:35 -0500)]
amdgpu-arch: Prefer hsa/hsa.h over hsa.h

The header now prints a warning if you include hsa.h telling you to
include hsa/hsa.h

18 months agoAMDGPU: Set scratch_en if there is dynamic stack but no fixed stack
Matt Arsenault [Wed, 4 Jan 2023 20:17:54 +0000 (15:17 -0500)]
AMDGPU: Set scratch_en if there is dynamic stack but no fixed stack

18 months agoRevert "[InlineAdvisor] Restructure advisor plugin unittest cmake"
Jake Egan [Thu, 5 Jan 2023 01:39:19 +0000 (20:39 -0500)]
Revert "[InlineAdvisor] Restructure advisor plugin unittest cmake"

This reverts commit f29cfab55d1fd806f827b832832b196c10558680.

18 months ago[NFC][Clang][ASTTests] Use ASSERT instead of EXPECT for nullptr checks
Michael Spencer [Thu, 5 Jan 2023 01:32:12 +0000 (17:32 -0800)]
[NFC][Clang][ASTTests] Use ASSERT instead of EXPECT for nullptr checks

This avoids basically guaranteed crashes when the check fails.

18 months agoRevert "[-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips...
Ziqing Luo [Thu, 5 Jan 2023 01:16:21 +0000 (17:16 -0800)]
Revert "[-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips callable declarations"

This reverts commit b2ac5fd724c44cf662caed84bd8f84af574b981d.

18 months ago[-Wunsafe-buffer-usage] Add an unsafe gadget for pointer-arithmetic operations
Ziqing Luo [Thu, 5 Jan 2023 00:48:55 +0000 (16:48 -0800)]
[-Wunsafe-buffer-usage] Add an unsafe gadget for pointer-arithmetic operations

For -Wunsafe-buffer-usage diagnostics, we want to warn about pointer
arithmetics since resulting pointers can be used to access buffers.
Therefore, I add an `UnsafeGadget` representing general pointer
arithmetic operations.

Reviewed by: NoQ
Differential revision: https://reviews.llvm.org/D139233

18 months agoFix typeo in LoadBinariesViaExhaustiveSearch when looking for kernel
Jason Molenda [Thu, 5 Jan 2023 00:08:58 +0000 (16:08 -0800)]
Fix typeo in LoadBinariesViaExhaustiveSearch when looking for kernel

As a last resort, with a Mach-O corefile, lldb will iterate through
all memory segments looking for a dyld binary (for a userland process
core dump) or an xnu kernel binary (kernel coredump).  We often
have metadata via LC_NOTEs so this final search mechanism is not
needed.  During the rewrite in https://reviews.llvm.org/D133680 I
did not handle the case of finding the xnu kernel by exhaustive
search correctly.

rdar://103813200

18 months ago[-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips callable...
Ziqing Luo [Wed, 4 Jan 2023 23:51:56 +0000 (15:51 -0800)]
[-Wunsafe-buffer-usage] Add a new `forEachDescendant` matcher that skips callable declarations

Note this is a change local to -Wunsafe-buffer-usage checks.

Add a new matcher `forEveryDescendant` that recursively matches
descendants of a `Stmt` but skips nested callable definitions.  This
matcher has same effect as using `forEachDescendant` and skipping
`forCallable` explicitly but does not require the AST construction to be
complete.

Reviewed by: NoQ, xazax.hun

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

18 months agoFix a phase-ordering problem in SimplifyCFG.
Owen Anderson [Mon, 2 Jan 2023 01:17:19 +0000 (18:17 -0700)]
Fix a phase-ordering problem in SimplifyCFG.

Switch simplification could sometimes fail to notice when an
intermediate case removal caused the switch condition to become
constant. This would cause the switch to be simplified into a
conditional branch rather than a direct branch.

Most of the time this didn't matter, except that occasionally
downstream parts of SimplifyCFG expect tautological branches to
already have been eliminated. The missed handling in switch
simplification would cause an assertion failure in the downstream
code.

Triggering the assertion failure is fairly sensitive to the exact
order of various simplifications.

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

Reviewed By: nikic

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

18 months ago[libcxx][test] fix allocator in allocator_propagation test
Casey Carter [Wed, 3 Aug 2022 16:44:18 +0000 (09:44 -0700)]
[libcxx][test] fix allocator in allocator_propagation test

The converting constructor is ill-formed, and `==` is missing. (I didn't implement `!=` since the test is C++20-and-later only; I'll let the compiler do it for us.)

Drive-by: change 4-space indent on line 27 to 2-space indent to be consistent with the rest of the test.
Differential Revision: https://reviews.llvm.org/D131079

18 months ago[Support][SelectionDAG][GlobalISel] Hoist PostShift adjustment for IsAdd into Unsigne...
Craig Topper [Wed, 4 Jan 2023 22:17:56 +0000 (14:17 -0800)]
[Support][SelectionDAG][GlobalISel] Hoist PostShift adjustment for IsAdd into UnsignedDivideUsingMagic.

Instead of doing the adjustment in 3 different places in the code
base, do it inside UnsignedDivideUsingMagic::get.

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

18 months ago[mlir][tosa] Remove clamping behavior in `tosa.cast` for integer truncation
mariecwhite [Wed, 4 Jan 2023 22:56:45 +0000 (14:56 -0800)]
[mlir][tosa] Remove clamping behavior in `tosa.cast` for integer truncation

Reviewed By: rsuderman

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

18 months ago[clang] Revert parentesized aggregate initalization patches
Alan Zhao [Wed, 4 Jan 2023 22:54:55 +0000 (14:54 -0800)]
[clang] Revert parentesized aggregate initalization patches

This feature causes clang to crash when compiling Chrome - see
https://crbug.com/1405031 and
https://github.com/llvm/llvm-project/issues/59675

Revert "[clang] Fix a clang crash on invalid code in C++20 mode."

This reverts commit 32d7aae04fdb58e65a952f281ff2f2c3f396d98f.

Revert "[clang] Remove overly restrictive aggregate paren init logic"

This reverts commit c77a91bb7ba793ec3a6a5da3743ed55056291658.

Revert "[clang][C++20] P0960R3 and P1975R0: Allow initializing aggregates from a parenthesized list of values"

This reverts commit 40c52159d3ee337dbed14e4c73b5616ea354c337.

18 months ago[dsymutil] Avoid invalid keep chains due to pruning
Jonas Devlieghere [Wed, 4 Jan 2023 23:01:19 +0000 (15:01 -0800)]
[dsymutil] Avoid invalid keep chains due to pruning

The pruning property that's part of the DIE info is fully computing
during the analyzeContextInfo phase, but can be updated during the
lookForDIEsToKeep phase.

  // Keep a module forward declaration if there is no definition.
  if (!(isODRAttribute(AttrSpec.Attr) && Info.Ctxt &&
        Info.Ctxt->hasCanonicalDIE()))
    Info.Prune = false;

When the pruning property is updated during the lookForDIEsToKeep phase,
it's not propagated to the parent, unlike during the analyzeContextInfo
phase. This can result in an invalid keep chain with the child DIE being
marked as kept while its parent is still marked as pruned and therefore
never kept, a situation that's now caught by 1b79bed8f532.

This patch fixes this issue by updating the pruning properties of the
parent DIE during the parent walk.

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

18 months ago[DWARFLinker] Clean up analyzeContextInfo signature (NFC)
Jonas Devlieghere [Tue, 3 Jan 2023 19:22:29 +0000 (11:22 -0800)]
[DWARFLinker] Clean up analyzeContextInfo signature (NFC)

 - Remove always-false flag.
 - Remove unused return value.

18 months ago[NFCI][DAGCombiner] `foldExtendVectorInregToExtendOfSubvector()`: just build new VT
Roman Lebedev [Wed, 4 Jan 2023 22:29:12 +0000 (01:29 +0300)]
[NFCI][DAGCombiner] `foldExtendVectorInregToExtendOfSubvector()`: just build new VT

Changing element type seems to not play well with non-simple types,
even though we are operating on EVT's here.

18 months ago[DAGCombiner] Do try to combine `ISD::ANY_EXTEND_VECTOR_INREG` nodes
Roman Lebedev [Wed, 4 Jan 2023 21:22:50 +0000 (00:22 +0300)]
[DAGCombiner] Do try to combine `ISD::ANY_EXTEND_VECTOR_INREG` nodes

These weren't previously getting combined at all here,
only in target-specific combines.

18 months ago[DAGCombiner] Fold *_EXTEND_INREG of one of CONCAT_VECTORS operands into *_EXTEND...
Roman Lebedev [Wed, 4 Jan 2023 21:07:38 +0000 (00:07 +0300)]
[DAGCombiner] Fold *_EXTEND_INREG of one of CONCAT_VECTORS operands into *_EXTEND of operand

This appears to be the root problematic pattern
for AArch64 regression in D140677.

We already do this, and many more, as target-specific X86 combines,
so this isn't causing much of an impact.

18 months ago[NFC][AArch64] Add some tests for upcoming patch
Roman Lebedev [Wed, 4 Jan 2023 21:51:28 +0000 (00:51 +0300)]
[NFC][AArch64] Add some tests for upcoming patch

18 months ago[NFC][DAG] Move `getOpcode_EXTEND*()` helpers from X86 into SelectionDAG
Roman Lebedev [Wed, 4 Jan 2023 21:06:41 +0000 (00:06 +0300)]
[NFC][DAG] Move `getOpcode_EXTEND*()` helpers from X86 into SelectionDAG

To be used in an upcoming patch.

18 months ago[NFC][X86] Make vec_anyext.ll test non-useless
Roman Lebedev [Wed, 4 Jan 2023 20:06:20 +0000 (23:06 +0300)]
[NFC][X86] Make vec_anyext.ll test non-useless

18 months ago[MLIR][TOSA] Switch Tosa_IntArrayAttr[N], Tosa_IntArrayAttrUpto[N] to DenseI64ArrayAttr
Alexander Shaposhnikov [Wed, 4 Jan 2023 21:50:46 +0000 (21:50 +0000)]
[MLIR][TOSA] Switch Tosa_IntArrayAttr[N], Tosa_IntArrayAttrUpto[N] to DenseI64ArrayAttr

Switch Tosa_IntArrayAttr[N], Tosa_IntArrayAttrUpto[N] to DenseI64ArrayAttr.

Test plan: ninja check-mlir check-all

Differential revision: https://reviews.llvm.org/D140748 https://reviews.llvm.org/D140829, https://reviews.llvm.org/D140832, https://reviews.llvm.org/D140833, https://reviews.llvm.org/D140834

18 months agoDon't read off end of GPR register array to access fp/sp/lr/pc
Jason Molenda [Wed, 4 Jan 2023 21:48:10 +0000 (13:48 -0800)]
Don't read off end of GPR register array to access fp/sp/lr/pc

The arm64 register context on Darwin has the 29 general purpose
registers, then pc/sp/lr/fp with different field names depending
on compile-time flags.  Instead of accessing beyond the end of
the uint64_t[29] array, and upsetting the sanitizers, access those
registers correctly with the correct name.

Fixes a test failure on the ASAN CI bot, currently being
skipped, in TestEarlyProcessLaunch.py.

Differential Revision: https://reviews.llvm.org/D140067
rdar://103359354

18 months ago[DWARF] Store CFA value on DW_CFA_remember_state
Alexis Engelke [Wed, 4 Jan 2023 21:51:14 +0000 (13:51 -0800)]
[DWARF] Store CFA value on DW_CFA_remember_state

Previously, CFA_remember_state stored only the register locations but ignored the CFA value. This needs also to be remembered and restored for correct behavior. The problem occurs, e.g., on functions with multiple epilogues, where the CFA value after the first epilogue is becomes wrong.

Reviewed By: #debug-info, MaskRay

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

18 months agoRevert "[VPlan] Also consider operands of sink candidates in same block."
Augie Fackler [Wed, 4 Jan 2023 21:17:13 +0000 (16:17 -0500)]
Revert "[VPlan] Also consider operands of sink candidates in same block."

This reverts commit aa2414729ebbcb2d8f162e9002a3a6aa768b1f9d.

Previously-valid IR from a tensorflow test case (as shown on the
Diffusion revision for aa2414729ebbcb2d8f162e9002a3a6aa768b1f9d) started
hanging in the loop-vectorize pass. Reverting to keep everyone working.

18 months ago[SLP]Fix incorrect shuffle results because of missing shuffle mask
Alexey Bataev [Wed, 4 Jan 2023 16:32:25 +0000 (08:32 -0800)]
[SLP]Fix incorrect shuffle results because of missing shuffle mask
analysis.

Missed the analysis of the shuffle mask when trying to analyze the
operands of the shuffle instruction during peeking through shuffle
instructions.

18 months ago[MLIR][Tensor] Canonicalize expand/collapse_shape of splat to splat
liqinweng [Wed, 4 Jan 2023 21:05:57 +0000 (13:05 -0800)]
[MLIR][Tensor] Canonicalize expand/collapse_shape of splat to splat

Collapsing / expanding a splatted value can be replaced with a single `tensor.splat` operation. Replace
these cases with a simple `tensor.splat` operation.

Reviewed By: rsuderman

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

18 months ago[mlir][sparse] Move some member functions from SparseTensorDescriptorImpl to MutSpars...
bixia1 [Wed, 4 Jan 2023 19:35:45 +0000 (11:35 -0800)]
[mlir][sparse] Move some member functions from SparseTensorDescriptorImpl to MutSparseTensorDescriptor.

This is to prepare for implementing AOS optimization.

Reviewed By: aartbik

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

18 months agoApply clang-tidy fixes for llvm-else-after-return in GPUToSPIRV.cpp (NFC)
Mehdi Amini [Tue, 3 Jan 2023 11:12:42 +0000 (11:12 +0000)]
Apply clang-tidy fixes for llvm-else-after-return in GPUToSPIRV.cpp (NFC)

18 months ago[mlir][tosa] Fix floating point offset for tosa.resize
Robert Walker [Wed, 4 Jan 2023 19:26:12 +0000 (11:26 -0800)]
[mlir][tosa] Fix floating point offset for tosa.resize

Offset is a signed value, so use `arith.sitofp`

See also https://github.com/llvm/llvm-project/issues/59585

Reviewed By: NatashaKnk, jpienaar

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

18 months agoRevert "[Sema] Don't mark deleted special member functions as non-trivial"
Roy Jacobson [Wed, 4 Jan 2023 20:39:04 +0000 (22:39 +0200)]
Revert "[Sema] Don't mark deleted special member functions as non-trivial"

This reverts commit d5dd37ac139a74701e16f084eb2609ff58893770.

Apparently there's some ABI difference in the Sony builder that fails a test.
Will hopefully investigate tomorrow. https://lab.llvm.org/buildbot/#/builders/139/builds/33769

18 months ago[LowerTypeTests] Add ENDBR to .cfi.jumptable for x86 Indirect Branch Tracking
Fangrui Song [Wed, 4 Jan 2023 20:28:07 +0000 (12:28 -0800)]
[LowerTypeTests] Add ENDBR to .cfi.jumptable for x86 Indirect Branch Tracking

Similar to D81251 for AArch64 BTI. This fixes `./a.out test` for

```
void foo(void) {}
void bar(void) {}
static void (*fptr)(void);
int main(int argc, char **argv) {
  if (argv[1]) fptr = foo;
  else fptr = bar;
  fptr();
}
```

`clang -flto=thin -fvisibility=hidden -fsanitize=cfi-icall -fcf-protection=branch -fuse-ld=lld a.cc`

Reviewed By: tejohnson

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

18 months ago[X86] Regen a couple tests so they are autogen clean [nfc]
Philip Reames [Wed, 4 Jan 2023 20:08:59 +0000 (12:08 -0800)]
[X86] Regen a couple tests so they are autogen clean [nfc]

These appear to have had 32 bit check lines manually deleted - presumably since the checks are verbose.  Please don't do this!  Split the test file if you want, but manually deleting test lines makes the diffs for later autogen changes really confusing.

18 months ago[mlir][sparse] add test that combines sparse codegen and lowering to llvm struct
Aart Bik [Wed, 4 Jan 2023 19:33:51 +0000 (11:33 -0800)]
[mlir][sparse] add test that combines sparse codegen and lowering to llvm struct

Reviewed By: bixia

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

18 months ago[sanitizer] Move {,__}pthread_mutex_{lock,unlock} interceptors to tsan
Fangrui Song [Wed, 4 Jan 2023 20:04:19 +0000 (12:04 -0800)]
[sanitizer] Move {,__}pthread_mutex_{lock,unlock} interceptors to tsan

These interceptors are pure forwarders for other sanitizers. Move them beside
tsan-specific pthread_mutex_{trylock,timedlock} interceptors.

While here, guard `__pthread_mutex_{lock,unlock}` (D46793) under `#if !__GLIBC_PREREQ(2, 34)`.

In glibc>=2.34 [1], `__pthread_mutex_{lock,unlock}` only have non-default-version definitions
(unversioned `__pthread_mutex_lock` causes a linker error. Program preloading is not expected).
In glibc>=2.36 [2], `dlsym(RTLD_NEXT, "__pthread_mutex_lock")` returns nullptr, so the interceptor won't work.

Fix https://github.com/llvm/llvm-project/issues/59820

[1]: https://sourceware.org/git/?p=glibc.git;a=commit;h=99f841c441feeaa9a3d97fd91bb3d6ec8073c982
[2]: https://sourceware.org/git/?p=glibc.git;a=commit;h=efa7936e4c91b1c260d03614bb26858fbb8a0204

Reviewed By: melver, vitalybuka

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

18 months ago[llvm][CUDA] Allow NVVMREflect to process OpenCL-specific __nvvm_reflect_ocl()
Hugh Delaney [Wed, 4 Jan 2023 19:52:08 +0000 (11:52 -0800)]
[llvm][CUDA] Allow NVVMREflect to process OpenCL-specific __nvvm_reflect_ocl()

OpenCL requires constant string arguments to be in a particular address space,
so OpenCL sources can't use the regular `__nvvm_reflect()`.

Allow NVVMReflect pass to accept an Open_CL specific variant with a constant
string in a non-default address space.

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

18 months ago[X86] Autogen tests for ease of update in upcoming change [nfc]
Philip Reames [Wed, 4 Jan 2023 19:59:05 +0000 (11:59 -0800)]
[X86] Autogen tests for ease of update in upcoming change [nfc]

18 months agollvm-objdump: Fix --build-id documentation string
Roland McGrath [Wed, 4 Jan 2023 19:39:51 +0000 (11:39 -0800)]
llvm-objdump: Fix --build-id documentation string

The argument is hex digits, so <dir> doesn't make a lot of sense.

Reviewed By: phosek

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

18 months agoRevert "[clang] Add the check of membership in decltype for the issue #58674#"
Erich Keane [Wed, 4 Jan 2023 19:43:40 +0000 (11:43 -0800)]
Revert "[clang] Add the check of membership in decltype for the issue #58674#"

This reverts commit 85960043d594fc12d340ccb66a30861b023ab496.

The powerpc64le self-built buildbot had an assertion during self-build,
that seems like it is possibly related here, reverting so the author can
take a look.

18 months ago[DAG] `tryToFoldExtendOfConstant()`: `sext undef` is not `undef`
Roman Lebedev [Wed, 4 Jan 2023 19:31:33 +0000 (22:31 +0300)]
[DAG] `tryToFoldExtendOfConstant()`: `sext undef` is not `undef`

https://alive2.llvm.org/ce/z/cLGpWV, but https://alive2.llvm.org/ce/z/TGNH4P

18 months ago[X86] Autogen tests for ease of update in upcoming change [nfc]
Philip Reames [Wed, 4 Jan 2023 19:30:42 +0000 (11:30 -0800)]
[X86] Autogen tests for ease of update in upcoming change [nfc]

18 months ago[Sema] Don't mark deleted special member functions as non-trivial
Roy Jacobson [Sun, 25 Dec 2022 21:48:13 +0000 (23:48 +0200)]
[Sema] Don't mark deleted special member functions as non-trivial

As noted in https://github.com/llvm/llvm-project/issues/59624, we sometimes mark implicitly
deleted special member functions as non-trivial. This is unnecessary work and leads to some
weird type traits errors.

This fixes the problem by making the implicitly deleted special member functions always
trivial.

Reviewed By: #clang-language-wg, erichkeane

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

18 months ago[mlir][spirv] Relax instruction order checks in test
Jakub Kuderski [Wed, 4 Jan 2023 19:06:47 +0000 (14:06 -0500)]
[mlir][spirv] Relax instruction order checks in test

Fix a windows buildbot failure: https://lab.llvm.org/buildbot#builders/13/builds/30439.

18 months ago[PowerPC] Materialize floats in the range [-16.0, 15.0].
Stefan Pintilie [Wed, 21 Dec 2022 14:47:55 +0000 (08:47 -0600)]
[PowerPC] Materialize floats in the range [-16.0, 15.0].

Previous to this patch we only materialized 0.0 and all other floating point
values would be loaded from the TOC. This patch adds materialization for the
floating point values that can be represented as integers in [-16.0, 15.0].

For example we will now materialize 3.0 and -5.0 but not 4.7.

Reviewed By: nemanjai, lei, #powerpc

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

18 months ago[MachineCombine] Reorganize code for readability and tracing [nfc]
Philip Reames [Wed, 4 Jan 2023 18:45:56 +0000 (10:45 -0800)]
[MachineCombine] Reorganize code for readability and tracing [nfc]

18 months ago[SLP][NFC]Add a pass.
Alexey Bataev [Wed, 4 Jan 2023 18:26:53 +0000 (10:26 -0800)]
[SLP][NFC]Add a pass.