platform/upstream/llvm.git
23 months agoRevert "[compiler-rt][builtins][RISCV] Set COMPILER_RT_HAS_FLOAT16 for RISC-V compile...
Luís Marques [Fri, 29 Jul 2022 11:25:53 +0000 (13:25 +0200)]
Revert "[compiler-rt][builtins][RISCV] Set COMPILER_RT_HAS_FLOAT16 for RISC-V compiler-rt tests, fixes test__extendhfsf2"

This reverts commit 55920d92827c7a6dbb5c7d03f37686a46d7f817f.

23 months ago[compiler-rt][builtins][RISCV] Set COMPILER_RT_HAS_FLOAT16 for RISC-V compiler-rt...
Luís Marques [Fri, 29 Jul 2022 11:21:54 +0000 (13:21 +0200)]
[compiler-rt][builtins][RISCV] Set COMPILER_RT_HAS_FLOAT16 for RISC-V compiler-rt tests, fixes test__extendhfsf2

Since D92241, compiler-rt/cmake/builtin-config-ix.cmake automatically tests
the host compiler for support of _Float16 and conditionally defines
COMPILER_RT_HAS_FLOAT16. That defines the macro while the compiler-rt
builtins are being built. To also define it during the compiler-rt test
runs requires whitelisting the architecture in
compiler-rt/test/builtins/CMakeLists.txt, as done in this patch. That seems
brittle. Ideally, we'd move to a solution where the target compiler was
automatically tested as well, but I'm not sure how feasible that is with the
current CMake setup.

For now, this patch whitelists RISC-V, fixing errors in test__extendhfsf2.
Alternate solutions that fix the root issue are welcome, though.

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

23 months ago[clangd][NFCI] Store TUPath inside ParsedAST
Kadir Cetinkaya [Thu, 28 Jul 2022 09:08:55 +0000 (11:08 +0200)]
[clangd][NFCI] Store TUPath inside ParsedAST

Lots of features built on top of ASTs require getting back to the path
of the TU and they used lossy conversion from file ids using sourcemanager.
This patch preserves the file path passed by the caller inside ParsedAST for
later use.

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

23 months agoVirtualFileSystem.h - don't use \param in general description - use \p instead to...
Simon Pilgrim [Fri, 29 Jul 2022 11:21:44 +0000 (12:21 +0100)]
VirtualFileSystem.h - don't use \param in general description - use \p instead to fix Wdocumentation warnings.

23 months agoFix unknown parameter Wdocumentation warning. NFC.
Simon Pilgrim [Fri, 29 Jul 2022 11:17:30 +0000 (12:17 +0100)]
Fix unknown parameter Wdocumentation warning. NFC.

23 months ago[DAG] Move a few hasOneUse() tests later to reduce unnecessary computations. NFC.
Simon Pilgrim [Fri, 29 Jul 2022 10:34:29 +0000 (11:34 +0100)]
[DAG] Move a few hasOneUse() tests later to reduce unnecessary computations. NFC.

Many of these cases, an early-out on the much cheaper getOpcode() check will avoid us needing to call hasOneUse() entirely.

23 months ago[libc] Fix prototype_test_gen
Guillaume Chatelet [Fri, 29 Jul 2022 10:18:54 +0000 (10:18 +0000)]
[libc] Fix prototype_test_gen

23 months ago[libc] Fix prototype_test_gen
Guillaume Chatelet [Fri, 29 Jul 2022 10:06:54 +0000 (10:06 +0000)]
[libc] Fix prototype_test_gen

23 months ago[Support] Add KnownBits::concat method
Simon Pilgrim [Fri, 29 Jul 2022 10:06:26 +0000 (11:06 +0100)]
[Support] Add KnownBits::concat method

Add a method for the various cases where we need to concatenate 2 KnownBits together (BUILD_PAIR and SHIFT_PARTS in particular) - uses the existing APInt::concat 'HiBits.concat(LoBits)' convention

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

23 months agoFix typo in FPUtil/aarch64/FMA.h
Guillaume Chatelet [Fri, 29 Jul 2022 10:04:11 +0000 (10:04 +0000)]
Fix typo in FPUtil/aarch64/FMA.h

23 months ago[libc][NFC] Use STL case for type_traits
Guillaume Chatelet [Thu, 28 Jul 2022 19:39:19 +0000 (19:39 +0000)]
[libc][NFC] Use STL case for type_traits

Migrating all private STL code to the standard STL case but keeping it under the CPP namespace to avoid confusion. Starting with the type_traits header.

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

23 months ago[IR] Simplify Intrinsic::getDeclaration. NFC.
Jay Foad [Fri, 29 Jul 2022 09:40:58 +0000 (10:40 +0100)]
[IR] Simplify Intrinsic::getDeclaration. NFC.

23 months ago[LoongArch] Offset folding for frameindex
wanglei [Fri, 29 Jul 2022 09:09:04 +0000 (17:09 +0800)]
[LoongArch] Offset folding for frameindex

This patch is for frameindex calculations.

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

23 months ago[LoongArch] Refactor insertDivByZeroTrap
wanglei [Fri, 29 Jul 2022 08:46:14 +0000 (16:46 +0800)]
[LoongArch] Refactor insertDivByZeroTrap

Ensure non-terminators don't follow terminators.
This patch fixes the `sdiv-udiv-srem-urem.ll` test failure with
expensive check.

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

23 months ago[AArch64][DAGCombine] Add performBuildVectorCombine 'extract_elt ~> anyext'
David Sherwood [Fri, 29 Jul 2022 08:32:08 +0000 (09:32 +0100)]
[AArch64][DAGCombine] Add performBuildVectorCombine 'extract_elt ~> anyext'

A build vector of two extracted elements is equivalent to an extract
subvector where the inner vector is any-extended to the
extract_vector_elt VT, because extract_vector_elt has the effect of an
any-extend.

  (build_vector (extract_elt_i16_to_i32 vec Idx+0) (extract_elt_i16_to_i32 vec Idx+1))
  => (extract_subvector (anyext_i16_to_i32 vec) Idx)

Depends on D130697

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

23 months agofix test function attribute [NFC]
Nuno Lopes [Fri, 29 Jul 2022 08:42:44 +0000 (09:42 +0100)]
fix test function attribute [NFC]

23 months ago[NFC][AArch64] Precommit vector-fcvt tests
David Sherwood [Fri, 29 Jul 2022 08:01:35 +0000 (09:01 +0100)]
[NFC][AArch64] Precommit vector-fcvt tests

