495344 Commits

Author SHA1 Message Date
AinsleySnow
52b18430ae
[VP][DAGCombine] Use simplifySelect when combining vp.select. (#87342)
Hi all,

This patch is a follow-up of #79101. It migrates logic from
`visitVSELECT` to `visitVP_SELECT` to simplify `vp.select`. With this
patch we can do the following combinations:

```
vp.select undef, T, F --> T (if T is a constant), F otherwise
vp.select <condition>, undef, F --> F
vp.select <condition>, T, undef --> T
vp.select false, T, F --> F
vp.select <condition>, T, T --> T
```

I'm a total newbie to llvm and I'm sure there's room for improvements in
this patch. Please let me know if you have any advice. Thank you in
advance!
2024-04-03 07:45:50 -04:00
Simon Pilgrim
51107be7dd [X86] Haswell/Broadwell/Skylake DPPS folded instructions use an extra port06 resource
This is an extension to 07151f0241d3f893cb36eb2dbc395d4098f74a87 which handled SandyBridge so we at least model the regression identified in #14640

Confirmed by Agner + uops.info/uica (SkylakeServer also had an incorrect use of Port015 instead of just Port01)

I raised #86669 as a proposal for a 'x86 unfold' pass that can unfold these (if we have the free registers) driven by the scheduler model.
2024-04-03 12:28:46 +01:00
Jacek Caban
5c1544c953
[Object][COFF][NFC] Introduce getMachineArchType helper. (#87370)
It's a common pattern that we have a machine type, but we don't care
which ARM64* platform we're dealing with. We already have
isAnyArm64 for that, but it does not fit cases where we use a switch
statement. With this helper, it's easy to simplify such cases by using
Triple::ArchType instead of machine type.
2024-04-03 13:28:23 +02:00
Gleb Popov
0356d0cfdc
Print more descriptive error message when trying to link a global with appending linkage (#69613)
This is a proper fix for https://github.com/llvm/llvm-project/issues/40308
2024-04-03 12:26:12 +01:00
Longsheng Mou
956b47b486
[X86_32] Teach X86_32 va_arg to ignore empty structs. (#86075)
Empty structs are ignored for parameter passing purposes, but va_arg was
incrementing the pointer anyway for that the size of empty struct in c++
is 1 byte, which could lead to va_list getting out of sync. Fix #86057.
2024-04-03 19:12:12 +08:00
Simon Camphausen
1f268092c7
[mlir][EmitC] Add support for pointer and opaque types to subscript op (#86266)
For pointer types the indices are restricted to one integer-like
operand.
For opaque types no further restrictions are made.
2024-04-03 13:06:14 +02:00
Haojian Wu
d0dcf06ab8 [bazel] Port for e05c1b46d0d3739cc48ad912dbe6e9affce05927. 2024-04-03 12:33:30 +02:00
Louis Dionne
d1f585056f
[libc++] Fix tests on musl (#85085) (#86934)
One or two of the tests need slight tweaks to make them pass when
building with musl.

This patch is a re-application of b61fb18 which was reverted in 0847c90
because it broke the build.

rdar://118885724

Co-authored-by: Alastair Houghton <ahoughton@apple.com>
2024-04-03 06:07:46 -04:00
Louis Dionne
ca48d4dfd3
[libc++] Add a static_assert for a Mandates in seed_seq (#86992)
Fixes #84843
2024-04-03 06:06:52 -04:00
Han-Kuan Chen
bf1df25048
[SLP] Use isValidElementType instead of (#87469)
FixedVectorType::isValidElementType for consistency.
2024-04-03 17:57:46 +08:00
Daniel Grumberg
e05c1b46d0
Reenable external categories (#87357)
Reenables b31414bf4f9898f7817a9fcf8a91f62ec26f3eaf.

Also adds a new warning for missing `--symbol-graph-dir` arg when
`--emit-extension-symbol-graphs` is provided. This also reverts the
commit that removed.
2024-04-03 10:18:05 +01:00
Jay Foad
7c7ce0b9b1
[AMDGPU] Remove useless aliases for FLAT instructions. NFC. (#87462)
We were generating "" (the empty string) as an alias for a bunch of FLAT
instructions, which had no effect except to cause tablegen to generate
some very long if-else chains in the generate AsmMatcher.
2024-04-03 10:17:25 +01:00
Chen Zheng
29c7d1a60c [PPC] [NFC] add testcase for more store forwarding 2024-04-03 04:46:29 -04:00
Florian Hahn
e5abd963c7
[VPlan] Remove VPTransformState::addMetadata with ArrayRef arg (NFCI).
addMeadata is only over called with a single element, clean up the
variant that takes multiple values.
2024-04-03 09:43:12 +01:00
Chuanqi Xu
37eb0d4948 [NFC] Check the nullness of pointer before dereference it in the assertion
This was part of https://github.com/llvm/llvm-project/pull/85050.

It is suggested to split the unrelated change as much as possible. So
here is the patch.
2024-04-03 16:39:02 +08:00
Chuanqi Xu
72c29fa9e2 [C++20] [Modules] [Driver] Emit unused argument warning if we use '-fmodule-output' with non-module input
We required the file name of an 'importable module unit' should end
with .cppm (or .ccm, .cxxm, .c++m).

But the driver can accept '-fmodule-output' for files with normal
suffixes (e.g., .cpp). This is somewhat inconsistency.

In this patch, we only claim the option `-fmodule-output` is used if
the type of the input file is modules related. Then now the compiler
will emit 'unused argument' warnings if the input file is not modules
related.
2024-04-03 16:28:05 +08:00
Elizaveta Noskova
4dd103e9c6
[CodeGen][ShrinkWrap] Clarify StackAddressUsedBlockInfo meaning (#80679) 2024-04-03 11:22:43 +03:00
Phoebe Wang
cd7517859e Revert "[Win32][ELF] Make CodeView a DebugInfoFormat only for COFF format (#87149)"
This reverts commit 4b25053ae47f50095371a663391baadfd2694eb0.

There're failures in some target.
2024-04-03 16:10:19 +08:00
David Green
6288f36c16
[AArch64][GlobalISel] Basic add_sat and sub_sat vector handling. (#80650)
This tries to fill in the basic vector handling for sadd_sat/uadd_sat
and ssub_sat/usub_sat. It just handles the basics, marking legal types
and clamping illegally sized vectors to legal ones.
2024-04-03 08:44:51 +01:00
Phoebe Wang
4b25053ae4
[Win32][ELF] Make CodeView a DebugInfoFormat only for COFF format (#87149)
We have many problems to use CodeView for a win32-elf target, e.g.,
#87140 and `error: .seh_* directives are not supported on this target`.

Fixes: #87140
2024-04-03 15:21:34 +08:00
Chuanqi Xu
468dc32ff5 [NFC] Make DeclContext::noload_lookup() accept transparent context
Now the `DeclContext::noload_lookup()` asserts that 'this' is not a
transparent context. However, this is not consistent with
`DeclContext::lookup()`, which will lookup into its parent context if
'this' is a transparent context.

This patch makes the behavior of `DeclContext::noload_lookup()` to be
consistent with `DeclContext::lookup()`, to lookup into the parent
context if 'this' is a transparent context.
2024-04-03 15:03:07 +08:00
Chuanqi Xu
a75b3e949d [NFC] [Serialization] Extract logics to write decls and types into a standalone function
This patch extract logics in ASTWriter::WriteASTCore about writing decls
and types into a standalone function. The WriteASTCore function is
pretty long and hard to read. It should be helpful for readability to extract the common
logics into a standalone function.

This is also helpful for further changes e.g., removing unreachable
declarations.
2024-04-03 14:55:20 +08:00
Bevin Hansson
7edddee2aa
[ExpandLargeFpConvert] Scalarize vector types. (#86954)
expand-large-fp-convert cannot handle vector types.
If overly large vector element types survive into
isel, they will likely be scalarized there, but since
isel cannot handle scalar integer types of that size,
it will assert.

Handle vector types in expand-large-fp-convert by
scalarizing them and then expanding the scalar type
operation. For large vectors, this results in a
*massive* code expansion, but it's better than
asserting.
2024-04-03 08:45:59 +02:00
hanbeom
4ef22fce82
[InstCombine] Simplify select if it combinated and/or/xor (#73362)
`and/or/xor` operations can each be changed to sum of logical
operations including operators other than themselves.

 `x&y -> (x|y) ^ (x^y)`
 `x|y -> (x&y) | (x^y)`
 `x^y -> (x|y) ^ (x&y)`

if left of condition of `SelectInst` is `and/or/xor` logical
operation and right is equal to `0, -1`, or a `constant`, and
if `TrueVal` consist of `and/or/xor` logical operation then we
can optimize this case.

This patch implements this combination.

Proof: https://alive2.llvm.org/ce/z/WW8iRR

Fixes https://github.com/llvm/llvm-project/issues/71792.
2024-04-03 14:29:10 +08:00
Mingming Liu
de3e05ecb2
[nfc]Remove the check for compressed strings in llvm/test/.../vtable_profile.ll (#87449)
The check for compressed string is too restrictive (e.g. broke downstream users) and doesn't add much value to the test. Removed it.
2024-04-02 21:45:58 -07:00
Slava Zakharin
2b86fb21f8
[flang][runtime] Avoid recursive calls in F18 runtime CUDA build. (#87428)
Recurrencies in the call graph (even if they are not executed)
prevent computing the minimal stack size required for a kernel
execution. This change disables some functionality of F18 IO
to avoid recursive calls. A couple of functions are rewritten
to work without using recursion.
2024-04-02 21:03:49 -07:00
smanna12
324436c29f
[Clang] Fix bugs the way we handle duplicate vs conflicting values with loop attribute 'code_align' (#87372)
https://github.com/llvm/llvm-project/pull/70762 added support for new
loop attribute [[clang::code_align()]].

This patch fixes bugs for the test cases below that misses diagnostics due to discontinue to while loop during checking duplicate vs conflicting code_align attribute values in routine CheckForDuplicateLoopAttrs().

[[clang::code_align(4)]]
[[clang::code_align(4)]]
[[clang::code_align(8)]]
for(int I=0; I<128; ++I) { bar(I); }

[[clang::code_align(4)]]
[[clang::code_align(4)]]
[[clang::code_align(8)]]
[[clang::code_align(32)]]
for(int I=0; I<128; ++I) { bar(I); }
2024-04-02 22:59:48 -05:00
Jonas Devlieghere
83402c3019
[dsymutil] Support generating dSYMs for firmware environments (#87432)
Support generating dSYM companion files for (non-Darwin) firmware
environments by considering the binary component of the triple in
addition to the OS component.

rdar://125629792
2024-04-02 20:43:28 -07:00
Chuanqi Xu
ed1cfffe9b [NFC] [C++20] [Modules] [Reduced BMI] Make sure the size of reduced BMI is not large than full BMI
Before this patch, the size of the reduced BMI may be large than the
full BMI when the source codes is pretty small. This violates the design
principles. The root cause is an oversight that we skipped something
in full BMI but forgot to make it in reduced BMI.
2024-04-03 10:51:42 +08:00
Vinayak Dev
986435c765
[libc] Move {f,d}sqrt to higher functions in docs (#87445)
Moves the functions `fsqrt()` and `dsqrt()` from basic functions to
higher math functions in math docs
2024-04-02 22:39:48 -04:00
Fangrui Song
93c16e75b8 [ELF] Actually sort IRELATIVE by offset
The unstable partition in partitionRels might reverse IRELATIVE
relocations, so stable_partition in computeRels would lead to IRELATIVE
relocations ordered by decreasing offset. Use stable_partition in
partitionRels to get IRELATIVE relocations ordered by increasing offset.
2024-04-02 19:34:14 -07:00
Vinayak Dev
2fb5440e76
[libc] Re-organize the math function tables in docs (#87412)
Re-organizes the tables that listed libc's support for math functions,
and adds two new columns to the tables indicating where the respective
function definitions and error handling methods are located in the C23
standard draft WG14-N3096.
2024-04-02 22:23:35 -04:00
Cinhi Young
8b859c6e4a
[MIPS] Fix the opcode of max.fmt and mina.fmt (#85609)
- The opcode of the mina.fmt and max.fmt is documented wrong, the
  object code compiled from the same assembly with LLVM behaves
  differently than one compiled with GCC and Binutils.
- Modify the opcodes to match Binutils. The actual opcodes are as
follows:

  {5,3} | bits {2,0} of func
           |    ...   | 100  | 101    | 110   | 111
  -----+-----+-----+-----+-----+-----
   010  |   ...   |  min  | mina | max  | maxa
2024-04-03 10:14:02 +08:00
Joseph Huber
943f39d29e Revert "[Libomptarget] Add RPC-based printf implementation for OpenMP (#85638)"
This reverts commit 2cf8118e3aa60f406ec41e88bdd4304f39744e89.

Failing tests, revert until I can fix it
2024-04-02 20:53:45 -05:00
Fangrui Song
01e227487f [ELF] Sort IRELATIVE by offset
Improve the test gnu-ifunc-nonpreemptible.s to check IRELATIVE offsets.
Ensure that IRELATIVE offsets are ordered to improve locality.
2024-04-02 18:47:49 -07:00
Jan Svoboda
c925c1646d
[clang][modules] NFCI: Pragma diagnostic mappings: write/read FileID instead of SourceLocation (#87427)
For pragma diagnostic mappings, we always write/read `SourceLocation`
with offset 0. This is equivalent to just writing a `FileID`, which is
exactly what this patch starts doing.

Originally reviewed here: https://reviews.llvm.org/D137213
2024-04-03 03:36:53 +02:00
Craig Topper
3b19cd7f80
[RISCV] Slightly simplify RVVArgDispatcher::constructArgInfos. NFC (#87308)
Use a single insert for the non-mask case instead of a push_back
followed by an insert that may contain 0 registers.
2024-04-02 18:34:03 -07:00
Matthias Springer
a27d886ce4
[mlir][linalg][bufferize] Fix element-wise access optimization for sparse tensors (#87305)
`linalg.generic` ops with sparse tensors do not necessarily bufferize to
element-wise access, because insertions into a sparse tensor may change
the layout of (or reallocate) the underlying sparse data structures.
2024-04-03 09:57:25 +09:00
Joseph Huber
3ae5c77e97 [libc] Move include so it covers the other files
Summary:
This is more hacky, but I want to get the bot green before we work on a
better solution.
2024-04-02 19:45:35 -05:00
Ryotaro KASUGA
ea4a11926b
Reapply "[CodeGen] Fix register pressure computation in MachinePipeli… (#87312)
…ner (#87030)"

Fix broken test.

This reverts commit b8ead2198f27924f91b90b6c104c1234ccc8972e.
2024-04-03 09:28:09 +09:00
A. Jiang
04dbf7ad44
[libc++][ranges] Avoid using distance in ranges::contains_subrange (#87155)
Both `std::distance` or `ranges::distance` are inefficient for
non-sized ranges. Also, calculating the range using `int` type is
seriously problematic.

This patch avoids using `distance` and calculation of the length of
non-sized ranges.

Fixes #86833.
2024-04-02 17:21:15 -07:00
Daniil Kovalev
c45861f437
Revert "[PAC][llvm-readobj][AArch64][ELF] Support GNU_PROPERTY_AARCH64_FEATURE_PAUTH" (#87434)
Reverts llvm/llvm-project#85231

See build failure
https://lab.llvm.org/buildbot/#/builders/186/builds/15631
2024-04-03 03:15:47 +03:00
Joseph Huber
0492e1e795 [libc] Include 'config.h' from the printf structs for builtins 2024-04-02 19:15:24 -05:00
Spenser Bauman
0a94d35bfb
[mlir][tosa] Fix tosa-infer-shapes crash (#87234)
The tosa-infer-shapes pass inserts tensor.cast operations to mediate
refined result types with consumers whose types cannot be refined. This
process interferes with how types are refined in tosa.while_loop body
regions, where types are propagated speculatively (to determine the
types of the tosa.yield terminator) and then reverted.

The new tosa.cast operations result in a crash due to not having types
associated to them for the reversion process.

This change modifies the shape propagation behavior so that the
introduction to tensor.cast operations behaves better with this type
reversion process. The new behavior is to only introduce tensor.cast
operations once we wish to commit the newly computed types to the IR.

This is an example causing the crash:

```mlir
func.func @while_dont_crash(%arg0 : tensor<i32>) -> (tensor<*xi32>) {
  %0 = tosa.add %arg0, %arg0 : (tensor<i32>, tensor<i32>) -> tensor<*xi32>

  %1 = tosa.while_loop (%arg1 = %0) : (tensor<*xi32>) -> tensor<*xi32> {
    %2 = "tosa.const"() <{value = dense<3> : tensor<i32>}> : () -> tensor<i32>
    %3 = tosa.greater_equal %2, %arg1 : (tensor<i32>, tensor<*xi32>) -> tensor<*xi1>
    tosa.yield %3 : tensor<*xi1>
  } do {
  ^bb0(%arg1: tensor<*xi32>):
    // Inferrable operation whose type will refine to tensor<i32>
    %3 = tosa.add %arg1, %arg1 : (tensor<*xi32>, tensor<*xi32>) -> tensor<*xi32>

    // Non-inferrable use site, will require the cast:
    //     tensor.cast %3 : tensor<i32> to tensor<*xi32>
    // 
    // The new cast operation will result in accessing undefined memory through
    // originalTypeMap in the C++ code.
    "use"(%3) : (tensor<*xi32>) -> ()
    tosa.yield %3 : tensor<*xi32>
  }

  return %1 : tensor<*xi32>
}
```

The `tensor.cast` operation inserted in the loop body causes a failure
in the code which resets the types after propagation through the loop
body:

```c++
// The types inferred in the block assume the operand types specified for
// this iteration. We need to restore the original types to ensure that
// future iterations only use the already specified types, not possible
// types from previous iterations.
for (auto &block : bodyRegion) {
  for (auto arg : block.getArguments())
    arg.setType(originalTypeMap[arg]);
  for (auto &op : block)
    for (auto result : op.getResults())
      result.setType(originalTypeMap[result]);  // problematic access
}
```

---------

Co-authored-by: Spenser Bauman <sabauma@fastmail>
2024-04-02 19:45:27 -04:00
Michael Buch
e61d6b74dd
[lldb][SymbolFileDWARFDebugMap] Introduce enum to indicate whether to continue iteration of object files (#87344)
This patch introduces a new `IterationMarker` enum (happy to take
alternative name suggestions), which callbacks, like the one in
`SymbolFileDWARFDebugMap::ForEachSymbolFile`, can return in order to
indicate whether the caller should continue iterating or bail.

For now this patch just changes the `ForEachSymbolFile` callback to use
this new enum. In the future we could change the various
`DWARFIndex::GetXXX` callbacks to do the same.

This makes the callbacks easier to read and hopefully reduces the chance
of bugs like https://github.com/llvm/llvm-project/pull/87177.
2024-04-03 00:28:12 +01:00
Jan Kokemüller
84ae8cb4af
[libc++] std::ranges::advance: avoid unneeded bounds checks when advancing iterator (#84126)
Currently, the bounds check in `std::ranges::advance(it, n, s)` is done
_before_ `n` is checked. This results in one extra, unneeded bounds
check.

Thus, `std::ranges::advance(it, 1, s)` currently is _not_ simply
equivalent to:

```c++
if (it != s) {
    ++it;
}
```

This difference in behavior matters when the check involves some
"expensive" logic. For example, the `==` operator of
`std::istreambuf_iterator` may actually have to read the underlying
`streambuf`.

Swapping around the checks in the `while` results in the expected
behavior.
2024-04-02 16:09:26 -07:00
Changpeng Fang
12c7371296
AMDGPU: Use PseudoInstr instead of Pseudo Mnemonic for SIMCInstr, NFC (#87420)
Pseudo Mnemonic could be of other uses.
2024-04-02 15:51:28 -07:00
Vitaly Buka
633bc3bfda [CodeGen][NFC] Make an opt<> static 2024-04-02 15:47:04 -07:00
Jon Chesterfield
b4adb42151 Use setup_host_tool for clang-ast-dump, fixes 76707 2024-04-02 23:21:48 +01:00
Haowei
68217a52fb
[Fuchsia] Add SWIG flags to Fuchsia Clang stage2 build (#87421)
This patch adds SWIG cmake flags to the stage2 build in Fuchsia
Clang configuration.
2024-04-02 15:11:17 -07:00