platform/upstream/llvm.git
22 months ago[SelectionDAG] Fix EmitCopyFromReg for cloned nodes
Jay Foad [Tue, 20 Dec 2022 17:19:01 +0000 (17:19 +0000)]
[SelectionDAG] Fix EmitCopyFromReg for cloned nodes

Change EmitCopyFromReg to check all users of cloned nodes (as well as
non-cloned nodes) instead of assuming that they all copy the defined
value back to the same physical register.

This partially reverts 968e2e7b3db1 (svn r62356) which claimed:

  CreateVirtualRegisters does trivial copy coalescing. If a node def is
  used by a single CopyToReg, it reuses the virtual register assigned to
  the CopyToReg. This won't work for SDNode that is a clone or is itself
  cloned. Disable this optimization for those nodes or it can end up
  with non-SSA machine instructions.

This is true for CreateVirtualRegisters but r62356 also updated
EmitCopyFromReg where it is not true. Firstly EmitCopyFromReg only
coalesces physical register copies, so the concern about SSA form does
not apply. Secondly making the loop over users in EmitCopyFromReg
conditional on `!IsClone && !IsCloned` breaks the handling of cloned
nodes, because it leaves MatchReg set to true by default, so it assumes
that all users will copy the defined value back to the same physical
register instead of actually checking.

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

22 months ago[SelectionDAG] Precommit EmitCopyFromReg test for D140417
Jay Foad [Tue, 20 Dec 2022 17:51:20 +0000 (17:51 +0000)]
[SelectionDAG] Precommit EmitCopyFromReg test for D140417

22 months ago[cmake] Copy llvm-driver-template.cpp.in into build dir as well
Nikita Popov [Wed, 21 Dec 2022 10:40:33 +0000 (11:40 +0100)]
[cmake] Copy llvm-driver-template.cpp.in into build dir as well

We were copying it into the installed version of the directory,
but not into the one in the build directory. Because of that it
was not directly usable as a cmake module by subprojects that
also use the driver functionality.

22 months ago[Attributor] potential constant values for PHI and Load
Sameer Sahasrabuddhe [Wed, 21 Dec 2022 09:55:55 +0000 (15:25 +0530)]
[Attributor] potential constant values for PHI and Load

AAPotentialConstantValues now works for PHI and Load by simply examinig
AAPotentialValues for the instruction itself.

Reviewed By: jdoerfert

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

22 months ago[mlir] Add RuntimeVerifiableOpInterface and transform
Matthias Springer [Wed, 21 Dec 2022 09:51:10 +0000 (10:51 +0100)]
[mlir] Add RuntimeVerifiableOpInterface and transform

Static op verification cannot detect cases where an op is valid at compile time but may be invalid at runtime.

An example of such an op is `memref::ExpandShapeOp`.

Invalid at compile time: `memref.expand_shape %m [[0, 1]] : memref<11xf32> into memref<2x5xf32>`

Valid at compile time (because we do not know any better): `memref.expand_shape %m [[0, 1]] : memref<?xf32> into memref<?x5xf32>`. This op may or may not be valid at runtime depending on the runtime shape of `%m`.

Invalid runtime ops such as the one above are hard to debug because they can crash the program execution at a seemingly unrelated position or (even worse) compute an invalid result without crashing.

This revision adds a new op interface `RuntimeVerifiableOpInterface` that can be implemented by ops that provide additional runtime verification. Such runtime verification can be computationally expensive, so it is only generated on an opt-in basis by running `-generate-runtime-verification`. A simple runtime verifier for `memref::ExpandShapeOp` is provided as an example.

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

22 months ago[AMDGPU][GFX11][DOC][NFC] Add GFX11 assembler syntax description
Dmitry Preobrazhensky [Wed, 21 Dec 2022 09:49:48 +0000 (12:49 +0300)]
[AMDGPU][GFX11][DOC][NFC] Add GFX11 assembler syntax description

22 months ago[AMDGPU][MC][NFC] MUBUF/MTBUF code cleanup
Piotr Sobczak [Tue, 20 Dec 2022 16:42:13 +0000 (17:42 +0100)]
[AMDGPU][MC][NFC] MUBUF/MTBUF code cleanup

Refactor code to reduce code duplication and improve maintainability.

- Extract BUF_Pseudo common base class
- Refactor getMUBUFInsDA
- Refactor getMUBUFAtomicInsDA
- Refactor getMTBUFInsDA
- Refactor getMUBUFAsmOps
- Refactor getMTBUFAsmOps

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

22 months ago[Clang][CGDebugInfo][ObjC] Mark objc bitfields with the DIFlagBitfield flag
Juan Manuel MARTINEZ CAAMAÑO [Wed, 21 Dec 2022 08:38:47 +0000 (03:38 -0500)]
[Clang][CGDebugInfo][ObjC] Mark objc bitfields with the DIFlagBitfield flag

Reviewed By: aprantl

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

22 months ago[clang][AST] Compare UnresolvedLookupExpr in structural equivalence.
Balázs Kéri [Wed, 21 Dec 2022 08:31:29 +0000 (09:31 +0100)]
[clang][AST] Compare UnresolvedLookupExpr in structural equivalence.

Reviewed By: gamesh411

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

22 months ago[RISCV] Enable the LocalStackSlotAllocation pass support.
LiDongjin [Tue, 22 Nov 2022 09:23:58 +0000 (17:23 +0800)]
[RISCV] Enable the LocalStackSlotAllocation pass support.

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