Add tests which show code quality of uitofp and sitofp.

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

23 months ago[bolt] Replace Optional::getValue with value or operator*. NFC
Fangrui Song [Fri, 29 Jul 2022 08:15:23 +0000 (01:15 -0700)]
[bolt] Replace Optional::getValue with value or operator*. NFC

23 months ago[SCEV] Avoid repeated proveNoSignedWrapViaInduction calls.
Florian Hahn [Fri, 29 Jul 2022 08:15:02 +0000 (09:15 +0100)]
[SCEV] Avoid repeated proveNoSignedWrapViaInduction calls.

 At the moment, proveNoSignedWrapViaInduction may be called for the
same AddRec a large number of times via getSignExtendExpr. This can have
a severe compile-time impact for very loop-heavy code.

If proveNoSignedWrapViaInduction failed to prove NSW the first time,
it is unlikely to succeed on subsequent tries and the cost doesn't seem
to be justified.

This is the signed version of 8daa338297d533d / D130648.

This can drastically improve compile-time in some excessive cases and
also has a slightly positive compile-time impact on CTMark:

NewPM-O3: -0.06%
NewPM-ReleaseThinLTO: -0.04%
NewPM-ReleaseLTO-g: -0.04%

https://llvm-compile-time-tracker.com/compare.php?from=8daa338297d533db4d1ae8d3770613eb25c29688&to=aed126a196e7a5a9803543d9b4d6bdb233d0009c&stat=instructions

Reviewed By: nikic

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

23 months ago[mlir][toy] Replace Optional::getValue with value. NFC
Fangrui Song [Fri, 29 Jul 2022 08:10:51 +0000 (01:10 -0700)]
[mlir][toy] Replace Optional::getValue with value. NFC

23 months agoRevert "[JITLink][COFF] Implement include/alternatename linker directive."
Sunho Kim [Fri, 29 Jul 2022 08:02:29 +0000 (17:02 +0900)]
Revert "[JITLink][COFF] Implement include/alternatename linker directive."

This reverts commit f1fcd06a2a29fc534cb9f365cb4a01559f3378ce.

Faliures reported in
https://lab.llvm.org/buildbot/#/builders/193/builds/16143 and http://lab.llvm.org/buildbot/#/builders/91/builds/13010

23 months ago[ELF] CallGraphSort: replace vector<int> with unique_ptr<int[]>. NFC
Fangrui Song [Fri, 29 Jul 2022 07:59:47 +0000 (00:59 -0700)]
[ELF] CallGraphSort: replace vector<int> with unique_ptr<int[]>. NFC

We can't use C++20 make_unique_for_overwrite yet.

23 months ago[JITLink][COFF] Implement include/alternatename linker directive.
Sunho Kim [Fri, 29 Jul 2022 07:48:04 +0000 (16:48 +0900)]
[JITLink][COFF] Implement include/alternatename linker directive.

Implements include/alternatename linker directive. Alternatename is used by static msvc runtime library. Alias symbol is technically incorrect (we have to search for external definition) but we don't have a way to represent this in jitlink/orc yet, this is solved in the following up patch.

Inlcude linker directive is used in ucrt to forcelly lookup the static initializer symbols so that they will be emitted. It's implemented as extenral symbols with live flag on that cause the lookup of these symbols.

Reviewed By: lhames

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

23 months ago[ELF] Move combineEhSections from Writer to SyntheticSections. NFC
Fangrui Song [Fri, 29 Jul 2022 07:47:29 +0000 (00:47 -0700)]
[ELF] Move combineEhSections from Writer to SyntheticSections. NFC

This not only places the function in the right place, but also allows inlining addSection.

23 months ago[ELF] Combine EhInputSection removal and MergeInputSection removal. NFC
Fangrui Song [Fri, 29 Jul 2022 07:39:57 +0000 (00:39 -0700)]
[ELF] Combine EhInputSection removal and MergeInputSection removal. NFC

23 months ago[JITLink][COFF][x86_64] Implement ADDR64 relocation.
Sunho Kim [Fri, 29 Jul 2022 07:31:14 +0000 (16:31 +0900)]
[JITLink][COFF][x86_64] Implement ADDR64 relocation.

Implements ADDR64 relocation using x86_64 edge kind.

Reviewed By: lhames

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

23 months ago[ELF] Remove redundant isa<InputSection>(sec). NFC
Fangrui Song [Fri, 29 Jul 2022 07:30:52 +0000 (00:30 -0700)]
[ELF] Remove redundant isa<InputSection>(sec). NFC

combineEhSections has been called to remove EhInputSection.

23 months ago[JITLink][COFF] Implement dllimport stubs.
Sunho Kim [Fri, 29 Jul 2022 07:27:07 +0000 (16:27 +0900)]
[JITLink][COFF] Implement dllimport stubs.

Implements dllimport stubs using GOT table manager. Benefit of using GOT table manager is that we can just reuse jitlink-check architecture.

Reviewed By: lhames

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

23 months ago[libc++][ranges] implement `std::ranges::unique{_copy}`
Hui Xie [Sat, 23 Jul 2022 00:44:25 +0000 (01:44 +0100)]
[libc++][ranges] implement `std::ranges::unique{_copy}`

implement `std::ranges::unique` and `std::ranges::unique_copy`

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

23 months ago[clang][Driver] Handle SPARC -mcpu=native etc.
Rainer Orth [Fri, 29 Jul 2022 07:27:09 +0000 (09:27 +0200)]
[clang][Driver] Handle SPARC -mcpu=native etc.

To make use of SPARC support in `getHostCPUName` as implemented by D130272
<https://reviews.llvm.org/D130272>, this patch uses it to handle
`-mcpu=native` and `-mtune=native`.  To match GCC, this patch rejects
`-march` instead of silently treating it as a no-op.

Tested on `sparcv9-sun-solaris2.11` and checking that those options are
passed on as `-target-cpu` resp. `-tune-cpu` as expected.

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

23 months ago[ORC][COFF] Handle COFF import files of static archive.
Sunho Kim [Fri, 29 Jul 2022 05:39:57 +0000 (14:39 +0900)]
[ORC][COFF] Handle COFF import files of static archive.

Handles COFF import files of static archive. Changes static library genrator to build up object file map keyed by symbol name that excludes the symbols from dllimported symbols so that static generator will not be responsible for them. It exposes the list of dynamic libraries that need to be imported. Client should properly load the libraries in this list beforehand. Object file map is also an improvment from the past in terms of performance. Archive.findSym does a slow O(n) linear serach of symbol list to find the symbol. (we call findSym O(n) times, thus full time complexity is O(n^2); we were the only user of findSym function in fact)

