platform/upstream/llvm.git
18 months ago[hwasan] Enable common syscall interceptors
Thurston Dang [Thu, 27 Apr 2023 22:05:46 +0000 (22:05 +0000)]
[hwasan] Enable common syscall interceptors

This adds the sanitizer_common syscall hooks to HWASan and also defines
the COMMON_SYSCALL_PRE_{READ/WRITE}_RANGE macros.

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

18 months agoAdjust macros which define the ML inlining features.
Jacob Hegna [Thu, 27 Apr 2023 21:33:56 +0000 (21:33 +0000)]
Adjust macros which define the ML inlining features.

This aligns the inlining macros more closely with how the regalloc
macros are defined.

 - Explicitly specify the dtype/shape
 - Remove separate names for python/C++
 - Add docstring for inline cost features

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

18 months agolldb: Fix usage of sve functions on arm64
Manoj Gupta [Wed, 19 Apr 2023 22:49:17 +0000 (15:49 -0700)]
lldb: Fix usage of sve functions on arm64

Use correct internal sve functions for arm64.
Otherwise, when cross-compling lld for AArch64 there are build
errors like:
NativeRegisterContextLinux_arm64.cpp:936:11:
   error: use of undeclared identifier 'sve_vl_valid
NativeRegisterContextLinux_arm64.cpp:63:28:
    error: variable has incomplete type 'struct user_sve_header'

Reviewed By: omjavaid

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

18 months ago[profiling] Improve error message for raw profile header mismatches
Jessica Paquette [Thu, 27 Apr 2023 17:32:36 +0000 (10:32 -0700)]
[profiling] Improve error message for raw profile header mismatches

When a user uses a mismatched clang + llvm-profdata, they didn't get a very
informative error message. It would just say "unsupported version".

As a result, users are often confused as to what they are supposed to do and
tend to assume that it's a bug in the profiling runtime.

This patch improves the error message by:

- Adding a new class of error (`raw_profile_version_mismatch`) to make it clear
  that, specifically, the *raw profile* version is unsupported because of a
  tool mismatch.

- Adding an error message that tells the user which raw profile version was
  encountered, which version was expected, and instructs them to align their
  tool versions.

To support this, this patch also updates `InstrProfError::take` to also
propagate the optional error message.

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

18 months ago[gwp_asan] Exclude recoverable tests on Fuchsia
Caslyn Tonelli [Wed, 26 Apr 2023 22:15:21 +0000 (22:15 +0000)]
[gwp_asan] Exclude recoverable tests on Fuchsia

Signal handlers used by recoverable tests are unsupported on Fuchsia.

Exclude the set of tests that test recoverable code paths (i.e.
BacktraceGuardedPoolAllocator tests in recoverable.cpp) and always set
the `Recoverable` testing bool to `false` on the Fuchsia platform.

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

18 months ago[Clang][Sema] Fix comparison of constraint expressions
Alexander Shaposhnikov [Thu, 27 Apr 2023 21:33:32 +0000 (21:33 +0000)]
[Clang][Sema] Fix comparison of constraint expressions

This diff switches the approach to comparison of constraint expressions
to the new one based on template args substitution.
It continues the effort to fix our handling of out-of-line definitions
of constrained templates.
This is a recommit of 60bee9ff5445.

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

18 months ago[Clang] Add tests and mark as implemented WG14-N2728
Tom Honermann [Mon, 24 Apr 2023 20:27:26 +0000 (13:27 -0700)]
[Clang] Add tests and mark as implemented WG14-N2728

This change expands testing of UTF-8, UTF-16, and UTF-32 character and string
literals as validation that WG14 N2728 (char16_t & char32_t string literals
shall be UTF-16 & UTF-32) has been implemented.

Reviewed By: cor3ntin, aaron.ballman

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

18 months ago[libc++] Use __is_convertible built-in when available
Roland McGrath [Thu, 27 Apr 2023 21:18:18 +0000 (14:18 -0700)]
[libc++] Use __is_convertible built-in when available

https://github.com/llvm/llvm-project/issues/62396 reports that
GCC 13 barfs on parsing <type_traits> because of the declarations
of `struct __is_convertible`.  In GCC 13, `__is_convertible` is a
built-in, but `__is_convertible_to` is not.  Clang has both, so
using either should be fine.

Reviewed By: #libc, philnik

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

18 months ago[clang][driver] Enable MisExpect diagnostics flag outside of CC1
Paul Kirth [Tue, 25 Apr 2023 21:13:51 +0000 (21:13 +0000)]
[clang][driver] Enable MisExpect diagnostics flag outside of CC1

Previously we only accepted the `-fdiagnostics-misexpect-tolerance=` at
CC1, when it should have been handled identically to
`-fdiagnostics-hotness-threshold=`. It should not have been required to
pass this flag w/ `-Xclang` as reported here:
https://reviews.llvm.org/D115907#inline-1440745

Reviewed By: hans, phosek

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

18 months ago[CodeGen][MachineLastInstrsCleanup] fix INLINEASM_BR hazard
Nick Desaulniers [Thu, 27 Apr 2023 20:39:54 +0000 (13:39 -0700)]
[CodeGen][MachineLastInstrsCleanup] fix INLINEASM_BR hazard

If the removable definition resides in an INLINEASM_BR target, the
reuseable candidate might not dominate the INLINEASM_BR.

   bb0:
      INLINEASM_BR &"" %bb.1
      renamable $x8 = MOVi64imm 29273397577910035
      B %bb.2
      ...
    bb1:
      renamable $x8 = MOVi64imm 29273397577910035
      renamable $x8 = ADDXri killed renamable $x8, 2048, 0
    bb2:

Removing the second mov is a hazard when the inline asm branches to bb1.

Skip such replacements when the to be removed instruction is in the
target of such an INLINEASM_BR instruction.

We could get more aggressive about this in the future, but for now
simply abort.

This is causing a boot failure on linux-4.19.y branches of the LTS Linux
kernel for ARCH=arm64 with CONFIG_RANDOMIZE_BASE=y (KASLR) and
CONFIG_UNMAP_KERNEL_AT_EL0=y (KPTI).

Link: https://reviews.llvm.org/D123394
Link: https://github.com/ClangBuiltLinux/linux/issues/1837
Thanks to @nathanchance for the report, and @ardb for debugging.