Co-authored-by: luxufan <luxufan@iscas.ac.cn>
22 months ago[clang-tidy] Fix crash in bugprone-suspicious-realloc-usage.
Balázs Kéri [Wed, 21 Dec 2022 08:05:43 +0000 (09:05 +0100)]
[clang-tidy] Fix crash in bugprone-suspicious-realloc-usage.

The problem occurs if a statement is found by the checker that has a null child.
Fixes issue #59518.

Reviewed By: hokein

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

22 months ago[DAGCombine] Fix mistake in a comment. NFC
Craig Topper [Wed, 21 Dec 2022 08:26:27 +0000 (00:26 -0800)]
[DAGCombine] Fix mistake in a comment. NFC

22 months ago[RISCV] Simplify some code in SELECT_CC combine. NFC
Craig Topper [Wed, 21 Dec 2022 05:31:19 +0000 (21:31 -0800)]
[RISCV] Simplify some code in SELECT_CC combine. NFC

An integer SELECT_CC should have all XLenVT operands, we don't
need to handle other cases.

22 months ago[Test] Precommit test for PR59615
Max Kazantsev [Wed, 21 Dec 2022 04:38:17 +0000 (11:38 +0700)]
[Test] Precommit test for PR59615

22 months agoRevert "[NFC][SROA] `speculateSelectInstLoads()`: play nice with typed pointers for...
Max Kazantsev [Wed, 21 Dec 2022 04:17:49 +0000 (11:17 +0700)]
Revert "[NFC][SROA] `speculateSelectInstLoads()`: play nice with typed pointers for now"

This reverts commit 9f27f4536e19e93349b0662338408efe6d1cb2fd.

Supposed to be NFC, but broke buildbots (test addrspacecast.ll is failing).

22 months ago[CSKY] Fix compiling error due to the interface change
Zi Xuan Wu (Zeson) [Wed, 21 Dec 2022 03:51:06 +0000 (11:51 +0800)]
[CSKY] Fix compiling error due to the interface change

22 months ago[Clang] Emit "min-legal-vector-width" attribute for X86 only
Phoebe Wang [Wed, 21 Dec 2022 03:39:11 +0000 (11:39 +0800)]
[Clang] Emit "min-legal-vector-width" attribute for X86 only

This is an alternative way of D139627 suggested by Craig. Creently only X86 backend uses this attribute. Let's just emit for X86 only.

Reviewed By: craig.topper

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

22 months ago[X86] Replace getOperand calls with an existing variable. NFC
Craig Topper [Wed, 21 Dec 2022 03:26:51 +0000 (19:26 -0800)]
[X86] Replace getOperand calls with an existing variable. NFC

22 months agoReplace void* with std::byte* in AsyncRuntime
yijiagu [Wed, 21 Dec 2022 03:00:26 +0000 (19:00 -0800)]
Replace void* with std::byte* in AsyncRuntime

Replace void* with std::byte* in AsyncRuntime to make it clear that these pointers point to a memory region.

Reviewed By: ezhulenev

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

22 months ago[clangd] Avoid triggering linkage computation for decl with unstable linkage in Symbo...
Nathan Ridge [Tue, 20 Dec 2022 09:31:33 +0000 (04:31 -0500)]
[clangd] Avoid triggering linkage computation for decl with unstable linkage in SymbolRelevanceSignals::computeASTSignals()

Fixes https://github.com/clangd/clangd/issues/1427

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

22 months ago[RISCV][NFC] Add policy operand for RISCVISD::VSLIDEUP_VL and RISCVISD::VSLIDEDOWN_VL.
Yeting Kuo [Tue, 20 Dec 2022 12:28:53 +0000 (20:28 +0800)]
[RISCV][NFC] Add policy operand for RISCVISD::VSLIDEUP_VL and RISCVISD::VSLIDEDOWN_VL.

There is room for optimization to use tail agnostic vslideup/vslidedown to lower
some vector operations. D125546 is an revision for the kind of optimization.

Reviewed By: craig.topper

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

22 months ago[RISCV] Add XVentanaCondOps to RISCVSExtWRemoval.
Craig Topper [Wed, 21 Dec 2022 02:46:07 +0000 (18:46 -0800)]
[RISCV] Add XVentanaCondOps to RISCVSExtWRemoval.

22 months agoReference: not-shift.ll before new peepholes.
Noah Goldstein [Tue, 20 Dec 2022 09:14:40 +0000 (17:14 +0800)]
Reference: not-shift.ll before new peepholes.

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

22 months agoRevert "llvm-reduce: Try to fix test on windows"
Matt Arsenault [Wed, 21 Dec 2022 02:28:58 +0000 (21:28 -0500)]
Revert "llvm-reduce: Try to fix test on windows"

This reverts commit 3b0b0965c4eb603af5d97733775df315ba2241a1.

I hadn't noticed 638b25711540ff7897750ab07592b3d168e65aca

22 months ago[NFC][SROA] `speculateSelectInstLoads()`: play nice with typed pointers for now
Roman Lebedev [Wed, 21 Dec 2022 02:15:28 +0000 (05:15 +0300)]
[NFC][SROA] `speculateSelectInstLoads()`: play nice with typed pointers for now

As requested in https://reviews.llvm.org/D138238#inline-1356685