There is a room for improvements in how to load the libraries in the list. We currently just hand the responsibility over to the clinet. A better way would be let ORC read this list and hand them over to JITLink side that would also help validation (e.g. not trying to generate stub for non dllimported targets) Nevertheless, we will have to exclude the symbols from COFF import object file list and need a way to access this list, which this patch offers.

Reviewed By: lhames

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

23 months ago[Driver] Use libatomic for 32-bit SPARC atomics support on Linux
Rainer Orth [Fri, 29 Jul 2022 07:19:38 +0000 (09:19 +0200)]
[Driver] Use libatomic for 32-bit SPARC atomics support on Linux

This is the Linux/sparc64 equivalent to D118021
<https://reviews.llvm.org/D118021>, necessary to provide an external
implementation of atomics on 32-bit SPARC which LLVM cannot inline even
with `-mcpu=v9` or an equivalent default.

Tested on `sparc64-unknown-linux-gnu`.

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

23 months ago[ELF] Remove one inputSections loop. NFC
Fangrui Song [Fri, 29 Jul 2022 07:03:50 +0000 (00:03 -0700)]
[ELF] Remove one inputSections loop. NFC

23 months ago[BOLT] Ignore functions accessing false positive jump tables
Huan Nguyen [Fri, 29 Jul 2022 06:17:53 +0000 (23:17 -0700)]
[BOLT] Ignore functions accessing false positive jump tables

Disassembly and branch target analysis are not decoupled, so any
analysis that depends on disassembly may not operate properly.

In specific, analyzeJumpTable uses instruction bounds check property.
A jump table was analyzed twice: (a) during disassembly, and (b) after
disassembly, so there are potentially some mismatched results.

In this update, functions that access JTs which fail the second check
will be marked as ignored.

Test Plan:
```
ninja check-bolt
```

Reviewed By: Amir

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

23 months ago[BOLT] Remove --allow-stripped option
Huan Nguyen [Fri, 29 Jul 2022 06:15:20 +0000 (23:15 -0700)]
[BOLT] Remove --allow-stripped option

AllowStripped has not been used in BOLT.
This option is replaced by actively detecting stripped binary.

Test Plan:

Reviewed By: Amir

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

23 months ago[BOLT] Add BinaryContext::IsStripped
Huan Nguyen [Fri, 29 Jul 2022 06:08:45 +0000 (23:08 -0700)]
[BOLT] Add BinaryContext::IsStripped

Determine stripped status of a binary based on .symtab

Test Plan:
```
ninja check-bolt
```

Reviewed By: Amir

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

23 months ago[LoongArch] Remove the temporary .mir tests as they have been rewrote by .s tests...
Weining Lu [Fri, 29 Jul 2022 02:57:42 +0000 (10:57 +0800)]
[LoongArch] Remove the temporary .mir tests as they have been rewrote by .s tests. NFC

23 months ago[C++20] [Modules] Merge same concept decls in global module fragment
Chuanqi Xu [Fri, 29 Jul 2022 02:44:30 +0000 (10:44 +0800)]
[C++20] [Modules] Merge same concept decls in global module fragment

According to [basic.def.odr]p14, the same redeclarations in different TU
but not attached to a named module are allowed. But we didn't take care
of concept decl for this condition. This patch tries to fix this
problem.

Reviewed By: ilya-biryukov

Differention Revision: https://reviews.llvm.org/D130614

23 months ago[Clang][Attribute] Introduce maybe_undef attribute for function arguments which accep...
skc7 [Tue, 19 Jul 2022 09:53:31 +0000 (09:53 +0000)]
[Clang][Attribute] Introduce maybe_undef attribute for function arguments which accepts undef values

Add the ability to put __attribute__((maybe_undef)) on function arguments.
Clang codegen introduces a freeze instruction on the argument.

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

23 months ago[HLSL] Add HLSLResource attribute
Chris Bieneman [Fri, 15 Jul 2022 21:36:47 +0000 (16:36 -0500)]
[HLSL] Add HLSLResource attribute

HLSL Resource objects will have restrictions on use and codegen
requirements. This patch is fairly minimal just adding the attribute
with no spellings since it will only be attached by the
HLSLExternalSemaSource.

Depends on D1300017.

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

23 months ago[mlir][complex] Canonicalize consecutive complex.conj
lewuathe [Fri, 29 Jul 2022 00:40:57 +0000 (09:40 +0900)]
[mlir][complex] Canonicalize consecutive complex.conj

We can canonicalize consecutive complex.conj just by removing all conjugate operations.

Reviewed By: pifon2a

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

23 months ago[clang-format] Handle Verilog attributes
sstwcw [Fri, 29 Jul 2022 00:17:02 +0000 (00:17 +0000)]
[clang-format] Handle Verilog attributes

Reviewed By: HazardyKnusperkeks, owenpan

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

23 months ago[clang-format] Handle Verilog case statements
sstwcw [Fri, 29 Jul 2022 00:12:46 +0000 (00:12 +0000)]
[clang-format] Handle Verilog case statements

These statements are like switch statements in C, but without the 'case'
keyword in labels.

How labels are parsed.  In UnwrappedLineParser, the program tries to
parse a statement every time it sees a colon.  In TokenAnnotator, a
colon that isn't part of an expression is annotated as a label.

The token type `TT_GotoLabelColon` is added.  We did not include Verilog
in the name because we thought we would eventually have to fix the
problem that case labels in C can't contain ternary conditional
expressions and we would use that token type.

The style is like below.  Labels are on separate lines and indented by
default.  The linked style guide also has examples where labels and the
corresponding statements are on the same lines.  They are not supported
for now.

https://github.com/lowRISC/style-guides/blob/master/VerilogCodingStyle.md

```
case (state_q)
  StIdle:
    state_d = StA;
  StA: begin
    state_d = StB;
  end
endcase
```

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

23 months ago[clang-format] Handle Verilog user-defined primitives
sstwcw [Thu, 28 Jul 2022 23:49:33 +0000 (23:49 +0000)]
[clang-format] Handle Verilog user-defined primitives

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

23 months ago[clang-format] Handle Verilog modules
sstwcw [Thu, 28 Jul 2022 23:39:46 +0000 (23:39 +0000)]
[clang-format] Handle Verilog modules

