platform/upstream/llvm.git
17 months ago[RISCV] Make selectImm return SDValue instead of SDNode*.
Craig Topper [Sat, 4 Feb 2023 21:14:51 +0000 (13:14 -0800)]
[RISCV] Make selectImm return SDValue instead of SDNode*.

This avoids multiple places needing to convert it to SDValue. It's
simpler to convert it to SDNode * in the places that need it.

17 months ago[RISCV] Replace condition that should alwasy be true with an assert. NFC
Craig Topper [Sat, 4 Feb 2023 21:01:21 +0000 (13:01 -0800)]
[RISCV] Replace condition that should alwasy be true with an assert. NFC

17 months ago[RISCV] Use MVT enum directly instead of converting to bit width. NFC
Craig Topper [Sat, 4 Feb 2023 20:50:02 +0000 (12:50 -0800)]
[RISCV] Use MVT enum directly instead of converting to bit width. NFC

17 months ago[RISCV] Remove fimmneg0 patterns that were replaced by D142953.
Craig Topper [Sat, 4 Feb 2023 20:38:19 +0000 (12:38 -0800)]
[RISCV] Remove fimmneg0 patterns that were replaced by D142953.

17 months ago[libc++][NFC] Rename _LIBCPP_EXPLICIT_AFTER_CXX11 to _LIBCPP_EXPLICIT_SINCE_CXX14
Nikolas Klauser [Thu, 2 Feb 2023 11:12:28 +0000 (12:12 +0100)]
[libc++][NFC] Rename _LIBCPP_EXPLICIT_AFTER_CXX11 to _LIBCPP_EXPLICIT_SINCE_CXX14

We renamed the `_LIBCPP_CONSTEXPR_` a while ago. This matches the change for `_LIBCPP_EXPLICIT_`.

Reviewed By: Mordante, #libc

Spies: libcxx-commits

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

17 months ago[libc++][NFC] Rename _LIBCPP_NO_RTTI to _LIBCPP_HAS_NO_RTTI
Nikolas Klauser [Thu, 2 Feb 2023 11:06:35 +0000 (12:06 +0100)]
[libc++][NFC] Rename _LIBCPP_NO_RTTI to _LIBCPP_HAS_NO_RTTI

Other macros that disable parts of the library are named `_LIBCPP_HAS_NO_WHATEVER`.

Reviewed By: ldionne, Mordante, #libc

Spies: libcxx-commits

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

17 months ago[CMake] Support runtimes targets without specifying triple
Petr Hosek [Wed, 30 Jun 2021 06:34:18 +0000 (23:34 -0700)]
[CMake] Support runtimes targets without specifying triple

Currently, for BUILTIN_TARGETS and RUNTIME_TARGETS you can either use
the special "default" value, or a target triple.

For the "default" value, we don't set any target triple and passthrough
a subset of CMake variables into the subbuild. This is typically used
on Darwin where we build universal binaries and a single target triple
therefore isn't sufficient.

For the target triple value, you can set arbitrary CMake variables
through RUNTIMES_<target>_<variable>, but we always set target triple
to <target>. This gives more flexibility, because we can precisely
control what variables are set in the subbuild, but is unsuitable for
platforms like Darwin.

To address this, we would like to introduce a third option which is
similar to the second option, except we won't set target triple in
the subbuild (you can always do so yourself by setting the appropriate
CMake variable, e.g. RUNTIMES_<name>_CMAKE_C_COMPILER_TARGET=<triple>).

This change is a first step in that direction, by eliminating the support
of target triples from builtin_register_target and runtime_register_target
helper functions.

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

17 months agocmake: Enable 64bit off_t on 32bit glibc systems
Khem Raj [Sat, 4 Feb 2023 21:54:41 +0000 (13:54 -0800)]
cmake: Enable 64bit off_t on 32bit glibc systems

Pass -D_FILE_OFFSET_BITS=64 to compiler flags on 32bit glibc based
systems. This will make sure that 64bit versions of LFS functions are
used e.g. seek will behave same as lseek64. Also revert [1] partially
because this added a cmake test to detect lseek64 but then forgot to
pass the needed macro to actual compile, this test was incomplete too
since libc implementations like musl has 64bit off_t by default on 32bit
systems and does not bundle[2] -D_LARGEFILE64_SOURCE under -D_GNU_SOURCE
like glibc, which means the compile now fails on musl because the cmake
check passes but we do not have _LARGEFILE64_SOURCE defined. Using the
*64 function was transitional anyways so use -D_FILE_OFFSET_BITS=64
instead

[1] https://github.com/llvm/llvm-project/commit/8db7e5e4eed4c4e697dc3164f2c9351d8c3e942b
[2] https://git.musl-libc.org/cgit/musl/commit/?id=25e6fee27f4a293728dd15b659170e7b9c7db9bc

Reviewed By: MaskRay

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

17 months ago[clang-linker-wrapper] Fix build after MapVector change
Fangrui Song [Sat, 4 Feb 2023 20:54:26 +0000 (12:54 -0800)]
[clang-linker-wrapper] Fix build after MapVector change

17 months ago[DAG] visitFREEZE - handle case where the folded node merges with another existing...
Simon Pilgrim [Sat, 4 Feb 2023 20:53:42 +0000 (20:53 +0000)]
[DAG] visitFREEZE - handle case where the folded node merges with another existing node

Fixes #60413

17 months ago[LV] Add users for loads to make tests more robust.
Florian Hahn [Sat, 4 Feb 2023 20:42:50 +0000 (20:42 +0000)]
[LV] Add users for loads to make tests more robust.

Update a few tests to add users to loads to avoid them being optimized
out by future changes. In cases the unused loads didn't matter for the
test, remove them.

17 months agoOffloadBinary: Switch to MapVector<StringRef, StringRef> to stabilize iteration order
Fangrui Song [Sat, 4 Feb 2023 20:34:55 +0000 (12:34 -0800)]
OffloadBinary: Switch to MapVector<StringRef, StringRef> to stabilize iteration order