22 months ago[X86] avx512fp16: add missing instruction selection patterns for "i16" `VMOVSH`
Roman Lebedev [Wed, 21 Dec 2022 01:51:52 +0000 (04:51 +0300)]
[X86] avx512fp16: add missing instruction selection patterns for "i16" `VMOVSH`

For all other patterns, we consistently have both I and F variants,
let's not diverge.

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

22 months ago[llvm-extract] Don't forget to link to Analysis component
Roman Lebedev [Wed, 21 Dec 2022 02:03:31 +0000 (05:03 +0300)]
[llvm-extract] Don't forget to link to Analysis component

```
[ 50% 1/2][ 50% 00:01 + 00:01] Linking CXX executable bin/llvm-extract
FAILED: bin/llvm-extract
: && /usr/bin/clang++-15 -O3 -g -ggdb -march=native -UNDEBUG -gsplit-dwarf -gz -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -g -ggdb -march=native -UNDEBUG -gsplit-dwarf -gz -Wl,--gdb-index -Wl,--color-diagnostics     -Wl,--gc-sections tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o -o bin/llvm-extract  -Wl,-rpath,"\$ORIGIN/../lib"  lib/libLLVMPasses.so.16git  lib/libLLVMIRPrinter.so.16git  lib/libLLVMipo.so.16git  lib/libLLVMBitWriter.so.16git  lib/libLLVMIRReader.so.16git  lib/libLLVMCore.so.16git  lib/libLLVMSupport.so.16git  -Wl,-rpath-link,/builddirs/llvm-project/build-Clang15/lib && :
ld: error: undefined symbol: llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>::AnalysisManager()
>>> referenced by llvm-extract.cpp:326 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:326)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)
>>> referenced by llvm-extract.cpp:373 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:373)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)
>>> referenced by llvm-extract.cpp:394 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:394)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)

ld: error: undefined symbol: llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>::AnalysisManager()
>>> referenced by llvm-extract.cpp:328 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:328)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)
>>> referenced by llvm-extract.cpp:375 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:375)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)
>>> referenced by llvm-extract.cpp:396 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:396)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
```

22 months agollvm-reduce: Try to fix test on windows
Matt Arsenault [Wed, 21 Dec 2022 01:34:27 +0000 (20:34 -0500)]
llvm-reduce: Try to fix test on windows

It seems to not like the environment variable set syntax.

22 months agoFix test added in 95abdeb to set environment variables in a way that works on both...
Douglas Yung [Wed, 21 Dec 2022 01:31:01 +0000 (17:31 -0800)]
Fix test added in 95abdeb to set environment variables in a way that works on both Windows and linux.

This should fix the test failure on Windows bots such as https://lab.llvm.org/buildbot/#/builders/216/builds/14829.

22 months ago[mlir][sparse] add initialize() API to LoopEmitter to support post-constructor initia...
Peiming Liu [Wed, 21 Dec 2022 01:11:14 +0000 (01:11 +0000)]
[mlir][sparse] add initialize() API to LoopEmitter to support post-constructor initialization

Reviewed By: aartbik

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

22 months agoRevert "[AArch64] FMV support and necessary target features dependencies."
Mitch Phillips [Wed, 21 Dec 2022 01:16:32 +0000 (17:16 -0800)]
Revert "[AArch64] FMV support and necessary target features dependencies."

This reverts commit e43924a75145d2f9e722f74b673145c3e62bfd07.

Reason: Patch broke the MSan buildbots. More information is available on
the original phabricator review: https://reviews.llvm.org/D127812

22 months agoRevert "[AArch64][NFC] Fix aarch64 target features test."
Mitch Phillips [Wed, 21 Dec 2022 01:16:17 +0000 (17:16 -0800)]
Revert "[AArch64][NFC] Fix aarch64 target features test."

This reverts commit bf94eac6a3f7c5cd8941956d44c15524fa3751bd.

Reason: Depends on reverted change https://reviews.llvm.org/D127812

22 months agoRevert "[AArch64][compiler-rt] Fix HWCAP_CPUID not defined in some cases."
Mitch Phillips [Wed, 21 Dec 2022 01:15:38 +0000 (17:15 -0800)]
Revert "[AArch64][compiler-rt] Fix HWCAP_CPUID not defined in some cases."

This reverts commit a43f36142c501e2d3f4797ef938db4e0c5e0eeec.

Reason: Depends on reverted change https://reviews.llvm.org/D127812

22 months ago[mlir][sparse] refactored codegen environment into its own file
Aart Bik [Tue, 20 Dec 2022 23:42:11 +0000 (15:42 -0800)]
[mlir][sparse] refactored codegen environment into its own file

Also, as a proof of concept, all functionality related to reductions
has been refactored into private fields and a clean public API. As a
result, some dead code was found as well. This approach also simplifies
asserting on a proper environment state for each call.

NOTE: making all other fields private and migrating more methods into
      this new class is still TBD in yes another next revision!

Reviewed By: Peiming

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

22 months ago[clang] Re-apply change to avoid passing -stdlib=libc++ spuriously to CC1 on Darwin
Louis Dionne [Tue, 20 Dec 2022 23:04:53 +0000 (18:04 -0500)]
[clang] Re-apply change to avoid passing -stdlib=libc++ spuriously to CC1 on Darwin

Previously, we would be passing down -stdlib=libc++ from the Driver
to CC1 whenever the default standard library on the platform was libc++,
even if -stdlib= had not been passed to the Driver. This meant that we
would pass -stdlib=libc++ in nonsensical circumstances, such as when
compiling C code.