Now things inside hierarchies like modules and interfaces are
indented.  When the module header spans multiple lines, all except the
first line are indented as continuations.  We added the property
`IsContinuation` to mark lines that should be indented this way.

In order that the colons inside square brackets don't get labeled as
`TT_ObjCMethodExpr`, we added a check to only use this type when the
language is not Verilog.

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

23 months ago[clang-format] Handle Verilog blocks
sstwcw [Thu, 28 Jul 2022 23:24:43 +0000 (23:24 +0000)]
[clang-format] Handle Verilog blocks

Now stuff inside begin-end blocks get indented.

Some tests are moved into FormatTestVerilog.Block from
FormatTestVerilog.If because they have nothing to do with if statements.

Reviewed By: HazardyKnusperkeks, owenpan

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

23 months ago[clang-format] Handle Verilog numbers and operators
sstwcw [Thu, 28 Jul 2022 23:17:19 +0000 (23:17 +0000)]
[clang-format] Handle Verilog numbers and operators

Reviewed By: HazardyKnusperkeks

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

23 months ago[lld/mac] Add support for $ld$previous symbols with explicit symbol name
Nico Weber [Thu, 9 Jun 2022 16:13:31 +0000 (12:13 -0400)]
[lld/mac] Add support for $ld$previous symbols with explicit symbol name

A symbol `$ld$previous$/Another$1.2.3$1$3.0$14.0$_xxx$` means
"pretend symbol `_xxx` is in dylib `/Another` with version `1.2.3`
if the deployment target is between `3.0` and `14.0` and we're
targeting platform `1` (ie macOS)".

This means dylibs can now inject synthetic dylibs into the link, so
DylibFile needs to grow a 3rd constructor.