Reviewed By: efriedma

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

18 months ago[CodeGen] precommit machine-latecleanup test
Nick Desaulniers [Thu, 27 Apr 2023 20:39:45 +0000 (13:39 -0700)]
[CodeGen] precommit machine-latecleanup test

Demonstrates a hazard in machine-latecleanup.

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

18 months ago[gn build] Port bf199576f931
LLVM GN Syncbot [Thu, 27 Apr 2023 20:33:13 +0000 (20:33 +0000)]
[gn build] Port bf199576f931

18 months ago[libc++][PSTL][NFC] Rename to `pstl/` to `__pstl/`
Nikolas Klauser [Wed, 26 Apr 2023 17:55:41 +0000 (10:55 -0700)]
[libc++][PSTL][NFC] Rename  to `pstl/` to `__pstl/`

Reviewed By: ldionne, #libc

Spies: sstefan1, pcwang-thead, jplehr, libcxx-commits, arichardson, mgrang, miyuki

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

18 months ago[PGO]Implement metadata combine for 'branch_weights' of direct
Mingming Liu [Fri, 21 Apr 2023 06:44:42 +0000 (23:44 -0700)]
[PGO]Implement metadata combine for 'branch_weights' of direct
callsites when none of the instructions folds the rest away.

- Merge cases are added for simplify-cfg {sink,hoist}, based on https://gcc.godbolt.org/z/avGvc38W7 and https://gcc.godbolt.org/z/dbWbjGhaE
- When one instruction folds the others in, do not update branch_weights
  with sum (see test/Transforms/GVN/calls-readonly.ll)

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

18 months ago[MLIR][LLVM] Add accessor for LLVMModule and invoke convertDialectAttributes on GlobalOps
Andrew Gozillon [Thu, 27 Apr 2023 19:44:19 +0000 (14:44 -0500)]
[MLIR][LLVM] Add accessor for LLVMModule and invoke convertDialectAttributes on GlobalOps

This patch seeks to do two things add an accessor method to
retrieve the ModuleTranslations contained LLVM Module for direct
usage by dialects that are being lowered to LLVM-IR. One particular
use case for this is in the OpenMP Dialect, when interfacing
with the OMPIRBuilder in certain cases it is useful to be able
to access the LLVM Module directly.

The second is invoking convertDialectAttributes on GlobalOp's
so as to be able to lower dialect specific attributes that are
applied or lowered onto GlobalOp's.

Reviewers: ftynse

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

18 months ago[PGO] Fix dead StringRef access
Christian Ulmann [Thu, 27 Apr 2023 19:40:23 +0000 (19:40 +0000)]
[PGO] Fix dead StringRef access

This commit fixes a dead StringRef access introduced in
https://reviews.llvm.org/D149324

18 months ago[libc] Add more missing GPU utilities
Joseph Huber [Thu, 27 Apr 2023 19:35:47 +0000 (14:35 -0500)]
[libc] Add more missing GPU utilities

Summary:
This patch adds a way to get the total number of blocks and implement
the wave sync intrinsic for AMDGPU. This is a no-op, but that may change
in the future so we might as well implement it right.

18 months ago[nfc][thinlto] Handle global constant importing separately
Mircea Trofin [Wed, 26 Apr 2023 21:41:25 +0000 (14:41 -0700)]
[nfc][thinlto] Handle global constant importing separately

This makes the logic for referenced globals reusable for import criteria
that don't use thresholds - in fact, we currently didn't consider any
thresholds when importing.

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

18 months ago[memprof][NFC] Update a stale comment about symbolization.
Snehasish Kumar [Thu, 27 Apr 2023 18:53:37 +0000 (18:53 +0000)]
[memprof][NFC] Update a stale comment about symbolization.

Symbolization of position independent code was added in D146181. Update
the comment to note that the checks below are to sanity check the
assumptions we make to simplify symbolization.

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

18 months ago[flang][hlfir] Fixed passing c_ptr arguments by value.
Slava Zakharin [Wed, 26 Apr 2023 23:24:10 +0000 (16:24 -0700)]
[flang][hlfir] Fixed passing c_ptr arguments by value.

c_ptr arguments passed by value need special handling, which was missing
in HLFIR lowering. The lowering has to load the __address component
and pass the loaded value as the actual argument.

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

18 months ago[ValueTracking] Add logic for `udiv x,y != 0` if `y u<= x`
Noah Goldstein [Thu, 27 Apr 2023 16:03:40 +0000 (11:03 -0500)]
[ValueTracking] Add logic for `udiv x,y != 0` if `y u<= x`

Alive2 Link:
        https://alive2.llvm.org/ce/z/2DKh46

Reviewed By: nikic

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

18 months agoRevert "[MergeICmps] Adapt to non-eq comparisons, bugfix"
Arthur Eubanks [Thu, 27 Apr 2023 18:41:23 +0000 (11:41 -0700)]
Revert "[MergeICmps] Adapt to non-eq comparisons, bugfix"

This reverts commit ca94b02e559242e6d1fcdd65320334438be69448.

Causes miscompiles, see D141188

18 months agoFix spacing in ReleaseNotes.rst link
Alan Zhao [Thu, 27 Apr 2023 18:41:09 +0000 (11:41 -0700)]
Fix spacing in ReleaseNotes.rst link

18 months ago[RISCV] Add a release note for the removal of __attribute__((interrupt("user")))...
Craig Topper [Thu, 27 Apr 2023 18:21:55 +0000 (11:21 -0700)]
[RISCV] Add a release note for the removal of __attribute__((interrupt("user"))). NFC

This was removed by D149314.

18 months ago[flang] Add Clang CMake modules path for Decimal library
Jonathon Penix [Tue, 25 Apr 2023 21:01:23 +0000 (14:01 -0700)]
[flang] Add Clang CMake modules path for Decimal library

This fixes an error that clang_target_link_libraries is unknown
when building the Decimal library standalone--this is the same
as D149090, just for the Decimal library (vs the runtime).

I was still seeing this error for the Decimal library and didn't
see a corresponding patch--apologies in advance if I missed one
or if this is a duplicate!

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