This logic had been added in b534ce46bd40 to make sure that header
search paths were set up properly. However, since libc++ is now the
default Standard Library on Darwin, passing this explicitly is not
required anymore. Indeed, if no -stdlib= is specified, CC1 will end
up using libc++ if it queries which standard library to use, without
having to be told.

Not passing -stdlib= at all to CC1 on Darwin should become possible
once CC1 stops relying on it to set up framework search paths.

Furthermore, this commit also removes a diagnostic checking whether the
deployment target is too old to support libc++. Nowadays, all supported
deployment targets use libc++ and compiling with libstdc++ is not
supported anymore. The Driver was the wrong place to issue this
diagnostic since it doesn't know whether libc++ will actually be linked
against (e.g. C vs C++), which would lead to spurious diagnostics.
Given that these targets are not supported anymore, we simply drop
the diagnostic instead of trying to refactor it into CC1.

This is a re-application of 6540f32db09c which had been reverted in
49dd02bd0819 because it broke a compiler-rt test. The test had broken
because we were compiling C code and passing -stdlib=libc++, which Clang
will now warn about.

rdar://103198514

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

22 months ago[mlir][sparse] introduce LevelFormat which do not encoding level properties of a...
Peiming Liu [Tue, 20 Dec 2022 23:49:17 +0000 (23:49 +0000)]
[mlir][sparse] introduce LevelFormat which do not encoding level properties of a sparse tensor level.

Reviewed By: aartbik, wrengr

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

22 months ago[NFC][llvm-exegesis] Ensure that target options show up in --help
Roman Lebedev [Wed, 21 Dec 2022 00:38:10 +0000 (03:38 +0300)]
[NFC][llvm-exegesis] Ensure that target options show up in --help

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

22 months ago[-Wunsafe-buffer-usage] Suppress an assertion for visiting VarDecl twice.
Artem Dergachev [Tue, 20 Dec 2022 22:58:35 +0000 (14:58 -0800)]
[-Wunsafe-buffer-usage] Suppress an assertion for visiting VarDecl twice.

The assertion doesn't seem to hold due to ASTMatchers traversing code
inside GNU StmtExpr twice. This can screw up our algorithm's invariants.
We need a further investigation to properly fix this issue, but for now
let's avoid the crash.

22 months agollvm-reduce: Disable crash reports, symbolization and core dumps
Matt Arsenault [Tue, 20 Dec 2022 12:32:55 +0000 (07:32 -0500)]
llvm-reduce: Disable crash reports, symbolization and core dumps

These are going to waste a lot of time and produce clutter when we're
bulk introducing crashes. Add a flag to disable this behavior in case
this matters to a reproducer.

22 months ago[BOLT][NFC] Remove unused PrintInstructions argument
Maksim Panchenko [Tue, 20 Dec 2022 23:16:32 +0000 (15:16 -0800)]
[BOLT][NFC] Remove unused PrintInstructions argument

PrintInstructions was unused in BinaryFunction::print() and dump().

Reviewed By: Amir

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

22 months ago[llvm] Remove redundant initialization of std::optional (NFC)
Kazu Hirata [Tue, 20 Dec 2022 23:53:38 +0000 (15:53 -0800)]
[llvm] Remove redundant initialization of std::optional (NFC)

22 months ago[llvm] Use std::optional instead of Optional
Kazu Hirata [Tue, 20 Dec 2022 23:42:32 +0000 (15:42 -0800)]
[llvm] Use std::optional instead of Optional

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

22 months ago[dsymutil] Require x86 backend for odr-two-units-in-single-file.test
Jonas Devlieghere [Tue, 20 Dec 2022 23:35:54 +0000 (15:35 -0800)]
[dsymutil] Require x86 backend for odr-two-units-in-single-file.test

22 months ago[libc][Obvious] Remove the unused cpp::vector class.
Siva Chandra Reddy [Tue, 20 Dec 2022 23:21:56 +0000 (23:21 +0000)]
[libc][Obvious] Remove the unused cpp::vector class.

This can be easily resurrected if required in future. It calls malloc
directly. So, instead of updating an unused piece to the newer pattern
of using the custom operator new, this patch just deletes it.

22 months ago[ADT] Fix an unused variable warning
Kazu Hirata [Tue, 20 Dec 2022 23:02:48 +0000 (15:02 -0800)]
[ADT] Fix an unused variable warning

This patch fixes:

  llvm/include/llvm/ADT/GenericUniformityImpl.h:752:8: error: unused
  variable 'printBlockSet' [-Werror,-Wunused-variable]

22 months ago[llvm-exegesis] `AliasingConfigurations`: pay attention to forbidden registers
Roman Lebedev [Tue, 20 Dec 2022 20:57:10 +0000 (23:57 +0300)]
[llvm-exegesis] `AliasingConfigurations`: pay attention to forbidden registers

When trying to measure latency of certain opcodes, e.g.
`./bin/llvm-exegesis --opcode-name=BT32ri8 --mode=latency --repetition-mode=loop  --benchmarks-file=- --max-configs-per-opcode=65536`,
we'd pick such an aliasing instruction, and such an aliasing registers,
that would alias with forbidden registers.

And in particular with loop counter in `loop` repetition mode,
which made the measurements never finish.
This does not address all such cases, only the most obvious one.