The only other interesting thing is that such an injected dylib
counts as a use of the original dylib. This patch gets this mostly
right (if _only_ `$ld$previous` symbols are used from a dylib,
we don't add a dep on the dylib itself, matching ld64), but one case
where we don't match ld64 yet is that ld64 even omits the original
dylib when linking it with `-needed-l`. Lld currently still adds a load
command for the original dylib in that case. (That's for a future
patch.)

Fixes #56074.

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

23 months agoAMDGPU: Take care of "tied" operand when removeOperand
Changpeng Fang [Fri, 29 Jul 2022 00:30:49 +0000 (17:30 -0700)]
AMDGPU: Take care of "tied" operand when removeOperand

Summary:
  Flat scratch load of D16 type by default has tied vdst_in operand (with vdst). This should be taken
care of at the time of "removeOperand" in eliminateFrameIndex. Otherwise we will hit an assert saying
"Cannot move tied operands". This patch unties vdst_in before the move, and retie it with vdst afterwards.

Reviewers:
  arsenm, foad

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

23 months ago[Matrix] Refactor transpose distribution. NFC
Francis Visoiu Mistrih [Wed, 20 Jul 2022 09:45:31 +0000 (11:45 +0200)]
[Matrix] Refactor transpose distribution. NFC

Use a function to distribute transposes. Preparation for future patches.

23 months ago[lld-macho] Allow linking with ABI compatible architectures
Vincent Lee [Thu, 28 Jul 2022 06:31:21 +0000 (23:31 -0700)]
[lld-macho] Allow linking with ABI compatible architectures

Linking fails when targeting `x86_64-apple-darwin` for runtimes. The issue
is that LLD strictly assumes the target architecture be present in the tbd
files (which isn't always true). For example, when targeting `x86_64h`, it should
work with `x86_64` because they are ABI compatible. This is also inline with what
ld64 does.

An environment variable (which ld64 also supports) is also added to preserve the
existing behavior of strict architecture matching.

Reviewed By: #lld-macho, int3

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

23 months agoUpdate references to mailing lists that have moved to Discourse.
tlattner [Thu, 28 Jul 2022 23:54:38 +0000 (16:54 -0700)]
Update references to mailing lists that have moved to Discourse.

23 months ago[flang] Fix build failure
V Donaldson [Thu, 28 Jul 2022 21:48:06 +0000 (14:48 -0700)]
[flang] Fix build failure

23 months ago[clang][lld][cmake] Simplify header dirs
John Ericson [Tue, 26 Jul 2022 07:17:30 +0000 (07:17 +0000)]
[clang][lld][cmake] Simplify header dirs

We don't need to recompute the list LLVMConfig.cmake provides us.

When LLVM is being built, the list is two elements long: generated headers and headers from source.

When LLVM is already built,the list is one element long: the installed header directory containing both generated and hand-written sources.

Reviewed By: sebastian-ne

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

23 months ago[LLDB] Fix missing return value in SBBreakpointLocation::GetQueueName()
Slava Gurevich [Wed, 27 Jul 2022 19:30:19 +0000 (12:30 -0700)]
[LLDB] Fix missing return value in SBBreakpointLocation::GetQueueName()

- Fix a typo in the function that never returns a significant value

- Add unit tests for the getters/setters in SBBreakpointLocation

- Verified the newly added unit test succeeds after the fix:
llvm-lit -sv  lldb/test/API/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py

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

23 months ago[Clang] Diagnose ill-formed constant expression when setting a non fixed enum to...
Shafik Yaghmour [Thu, 28 Jul 2022 22:26:15 +0000 (15:26 -0700)]
[Clang] Diagnose ill-formed constant expression when setting a non fixed enum to a value outside the range of the enumeration values

DR2338 clarified that it was undefined behavior to set the value outside the
range of the enumerations values for an enum without a fixed underlying type.

We should diagnose this with a constant expression context.

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

23 months ago[GlobalISel] Handle nullptr constants in dbg.value
Felipe de Azevedo Piovezan [Thu, 28 Jul 2022 21:56:52 +0000 (14:56 -0700)]
[GlobalISel] Handle nullptr constants in dbg.value

Currently, the LLVM IR -> MIR translator fails to translate dbg.values
whose first argument is a null pointer. However, in other portions of
the code, such pointers are always lowered to the constant zero, for
example see IRTranslator::Translate(Constant, Register).

This patch addresses the limitation by following the same approach of
lowering null pointers to zero.

A prior test was checking that null pointers were always lowered to
$noreg; this test is changed to check for zero, and the previous
behavior is now checked by introducing a dbg.value whose first argument
is the address of a global variable.

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

23 months ago[lld-macho] `-exported_symbols` should hide symbols before LTO runs
Jez Ng [Thu, 28 Jul 2022 21:55:12 +0000 (17:55 -0400)]
[lld-macho] `-exported_symbols` should hide symbols before LTO runs

We were previously doing it after LTO, which did have the desired effect
of having the un-exported symbols marked as private extern in the final
output binary, but doing it before LTO creates more optimization
opportunities.

One observable difference is that LTO can now elide un-exported symbols
entirely, so they may not even be present as private externs in the
output.

This is also what ld64 implements.

Reviewed By: #lld-macho, thevinster

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

23 months ago[GlobalISel][nfc] Remove unnecessary cast
Felipe de Azevedo Piovezan [Thu, 28 Jul 2022 21:53:47 +0000 (14:53 -0700)]
[GlobalISel][nfc] Remove unnecessary cast

The getOperand method already returns a Constant when it is called on
a ConstantExpression, as such the cast is not needed. To prevent a type
mismatch between the different return statements of the lambda, the
lambda return type is explicitly provided.

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

23 months ago[mlir] Introduce DefaultValuedOptionalAttr
Jacques Pienaar [Thu, 28 Jul 2022 21:43:13 +0000 (14:43 -0700)]
[mlir] Introduce DefaultValuedOptionalAttr

Currently DefaultValuedAttr is confusingly actually default valued &
optional but that was an artifact of development and longstanding TODO
to address. Add new attribute that matches this behavior for cases where
that is actually the desired behavior before addressing TODO (e.g., this
is an incremental step to fixing DefaultValuedAttr).

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

23 months ago[AMDGPU][Scheduler] Avoid initializing Register pressure tracker when tracking is...
Anshil Gandhi [Thu, 28 Jul 2022 19:27:42 +0000 (13:27 -0600)]
[AMDGPU][Scheduler] Avoid initializing Register pressure tracker when tracking is disabled

When register pressure tracking is disabled, the scheduler attempts to load
pressures at SReg_32 and VGPR_32. This causes an index out of bounds error.
This patch fixes this issue by disabling the initialization of RPTracker
when not needed. NFC

Reviewed By: rampitec, kerbowa, arsenm

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

23 months ago[clang-format] Missing space between trailing return type 'auto' and left brace
Denis Fatkulin [Thu, 28 Jul 2022 21:28:46 +0000 (00:28 +0300)]
[clang-format] Missing space between trailing return type 'auto' and left brace

There's no a space symbol between  trailing return type `auto` and left brace `{`.

The simpliest examles of code to reproduce the issue:

```
[]() -> auto {}
```

and

```
auto foo() -> auto {}
```

Depends on D130299

Reviewed By: HazardyKnusperkeks, curdeius, owenpan

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

23 months ago[mlir] Add Type::isa_and_nonnull
Markus Böck [Thu, 28 Jul 2022 20:41:08 +0000 (22:41 +0200)]
[mlir] Add Type::isa_and_nonnull

23 months agoCache the value for absolute path in FileSpec.
Greg Clayton [Thu, 28 Jul 2022 20:31:41 +0000 (13:31 -0700)]
Cache the value for absolute path in FileSpec.

Checking if a path is absolute can be expensive and currently the result is not cached in the FileSpec object. This patch adds caching and also code to clear the cache if the file is modified.

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

23 months ago[NFC] Improve FileSpec internal APIs and usage in preparation for adding caching...
Greg Clayton [Tue, 26 Jul 2022 06:29:30 +0000 (23:29 -0700)]
[NFC] Improve FileSpec internal APIs and usage in preparation for adding caching of resolved/absolute.

Resubmission of https://reviews.llvm.org/D130309 with the 2 patches that fixed the linux buildbot, and new windows fixes.

The FileSpec APIs allow users to modify instance variables directly by getting a non const reference to the directory and filename instance variables. This makes it impossible to control all of the times the FileSpec object is modified so we can clear cached member variables like m_resolved and with an upcoming patch caching if the file is relative or absolute. This patch modifies the APIs of FileSpec so no one can modify the directory or filename instance variables directly by adding set accessors and by removing the get accessors that are non const.

Many clients were using FileSpec::GetCString(...) which returned a unique C string from a ConstString'ified version of the result of GetPath() which returned a std::string. This caused many locations to use this convenient function incorrectly and could cause many strings to be added to the constant string pool that didn't need to. Most clients were converted to using FileSpec::GetPath().c_str() when possible. Other clients were modified to use the newly renamed version of this function which returns an actualy ConstString:

ConstString FileSpec::GetPathAsConstString(bool denormalize = true) const;

This avoids the issue where people were getting an already uniqued "const char *" that came from a ConstString only to put the "const char *" back into a "ConstString" object. By returning the ConstString instead of a "const char *" clients can be more efficient with the result.

The patch:
- Removes the non const GetDirectory() and GetFilename() get accessors
- Adds set accessors to replace the above functions: SetDirectory() and SetFilename().
- Adds ClearDirectory() and ClearFilename() to replace usage of the FileSpec::GetDirectory().Clear()/FileSpec::GetFilename().Clear() call sites
- Fixed all incorrect usage of FileSpec::GetCString() to use FileSpec::GetPath().c_str() where appropriate, and updated other call sites that wanted a ConstString to use the newly returned ConstString appropriately and efficiently.

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

23 months agollvm-dwp: Include dwo name even when the input is a dwo
David Blaikie [Thu, 28 Jul 2022 20:21:55 +0000 (20:21 +0000)]
llvm-dwp: Include dwo name even when the input is a dwo

This still only includes the dwo name if it's in the DW_AT_dwo_name
attribute in the split unit - though it could be improved/modified to
use the dwo name from the command line (if linking raw dwo files) or
retrieved from the DW_AT_dwo_name in the executable (when using -e).

It's useful in any case because you might have a large command line with
many files and knowing exactly which dwo files are relevant will
simplify debugging, but especially with '-e' when you didn't pass the
dwo files explicitly in nthe first place it would be quite non-obvious
where the duplicate units are coming from.

23 months ago[flang]Fix incorrect array type transformation
Mats Petersson [Wed, 6 Jul 2022 12:38:47 +0000 (13:38 +0100)]
[flang]Fix incorrect array type transformation

When an array is defined with "unknown" size, such as fir.array<2x?x5xi32>,
it should be converted to llvm.array<10 x i32>. The code so far has
been converting it to llvm.ptr<i32>.

Using a different function to check the if there starting are constant
dimensions, rather than if ALL dimensions are constant, it now produces
the correct array form.

Some tests has been updated, so they are now checking the new behaviour
rather than the old behaviour - so there's no need to add further tests
for this particular scenario.

This was originally found when compiling Spec 17 code, where an assert
in a GepOP was hit. That is bug #56141, which this change fixes.

Reviewed By: jeanPerier

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

23 months agoAdd `llvm-dwarfutil` to Bazel targets
Daniele Vettorel [Thu, 28 Jul 2022 19:53:37 +0000 (19:53 +0000)]
Add `llvm-dwarfutil` to Bazel targets

Adds support for building the `llvm-dwarfutil` tool with Bazel

Reviewed By: kuhar

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

23 months ago[mlir][Complex] Change complex.number attribute type to ComplexType.
Adrian Kuegel [Thu, 28 Jul 2022 19:14:57 +0000 (21:14 +0200)]
[mlir][Complex] Change complex.number attribute type to ComplexType.

It is more useful to use ComplexType as type of the attribute than to
use the element type as attribute type. This means when using this
attribute in complex::ConstantOp, we just need to check whether
the types match.

Reviewed By: pifon2a

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

23 months ago[clang][deps] Include canonical invocation in ContextHash
Ben Langmuir [Fri, 15 Jul 2022 17:26:19 +0000 (10:26 -0700)]
[clang][deps] Include canonical invocation in ContextHash

The "strict context hash" is insufficient to identify module
dependencies during scanning, leading to different module build commands
being produced for a single module, and non-deterministically choosing
between them. This commit switches to hashing the canonicalized
`CompilerInvocation` of the module. By hashing the invocation we are
converting these from correctness issues to performance issues, and we
can then incrementally improve our ability to canonicalize
command-lines.

This change can cause a regression in the number of modules needed. Of
the 4 projects I tested, 3 had no regression, but 1, which was
clang+llvm itself, had a 66% regression in number of modules (4%
regression in total invocations). This is almost entirely due to
differences between -W options across targets.  Of this, 25% of the
additional modules are system modules, which we could avoid if we
canonicalized -W options when -Wsystem-headers is not present --
unfortunately this is non-trivial due to some warnings being enabled in
system headers by default. The rest of the additional modules are mostly
real differences in potential warnings, reflecting incorrect behaviour
in the current scanner.

There were also a couple of differences due to `-DFOO`
`-fmodule-ignore-macro=FOO`, which I fixed here.

Since the output paths for the module depend on its context hash, we
hash the invocation before filling in outputs, and rely on the build
system to always return the same output paths for a given module.

Note: since the scanner itself uses an implicit modules build, there can
still be non-determinism, but it will now present as different
module+hashes rather than different command-lines for the same
module+hash.

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

23 months ago[HLSL] Add RWBuffer default constructor
Chris Bieneman [Fri, 15 Jul 2022 21:03:28 +0000 (16:03 -0500)]
[HLSL] Add RWBuffer default constructor

This fills out the default constructor for RWBuffer to assign the
handle with the result of __builtin_hlsl_create_handle which we can
then treat as a pointer to the resource data through the mid-level of
the compiler.

Depends on D130016

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

23 months ago[openmp][amdgpu] Tear down amdgpu plugin accurately
Jon Chesterfield [Thu, 28 Jul 2022 19:00:01 +0000 (20:00 +0100)]
[openmp][amdgpu] Tear down amdgpu plugin accurately

Moves DeviceInfo global to heap to accurately control lifetime.
Moves calls from libomptarget to deinit_plugin later, plugins need to stay
alive until very shortly before libomptarget is destructed.

Leaving the deinit_plugin calls where initially inserted hits use after
free from the dynamic_module.c offloading test (verified with valgrind
 that the new location is sound with respect to this)

Reviewed By: tianshilei1992

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

23 months ago[Reland][Debuginfo][llvm-dwarfutil] Add check for unsupported debug sections.
Alexey Lapshin [Thu, 28 Jul 2022 16:20:58 +0000 (19:20 +0300)]
[Reland][Debuginfo][llvm-dwarfutil] Add check for unsupported debug sections.

Current DWARFLinker implementation does not support some debug sections
(mainly DWARF v5 sections). This patch adds diagnostic for such sections.
The warning would be displayed for critical(such that could not be removed)
sections and the source file would be skipped. Other unsupported sections
would be removed and warning message should be displayed. The zero exit
status would be returned for both cases.

Reviewed By: JDevlieghere

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

23 months ago[AMDGPU] Add isMeta flag to SCHED_GROUP_BARRIER
Austin Kerbow [Thu, 28 Jul 2022 17:53:43 +0000 (10:53 -0700)]
[AMDGPU] Add isMeta flag to SCHED_GROUP_BARRIER

23 months ago[MC][test] Rename two --compress-debug-sections=zlib tests
Fangrui Song [Thu, 28 Jul 2022 17:57:56 +0000 (10:57 -0700)]
[MC][test] Rename two --compress-debug-sections=zlib tests

To be clearer when zstd support is added.

23 months ago[mlir:SubElementsInterface] Add support for "skipping" when replacing attributes...
River Riddle [Thu, 28 Jul 2022 09:40:08 +0000 (02:40 -0700)]
[mlir:SubElementsInterface] Add support for "skipping" when replacing attributes/types

This is used to fix a bug in SymbolTable::replaceAllSymbolUses where we replace symbols that
we shouldn't.

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

23 months ago[llvm-objcopy] Support --{,de}compress-debug-sections for zstd
Fangrui Song [Thu, 28 Jul 2022 17:45:53 +0000 (10:45 -0700)]
[llvm-objcopy] Support --{,de}compress-debug-sections for zstd

Also, add ELFCOMPRESS_ZSTD (2) from the approved generic-abi proposal:
https://groups.google.com/g/generic-abi/c/satyPkuMisk
("Add new ch_type value: ELFCOMPRESS_ZSTD")

Link: https://discourse.llvm.org/t/rfc-zstandard-as-a-second-compression-method-to-llvm/63399
("[RFC] Zstandard as a second compression method to LLVM")

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

23 months ago[AMDGPU] Add amdgcn_sched_group_barrier builtin
Austin Kerbow [Mon, 13 Jun 2022 15:00:19 +0000 (08:00 -0700)]
[AMDGPU] Add amdgcn_sched_group_barrier builtin

This builtin allows the creation of custom scheduling pipelines on a per-region
basis. Like the sched_barrier builtin this is intended to be used either for
testing, in situations where the default scheduler heuristics cannot be
improved, or in critical kernels where users are trying to get performance that
is close to handwritten assembly. Obviously using these builtins will require
extra work from the kernel writer to maintain the desired behavior.

The builtin can be used to create groups of instructions called "scheduling
groups" where ordering between the groups is enforced by the scheduler.
__builtin_amdgcn_sched_group_barrier takes three parameters. The first parameter
is a mask that determines the types of instructions that you would like to
synchronize around and add to a scheduling group. These instructions will be
selected from the bottom up starting from the sched_group_barrier's location
during instruction scheduling. The second parameter is the number of matching
instructions that will be associated with this sched_group_barrier. The third
parameter is an identifier which is used to describe what other
sched_group_barriers should be synchronized with. Note that multiple
sched_group_barriers must be added in order for them to be useful since they
only synchronize with other sched_group_barriers. Only "scheduling groups" with
a matching third parameter will have any enforced ordering between them.

As an example, the code below tries to create a pipeline of 1 VMEM_READ
instruction followed by 1 VALU instruction followed by 5 MFMA instructions...
// 1 VMEM_READ
__builtin_amdgcn_sched_group_barrier(32, 1, 0)
// 1 VALU
__builtin_amdgcn_sched_group_barrier(2, 1, 0)
// 5 MFMA
__builtin_amdgcn_sched_group_barrier(8, 5, 0)
// 1 VMEM_READ
__builtin_amdgcn_sched_group_barrier(32, 1, 0)
// 3 VALU
__builtin_amdgcn_sched_group_barrier(2, 3, 0)
// 2 VMEM_WRITE
__builtin_amdgcn_sched_group_barrier(64, 2, 0)

Reviewed By: jrbyrnes

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

23 months ago [clang-repl] Support destructors of global objects.
Sunho Kim [Thu, 28 Jul 2022 17:37:16 +0000 (02:37 +0900)]
 [clang-repl] Support destructors of global objects.

Supports destructors of global objects by properly calling jitdylib deinitialize which calls the global dtors of ir modules.

This supersedes https://reviews.llvm.org/D127945. There was an issue when calling deinitialize on windows but it got fixed by https://reviews.llvm.org/D128037.

Reviewed By: v.g.vassilev

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

23 months ago[libc++][AIX] Use non-unique implementation for typeinfo comparison
Xing Xue [Thu, 28 Jul 2022 17:17:12 +0000 (13:17 -0400)]
[libc++][AIX] Use non-unique implementation for typeinfo comparison

Summary:
The AIX linker does not merge typeinfos when shared libraries are involved, which causes address comparison to fail although the types are the same. This patch changes to use the non-unique implementation for typeinfo comparison for AIX.

Reviewed by: hubert.reinterpretcast, philnik, libc++

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

23 months ago[RISCV] Update lowerFROUND to use masked instructions.
Craig Topper [Thu, 28 Jul 2022 16:11:56 +0000 (09:11 -0700)]
[RISCV] Update lowerFROUND to use masked instructions.

This avoids a vmerge at the end and avoids spurious fflags updates.
This isn't used for constrained intrinsic so we technically don't have
to worry about fflags, but it doesn't cost much to support it.

To support I've extend our FCOPYSIGN_VL node to support a passthru
operand. Similar to what was done for VRGATHER*_VL nodes.

I plan to do a similar update for trunc, floor, and ceil.

Reviewed By: reames, frasercrmck

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

23 months ago[RISCV] Remove duplicate code. NFC
Craig Topper [Thu, 28 Jul 2022 16:10:55 +0000 (09:10 -0700)]
[RISCV] Remove duplicate code. NFC

The same operations are part of `FloatingPointVecReduceOps` a little
bit earlier.

23 months ago[libc++] Properly log crashes with the assertion handler on older Androids
Louis Dionne [Thu, 28 Jul 2022 14:25:30 +0000 (10:25 -0400)]
[libc++] Properly log crashes with the assertion handler on older Androids

This reintroduces the same workaround we have in libc++abi for older
Androids based on https://reviews.llvm.org/D130507#inline-1255914.

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

23 months ago[mlir][Linalg] Allow decompose to handle ops when value of `outs` operand is used...
Mahesh Ravishankar [Mon, 25 Jul 2022 22:54:15 +0000 (22:54 +0000)]
[mlir][Linalg] Allow decompose to handle ops when value of `outs` operand is used in payload.

Current implementation of decomposition of Linalg operations wouldnt
work if the `outs` operand values were used within the body of the
operation. Relax this restriction. This potentially sets the stage for
decomposing ops with reduction iterator types (but is not done here
since it requires more study).

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

23 months ago[mlir][TilingInterface] Add a method to generate scalar implementation of the op.
Mahesh Ravishankar [Fri, 22 Jul 2022 05:35:00 +0000 (05:35 +0000)]
[mlir][TilingInterface] Add a method to generate scalar implementation of the op.

While The tiling interface provides a mechanism for operations to be
tiled into tiled version of the op (or another op at the same level of
abstraction), the `generateScalarImplementation` method added here is
the "exit point" after all transformations have been done. Ops that
implement this method are expected to generate IR that are directly
lowerable to backend dialects like LLVM or SPIR-V dialects.

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

23 months ago[NFC] Autogenerate CodeGen/PowerPC/pzero-fp-xored.ll
Amaury Séchet [Thu, 28 Jul 2022 15:58:05 +0000 (15:58 +0000)]
[NFC] Autogenerate CodeGen/PowerPC/pzero-fp-xored.ll

23 months ago[DAG] Remove SelectionDAG::GetDemandedBits and use SimplifyMultipleUseDemandedBits...
Simon Pilgrim [Thu, 28 Jul 2022 16:03:35 +0000 (17:03 +0100)]
[DAG] Remove SelectionDAG::GetDemandedBits and use SimplifyMultipleUseDemandedBits directly.

GetDemandedBits is mainly a wrapper around SimplifyMultipleUseDemandedBits now, and is only used by DAGCombiner::visitSTORE so I've moved all remaining functionality there.

visitSTORE was making use of this to 'simplify' constants for a trunc-store. Just removing this code left to a mixture of regressions and gains - it came down to whether a target preferred a sign or zero extended constant for materialization/truncation. I've just moved the code over for now, but a next step would be to move this to targetShrinkDemandedConstant, but some targets that override the method expect a basic binop, and might react badly to a store node.....

23 months ago[LV] Don't predicate uniform mem op stores unneccessarily
Philip Reames [Thu, 28 Jul 2022 15:22:36 +0000 (08:22 -0700)]
[LV] Don't predicate uniform mem op stores unneccessarily

We already had the reasoning about uniform mem op loads; if the address is accessed at least once, we know the instruction doesn't need predicated to ensure fault safety. For stores, we do need to ensure that the values visible in memory are the same with and without predication. The easiest sub-case to check for is that all the values being stored are the same. Since we know that at least one lane is active, this tells us that the value must be visible.

Warning on confusing terminology: "uniform" vs "uniform mem op" mean two different things here, and this patch is specific to the later. It would *not* be legal to make this same change for merely "uniform" operations.

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

23 months ago[amdgpu][openmp][nfc] Restore stb_local on DeviceInfo symbol
Jon Chesterfield [Thu, 28 Jul 2022 15:49:36 +0000 (16:49 +0100)]
[amdgpu][openmp][nfc] Restore stb_local on DeviceInfo symbol

23 months ago[Flang][MLIR][OpenMP] Add support for simdlen clause
Prabhdeep Singh Soni [Thu, 28 Jul 2022 15:49:04 +0000 (23:49 +0800)]
[Flang][MLIR][OpenMP] Add support for simdlen clause

This supports lowering from parse-tree to MLIR and translation from
MLIR to LLVM IR using OMPIRBuilder for OpenMP simdlen clause in SIMD
construct.

Reviewed By: shraiysh, peixin, arnamoy10

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

23 months ago[openmp][amdgpu] Move global DeviceInfo behind call syntax prior to using D130712
Jon Chesterfield [Thu, 28 Jul 2022 15:32:56 +0000 (16:32 +0100)]
[openmp][amdgpu] Move global DeviceInfo behind call syntax prior to using D130712

23 months ago[openmp] Introduce optional plugin init/deinit functions
Jon Chesterfield [Thu, 28 Jul 2022 15:21:36 +0000 (16:21 +0100)]
[openmp] Introduce optional plugin init/deinit functions

Will allow plugins to migrate away from using global variables to
manage lifetime, which will fix a segfault discovered in relation to D127432

Reviewed By: jhuber6

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

23 months ago[gn build] Port d52e775b05a4
LLVM GN Syncbot [Thu, 28 Jul 2022 14:44:36 +0000 (14:44 +0000)]
[gn build] Port d52e775b05a4

23 months ago[llvm][ModuleInliner] Add inline cost priority for module inliner
Liqiang Tao [Mon, 18 Jul 2022 14:49:13 +0000 (22:49 +0800)]
[llvm][ModuleInliner] Add inline cost priority for module inliner

This patch introduces the inline cost priority into the
module inliner, which uses the same computation as
InlineCost.

Reviewed By: kazu

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

23 months ago[gn build] Port c113594378a0
LLVM GN Syncbot [Thu, 28 Jul 2022 14:37:35 +0000 (14:37 +0000)]
[gn build] Port c113594378a0

23 months agoRevert "[llvm][ModuleInliner] Add inline cost priority for module inliner"
Liqiang Tao [Thu, 28 Jul 2022 14:36:17 +0000 (22:36 +0800)]
Revert "[llvm][ModuleInliner] Add inline cost priority for module inliner"

This reverts commit bb7f62bbbd35840006a1d202228e835909f591cf.

23 months agoRevert "[X86][DAGISel] Don't widen shuffle element with AVX512"
Florian Hahn [Thu, 28 Jul 2022 14:26:42 +0000 (15:26 +0100)]
Revert "[X86][DAGISel] Don't widen shuffle element with AVX512"

This reverts commit 5fb41342105700949c81f68aefc85d9c46e9a1a6.

This patch is causing crashes when building llvm-test-suite when
optimizing for CPUs with AVX512.

Reproducer crashing with llc:

    target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
    target triple = "x86_64-apple-macosx"

    define i32 @test(<32 x i32> %0) #0 {
    entry:
      %1 = mul <32 x i32> %0, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
      %2 = tail call i32 @llvm.vector.reduce.add.v32i32(<32 x i32> %1)
      ret i32 %2
    }

    ; Function Attrs: nocallback nofree nosync nounwind readnone willreturn
    declare i32 @llvm.vector.reduce.add.v32i32(<32 x i32>) #1

    attributes #0 = { "min-legal-vector-width"="0" "target-cpu"="skylake-avx512" }
    attributes #1 = { nocallback nofree nosync nounwind readnone willreturn }

23 months ago[DAG] DAGCombiner::visitTRUNCATE - remove GetDemandedBits call
Simon Pilgrim [Thu, 28 Jul 2022 14:23:04 +0000 (15:23 +0100)]
[DAG] DAGCombiner::visitTRUNCATE - remove GetDemandedBits call

This should now all be handled by SimplifyDemandedBits.

23 months ago[HLSL] Add __builtin_hlsl_create_handle
Chris Bieneman [Fri, 15 Jul 2022 20:49:55 +0000 (15:49 -0500)]
[HLSL] Add __builtin_hlsl_create_handle

This is pretty straightforward, it just adds a builtin to return a
pointer to a resource handle. This maps to a dx intrinsic.

The shape of this builtin and the underlying intrinsic will likely
shift a bit as this implementation becomes more feature complete, but
this is a good basis to get started.

Depends on D128569.

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

23 months agoStart support for HLSL `RWBuffer`
Chris Bieneman [Wed, 6 Jul 2022 18:29:48 +0000 (13:29 -0500)]
Start support for HLSL `RWBuffer`

Most of the change here is fleshing out the HLSLExternalSemaSource with
builder implementations to build the builtin types. Eventually, I may
move some of this code into tablegen or a more managable declarative
file but I want to get the AST generation logic ready first.

This code adds two new types into the HLSL AST, `hlsl::Resource` and
`hlsl::RWBuffer`. The `Resource` type is just a wrapper around a handle
identifier, and is largely unused in source. It will morph a bit over
time as I work on getting the source compatability correct, but for now
it is a reasonable stand-in. The `RWBuffer` type is not ready for use.
I'm posting this change for review because it adds a lot of
infrastructure code and is testable.

There is one change to clang code outside the HLSL-specific logic here,
which addresses a behavior change introduced a long time ago in
967d438439ac. That change resulted in unintentionally breaking
situations where an incomplete template declaration was provided from
an AST source, and needed to be completed later by the external AST.
That situation doesn't happen in the normal AST importer flow, but can
happen when an AST source provides incomplete declarations of
templates. The solution is to annotate template specializations of
incomplete types with the HasExternalLexicalSource bit from the base
template.

Depends on D128012.

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