18 months ago[SLP][NFC]Avoid extra useless ConstantVector creation, use PointerUnion
Alexey Bataev [Thu, 27 Apr 2023 17:24:00 +0000 (10:24 -0700)]
[SLP][NFC]Avoid extra useless ConstantVector creation, use PointerUnion
instead, NFC.

Better to use PointerUnion<Value *, const TreeEntry *> instead of extra
attempts of creating null vector values, where possible.

18 months agoAMDGPU: Define sub-class of SGPR_64 for tail call return
Changpeng Fang [Thu, 27 Apr 2023 17:45:11 +0000 (10:45 -0700)]
AMDGPU: Define sub-class of SGPR_64 for tail call return

Summary:
  Registers for tail call return should not be clobbered by callee.
So we need a sub-class of SGPR_64 (excluding callee saved registers (CSR)) to hold
the tail call return address.

Because GFX and C calling conventions have different CSR, we need to define
the sub-class separately. This work is an extension of D147096 with the
consideration of GFX calling convention.

Based on the calling conventions, different instructions will be selected with
different sub-class of SGPR_64 as the input.

Reviewers: arsenm, cdevadas and sebastian-ne

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

18 months agoKeep multiple-include optimization for null directives
Elliot Goodrich [Thu, 27 Apr 2023 17:43:18 +0000 (13:43 -0400)]
Keep multiple-include optimization for null directives

The multiple-include optimization allows Clang to avoid opening a
files when they contain #pragma once or a proper include guard.

Both GCC and Microsoft Visual Studio allow null directives outside of
the #ifndef/#endif pair without disabling this multiple-include
optimization. GCC documents this behavior here
https://gcc.gnu.org/onlinedocs/cppinternals/Guard-Macros.html.

> There must be no directives outside the controlling directive pair,
> but the null directive (a line containing nothing other than a
> single '#' and possibly whitespace) is permitted.

However, Clang disables the multiple-include optimization when
encountering the null directive.

In particular, this slows down preprocessing of most projects that
depend on boost as many boost libraries depend on the boost
preprocessor library, which contains null directives outside the
include guard on every header file.

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

18 months ago[clang] Fix a crash with parenthesized aggregate initialization and base classes
Alan Zhao [Wed, 26 Apr 2023 21:50:01 +0000 (14:50 -0700)]
[clang] Fix a crash with parenthesized aggregate initialization and base classes

When calling InitializeBase(...), TryOrBuidlParenListInit(...) needs to
pass in the parent entity; otherwise, we erroneously try to cast
CurContext to a CXXConstructorDecl[0], which can't be done since we're
performing aggregate initialization, not constructor initialization.

Field initialization is not affected, but this patch still adds some
tests for it.

Fixes 62296

[0]: https://github.com/llvm/llvm-project/blob/33d6bd1c667456f7f4a9d338a7996a30a3af50a3/clang/lib/Sema/SemaAccess.cpp#L1696

Reviewed By: aaron.ballman

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

18 months ago[NFC][MachineFunctionPassManager] Remove unused DebugLogging param
Arthur Eubanks [Thu, 27 Apr 2023 17:37:53 +0000 (10:37 -0700)]
[NFC][MachineFunctionPassManager] Remove unused DebugLogging param

18 months ago[IR][NFC] Change UndefMaskElem to PoisonMaskElem
ManuelJBrito [Thu, 27 Apr 2023 15:22:57 +0000 (16:22 +0100)]
[IR][NFC] Change UndefMaskElem to PoisonMaskElem

Following the change in shufflevector semantics,
poison will be used to represent undefined elements in shufflevector masks.

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

18 months ago[RegAllocFast] Use uint16_t SparseT for LiveRegMap
Alexis Engelke [Wed, 26 Apr 2023 14:26:42 +0000 (16:26 +0200)]
[RegAllocFast] Use uint16_t SparseT for LiveRegMap

For functions with very large numbers of live variables, lookups into
LiveRegMap previously detoriated to linear searches.

This slightly increases memory usage, but that is barely measurable.

Reviewed By: arsenm

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

18 months agoRemove unused attributes from move-dbg-values-imm-test.mir
Shubham Sandeep Rastogi [Thu, 27 Apr 2023 16:11:08 +0000 (09:11 -0700)]
Remove unused attributes from move-dbg-values-imm-test.mir

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

18 months ago[AArch64][InlineAsm]Add Clang support for flag output constraints
Mingming Liu [Tue, 25 Apr 2023 05:13:30 +0000 (22:13 -0700)]
[AArch64][InlineAsm]Add Clang support for flag output constraints

- Mention this change in Clang release notes

Before:
- Clang emits "invalid output constraint '=@cceq' in asm" https://gcc.godbolt.org/z/b9crfEo8h

After:
- For aarch64 targets (with __aarch64__ defined), Clang validates and parses flag output constraints to generate LLVM IR.

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

18 months ago[flang][lowering] Do not instantiate component symbols used in spec expr
Jean Perier [Thu, 27 Apr 2023 16:35:51 +0000 (18:35 +0200)]
[flang][lowering] Do not instantiate component symbols used in spec expr

Lowering analyse specification expressions in order to create order the
symbol instantiations in the IR (If symbol B is used in the
specification expression of A, symbol B must be instantiated first).

This analysis was mistakenly collecting component symbols used in
component references inside specification expressions, which led
lowering to instantiate component symbols as if they were local
objects.

This patch prevents collecting component symbols during this analysis.

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

18 months ago[SLP]Fix a crash for the replaced vectorized value.
Alexey Bataev [Thu, 27 Apr 2023 16:00:21 +0000 (09:00 -0700)]
[SLP]Fix a crash for the replaced vectorized value.

If two nodes share the same value, which is replaced in one of the
nodes, need to automatically replace same value in all nodes. Btter to
use WeakTrackingVH for this to fix compiler crash.

18 months ago[libc++][PSTL][NFC] clang-format files
Nikolas Klauser [Fri, 13 Jan 2023 20:12:54 +0000 (21:12 +0100)]
[libc++][PSTL][NFC] clang-format files

Reviewed By: ldionne, #libc

Spies: sstefan1, pcwang-thead, jplehr, libcxx-commits, arichardson, mgrang

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