The added test case fails without the patch.

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

22 months ago[AArch64][NFC] Fix aarch64 target features test.
Pavel Iliin [Tue, 20 Dec 2022 22:26:48 +0000 (22:26 +0000)]
[AArch64][NFC] Fix aarch64 target features test.

22 months ago[llvm][X86ISelDAGToDAG] support -{start|stop}-{before|after}=x86-isel
Nick Desaulniers [Tue, 20 Dec 2022 22:08:37 +0000 (14:08 -0800)]
[llvm][X86ISelDAGToDAG] support -{start|stop}-{before|after}=x86-isel

Follow a similar pattern as AMDGPUDAGToDAGISel's constructor so that we
can use INITIALIZE_PASS to register a pass. This allows for more fine
grain testability of SelectionDAGISel.

Link: https://github.com/llvm/llvm-project/issues/59538
Reviewed By: craig.topper

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

22 months agoInstCombine: Fold fneg (copysign x, y) -> copysign x, (fneg y)
Matt Arsenault [Tue, 6 Dec 2022 13:05:54 +0000 (08:05 -0500)]
InstCombine: Fold fneg (copysign x, y) -> copysign x, (fneg y)

22 months ago[llvm][PassSupport] don't require passes to be default constructible
Nick Desaulniers [Tue, 20 Dec 2022 22:00:51 +0000 (14:00 -0800)]
[llvm][PassSupport] don't require passes to be default constructible

Quite a few passes are not default constructible. In order to properly
support -{start|stop}-{before|after}= for these passes, we would like to
continue to use INITIALIZE_PASS, but not necessarily provide a default
constructor.

Delete the default constructors of classes derived from
SelectionDAGISel.

Link: https://github.com/llvm/llvm-project/issues/59538
Reviewed By: efriedma

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

22 months ago[bazel] Add missing Passes dependency to llvm-extract
Haojian Wu [Tue, 20 Dec 2022 21:27:10 +0000 (22:27 +0100)]
[bazel] Add missing Passes dependency to llvm-extract

22 months ago[llvm-extract] Add missing IRPrinter dependency
Arthur Eubanks [Tue, 20 Dec 2022 21:12:53 +0000 (13:12 -0800)]
[llvm-extract] Add missing IRPrinter dependency

22 months ago[PowerPC][NFC] Update p10 scheduler
Lei Huang [Tue, 20 Dec 2022 20:57:26 +0000 (14:57 -0600)]
[PowerPC][NFC] Update p10 scheduler

22 months ago[llvm-extract] Use new pass manager instead of legacy pass manager
Arthur Eubanks [Tue, 20 Dec 2022 20:55:05 +0000 (12:55 -0800)]
[llvm-extract] Use new pass manager instead of legacy pass manager

Removes some legacy passes specific to llvm-extract

22 months ago[dsymutil] Verify the keep chain when asserts are enabled
Jonas Devlieghere [Tue, 20 Dec 2022 20:48:00 +0000 (12:48 -0800)]
[dsymutil] Verify the keep chain when asserts are enabled

Verify that every DIE that's marked as kept, has a parent that's kept as
well. This invariant should always hold and is easy to verify when
asserts are enabled.

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

22 months ago[dsymutil] Track uncloned references in the DIEInfo.
Jonas Devlieghere [Tue, 20 Dec 2022 19:28:57 +0000 (11:28 -0800)]
[dsymutil] Track uncloned references in the DIEInfo.

To improve deduplication across CUs within a single object file,
2b747241a6a0 changed the way we track ODR canonical candidates. The
result is that some assumptions no longer hold. Because of the
aforementioned change, the following condition

  assert(Ref > InputDIE.getOffset());

in DWARFLinker::DIECloner::cloneDieReferenceAttribute is no longer an
invariant. An example of a situation where this assertion no longer
holds is when we have decided to replace a backward reference in the
current CU with a forward reference in a subsequent CU. The ODR
canonical DIE hasn't been emitted yet, but the references DIE has an
offset smaller than the current DIE. The assertion is only true if the
referenced DIE was the ODR canonical DIE, which is no longer guaranteed
to be part of the same CU.

Big thanks to Alexey for putting a test together.

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

22 months ago[libc++] Granularize <type_traits> includes in <concepts>
Nikolas Klauser [Tue, 20 Dec 2022 17:01:34 +0000 (18:01 +0100)]
[libc++] Granularize <type_traits> includes in <concepts>

Reviewed By: ldionne, Mordante, #libc

Spies: jloser, libcxx-commits

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

22 months ago[RISCV] Move -riscv-v-vector-bits-max/min options to RISCVTargetMachine.
Craig Topper [Tue, 20 Dec 2022 19:52:52 +0000 (11:52 -0800)]
[RISCV] Move -riscv-v-vector-bits-max/min options to RISCVTargetMachine.

Split from D139873.

Reviewed By: reames, kito-cheng

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

22 months ago[BuildLibCalls][RISCV] Sign extend return value of bcmp on riscv64.
Craig Topper [Tue, 20 Dec 2022 19:37:51 +0000 (11:37 -0800)]
[BuildLibCalls][RISCV] Sign extend return value of bcmp on riscv64.

riscv64 wants callees to sign extend signed and unsigned int returns.

The caller can use this to avoid a sign extend if the result is
used by a comparison since riscv64 only has 64-bit compares.