D122069 incorrectly uses StringMap iteration order
(https://llvm.org/docs/ProgrammersManual.html#llvm-adt-stringmap-h).
Switch to MapVector.

17 months agoRevert "[ORC] Drop Comdat when discarding IR symbol"
Jonas Hahnfeld [Sat, 4 Feb 2023 20:24:44 +0000 (21:24 +0100)]
Revert "[ORC] Drop Comdat when discarding IR symbol"

A number of AArch64 bots report errors in clang-repl, for example
https://lab.llvm.org/buildbot/#/builders/197/builds/3920

This reverts commit 87d7838202267a011639fcbf97263556ccf091dc.

17 months ago[lld] fix comment typos to cycle bots
Nico Weber [Sat, 4 Feb 2023 20:23:24 +0000 (15:23 -0500)]
[lld] fix comment typos to cycle bots

17 months ago[mlgo] Bump the unsupported versions for interactive tests to 3.8
Mircea Trofin [Sat, 4 Feb 2023 20:15:48 +0000 (12:15 -0800)]
[mlgo] Bump the unsupported versions for interactive tests to 3.8

e006c7dfa79a already covered the regalloc one.

17 months ago[sanitizer] Simplify with GET_CALLER_PC_BP. NFC
Fangrui Song [Sat, 4 Feb 2023 19:30:14 +0000 (11:30 -0800)]
[sanitizer] Simplify with GET_CALLER_PC_BP. NFC

17 months ago[AArch64] Add ABD combine tests. NFC
David Green [Sat, 4 Feb 2023 19:18:50 +0000 (19:18 +0000)]
[AArch64] Add ABD combine tests. NFC

17 months ago[X86] combinePredicateReduction - pull out repeated DAG.getContext() calls. NFC.
Simon Pilgrim [Sat, 4 Feb 2023 18:31:20 +0000 (18:31 +0000)]
[X86] combinePredicateReduction - pull out repeated DAG.getContext() calls. NFC.

17 months agoRevert "[Sanitizers] Fix read buffer overrun in scanning loader commands"
Douglas Yung [Sat, 4 Feb 2023 18:18:58 +0000 (10:18 -0800)]
Revert "[Sanitizers] Fix read buffer overrun in scanning loader commands"

This reverts commit abbd4da2043856f443e3d1c8d2c7627cac93a6ac.

This change is breaking many bots including:
- http://45.33.8.238/linux/98629/step_10.txt
- https://buildkite.com/llvm-project/llvm-main/builds/6461#01861c4f-9d9c-4781-88f7-d6ccddcb4b06/919-8848
- https://lab.llvm.org/buildbot/#/builders/94/builds/13196
- https://lab.llvm.org/buildbot/#/builders/45/builds/10633
- https://lab.llvm.org/buildbot/#/builders/247/builds/1238
- https://lab.llvm.org/buildbot/#/builders/70/builds/33424
- https://lab.llvm.org/buildbot/#/builders/168/builds/11693
- https://lab.llvm.org/buildbot/#/builders/74/builds/17006
- https://lab.llvm.org/buildbot/#/builders/85/builds/14120

17 months ago[LV] Add initial tests for sinking loads past other instructions.
Florian Hahn [Sat, 4 Feb 2023 18:18:17 +0000 (18:18 +0000)]
[LV] Add initial tests for sinking loads past other instructions.

Extend test coverage for sinking loads that use fixed order recurrences.

17 months ago[compiler-rt] Fix FORTIFY_SOURCE -> _FORTIFY_SOURCE reference (NFC)
Sam James [Sat, 4 Feb 2023 18:04:54 +0000 (18:04 +0000)]
[compiler-rt] Fix FORTIFY_SOURCE -> _FORTIFY_SOURCE reference (NFC)

As pointed out by maskray.

Fixes: 8ab762557fb057af1a3015211ee116a975027e78

17 months ago[compiler-rt] Disable default config files for tests
Sam James [Sat, 4 Feb 2023 18:04:05 +0000 (18:04 +0000)]
[compiler-rt] Disable default config files for tests

Without this, if hardening measures like FORTIFY_SOURCE are are in
/etc/clang/*.cfg, many sanitizer tests will die before the sanitizer
can trap the problem being tested, because e.g. the _chk variants
of common functions will abort first.

This gets the number of failing tests down from 42->3 for me (and the
remaining 3 are unrelated).

See: 52ce6776cf98e993c6ec04ae54b52e1354fff917
See: 136f77805fd89cd30e69b3d1204fbf7efedd9a12
Closes: https://github.com/llvm/llvm-project/issues/60394

Reviewed By: MaskRay

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

17 months ago[TableGen] Error.h - remove quotes to silence clang-tidy llvm-namespace-comment warning
Simon Pilgrim [Sat, 4 Feb 2023 17:31:52 +0000 (17:31 +0000)]
[TableGen] Error.h - remove quotes to silence clang-tidy llvm-namespace-comment warning

17 months ago[ADT] STLFunctionalExtras.h - fix llvm-include-order clang-tidy warning
Simon Pilgrim [Sat, 4 Feb 2023 17:30:14 +0000 (17:30 +0000)]
[ADT] STLFunctionalExtras.h - fix llvm-include-order clang-tidy warning

17 months ago[AArch64][GlobalISel] Selection for i8 buildvectors
David Green [Sat, 4 Feb 2023 16:11:29 +0000 (16:11 +0000)]
[AArch64][GlobalISel] Selection for i8 buildvectors

Legalization for i8 buildvectors is available (as in
615695de27e417d6b444cd983e6f636373afc8c9), but selection
would fail due to i8 types not being handled. This adds
basic support like other type sizes.

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

17 months ago[X86] combinePredicateReduction - fold any_of(setcc(x,y,ne)) -> pmovmskb(not(pcmpeqb()))
Simon Pilgrim [Sat, 4 Feb 2023 15:06:12 +0000 (15:06 +0000)]
[X86] combinePredicateReduction - fold any_of(setcc(x,y,ne)) -> pmovmskb(not(pcmpeqb()))

Improves codegen for v2i64 cases, similar to what we already do for all_of(setcc(x,y,eq))

17 months ago[X86] pr53419.ll - add missing v2i8/v4i8/v8i8 coverage to reduction tests
Simon Pilgrim [Sat, 4 Feb 2023 14:56:14 +0000 (14:56 +0000)]
[X86] pr53419.ll - add missing v2i8/v4i8/v8i8 coverage to reduction tests

17 months ago[mlir][SCF] Disallow multiple blocks in scf.if "else" region
Matthias Springer [Sat, 4 Feb 2023 14:44:20 +0000 (15:44 +0100)]
[mlir][SCF] Disallow multiple blocks in scf.if "else" region

The "then" region allows only a single block. The same should be the case for the "else" region.

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

17 months ago[GlobalISel] Enable patterns with multiple output operands for the GlobalISelEmitter
Remi Segard [Sat, 4 Feb 2023 12:23:46 +0000 (08:23 -0400)]
[GlobalISel] Enable patterns with multiple output operands for the GlobalISelEmitter

This enables writing patterns with mutliple output operands in the input pattern for GlobalISel

17 months ago[X86] Swap bool reduction predicates in v2i64/v4i32 tests
Simon Pilgrim [Sat, 4 Feb 2023 13:59:57 +0000 (13:59 +0000)]
[X86] Swap bool reduction predicates in v2i64/v4i32 tests

The v2i64 case has more scope for optimization with ne than ugt cases, and we already have very similar icmp sgt coverage via the v4i64 tests

17 months ago[Libomptarget] Add the same to the other AMD plugin
Samuel Thibault [Sat, 4 Feb 2023 13:46:25 +0000 (07:46 -0600)]
[Libomptarget] Add the same to the other AMD plugin

Summary:
The previous patch also needed to apply this to the other AMDGPU plugin,
this will be removed soon but it should be correct while it's here at
least.

17 months ago[Libomptarget] Fix disabling amdgpu on non-Linux.
Samuel Thibault [Sat, 4 Feb 2023 13:44:25 +0000 (07:44 -0600)]
[Libomptarget] Fix disabling amdgpu on non-Linux.

Previously, on non-Linux, amdgpu would get enabled whatever the CPU architecture.

Reviewed By: jhuber6

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

17 months ago[AArch64] Add tests for inefficient generation of ST2s. NFC
David Green [Sat, 4 Feb 2023 13:10:45 +0000 (13:10 +0000)]
[AArch64] Add tests for inefficient generation of ST2s. NFC

17 months agoAMDGPU: Add some regression tests that infinite looped combiner
Matt Arsenault [Sat, 4 Feb 2023 12:09:16 +0000 (08:09 -0400)]
AMDGPU: Add some regression tests that infinite looped combiner

Prevent a future patch from introducing an infinite combine loop.

17 months ago[SVE][CodeGen] Relax all true isel requirement for predicated operations that have...
Paul Walker [Mon, 16 Jan 2023 01:37:50 +0000 (01:37 +0000)]
[SVE][CodeGen] Relax all true isel requirement for predicated operations that have no side effects.

We have isel patterns to allow predicated operations to emit
unpredicated instructions when the predicate is all true. However,
the predicated operations named #_PRED have no requirement for the
result of the inactive lanes and so when those operations have no
side effects, floating point exceptions for example, we can also
safely emit unpredicated instructions. Doing this allows better
register allocation, instruction scheduling and also enables more
usage of instructions that take immediate operands.

NOTE: This patch does not convert all possible instances but
instead focuses on the cases that are testable once D141937 lands.

Depends on D141937

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

17 months agoRevert "[AArch64] Unconditionally use DW_EH_PE_indirect|DW_EH_PE_pcrel personality...
NAKAMURA Takumi [Sat, 4 Feb 2023 11:49:39 +0000 (20:49 +0900)]
Revert "[AArch64] Unconditionally use DW_EH_PE_indirect|DW_EH_PE_pcrel personality/lsda/ttype encodings"

It causes failurs in clang-interpreter.

This reverts commit 565a1fb1334b8cf510af1338cae3f50815a99f90, aka llvmorg-17-init-1048-g565a1fb1334b

17 months ago[X86] Add basic vector handling for ISD::ABDS/ABDU (absolute difference) nodes
Simon Pilgrim [Sat, 4 Feb 2023 11:25:46 +0000 (11:25 +0000)]
[X86] Add basic vector handling for ISD::ABDS/ABDU (absolute difference) nodes

I'm intending to add generic legalization in the future, but for now I've added basic support to targets that have the necessary MIN/MAX support to expand to SUB(MAX(X,Y),MIN(X,Y)).

This exposed a couple of issues with the DAG combines - in particular we need to catch trunc(abs(sub(ext(x),ext(y)))) patterns earlier before the SSE/AVX vector trunc expansion folds trigger.

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

17 months agollvm/test/CodeGen/MLRegalloc: Exclude python<=3.8 (D143218)
NAKAMURA Takumi [Sat, 4 Feb 2023 11:18:57 +0000 (20:18 +0900)]
llvm/test/CodeGen/MLRegalloc: Exclude python<=3.8 (D143218)

Type hint `list[foo]` isn't accepted by python-3.8
(Seems requires `typing.List`)

17 months ago[PowerPC] aix32-cc-abi-vaarg.ll - improve DAG checks
Simon Pilgrim [Sat, 4 Feb 2023 11:17:36 +0000 (11:17 +0000)]
[PowerPC] aix32-cc-abi-vaarg.ll - improve DAG checks

More closely match the actual output and should make the merge with D127115 easier.

17 months ago[X86][FP16] Lower half->i16 into vcvttph2[u]w directly
Phoebe Wang [Sat, 4 Feb 2023 10:23:39 +0000 (18:23 +0800)]
[X86][FP16] Lower half->i16 into vcvttph2[u]w directly

Reviewed By: LuoYuanke, RKSimon

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

17 months agoUpdate test to be the correct version
Jessica Paquette [Sat, 4 Feb 2023 07:21:34 +0000 (23:21 -0800)]
Update test to be the correct version

machine-outliner-mapping-stats.mir

17 months ago[RISCV] Don't use constantpool for floating-point value if the value can be easily...
Han-Kuan Chen [Tue, 31 Jan 2023 06:40:08 +0000 (22:40 -0800)]
[RISCV] Don't use constantpool for floating-point value if the value can be easily constructed by integer sequence and a floating-point move.

In addition, this commit does the following combine

vfmv.v.f + fmv.[dhw].x -> vmv.v.x
vfmv.s.f + fmv.[dhw].x -> vmv.s.x
vfmerge.vfm + fmv.[dhw].x -> vmerge.vxm

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

17 months ago[MachineOutliner] Improve mapper statistics
Jessica Paquette [Sat, 4 Feb 2023 06:26:07 +0000 (22:26 -0800)]
[MachineOutliner] Improve mapper statistics

Add a test for statistics as well.

The mapper size stats were nested in a loop unnecessarily. Move them out.

Give existing stats better names, and add one which also tracks the number of
sentinels added.

17 months ago[Driver] Remove deprecated -fsanitize-system-blacklist=
Fangrui Song [Sat, 4 Feb 2023 06:06:34 +0000 (22:06 -0800)]
[Driver] Remove deprecated -fsanitize-system-blacklist=

Unused in the wild.

17 months ago[MachineOutliner] NFC: Add debug output to populateMapper
Jessica Paquette [Sat, 4 Feb 2023 05:59:16 +0000 (21:59 -0800)]
[MachineOutliner] NFC: Add debug output to populateMapper

Adding debug output to improve outliner debuggability + testability.

Move `nooutline` attribute test into the new debug output test.

17 months agoRevert "[mlir][linalg] Make Linalg vectorizer lower affine.apply"
Diego Caballero [Sat, 4 Feb 2023 05:18:48 +0000 (05:18 +0000)]
Revert "[mlir][linalg] Make Linalg vectorizer lower affine.apply"

This reverts commit c7b1176e9afbfcc3da9482abbf7c1eb8793ff254.

17 months agoRevert "[mlir][linalg] Fix crash in vectorizer when expanding affine apply"
Diego Caballero [Sat, 4 Feb 2023 05:16:46 +0000 (05:16 +0000)]
Revert "[mlir][linalg] Fix crash in vectorizer when expanding affine apply"

This reverts commit 62570b722fa36fddde0d24bf06a245efadda66f5.

17 months ago[mlgo] only enable interactive mode tests on linux
Mircea Trofin [Sat, 4 Feb 2023 03:55:12 +0000 (19:55 -0800)]
[mlgo] only enable interactive mode tests on linux

`os.mkfifo` may not be supported everywhere (e.g. windows).

17 months ago[mlgo] Disable mlgo tests when python version is 6
Mircea Trofin [Sat, 4 Feb 2023 03:41:07 +0000 (19:41 -0800)]
[mlgo] Disable mlgo tests when python version is 6

Supporting 3.6 requires a bit too much of a change in the mlgo test python scripts.

17 months ago[AArch64] fix bug #55005 handle DW_CFA_GNU_NegateRAState
Sebastian Pop [Wed, 25 Jan 2023 18:40:48 +0000 (18:40 +0000)]
[AArch64] fix bug #55005 handle DW_CFA_GNU_NegateRAState

GCC on AArch64 uses DW_CFA_GNU_NegateRAState for return address signing.

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

17 months ago[UpdateTestChecks][NFC] Share the code to get CHECK prefix between all scripts
Shengchen Kan [Sat, 4 Feb 2023 01:35:32 +0000 (09:35 +0800)]
[UpdateTestChecks][NFC] Share the code to get CHECK prefix between all scripts

Reviewed By: MaskRay

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

17 months ago[Sanitizers] Fix read buffer overrun in scanning loader commands
Mariusz Borsa [Sat, 4 Feb 2023 01:54:10 +0000 (17:54 -0800)]
[Sanitizers] Fix read buffer overrun in scanning loader commands

The fix only affects Darwin, but to write the test I had to modify
the MemoryMappingLayout class which is used by all OSes,
to allow for mocking of image header (this change should be NFC). Hence no [Darwin] in the subject
so I can get more eyes on it.

While looking for a memory gap to put the shadow area into, the sanitizer code
scans through the loaded images, and for each image it scans through its
loader command to determine the occupied memory ranges.

While doing so, if the 'segment load' (kLCSegment) loader comand is encountered, the command scanning function
returns success (true), but does not decrement the command list iterator counter.
The result is that the function is called again and again, with the iterator counter
now being too high. The command scanner keeps updating the loader command pointer,
by using the command size field.

If the loop counter is too high, the command pointer
lands into unintended area ( beyond <header addr>+sizeof(mac_header64)+header->sizeofcmds ),
and result depends on the random content found there.

The random content interpreted as loader command might contain a large integer value in the
cmdsize field - this value is added to the current loader command pointer,
which might now point to an inaccessible memory address. It can occasionally result
in a crash if it happens to run beyond the mapped memory segment.

Note that when the area after the loader command list
contains zeros or small integers only, the loop will end normally and the problem
will go unnoticed. So it happened until now since having a some big value
after the header area, falling into command size field is a pretty rare situation.

The fix makes sure that the iterator counter gets updated when the segment load (kLCSegment)
loader command is found too, and in the same code location so the updates will always go together.

Undo the changes in the sanitizer_procmaps_mac.cpp to see the test failing.

rdar://101161047
rdar://102819707

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

17 months ago[mlgo] fixes for old python versions
Mircea Trofin [Sat, 4 Feb 2023 02:08:14 +0000 (18:08 -0800)]
[mlgo] fixes for old python versions

17 months ago[mlgo] Fix type annotation in log_reader, for older python3 versions
Mircea Trofin [Sat, 4 Feb 2023 02:03:39 +0000 (18:03 -0800)]
[mlgo] Fix type annotation in log_reader, for older python3 versions

17 months ago[mlir][gpu] Allow distributing to different level of IDs without failing
Thomas Raoux [Fri, 3 Feb 2023 22:53:16 +0000 (22:53 +0000)]
[mlir][gpu] Allow distributing to different level of IDs without failing

Change map_nested_foreach_to_threads to ignore foreach_thread not
mapping to threads, this will allow us to call
mapNestedForeachToThreadsImpl with different set of ids to lower
multiple levels. Also adds warpIds attributes.

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

17 months agoReland "[mlgo] Hook up the interactive runner to the mlgo-ed passes"
Mircea Trofin [Sat, 4 Feb 2023 01:03:11 +0000 (17:03 -0800)]
Reland "[mlgo] Hook up the interactive runner to the mlgo-ed passes"

This reverts commit a772f0bb920a4957fb94dd8dbe45943809fd0ec3.

The main problem was related to how we handled `dbgs()` from the hosted
compiler. Using explicit `subprocess.communicate`, and not relying on
dbgs() being flushed until the end appears to address the problem.

Also some fixes due to some bots running older pythons, so we can't have
nice things like `int | float` and such.

17 months ago[MachineOutliner] NFC: Add debug output to overlap pruning code
Jessica Paquette [Sat, 4 Feb 2023 01:38:56 +0000 (17:38 -0800)]
[MachineOutliner] NFC: Add debug output to overlap pruning code

This had no debug output. Since it was committed as NFC, it had no testcase.

The me of today was nerdsniped by the me of 6 years ago and decided that this
ought to have a testcase and some debug output.

17 months agoWalk back an overly-aggressive unXFAIL.
Adrian Prantl [Sat, 4 Feb 2023 01:22:32 +0000 (17:22 -0800)]
Walk back an overly-aggressive unXFAIL.

17 months agoSimplify looping over Operation users in SliceAnalysis (NFC)
Mehdi Amini [Sat, 4 Feb 2023 00:45:51 +0000 (16:45 -0800)]
Simplify looping over Operation users in SliceAnalysis (NFC)

17 months ago[MachineOutliner] NFC: Pull variable out from erase_if
Jessica Paquette [Sat, 4 Feb 2023 00:28:56 +0000 (16:28 -0800)]
[MachineOutliner] NFC: Pull variable out from erase_if

`Mapper.UnsignedVec.begin()` never changes throughout the call to
`erase_if`, so no need to recalculate it.

Also drop some redundant braces.

17 months ago[NFC] Remove redundant check for MBB being empty in outliner
Jessica Paquette [Sat, 4 Feb 2023 00:19:04 +0000 (16:19 -0800)]
[NFC] Remove redundant check for MBB being empty in outliner

If the size is < 2, then we just break anyway.

17 months ago[NFC] Remove unneccessary `llvm::` in MachineOutliner/SuffixTree
Jessica Paquette [Sat, 4 Feb 2023 00:17:35 +0000 (16:17 -0800)]
[NFC] Remove unneccessary `llvm::` in MachineOutliner/SuffixTree

We have `using llvm`, we don't need to say `llvm::`.

17 months ago[NFC] Use SmallVector/ArrayRef in MachineOutliner/SuffixTree for small types
Jessica Paquette [Sat, 4 Feb 2023 00:08:50 +0000 (16:08 -0800)]
[NFC] Use SmallVector/ArrayRef in MachineOutliner/SuffixTree for small types

The MachineOutliner + SuffixTree both used `std::vector` everywhere because I
didn't know any better at the time.

At least for small types, such as `unsigned` and iterators, I can't see any
particular reason to use std::vector over `SmallVector` here.

17 months agoRevert "[mlgo] Hook up the interactive runner to the mlgo-ed passes"
Mircea Trofin [Sat, 4 Feb 2023 00:34:31 +0000 (16:34 -0800)]
Revert "[mlgo] Hook up the interactive runner to the mlgo-ed passes"

This reverts commit a7354899d1a235a796b3a2ccb45f6596983c8672.

The way stdout/stderr get routed seems to work differently locally and
on the bots. Investigating.

17 months agoUnXFAIL test.
Adrian Prantl [Sat, 4 Feb 2023 00:24:42 +0000 (16:24 -0800)]
UnXFAIL test.

17 months ago[mlgo] Hook up the interactive runner to the mlgo-ed passes
Mircea Trofin [Wed, 1 Feb 2023 16:34:16 +0000 (08:34 -0800)]
[mlgo] Hook up the interactive runner to the mlgo-ed passes

This hooks up the interactive model runner to the passes that support
ml-based decisions. Because the interface to this runner is the exact
same as the one used during inference, we just reuse the exact same
setup we have for "release mode". This makes "release mode" a misnomer -
and that's something we needed to resolve sooner or later (e.g.
supporting more than one embedded model for the same problem was another
reason to drop that nomenclature). That will happen in a subsequent
change.

To use this evaluator, just enable the pass in (currently) "release"
mode, but also pass the base name for the 2 channel files via the
pass-specific flag.

The 2 files are the responsibilty of the hosting process. The added
tests use a minimal, toy such host, illustrating setup and
communication.

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

17 months agoUpgrade llgdb script for Python 3 compatibility.
Adrian Prantl [Sat, 4 Feb 2023 00:05:51 +0000 (16:05 -0800)]
Upgrade llgdb script for Python 3 compatibility.

17 months ago[mlir][sparse] implement bufferizableOpInterface for sparse_tensor.pack operation
Peiming Liu [Fri, 3 Feb 2023 17:31:32 +0000 (17:31 +0000)]
[mlir][sparse] implement bufferizableOpInterface for sparse_tensor.pack operation

Reviewed By: aartbik

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

17 months ago[mlir][sparse] implement lowering rules for sparse_tensor.pack operation
Peiming Liu [Fri, 3 Feb 2023 00:28:12 +0000 (00:28 +0000)]
[mlir][sparse] implement lowering rules for sparse_tensor.pack operation

Reviewed By: aartbik

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

17 months ago[Clang][SemaCXX][Coroutines] Fix misleading diagnostics with -Wunsequenced
Bruno Cardoso Lopes [Thu, 19 Jan 2023 03:17:15 +0000 (00:17 -0300)]
[Clang][SemaCXX][Coroutines] Fix misleading diagnostics with -Wunsequenced

D115187 exposed CoroutineSuspendExpr's operand, which makes some nodes to show
up twice during the traversal, confusing the check for unsequenced operations.
Skip the operand since it's already handled as part of the common expression
and get rid of the misleading warnings.

https://github.com/llvm/llvm-project/issues/56768

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

17 months ago[MachineOutliner][AArch64] NFC: Split MBBs into "outlinable ranges"
Jessica Paquette [Wed, 16 Feb 2022 20:50:31 +0000 (12:50 -0800)]
[MachineOutliner][AArch64] NFC: Split MBBs into "outlinable ranges"

Recommit with bug fixes + added testcases to the outliner. Also adds some
debug output.

We found a case in the Swift benchmarks where the MachineOutliner introduces
about a 20% compile time overhead in comparison to building without the
MachineOutliner.

The origin of this slowdown is that the benchmark has long blocks which incur
lots of LRU checks for lots of candidates.

Imagine a case like this:

```
bb:
  i1
  i2
  i3
  ...
  i123456
```

Now imagine that all of the outlining candidates appear early in the block, and
that something like, say, NZCV is defined at the end of the block.

The outliner has to check liveness for certain registers across all candidates,
because outlining from areas where those registers are used is unsafe at call
boundaries.

This is fairly wasteful because in the previously-described case, the outlining
candidates will never appear in an area where those registers are live.

To avoid this, precalculate areas where we will consider outlining from.
Anything outside of these areas is mapped to illegal and not included in the
outlining search space. This allows us to reduce the size of the outliner's
suffix tree as well, giving us a potential memory win.

By precalculating areas, we can also optimize other checks too, like whether
or not LR is live across an outlining candidate.

Doing all of this is about a 16% compile time improvement on the case.

This is likely useful for other targets (e.g. ARM + RISCV) as well, but for now,
this only implements the AArch64 path. The original "is the MBB safe" method
still works as before.

17 months ago[LLVM Utils] Update GitPython for CVE-2022-24439
John Demme [Fri, 3 Feb 2023 23:25:59 +0000 (23:25 +0000)]
[LLVM Utils] Update GitPython for CVE-2022-24439

GitPython 3.1.28 has a security vulnerability which was fixed in 3.1.30:
https://nvd.nist.gov/vuln/detail/CVE-2022-24439

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

17 months ago[libc] add printf auto float conversion
Michael Jones [Mon, 23 Jan 2023 23:11:22 +0000 (15:11 -0800)]
[libc] add printf auto float conversion

This patch adds the final conversion to printf, %g. This is a floating
point conversion that selects automatically between the %e and %f
formats based on the precision requested and resulting exponent.
Additionally it trims trailing zeroes. With this done all that's left
for finishing printf is adding long double support to the decimal float
conversions.

Reviewed By: sivachandra

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

17 months ago[clang][deps] Fix module context hash for constant strings
Ben Langmuir [Wed, 1 Feb 2023 01:56:48 +0000 (17:56 -0800)]
[clang][deps] Fix module context hash for constant strings

We were not hashing constant strings in the command-line, only ones that
required allocations. This was causing us to get the same hash across
different flag options.

rdar://101053855

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

17 months ago[Tooling/Inclusion] qualifed_name() => qualifiedName(), NFC
Haojian Wu [Fri, 3 Feb 2023 22:57:30 +0000 (23:57 +0100)]
[Tooling/Inclusion] qualifed_name() => qualifiedName(), NFC

17 months agoFix tsan problem where the per-thread shared_ptr() can be locked right before the...
Parker Schuh [Fri, 3 Feb 2023 22:53:00 +0000 (23:53 +0100)]
Fix tsan problem where the per-thread shared_ptr() can be locked right before the cache is destroyed causing a race where it tries to remove an entry from a destroyed cache.

This is a rollforward with fixes of https://reviews.llvm.org/rGbcc10817d5569172ee065015747e226280e9b698 (originally https://reviews.llvm.org/D142394). The original patch exposed an asan problem on aarch64, which is fixed by simply calling the context destructors properly.

Reviewed By: rriddle

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

17 months ago[libc++] Remove leftover LIBCXX_ENABLE_CLANG_TIDY in run-buildbot
Louis Dionne [Fri, 3 Feb 2023 22:34:55 +0000 (17:34 -0500)]
[libc++] Remove leftover LIBCXX_ENABLE_CLANG_TIDY in run-buildbot

17 months ago[mlir][sparse] introduce sparse_tensor.pack operation
Peiming Liu [Thu, 2 Feb 2023 23:34:28 +0000 (23:34 +0000)]
[mlir][sparse] introduce sparse_tensor.pack operation

Reviewed By: aartbik

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

17 months ago[libc][NFC] Print the GPU architectures to build and fix the CMake list
Joseph Huber [Fri, 3 Feb 2023 22:20:57 +0000 (16:20 -0600)]
[libc][NFC] Print the GPU architectures to build and fix the CMake list

Summary:
This list previously had empty members. Fix it and print out which
architectures we're building for as a status message.

17 months ago[libc++] Add a CI configuration to test Modules with LSV enabled
Louis Dionne [Thu, 2 Feb 2023 23:50:10 +0000 (18:50 -0500)]
[libc++] Add a CI configuration to test Modules with LSV enabled

Some clients use libc++ with modules and LSV (Local Submodule Visibility)
enabled, and we see frequent downstream breakage caused by that. Until
modules use LSV by default (which is apparently a desire), add a CI job
that tests this sub-configuration to avoid high cost downstream breakage.

For more information about LSV, see https://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20150504/128395.html.

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

17 months ago[mlir][sparse] start using size_hint provided in allocation op
Aart Bik [Fri, 3 Feb 2023 21:08:46 +0000 (13:08 -0800)]
[mlir][sparse] start using size_hint provided in allocation op

Even though we introduced the size_hint, we never used it.
This is a very first step, using the hint during the codegen path.
Note that we can refine the heuristics. Also, we need to start
adding the hint on all allocation generated for reading tensors,
converting tensors, etc.

Reviewed By: Peiming, bixia

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

17 months ago[mlir] Canonicalize dynamic tensor.pad ops with constant inputs
George Petterson [Fri, 3 Feb 2023 21:43:45 +0000 (16:43 -0500)]
[mlir] Canonicalize dynamic tensor.pad ops with constant inputs

This commit adds a canonicalization pattern for tensor.pad which changes the output type to static at each dimension where the input shape is static and the high and low operands are constants. This corrects an issue arising in Torch-MLIR where pad ops would sometimes introduce dynamic shapes unnecessarily.

Reviewed By: raikonenfnu

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

17 months ago[RISCV] Remove side effects from vsetvli intrinsics.
Craig Topper [Fri, 3 Feb 2023 21:03:56 +0000 (13:03 -0800)]
[RISCV] Remove side effects from vsetvli intrinsics.

Delete the opt intrinsics since they are now identical.

I left the side effects due to user expectations about how these
interact with things like inline assembly or function calls. Or
that they wouldn't be hoisted. I think we should look at other
ways to address thoughs.

If I could, I'd rename them these somehow to distance them from
the vsetvli instruction. In some sense they only query the VL for
a particular SEW and LMUL. They don't guarantee a vsetvli
instruction will be emitted.

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

Reviewed By: rogfer01, kito-cheng

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

17 months agoUpdate llgdb to use python3.
Adrian Prantl [Fri, 3 Feb 2023 20:54:10 +0000 (12:54 -0800)]
Update llgdb to use python3.

17 months ago[RISCV] MC relaxation for out-of-range conditional branch.
Craig Topper [Fri, 3 Feb 2023 20:33:44 +0000 (12:33 -0800)]
[RISCV] MC relaxation for out-of-range conditional branch.

If .L1 is not within +-4KiB range,

convert

```
bge a0, a1, .L1
```

to

```
blt a0, a1, 8
j   .L1
```

In this patch, if the symbol is unresolved at assembly time, do not do
this relaxation.

Fix the bug reported in https://bugs.llvm.org/show_bug.cgi?id=47910

Co-authored-by: Hsiangkai Wang
Reviewed By: asb

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

17 months ago[lldb] Add a way to get a scripted process implementation from the SBAPI
Med Ismail Bennani [Fri, 3 Feb 2023 20:28:47 +0000 (12:28 -0800)]
[lldb] Add a way to get a scripted process implementation from the SBAPI

This patch introduces a new `GetScriptedImplementation` method to the
SBProcess class in the SBAPI. It will allow users of Scripted Processes to
fetch the scripted implementation object from to script interpreter to be
able to interact with it directly (without having to go through lldb).

This allows to user to perform action that are not specified in the
scripted process interface, like calling un-specified methods, but also
to enrich the implementation, by passing it complex objects.

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

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
17 months ago[libc][Obvious] Change `ninja llvmlibc` to `ninja libc` in the documentations.
Tue Ly [Fri, 3 Feb 2023 20:16:01 +0000 (15:16 -0500)]
[libc][Obvious] Change `ninja llvmlibc` to `ninja libc` in the documentations.

17 months ago[libc] Add -mavx2 together with -mfma to allow clang pre-12 to generate fma
Tue Ly [Fri, 3 Feb 2023 01:05:30 +0000 (20:05 -0500)]
[libc] Add -mavx2 together with -mfma to allow clang pre-12 to generate fma
instructions.

For clang-11, having -mfma without -mavx2 does not generate fma
instructions, causing a build bot to fail on log10_test.

Reviewed By: sivachandra

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

17 months ago[libc][bazel] Add bazel targets and unit tests for math functions.
Tue Ly [Fri, 3 Feb 2023 16:41:22 +0000 (11:41 -0500)]
[libc][bazel] Add bazel targets and unit tests for math functions.

Add bazel targets and unit tests for single precision exponential,
logarithm, trigonometric, inverse trig, hyperbolic, and inverse hyperbolic
functions.

Reviewed By: sivachandra

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

17 months ago[ORC] Make weak-comdat.ll testcase UNSUPPORTED on Darwin, rather than XFAIL.
Lang Hames [Fri, 3 Feb 2023 20:03:21 +0000 (12:03 -0800)]
[ORC] Make weak-comdat.ll testcase UNSUPPORTED on Darwin, rather than XFAIL.

17 months ago[Cloning] Pass blocks as ArrayRef to remapInstructions (NFC).
Florian Hahn [Fri, 3 Feb 2023 20:03:15 +0000 (20:03 +0000)]
[Cloning] Pass blocks as ArrayRef to remapInstructions (NFC).

Passing ArrayRef doesn't force users to construct a SmallVector to pass
blocks.

17 months ago[sanitizer] Undef _TIME_BITS along with _FILE_OFFSET_BITS on Linux
Khem Raj [Fri, 3 Feb 2023 19:48:35 +0000 (11:48 -0800)]
[sanitizer] Undef _TIME_BITS along with _FILE_OFFSET_BITS on Linux

On 32-bit glibc>=2.34 systems using 64bit time_t build fails because
_FILE_OFFSET_BITS is undefined here but _TIME_BITS is still set to 64

Fixes

```
/usr/include/features-time64.h:26:5: error: "_TIME_BITS=64 is allowed
 only with _FILE_OFFSET_BITS=64"
| #   error "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64"
|     ^
| 1 error generated.
```

Reviewed By: thesamesam, MaskRay

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

17 months ago[InstCombine] fold shuffle of fabs
Sanjay Patel [Fri, 3 Feb 2023 19:19:55 +0000 (14:19 -0500)]
[InstCombine] fold shuffle of fabs

shuffle (fabs X), Mask --> fabs (shuffle X, Mask)
shuffle (fabs X), (fabs Y), Mask --> fabs (shuf X, Y, Mask)

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

This generalizes the existing fneg transforms to also work with fabs.

A likely follow-up would generalize this further to move any unary
intrinsic op.

17 months ago[Docs] Updated my Office Hours
Anastasia Stulova [Fri, 3 Feb 2023 19:10:18 +0000 (19:10 +0000)]
[Docs] Updated my Office Hours

17 months agoRevert "[AMDGPU] Modify adjustInliningThreshold to also consider the cost of passing...
Janek van Oirschot [Fri, 3 Feb 2023 19:09:17 +0000 (19:09 +0000)]
Revert "[AMDGPU] Modify adjustInliningThreshold to also consider the cost of passing function arguments through the stack"

This reverts commit 142c28ffa1323e9a8d53200a22c80d5d778e0d0f.

17 months ago[mlir][sparse] add some documentation to storage layout (NFC)
Aart Bik [Fri, 3 Feb 2023 17:55:51 +0000 (09:55 -0800)]
[mlir][sparse] add some documentation to storage layout (NFC)

in particular, the trailing COO optimization was not
desribed in the general layout description

Reviewed By: Peiming

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

17 months ago[ELF] Support quoted output section names
Fangrui Song [Fri, 3 Feb 2023 19:03:00 +0000 (11:03 -0800)]
[ELF] Support quoted output section names

Similar to e7a7ad134fe182aad190cb3ebc441164470e92f5 and
2bf06d9345caeb26520be8e830c092683bbdf0f7 for other linker script syntax.

Close https://github.com/llvm/llvm-project/issues/60496

17 months ago[mlir] Fix an unused variable warning
Kazu Hirata [Fri, 3 Feb 2023 18:52:35 +0000 (10:52 -0800)]
[mlir] Fix an unused variable warning

This patch fixes:

  mlir/lib/Dialect/Transform/Transforms/TransformInterpreterPassBase.cpp:248:14:
  error: unused variable 'root' [-Werror,-Wunused-variable]

17 months ago[AArch64] Unconditionally use DW_EH_PE_indirect|DW_EH_PE_pcrel personality/lsda/ttype...
Fangrui Song [Fri, 3 Feb 2023 18:41:04 +0000 (10:41 -0800)]
[AArch64] Unconditionally use DW_EH_PE_indirect|DW_EH_PE_pcrel personality/lsda/ttype encodings

For -fno-pic, without DW_EH_PE_indirect, the personality routine pointer in a
CIE needs an R_AARCH64_ABS64 relocation. In common configurations that
`__gcc_personality_v0` is defined in a shared object, this will lead to a
discouraged canonical PLT entry, or, if `ld.lld -z notext` (betwen D122459 and
D143136), a dynamic R_AARCH64_ABS64 relocation with an incorrect offset:
https://github.com/llvm/llvm-project/issues/60392

Since GCC uses DW_EH_PE_indirect for -fno-pic code (the behavior hasn't changed
since the initial port in 2012), let's follow suit by simplifying the code.
(
For tiny and small code models, we use DW_EH_PE_sdata8 instead of GCC's
DW_EH_PE_sdata4. This is a deliberate choice to support personality-.eh_frame
offset > 2GiB. This is necessary for small code model since "Max text segment
size < 2GiB" but it is unnecessary to make `-fno-pic -mcmodel={tiny,small}`
different: The scenarios that uses both -fno-pic and C++ exceptions have been
increasingly rare now, so there is little advantage optimizing for the little
size saving with code complexity.
)

Reviewed By: MatzeB

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

17 months ago[ELF] -z notext: avoid dynamic relocations in .eh_frame
Fangrui Song [Fri, 3 Feb 2023 18:27:33 +0000 (10:27 -0800)]
[ELF] -z notext: avoid dynamic relocations in .eh_frame

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

```
// a.cc
void raise() { throw 42; }
bool foo() {
  try { raise(); } catch (int) { return true; }
  return false;
}
int main() { foo(); }
```

```
clang++ --target=x86_64-linux-gnu -fno-pic -mcmodel=large -no-pie -fuse-ld=lld -z notext a.cc -o a && ./a
clang++ --target=aarch64-linux-gnu -fno-pic -no-pie -fuse-ld=lld -Wl,--dynamic-linker=/usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 -Wl,-rpath=/usr/aarch64-linux-gnu/lib -z notext a.cc -o a && ./a
```
Both commands fail because we produce a dynamic relocation for
R_X86_64_64/R_AARCH64_ABS64 in .eh_frame which will be adjusted to a wrong
offset by `SectionBase::getOffset` after D122459.

Since GNU ld uses a canonical PLT entry instead of a dynamic relocation for
.eh_frame, we follow suit as well to avoid the issue.

Mips has an ABI issue (https://github.com/llvm/llvm-project/issues/5837) and we
don't implement GNU ld's DW_EH_PE_absptr conversion. mips64-eh-abs-reloc.s wants
a dynamic relocation, so keep the original behavior for EM_MIPS.

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