18 months ago[libcxx] [test] Prepend to PATH instead of overriding it
Martin Storsjö [Fri, 14 Apr 2023 08:37:24 +0000 (08:37 +0000)]
[libcxx] [test] Prepend to PATH instead of overriding it

On Windows, the PATH env variable is used for locating dynamically
linked librarys, akin to LD_LIBRARY_PATH on Linux.

The tests that run with a dynamically linked libc++ used "--env
PATH=%{lib}" in the test config. This had the unfortunate side effect
of making other tools from PATH unavailable during the runtime of the
tests; in particular, it caused the "executor-has-no-bash" flag to be
set for all those Windows test configs (with the clang-cl static config
being the only one lacking it).

Thus, this increases the number of tests actually included in the
clang-cl dll and all mingw test configs by 9 tests.

The clang-cl static test configuration has been executing those tests
since the "--env PATH=%{lib}" was removed from that test config in
e78223e79efc886ef6f0ea5413deab3737d6d63b. (For mingw we haven't had a
need to split the test config between shared and static, which means
that the mingw static test config previously ran with --env PATH
needlessly.)

This increases the test coverage for patches like D146398 which
can't be executed in the executor-has-no-bash configs.

Change the default value of the arg.env to an empty array; when we do
pass values to the option, they get passed as an array of strings,
so make sure the variable behaves consistently when no arguments
have been passed.

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

18 months ago[libcxx] [test] Unbreak passing multiple env variables in ssh.py
Martin Storsjö [Thu, 27 Apr 2023 07:11:05 +0000 (10:11 +0300)]
[libcxx] [test] Unbreak passing multiple env variables in ssh.py

No test actually does this, but this makes the option behave like
the corresponding one in run.py.