InstCombine/SimplifyLibCalls aggressively turn memcmps that are only
used by an icmp eq 0 into bcmp, but we lose the signext attribute that
would have been present on the memcmp. This causes an unneeded sext.w
in the generated assembly.

This looks even sillier if bcmp is implemented alias to memcmp. In
that case, not only did we not get any savings by using bcmp, we added
an instruction.

This probably applies to other functions, this just happens to be
the one I noticed so far.

See also the discussion here https://discourse.llvm.org/t/can-we-preserve-signext-return-attribute-when-converting-memcmp-to-bcmp/67126

Reviewed By: efriedma

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

22 months ago[libc] Add a baremetal config.
Siva Chandra Reddy [Tue, 20 Dec 2022 07:11:55 +0000 (07:11 +0000)]
[libc] Add a baremetal config.

The config currently includes ctype, math, stdlib, inttypes and string
functions.

Reviewed By: lntue

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

22 months ago[OpenMP] Fix leftover use of removed function
Joseph Huber [Tue, 20 Dec 2022 19:42:18 +0000 (13:42 -0600)]
[OpenMP] Fix leftover use of removed function

Summary:
Didn't notice this one floating around as it was still cached somewhere.
Delete it.

22 months ago[OpenMP] Disable libomptarget integration on unsupported platforms
Guilherme Valarini [Tue, 20 Dec 2022 19:41:26 +0000 (16:41 -0300)]
[OpenMP] Disable libomptarget integration on unsupported platforms

Reviewed By: jhuber6

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

22 months ago[OpenMP][NFC] Fix message to recommend C++17 instead of C++14
Joseph Huber [Tue, 20 Dec 2022 19:39:44 +0000 (13:39 -0600)]
[OpenMP][NFC] Fix message to recommend C++17 instead of C++14

Summary:
This was changed in LLVM 16.0.

22 months ago[OpenMP] Remove folding logic for removed runtime function
Joseph Huber [Tue, 20 Dec 2022 15:50:27 +0000 (09:50 -0600)]
[OpenMP] Remove folding logic for removed runtime function

This function was removed from the device runtime at some point but we
still have specialized code for it and an entry in the runtime kinds.
Remove it as it is no longer necessary.

Reviewed By: tianshilei1992

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

22 months ago[libc] Add check for locally installed GPUs
Joseph Huber [Tue, 20 Dec 2022 19:06:40 +0000 (13:06 -0600)]
[libc] Add check for locally installed GPUs

We need to know which, if any, GPUs the user has on their system if we
want to be able to test the `libc` source code for the GPU. This patch
adds a basic check using the `amdgpu-arch` utility which is provided by
`clang`.

Checking for NVIDIA GPUs will be done later as this is a little
problematic right now. CMake provides a method that we use for Clang but
it will soon be deprecated, the replacement requires a newer CMake
version that we will have in the LLVM 17 branch in the future. CUDA also
provides `__nvcc_device_query` but it's very new so I'm not sure if we
should rely on it. I may introduce a new tool to do it similar to
`amdgpu-arch`.

Reviewed By: sivachandra

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

22 months ago[RISCV] Add more XVentanaCondOps tests with icmp conditions. NFC
Craig Topper [Tue, 20 Dec 2022 19:36:28 +0000 (11:36 -0800)]
[RISCV] Add more XVentanaCondOps tests with icmp conditions. NFC

Most of our existing tests use i1 arguments for the conditions.
With icmp conditions there are opportunities for improving the
generated code.

Reviewed By: reames

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

22 months ago[mlir][sparse] factorized merger/emitter/codegen into single environment
Aart Bik [Tue, 20 Dec 2022 02:43:49 +0000 (18:43 -0800)]
[mlir][sparse] factorized merger/emitter/codegen into single environment

This cleans up a lot of parameter passing. It also prepares adding
proper "delegate" functions to the new environment and moving this
out into its own class with a better OO design.

Reviewed By: Peiming

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

22 months agoRevert "[Bazel] Remove define HAVE_LSEEK64 to match cmake config."
Benjamin Kramer [Tue, 20 Dec 2022 19:33:20 +0000 (20:33 +0100)]
Revert "[Bazel] Remove define HAVE_LSEEK64 to match cmake config."

This reverts commit 5d65f8a7931c160fe5a11c120796779ba59789b9. Dependent
commit ae3e228af7 was reverted in f31a36e7767e.

22 months ago[AArch64][compiler-rt] Fix HWCAP_CPUID not defined in some cases.
Pavel Iliin [Tue, 20 Dec 2022 19:06:09 +0000 (19:06 +0000)]
[AArch64][compiler-rt] Fix HWCAP_CPUID not defined in some cases.

Define HWCAP_CPUID to fix commit e43924a75145d2f9e722f74b673145c3e62bfd07.

22 months ago[libc][NFC] Simplify how the definiton of NULL macro is added to string.h.
Siva Chandra Reddy [Tue, 20 Dec 2022 08:59:54 +0000 (08:59 +0000)]
[libc][NFC] Simplify how the definiton of NULL macro is added to string.h.

We do not list macro definitions in api.td files anymore. Not all macros
definitions have been moved out. This change moves the definition of the
NULL macro out.

Reviewed By: lntue, jhuber6

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

22 months ago[bazel] add TargetParser
Mikhail Goncharov [Tue, 20 Dec 2022 19:09:00 +0000 (20:09 +0100)]
[bazel] add TargetParser

22 months ago[libc] Simplify generation of errno.h.
Siva Chandra Reddy [Tue, 20 Dec 2022 08:45:50 +0000 (08:45 +0000)]
[libc] Simplify generation of errno.h.

Reviewed By: lntue

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

22 months ago[CMake] Depend on TargetParser after f09cf34d00625e57dea5317a3ac0412c07292148
Fangrui Song [Tue, 20 Dec 2022 18:50:09 +0000 (10:50 -0800)]
[CMake] Depend on TargetParser after f09cf34d00625e57dea5317a3ac0412c07292148

22 months ago[libc] add fuzz target for strtointeger functions
Michael Jones [Fri, 16 Dec 2022 00:36:59 +0000 (16:36 -0800)]
[libc] add fuzz target for strtointeger functions

The string to integer conversion functions are well suited to
differential fuzzing, and this patch adds a target to enable just that.
It also fixes a bug in the fuzzing comparison logic and changes atoi
slightly to match the behavior described in the C standard.

Reviewed By: sivachandra, lntue

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

22 months ago[TEST] Pre-commit test for GVN PRE load
Guozhi Wei [Tue, 20 Dec 2022 18:43:31 +0000 (18:43 +0000)]
[TEST] Pre-commit test for GVN PRE load

This is a test case for D139582.

In this test case, %v4 and %v5 can be moved to predecessors, %v3 can be changed to a PHI instruction.

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

22 months agoRevert "[gn] port ae3e228af7"
Nico Weber [Tue, 20 Dec 2022 18:31:37 +0000 (13:31 -0500)]
Revert "[gn] port ae3e228af7"

This reverts commit b65fbf821a5f4dada7018068b93d4a1ae7c068ff.
ae3e228af7 was reverted in f31a36e7767e.

22 months agoFix module build after TargetParser
Steven Wu [Tue, 20 Dec 2022 18:27:50 +0000 (10:27 -0800)]
Fix module build after TargetParser

Need to include the textual header from the correct module.

22 months ago[bazel] Port TargetParser f09cf34d00625e57dea5317a3ac0412c07292148
Fangrui Song [Tue, 20 Dec 2022 18:30:05 +0000 (10:30 -0800)]
[bazel] Port TargetParser f09cf34d00625e57dea5317a3ac0412c07292148

Moving files into a new target :TargetParser is left as an exercise.

22 months agoValueTracking: Document some difficult isKnownNeverInfinity cases
Matt Arsenault [Sun, 4 Dec 2022 15:18:59 +0000 (10:18 -0500)]
ValueTracking: Document some difficult isKnownNeverInfinity cases

Add a comment and some negative tests. I'd like to have test coverage
and explicit handling of all the math operations for clarity.

22 months ago[libc][NFC] make atoi undefined cases match std
Michael Jones [Mon, 19 Dec 2022 21:35:45 +0000 (13:35 -0800)]
[libc][NFC] make atoi undefined cases match std

The standard describes atoi as:

"equivalent to atoi: (int)strtol(nptr, (char **)NULL, 10)"

Previously, our behavior was slightly different on numbers larger than
INT_MAX, but this patch changes it to just do the cast instead. Both of
these are valid since the standard says

"If the value of the result cannot be represented, the
behavior is undefined."

But matching existing behavior makes differential fuzzing easier.

Reviewed By: sivachandra

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

22 months agoValueTracking: Add tests for isKnownNeverInfinity for llvm.log*
Matt Arsenault [Sun, 4 Dec 2022 15:08:49 +0000 (10:08 -0500)]
ValueTracking: Add tests for isKnownNeverInfinity for llvm.log*

22 months agoValueTracking: Teach isKnownNeverInfinity about llvm.sin/llvm.cos
Matt Arsenault [Sun, 4 Dec 2022 14:42:17 +0000 (09:42 -0500)]
ValueTracking: Teach isKnownNeverInfinity about llvm.sin/llvm.cos

22 months agoValueTracking: Add isKnownNeverInfinity tests for sin/cos
Matt Arsenault [Sun, 4 Dec 2022 14:40:29 +0000 (09:40 -0500)]
ValueTracking: Add isKnownNeverInfinity tests for sin/cos

22 months ago[OpenMP] Clang Support for taskwait nowait clause
Sunil Kuravinakop [Tue, 20 Dec 2022 18:13:26 +0000 (12:13 -0600)]
[OpenMP] Clang Support for taskwait nowait clause

Support for taskwait nowait clause with placeholder for runtime changes.

Reviewed By: cchen, ABataev

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

22 months ago[lldb] Prevent false positives with simple template names in SymbolFileDWARF::FindTypes
Arthur Eubanks [Fri, 16 Dec 2022 19:48:21 +0000 (11:48 -0800)]
[lldb] Prevent false positives with simple template names in SymbolFileDWARF::FindTypes