This was broken by commit b8b23aa80eefe84187d6ba364d06496c90c53bdb
(https://reviews.llvm.org/D99242) which introduced quoting; instead
of quoting the whole space separated list, quote each individual
argument.

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

18 months ago[libcxx] [test] Print the failing commands in Configuration{Compilation,Runtime}Error
Martin Storsjö [Thu, 6 Apr 2023 08:19:06 +0000 (11:19 +0300)]
[libcxx] [test] Print the failing commands in Configuration{Compilation,Runtime}Error

This allows for easier debugging of the test environment when something
fails.

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

18 months ago[AArch64] Regenerate trunc-to-tbl and zext-to-tbl tests. NFC
David Green [Thu, 27 Apr 2023 16:21:13 +0000 (17:21 +0100)]
[AArch64] Regenerate trunc-to-tbl and zext-to-tbl tests. NFC

The -mattr=+global-isel is not valid syntax, so those lines have been removed.
With Global-ISel there is currently missing vector legalization for wide G_EXT,
and it does not support BE.

18 months ago[PGO] Minor instrumentation code cleanup (NFC)
Christian Ulmann [Thu, 27 Apr 2023 16:04:51 +0000 (16:04 +0000)]
[PGO] Minor instrumentation code cleanup (NFC)

This commit cleans up some parts of the PGO instrumentation. Most
importantly, it removes a template parameter shadowing of a class name
that could lead to confusion.

Reviewed By: gysit

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

18 months ago[SimplifyCFG] Remove some unnecessary TTI arguments. NFC.
Jay Foad [Thu, 27 Apr 2023 15:58:41 +0000 (16:58 +0100)]
[SimplifyCFG] Remove some unnecessary TTI arguments. NFC.

TTI was already available in the SimplifyCFGOpt class.

18 months ago[MLIR][EmitC] Add empty emitc.constant check
Kiung Jung [Thu, 27 Apr 2023 15:52:59 +0000 (15:52 +0000)]
[MLIR][EmitC] Add empty emitc.constant check

Implementing logic to check if the emitc dialect constant Op is empty.

Reviewed By: marbre

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

18 months ago[LLD][ELF] Fix compressed-debug-level test on SystemZ
Ulrich Weigand [Thu, 27 Apr 2023 15:49:32 +0000 (17:49 +0200)]
[LLD][ELF] Fix compressed-debug-level test on SystemZ

The libz compression library on SystemZ by default makes use of the
platform's hardware-accelerated compression facility. This is much
faster than the regular software implementation, but often results in
slightly different outputs. This causes failures with the
compressed-debug-level test case.

To fix this, run this test while setting the DFLTCC environment
variable to zero, which prevents use of hardware compression and falls
back to the software implementation. (This should not have any effect
on other platforms.)

Reviewed By: MaskRay

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

18 months agoFix PDB relocation on big-endian hosts
Ulrich Weigand [Thu, 27 Apr 2023 15:45:25 +0000 (17:45 +0200)]
Fix PDB relocation on big-endian hosts

When running the LLD test suite on a big-endian host, the
COFF/pdb-framedata.yaml test case currently fails.

As it turns out, this is because code in DebugSHandler::finish
intended to relocate RvaStart entries of FDO records does not
work correctly when compiled for a big-endian host.

Fixed by always reading file data in little-endian mode.

Reviewed By: aganea

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

18 months ago[MLIR][OpenMP] Use inlineConvertOmpRegions for targetData conversion
Akash Banerjee [Thu, 27 Apr 2023 15:26:29 +0000 (15:26 +0000)]
[MLIR][OpenMP] Use inlineConvertOmpRegions for targetData conversion

Co-authored-by: Kiran Chandramohan <kiran.chandramohan@arm.com>
Reviewed By: TIFitis

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

18 months agoDisallow to apply the op & to const
Kiung Jung [Thu, 27 Apr 2023 15:22:23 +0000 (15:22 +0000)]
Disallow to apply the op & to const

Disallow to apply the operator & (address of) to emitc.constant operations.

Reviewed By: marbre, simon-camp

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

18 months ago[LegalizeVectorOps] Use all ones mask when expanding i1 VP_SELECT.
Craig Topper [Thu, 27 Apr 2023 15:26:11 +0000 (08:26 -0700)]
[LegalizeVectorOps] Use all ones mask when expanding i1 VP_SELECT.

We were previously using the condition as the mask. By the semantics
of VP operations, that means that anywhere the condition is false
returns poison and not the false operand.

Use an all ones mask instead.

No tests are affected because RISC-V drops the mask when lowering.

Reviewed By: fakepaper56

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

18 months ago[libc++] Adds newer clang-tidy in the CI.
Mark de Wever [Thu, 20 Apr 2023 19:03:39 +0000 (21:03 +0200)]
[libc++] Adds newer clang-tidy in the CI.

In order to use clang-tidy for modules version 17 is required. Some of the
development fixes haven't been backported. This adds the new version to
the CI so it can be used in a follow-up patch.

Reviewed By: #libc, ldionne

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

18 months ago[mlir][arith] Add missing canon pattern `trunci(ext*i(x)) -> ext*i(x)`
Jakub Kuderski [Thu, 27 Apr 2023 15:13:46 +0000 (11:13 -0400)]
[mlir][arith] Add missing canon pattern `trunci(ext*i(x)) -> ext*i(x)`

This pattern triggers when only the extension bits are truncated.

Reviewed By: dcaballe

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

18 months ago[RISCV] Remove support for attribute interrupt("user").
Craig Topper [Thu, 27 Apr 2023 15:21:24 +0000 (08:21 -0700)]
[RISCV] Remove support for attribute interrupt("user").

This was part of the N extension which didn't make it version
1.12 of the privilege specification.

Reviewed By: kito-cheng

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

18 months ago[libc++][chrono] Adds formatter file_time.
Mark de Wever [Thu, 20 Apr 2023 19:40:36 +0000 (21:40 +0200)]
[libc++][chrono] Adds formatter file_time.

Reviewed By: #libc, ldionne

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

18 months ago[gn build] Port 9d16cbc5c8bd
LLVM GN Syncbot [Thu, 27 Apr 2023 15:07:24 +0000 (15:07 +0000)]
[gn build] Port 9d16cbc5c8bd

18 months ago[libc++] Adds more forward declaration headers.
Mark de Wever [Thu, 20 Apr 2023 19:03:40 +0000 (21:03 +0200)]
[libc++] Adds more forward declaration headers.

The module validation script of D144994 validate whether the contents of
an include match its module. An include is the set of files matching the
pattern:
- foo
- foo/*.
- __fwd/foo.h

Several declarations of the stream headers are in the header iosfwd.
This gives issue using the validation script. Adding iosfwd to the set
of matching files gives too many declarations. For example when
validating the fstream header it will pull in declarations of the
istream header. Instead if writing a set of filters the headers are
granularized into smaller headers containing the expected declarations.

Reviewed By: #libc, ldionne

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

18 months ago[libc++] Fix ODR violation with placeholders
Louis Dionne [Wed, 26 Apr 2023 20:35:13 +0000 (16:35 -0400)]
[libc++] Fix ODR violation with placeholders

In D145589, we made the std::bind placeholders inline constexpr to
satisfy C++17. It turns out that this causes ODR violations since the
shared library provides strong definitions for those placeholders, and
the linker on Windows actually complains about this.

Fortunately, C++17 only encourages implementations to use `inline constexpr`,
it doesn't force them. So instead, we unconditionally define the placeholders
as `extern const`, which avoids the ODR violation and is indistinguishable
from `inline constexpr` for most purposes, since the placeholders are
empty types anyway.

Note that we could also go back to the pre-D145589 state of defining them
as non-inline constexpr variables in C++17, however that is definitely
non-conforming since that means the placeholders have different addresses
in different TUs. This is all a bit pedantic, but all in all I feel that
`extern const` provides the best bang for our buck, and I can't really
find any downsides to that solution.

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

18 months ago[MLIR][OpenMP][test] Update omp::FlagsAttr tests to only use CHECK tests
Andrew Gozillon [Thu, 27 Apr 2023 14:10:34 +0000 (09:10 -0500)]
[MLIR][OpenMP][test] Update omp::FlagsAttr tests to only use CHECK tests

The CHECK-NOT tests were incorrect and impacting the other
tests flag tests negatively, they'd pass as false positives.

18 months ago[MLIR][OpenMP] Add check for appropriate module operation during convertFlagsAttr
Andrew Gozillon [Thu, 27 Apr 2023 13:18:57 +0000 (08:18 -0500)]
[MLIR][OpenMP] Add check for appropriate module operation during convertFlagsAttr

Checks if the operation the attirbute resides on is an ModuleOp otherwise it fails.

18 months ago[clang] Try to fix check-clang after f539b6ffc251
Nico Weber [Thu, 27 Apr 2023 14:12:39 +0000 (10:12 -0400)]
[clang] Try to fix check-clang after f539b6ffc251

18 months ago[PGO] Move CFGMST.h into the include directory
Christian Ulmann [Thu, 27 Apr 2023 14:06:26 +0000 (14:06 +0000)]
[PGO] Move CFGMST.h into the include directory

This commit moves the CFGMST.h file into the include directory. The
implemented algorithm is can be helpful for downstream projects that
want to use the PGO data in a non-standard way.

Reviewed By: gysit

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

18 months ago[Polly] Update polly test after SCEV changes
Nikita Popov [Thu, 27 Apr 2023 14:08:34 +0000 (16:08 +0200)]
[Polly] Update polly test after SCEV changes

Make the phi non-trivial, so SCEV can't see through it.

18 months ago[AMDGPU] Legalize soffset of buffer instructions. Use Waterfall loop logic.
skc7 [Tue, 3 Jan 2023 12:01:58 +0000 (17:31 +0530)]
[AMDGPU] Legalize soffset of buffer instructions. Use Waterfall loop logic.

Legalize soffset of buffer instructions using waterfall loop.

Reviewed By: arsenm

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

18 months agoRevert "[COFF] Add MC support for emitting IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY symbols"
Zequan Wu [Thu, 27 Apr 2023 14:01:56 +0000 (10:01 -0400)]
Revert "[COFF] Add MC support for emitting IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY symbols"

This reverts commit 10c17c97ebaf81ac26f6830e51a7a57ddcf63cd2. It causes undefined symbol error on chromium windows build. A small repro was uploaded to the code review.

18 months ago[MLIR][OpenMP][NFC] Minor code cleanup
Akash Banerjee [Thu, 27 Apr 2023 13:47:42 +0000 (14:47 +0100)]
[MLIR][OpenMP][NFC] Minor code cleanup

Cleanup how the IsBegin argument is passed and removed unnecessary variable.

18 months ago[AArch64] Precommit tests for VECTOR_SHUFFLE
Jingu Kang [Thu, 27 Apr 2023 13:31:40 +0000 (14:31 +0100)]
[AArch64] Precommit tests for VECTOR_SHUFFLE

18 months ago[IR] Change shufflevector undef mask to poison
ManuelJBrito [Wed, 26 Apr 2023 13:19:12 +0000 (14:19 +0100)]
[IR] Change shufflevector undef mask to poison

With this patch an undefined mask in a shufflevector will be printed as poison.
This change is done to support the new shufflevector semantics
for undefined mask elements.

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

18 months ago[InstCombine] Add frozen for the condition value of SelectInst
Zhongyunde [Thu, 27 Apr 2023 13:32:28 +0000 (21:32 +0800)]
[InstCombine] Add frozen for the condition value of SelectInst

If the condition value of SelectInst may be a poison or undef value,
infer constant range at SelectInst use is incorrect, similar to D143883.
Fixes https://github.com/llvm/llvm-project/issues/62401

Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149339

18 months ago[NFC] Add tests from my fix for GH62362.
Erich Keane [Thu, 27 Apr 2023 13:31:46 +0000 (06:31 -0700)]
[NFC] Add tests from my fix for GH62362.

This ended up being fixed separately by @rsmith in 1e43349e3 in a
better/correct way. This patch adds the tests from the original, as
though they are reasonably covered in his patch, explicit versions seem
to have value here.

Additionally, this adds a release note for 1e43349e3.

18 months ago[SCEV] Drop LCSSA check in createNodeFromSelectLikePHI()
Nikita Popov [Thu, 27 Apr 2023 10:57:28 +0000 (12:57 +0200)]
[SCEV] Drop LCSSA check in createNodeFromSelectLikePHI()

SCEV expressions no longer try to preserve LCSSA form. SCEV
construction will try to look through LCSSA phi nodes. As such,
we also no longer need to limit this special-case fold.

18 months ago[SCEV] Try simplifying phi before createNodeFromSelectLikePHI()
Nikita Popov [Thu, 27 Apr 2023 13:05:03 +0000 (15:05 +0200)]
[SCEV] Try simplifying phi before createNodeFromSelectLikePHI()

Sometimes a phi can both be trivial and match the
createNodeFromSelectLikePHI() fold. In that case it is generally
more profitable to look through the phi node.

18 months ago[clangd] Fix the include-cleaner-batch-fix.test failure on some
Haojian Wu [Thu, 27 Apr 2023 12:57:40 +0000 (14:57 +0200)]
[clangd] Fix the include-cleaner-batch-fix.test failure on some
platforms

It seems that on some platforms, the spelling include doesn't work. Make
the test less strict on it.

18 months ago[DebugInfo][InstCombine] Fix missing source and variable locations after foldOpIntoPhi
OCHyams [Thu, 27 Apr 2023 12:44:12 +0000 (13:44 +0100)]
[DebugInfo][InstCombine] Fix missing source and variable locations after foldOpIntoPhi

Reviewed By: fdeazeve

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

18 months ago[KMSAN] Enable on SystemZ
Ilya Leoshkevich [Thu, 27 Apr 2023 11:44:41 +0000 (13:44 +0200)]
[KMSAN] Enable on SystemZ

Enable -fsanitize=kernel-memory support in Clang.

The x86_64 ABI requires that shadow_origin_ptr_t must be returned via a
register pair, and the s390x ABI requires that it must be returned via
memory pointed to by a hidden parameter. Normally Clang takes care of
the ABI, but the sanitizers run long after it, so unfortunately they
have to duplicate the ABI logic.

Therefore add a special case for SystemZ and manually emit the
s390x-ABI-compliant calling sequences. Since it's only 2 architectures,
do not create a VarArgHelper-like abstraction layer.

The kernel functions are compiled with the "packed-stack" and
"use-soft-float" attributes. For the "packed-stack" functions, it's not
correct for copyRegSaveArea() to copy 160 bytes of shadow and origins,
since the save area is dynamically sized. Things are greatly simplified
by the fact that the vararg "use-soft-float" functions use precisely
56 bytes in order to save the argument registers to where va_arg() can
find them.

Make copyRegSaveArea() copy only 56 bytes in the "use-soft-float" case.
The "packed-stack" && !"use-soft-float" case has no practical uses at
the moment, so leave it for the future.

Add tests.

Reviewed By: eugenis

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

18 months ago[SCEV] Regenerate test checks (NFC)
Nikita Popov [Thu, 27 Apr 2023 10:57:28 +0000 (12:57 +0200)]
[SCEV] Regenerate test checks (NFC)

18 months ago[SCEV] Remove LCSSA special case in getSCEVAtScope() (NFCI)
Nikita Popov [Thu, 27 Apr 2023 10:50:22 +0000 (12:50 +0200)]
[SCEV] Remove LCSSA special case in getSCEVAtScope() (NFCI)

We no longer try to preserve LCSSA form in SCEV representation:
Nowadays, we look through LCSSA PHI nodes directly during SCEV
construction. As such, this separate special case in
getSCEVAtScope() is no longer needed.

18 months ago[mlir][test] Remove unused lambda capture 'this' in UtilsTest.cpp (NFC)
Jie Fu [Thu, 27 Apr 2023 10:45:14 +0000 (18:45 +0800)]
[mlir][test] Remove unused lambda capture 'this' in UtilsTest.cpp (NFC)

/data/llvm-project/mlir/unittests/Analysis/Presburger/UtilsTest.cpp:39:17: error: lambda capture 'this' is not used [-Werror,-Wunused-lambda-capture]
  auto merge = [this](unsigned i, unsigned j) -> bool { return true; };
                ^~~~
/data/llvm-project/mlir/unittests/Analysis/Presburger/UtilsTest.cpp:52:17: error: lambda capture 'this' is not used [-Werror,-Wunused-lambda-capture]
  auto merge = [this](unsigned i, unsigned j) -> bool { return true; };
                ^~~~
2 errors generated.

18 months ago[clang][Interp] Emit diagnostic when comparing function pointers
Timm Bäder [Tue, 25 Apr 2023 13:46:20 +0000 (15:46 +0200)]
[clang][Interp] Emit diagnostic when comparing function pointers

Function pointers can be compared for (in)equality but, but LE, GE, LT,
and GT opcodes should emit an error and abort.

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

18 months ago[clangd] Add batch fixes for include-cleaner diagnostics
Haojian Wu [Tue, 25 Apr 2023 19:59:11 +0000 (21:59 +0200)]
[clangd] Add batch fixes for include-cleaner diagnostics

For each unused-include/missing-include diagnostic, we provide fix-all
alternative to them.

This patch also adds LSP ChangeAnnotation support.

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

18 months ago[DAG] Do not call computeKnownBits from isKnownToBeAPowerOfTwo
Jay Foad [Thu, 27 Apr 2023 08:33:24 +0000 (09:33 +0100)]
[DAG] Do not call computeKnownBits from isKnownToBeAPowerOfTwo

The only way known bits could help identify a known power of two is if
it knows exactly which power of two it is, i.e. if it is a known
constant. But in that case the value should have been simplified to a
constant already. So save some compile time by not calling
computeKnownBits.

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

18 months ago[clang][Interp] Check Neg ops for errors
Timm Bäder [Sat, 22 Apr 2023 12:09:14 +0000 (14:09 +0200)]
[clang][Interp] Check Neg ops for errors

This should fail when negating __INT_MIN__.

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

18 months ago[bazel][mlir] fix build for transform utils
Mikhail Goncharov [Thu, 27 Apr 2023 10:02:53 +0000 (12:02 +0200)]
[bazel][mlir] fix build for transform utils

18 months ago[AArch64][FastISel] Handle call with multiple return regs
Alexis Engelke [Fri, 14 Apr 2023 12:35:49 +0000 (14:35 +0200)]
[AArch64][FastISel] Handle call with multiple return regs

The code closely follows the X86 back-end. Applications that make heavy
use of {i64, i64} returns to use two registers strongly benefit from the
reduced number of SelectionDAG fallbacks.

Reviewed By: efriedma

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

18 months ago[X86] Fix -Wstring-conversion in X86InstrInfo.cpp (NFC)
Jie Fu [Thu, 27 Apr 2023 09:52:57 +0000 (17:52 +0800)]
[X86] Fix -Wstring-conversion in X86InstrInfo.cpp (NFC)

/Users/jiefu/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9794:12: error: implicit conversion turns string literal into bool: 'const char[25]' to 'bool' [-Werror,-Wstring-conversion]
    assert("It should not reach here");
    ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode13.1/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk/usr/include/assert.h:99:25: note: expanded from macro 'assert'
    (__builtin_expect(!(e), 0) ? __assert_rtn(__func__, __ASSERT_FILE_NAME, __LINE__, #e) : (void)0)
                      ~ ^
1 error generated.

18 months ago[clang] Do not crash on undefined template partial specialization
Mariya Podchishchaeva [Thu, 27 Apr 2023 09:24:31 +0000 (05:24 -0400)]
[clang] Do not crash on undefined template partial specialization

Before checking that template partial specialization is "reachable",
ensure it exists.

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

Reviewed By: shafik, erichkeane

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

18 months ago[SCEV] Check correct binary operator for nowrap flags
Nikita Popov [Thu, 27 Apr 2023 09:25:40 +0000 (11:25 +0200)]
[SCEV] Check correct binary operator for nowrap flags

We should be checking the current BO here, not the nested one. If
the current BO has nowrap flags (and is UB on poison), then we'll
fetch both operand SCEVs of that BO. We'll check the nested BO
on the next iteration of the do/while loop.

18 months ago[SCEV] Check MatchBinaryOp opcode instead of original opcode
Nikita Popov [Thu, 27 Apr 2023 09:04:55 +0000 (11:04 +0200)]
[SCEV] Check MatchBinaryOp opcode instead of original opcode

These are not necessarily the same (e.g. or can become add) and
this is what we're switching over in the first place.

18 months ago[X86] Fix -Wsometimes-uninitialized in X86InstrInfo.cpp (NFC)
Jie Fu [Thu, 27 Apr 2023 09:08:24 +0000 (17:08 +0800)]
[X86] Fix -Wsometimes-uninitialized in X86InstrInfo.cpp (NFC)

/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9793:3: error: variable 'MaddOpc' is used uninitialized whenever switch default is taken [-Werror,-Wsometimes-uninitialized]
  default:
  ^~~~~~~
/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9854:25: note: uninitialized use occurs here
  Madd->setDesc(TII.get(MaddOpc));
                        ^~~~~~~
/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9791:19: note: initialize the variable 'MaddOpc' to silence this warning
  unsigned MaddOpc;
                  ^
                   = 0
/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9793:3: error: variable 'AddOpc' is used uninitialized whenever switch default is taken [-Werror,-Wsometimes-uninitialized]
  default:
  ^~~~~~~
/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9862:46: note: uninitialized use occurs here
      BuildMI(*MF, MIMetadata(Root), TII.get(AddOpc), DstReg)
                                             ^~~~~~
/data/llvm-project/llvm/lib/Target/X86/X86InstrInfo.cpp:9790:18: note: initialize the variable 'AddOpc' to silence this warning
  unsigned AddOpc;
                 ^
                  = 0
2 errors generated.

18 months ago[bazel][mlir] update build for mem2reg f88f8fd0bca34dc8e5571cb828b1a159a50fd504
Mikhail Goncharov [Thu, 27 Apr 2023 08:43:13 +0000 (10:43 +0200)]
[bazel][mlir] update build for mem2reg f88f8fd0bca34dc8e5571cb828b1a159a50fd504

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

18 months ago[SCEV] Fix getOperandsToCreate() for and/or
Nikita Popov [Thu, 27 Apr 2023 08:49:34 +0000 (10:49 +0200)]
[SCEV] Fix getOperandsToCreate() for and/or

We can create expressions either for constant operand or i1
and/or. The implementation was inverting the latter check.

18 months ago[MLIR][presburger] normalize divisionrepr
gilsaia [Thu, 27 Apr 2023 08:36:29 +0000 (14:06 +0530)]
[MLIR][presburger] normalize divisionrepr

Added a simple normalize function to divisionrepr and added a simple unittest.
Added a normalizediv call to divisionrepr's removeDuplicateDivs function, which now eliminates divs that are consistent after gcd's normalize

Reviewed By: Groverkss

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

18 months ago[X86] Machine combine vnni instruction.
Luo, Yuanke [Fri, 21 Apr 2023 11:28:58 +0000 (19:28 +0800)]
[X86] Machine combine vnni instruction.

"vpmaddwd + vpaddd" can be combined to vpdpwssd and the latency is
reduced after combination. However when vpdpwssd is in a critical path
the combination get less ILP. It happens when vpdpwssd is in a loop, the
vpmaddwd can be executed in parallel in multi-iterations while vpdpwssd
has data dependency for each iterations. If vpaddd is in a critical path
while vpmaddwd is not, it is profitable to split vpdpwssd into "vpmaddwd
+ vpaddd".
This patch is based on the machine combiner framework to acheive decision
on "vpmaddwd + vpaddd" combination. The typical example code is as
below.
```
__m256i foo(int cnt, __m256i c, __m256i b, __m256i *p) {

    for (int i = 0; i < cnt; ++i) {
        __m256i a = p[i];
        __m256i m = _mm256_madd_epi16 (b, a);
        c = _mm256_add_epi32(m, c);
    }

    return c;
}
```

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

18 months ago[BranchFolder] Skip redundant IMPLICIT_DEFs of subregs
Jay Foad [Mon, 17 Apr 2023 10:06:06 +0000 (11:06 +0100)]
[BranchFolder] Skip redundant IMPLICIT_DEFs of subregs

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

18 months ago[BranchFolder] Precommit AMDGPU test case for D148509
Jay Foad [Mon, 17 Apr 2023 10:05:14 +0000 (11:05 +0100)]
[BranchFolder] Precommit AMDGPU test case for D148509

18 months ago[lit] Set __COMPAT_LAYER=RunAsInvoker when running tests on Windows
Alvin Wong [Mon, 24 Apr 2023 13:52:18 +0000 (21:52 +0800)]
[lit] Set __COMPAT_LAYER=RunAsInvoker when running tests on Windows

Windows heuristics try to detect old installer programs and run them as
elevated. These heuristics include checking for certain substrings in
file names, e.g. "patch", "update", "setup". When lit tries to run
affected executables, it produces "[WinError 740] The requested
operation requires elevation" instead. Several tests have been affected
by this issue (see https://reviews.llvm.org/D137772,
https://reviews.llvm.org/D148988, https://reviews.llvm.org/D149004).

We should set this environment variable to disable this heuristic once
and for all, instead of setting it in inidividual test suites. There
should be no lit tests that legitimately want to run as elevated.

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

18 months ago[MLIR][Linalg] Change destination logic in `bubbleUpPackOpThroughGenericOp`.
Lorenzo Chelini [Wed, 26 Apr 2023 09:08:31 +0000 (11:08 +0200)]
[MLIR][Linalg] Change destination logic in `bubbleUpPackOpThroughGenericOp`.

In `bubbleUpPackOpThroughGenericOp`, we replaced the init operands with
a new `tensor.empty` if the operation was a pure element-wise op. This
behaviour is not wrong but not ideal because we "break" the original
use-def-chain of the output operand by materializing a new
`tensor.empty`. We should use `tensor.empty` as a destination *only* if the
initial init operand was already a `tensor.empty`, as we do in
`PushDownUnpack`.

Reviewed By: hanchung

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

18 months agoAMDGPU: Fix an assertion in SIOptimizeVGPRLiveRange
Nicolai Hähnle [Wed, 26 Apr 2023 13:18:51 +0000 (15:18 +0200)]
AMDGPU: Fix an assertion in SIOptimizeVGPRLiveRange

As the comment notes, the shader results in an INSERT_SUBREG with
"undef" (dead) operand in the Endif block. The same can happen with
REG_SEQUENCE. The register is considered dead from a liveness
analysis perspective. The correct thing to do seems to be nothing:
we keep the undef use of the register, the register allocator should
still be able to take the liveness into account correctly.

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

18 months ago[RISCV][Driver] Allow the use of CPUs with a different XLEN than the triple.
Kito Cheng [Thu, 27 Apr 2023 06:35:15 +0000 (14:35 +0800)]
[RISCV][Driver] Allow the use of CPUs with a different XLEN than the triple.

Our downstream toolchain release got some issue is we set the default
triple by creating symbolic link of clang like `riscv64-unknown-elf-clang`,
and has lots of multi-lib config including rv32's config.

However when we trying to set arch by a 32 bit CPU like generic-rv32
but got error message below:
error: unsupported argument 'generic-rv32' to option '-mcpu='

`generic-rv32` is listed in the output of `-mcpu=help`, that
might be confusing for user since help message say supported.

So let clang driver also consider -mcpu option during computing
the target triple to archvie that.

Reviewed By: asb, craig.topper

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

18 months ago[HWASAN] Use InTaggableRegion in basic tagging functions
Vitaly Buka [Wed, 26 Apr 2023 23:26:48 +0000 (16:26 -0700)]
[HWASAN] Use InTaggableRegion in basic tagging functions

For primary use-case when !HWASAN_ALIASING_MODE the function is constant
true and should be eliminated by optimizations.

In case HWASAN_ALIASING_MODE all new calls to the functions were missing
in the first place. We just not use this mode for anything but tests, so
we didn't noticed.

Addressing @thurston comment on D149293

Reviewed By: thurston

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

18 months ago[HWASAN] Untag pointer with TagMaskByte instead 0xFF
Vitaly Buka [Wed, 26 Apr 2023 02:36:26 +0000 (19:36 -0700)]
[HWASAN] Untag pointer with TagMaskByte instead 0xFF

This applies only X86_64 where mask is 0x3F.

Reviewed By: kstoimenov

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

18 months ago[BOLT] Parallelize legacy profile merging
Yi Kong [Fri, 31 Mar 2023 09:08:16 +0000 (17:08 +0800)]
[BOLT] Parallelize legacy profile merging

Merging profiles is quite expensive, but easily paralleizable.

8359 profiles on n2d-standard-128:
single-thread: 808s
multi-thread: 200s (~75% speed up)

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