The provided test case was crashing because of confusion attempting to find types for `ns::Foo` under -gsimple-template-names. (This looks broken normally because it's attempting to find `ns::Foo` rather than `ns::Foo<T>`)

Looking up types can't give false positives, as opposed to looking up functions as mentioned in https://reviews.llvm.org/D137098.

Reviewed By: Michael137

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

22 months agoAdd missing textual header to module map
Adrian Prantl [Tue, 20 Dec 2022 18:05:40 +0000 (10:05 -0800)]
Add missing textual header to module map

22 months agoValueTracking: Teach isKnownNeverInfinity about sqrt
Matt Arsenault [Sun, 4 Dec 2022 14:26:16 +0000 (09:26 -0500)]
ValueTracking: Teach isKnownNeverInfinity about sqrt

22 months agoValueTracking: Add base test for isKnownNeverInfinity of sqrt
Matt Arsenault [Sun, 4 Dec 2022 14:35:55 +0000 (09:35 -0500)]
ValueTracking: Add base test for isKnownNeverInfinity of sqrt

22 months agollvm-reduce: Fix build
Matt Arsenault [Tue, 20 Dec 2022 18:02:07 +0000 (13:02 -0500)]
llvm-reduce: Fix build

Fix build after e49f8eef41d58a9b55cb4347826d353ecf170f8b

22 months agoFix modules build after D137838
Adrian Prantl [Tue, 20 Dec 2022 17:59:05 +0000 (09:59 -0800)]
Fix modules build after D137838

22 months ago[DebugInfo] Unify location selection logic for values in InstrRefBasedImpl
Stephen Tozer [Tue, 20 Dec 2022 14:52:11 +0000 (14:52 +0000)]
[DebugInfo] Unify location selection logic for values in InstrRefBasedImpl

Currently the instruction referencing live debug values has 3 separate
places where we iterate over all known locations to find the best machine
location for a set of values at a given point in the program. Each of these
places has an implementation of this check, and one of them has slightly
different logic to the others. This patch moves the check for the "quality"
of a machine location into a separate function, which also avoids repeatedly
calling expensive functions, giving a slight performance improvement.

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

22 months agoValueTracking: Teach isKnownNeverInfinity about min/max functions
Matt Arsenault [Sun, 4 Dec 2022 14:18:49 +0000 (09:18 -0500)]
ValueTracking: Teach isKnownNeverInfinity about min/max functions

22 months agoValueTracking: Add tests for isKnownNeverInfinity for min/max intrinsics
Matt Arsenault [Sun, 4 Dec 2022 14:29:12 +0000 (09:29 -0500)]
ValueTracking: Add tests for isKnownNeverInfinity for min/max intrinsics

22 months agoRevert D139752 "cmake: Enable 64bit off_t on 32bit glibc systems"
Fangrui Song [Tue, 20 Dec 2022 17:45:28 +0000 (09:45 -0800)]
Revert D139752 "cmake: Enable 64bit off_t on 32bit glibc systems"

This reverts commit ae3e228af77fea9ff4c45cca88a7a0de2cad662b.

Seems that it may form a wrong command line for 32-bit Halide builds

`-D_FILE_OFFSET_BITS="64 -D_DEBUG -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DSTDC_CONSTANT_MACROS -DSTDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"` according to

22 months agoValueTracking: Teach isKnownNeverInfinity about rounding intrinsics
Matt Arsenault [Sun, 4 Dec 2022 13:29:17 +0000 (08:29 -0500)]
ValueTracking: Teach isKnownNeverInfinity about rounding intrinsics

22 months agoValueTracking: Add tests for isKnownNeverInfinity for rounding intrinsics
Matt Arsenault [Sun, 4 Dec 2022 14:04:07 +0000 (09:04 -0500)]
ValueTracking: Add tests for isKnownNeverInfinity for rounding intrinsics

22 months ago[NFC][llvm-reduce] Do show `-ir-passes` in help
Roman Lebedev [Tue, 20 Dec 2022 17:35:08 +0000 (20:35 +0300)]
[NFC][llvm-reduce] Do show `-ir-passes` in help

It's a bit non-useful when llvm-reduce runs a pass,
a testcase for a crash in which is being reduced in the first place :)

22 months ago[scudo][standalone] Precommit pages
Yaneury Fermin [Tue, 20 Dec 2022 17:37:48 +0000 (17:37 +0000)]
[scudo][standalone] Precommit pages

On Fuchsia, this CL changes garbage collection
to precommit all pages if the |Buffer| doesn't
fit into the static buffer size.

A test program (scudotest) was used that deliberately
grows a size class high water mark to the point where
the pre-allocated static buffer is no longer used for
garbage collection.

Traces showed that precommiting the Vmar removes ~30 page faults
and ~.22ms of wall time.*

Before: https://ui.perfetto.dev/#!/?s=7da19fc3f59448eef51fd6fd03283bb87b702cf1a565bcbe6c9c28371671
After: https://ui.perfetto.dev/#!/?s=97707cd99b2c9efd1e6569b2deb97e3d16f8be532c59a0cc12463c37fbb1d8

*: Use the added `zx_vmar_op_range` as a reference point to observe
the differences.

For more context, see https://fxbug.dev/115594.

Reviewed By: Chia-hungDuan

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

22 months ago[CMake] add_definitions => add_compile_definitions after D139752
Fangrui Song [Tue, 20 Dec 2022 17:34:14 +0000 (09:34 -0800)]
[CMake] add_definitions => add_compile_definitions after D139752

Suggested by alexreinking (Alex Reinking)

22 months ago[InstCombine] Disallow constant expressions in `not` canonicalization
Roman Lebedev [Tue, 20 Dec 2022 16:55:09 +0000 (19:55 +0300)]
[InstCombine] Disallow constant expressions in `not` canonicalization

As per post-commit feedback - we generally do not like Constant Expressions,
and trying to deal with them leads to inconsistent results
that may very well be non-optimal. So just don't.