495344 Commits

Author SHA1 Message Date
Joseph Huber
e381586f25
[libc] Work around lack of '__has_builtin' for GPU server (#87417)
Summary:
The RPC server build for the GPU support needs to be build from the
"projects" phase of the LLVM build. That means it is built with the same
compile that LLVM supports, which currently is GCC 7.4 in most cases.
A previous patch removed the `LIBC_HAS_BUILTIN` indirection we used,
which regressed the case where we used the `libc` source externally. The
files that we need to use here are `converter.cpp` and `writer.cpp`
which currently are compatible with C++17, so there aren't issues with
the code itself. However, older GCC does not have this builtin which
makes the checks fail.

This patch just adds in a simple wrapper that allows it to correctly
ignore everything if using a compiler that doesn't support it.
2024-04-02 17:06:03 -05:00
Owen Pan
a7f4576ff4
[clang-format] Fix a regression in annotating TrailingReturnArrow (#86624)
Fixes #86559.
2024-04-02 14:48:14 -07:00
Joseph Huber
2cf8118e3a
[Libomptarget] Add RPC-based printf implementation for OpenMP (#85638)
Summary:
This patch adds an implementation of `printf` that's provided by the GPU
C library runtime. This `pritnf` currently implemented using the same
wrapper handling that OpenMP sets up. This will be removed once we have
proper varargs support.

This `printf` differs from the one CUDA offers in that it is synchronous
and uses a finite size. Additionally we support pretty much every format
specifier except the `%n` option.

Depends on https://github.com/llvm/llvm-project/pull/85331
2024-04-02 16:36:36 -05:00
Daniil Kovalev
5029949952
[PAC][llvm-readobj][AArch64][ELF] Support GNU_PROPERTY_AARCH64_FEATURE_PAUTH (#85231)
This adds support for `GNU_PROPERTY_AARCH64_FEATURE_PAUTH` feature (as
defined in https://github.com/ARM-software/abi-aa/pull/240) handling in
llvm-readobj and llvm-readelf. The following constants for supported
platforms are also introduced:

- `AARCH64_PAUTH_PLATFORM_INVALID = 0x0`
- `AARCH64_PAUTH_PLATFORM_BAREMETAL = 0x1`
- `AARCH64_PAUTH_PLATFORM_LLVM_LINUX = 0x10000002`

For the llvm_linux platform, output of the tools contains descriptions
of PAuth features which are enabled/disabled depending on the version
value. Version value bits correspond to the following `LangOptions`
defined in #85232:

- bit 0: `PointerAuthIntrinsics`;
- bit 1: `PointerAuthCalls`;
- bit 2: `PointerAuthReturns`;
- bit 3: `PointerAuthAuthTraps`;
- bit 4: `PointerAuthVTPtrAddressDiscrimination`;
- bit 5: `PointerAuthVTPtrTypeDiscrimination`;
- bit 6: `PointerAuthInitFini`.

Support for `.note.AARCH64-PAUTH-ABI-tag` is dropped since it's deleted
from the spec in ARM-software/abi-aa#250.
2024-04-03 00:28:47 +03:00
Joseph Huber
7327014b49
[libc] Implement temporary printf on the GPU (#85331)
Summary:
This patch adds a temporary implementation that uses a struct-based
interface in lieu of varargs support. Once varargs support exists we
will move this implementation to the "real" printf implementation.

Conceptually, this patch has the client copy over its format string and
arguments to the server. The server will then scan the format string
searching for any specifiers that are actually a string. If it is a
string then we will send the pointer back to the server to tell it to
copy it back. This copied value will then replace the pointer when the
final formatting is done.

This will require a built-in extension to the varargs support to get
access to the underlying struct. The varargs used on the GPU will simply
be a struct wrapped in a varargs ABI.
2024-04-02 16:25:18 -05:00
Florian Hahn
89271b4676
[LV] Add test depending on target to RISCV subdirectory. 2024-04-02 22:02:25 +01:00
Jonathan Peyton
4ea24946e3
[OpenMP] Fix nested parallel with tasking (#87309)
When a nested parallel region ends, the runtime calls __kmp_join_call().
During this call, the primary thread of the nested parallel region will
reset its tid (retval of omp_get_thread_num()) to what it was in the
outer parallel region. A data race occurs with the current code when
another worker thread from the nested inner parallel region tries to
steal tasks from the primary thread's task deque. The worker thread
reads the tid value directly from the primary thread's data structure
and may read the wrong value.

This change just uses the calculated victim_tid from execute_tasks()
directly in the steal_task() routine rather than reading tid from the
data structure.

Fixes: #87307
2024-04-02 15:56:50 -05:00
Chris Bieneman
f119a4ffb8 [HLSL] Fix broken spir-v test
This fixes a test broken in 3d469c0e7c3072f0dad0f5e9bd0c74dffaf83cd3.
fast-forwarded.
../clang/test/CodeGenHLSL/builtins/wave_get_lane_index_subcall.hlsl
2024-04-02 15:53:17 -05:00
Han-Chung Wang
c3e3d59fab
[mlir][tensor] Fix tensor::PackOp fold() handling of padding value (#87296)
We can't just check if it is a splat constant or not. We should also
check if the value match.
2024-04-02 13:49:28 -07:00
Florian Hahn
6261c53c6f
[VPlan] Make sure OR VPInstructions are treated as disjoint ops.
Make sure that VPInstructions with OR opcodes are properly registered as
disjoint ops.

Fixes https://github.com/llvm/llvm-project/issues/87378.
2024-04-02 21:48:51 +01:00
Michael Maitland
d8db13edd6
[RISCV][NFC] Delete some unused pseudo multiclasses (#87401)
We only use the `RM` equivalents now.
2024-04-02 16:43:57 -04:00
Tom Stellard
817c6915ae
[workflows] Use issue-write workflow for warning about private emails (#87399)
This allows us to use the less privileged pull_request event for the
validate_email job, since this workflow no longer writes a comment
directly.
2024-04-02 13:36:08 -07:00
Aaron Ballman
6b2a4668b9 [C11] Claim conformance to WG14 N1482
This paper added a pile of macros for atomic initialization which we
started supporting in Clang 4.0.
2024-04-02 16:26:29 -04:00
Matt Arsenault
7f2a41b643 MachineScheduler: Simplify usage of TargetInstrInfo 2024-04-02 16:24:47 -04:00
Joseph Huber
6335de4a23 [libc] Disable '_exit' on the GPU build
Summary:
There are other dependencies to enable `unistd.h` on the GPU which
prevented the header from being generated. This is a POSIX extension and
isn't part of the core `libc`, so we can just disable this for now to
get the bots gree.
2024-04-02 15:24:06 -05:00
Changpeng Fang
c403a47807
AMDGPU: Update the description of cache policy for buffer intrinsics, NFC (#87364)
Explicitly added gfx940, which has SC and NT bits. There must be better
ways of documenting the cache policy. But this is what I can do now.

Fixes: SWDEV-449810
2024-04-02 13:15:21 -07:00
Prabhuk
212b1a84a6
[CallSiteInfo][NFC] CallSiteInfo -> CallSiteInfo.ArgRegPairs (#86842)
CallSiteInfo is originally used only for argument - register pairs. Make
it struct, in which we can store additional data for call sites.

Also, the variables/methods used for CallSiteInfo are named for its
original use case, e.g., CallFwdRegsInfo. Refactor these for the
upcoming
use, e.g. addCallArgsForwardingRegs() -> addCallSiteInfo().

An upcoming patch will add type ids for indirect calls to propogate them
from
middle-end to the back-end. The type ids will be then used to emit the
call
graph section.

Original RFC:
https://lists.llvm.org/pipermail/llvm-dev/2021-June/151044.html
Updated RFC:
https://lists.llvm.org/pipermail/llvm-dev/2021-July/151739.html

Differential Revision: https://reviews.llvm.org/D107109?id=362888

Co-authored-by: Necip Fazil Yildiran <necip@google.com>
2024-04-02 13:05:16 -07:00
Slava Zakharin
133156c138
[mlir][inliner] Assert that no external nodes passed to the profitability hook. (#85489)
Fixes #85400
2024-04-02 12:50:32 -07:00
Ameer J
13be0d4a34
[clang-format] Add BreakFunctionDefinitionParameters option (#84988)
This adds an option to break function definition parameters, putting
them on the next line after the function's opening paren.

This was a missing step towards allowing styles which require all
function definition parameters be on their own lines.

Closes #62963
2024-04-02 21:00:51 +02:00
Craig Topper
a9af66a90e [RISCV] Lower (vector_interleave X, undef) to (vzext_vl X). (#87283)
If the odd vector is undef or poison, the widening add and multiply trick
doesn't work unless we freeze the odd vector.

Unfortunately, freezing doesn't work when the operand is provably
undef/poison. MIR doesn't have a representation for freeze so it
just becomes a COPY from IMPLICIT_DEF which freely propagates undef
to each operand independently.

To work around this, check for undef explicitly and lower to a VZEXT_VL
of the even vector. This produces better code than we'd get from a
freeze anyway.

I've left a FIXME for adding a freeze. I'll do that as a separate patch
as it affects other tests and doesn't help with the new test.
2024-04-02 11:58:41 -07:00
Craig Topper
8c1dc5dd58 [RISCV] Add test for miscompile of vector.interleave when odd vector is literal poison.
The interleave lowering relies on a math trick that requires passing
the odd vector to two math instructions. In order to be correct
these instructions must see the same value.

If the odd vector is provably poison or undef, SelectionDAG will
create a vwadd and vwmaccu where the operand is a copy from IMPLICIT_DEF.
Later this will become just the undef flag on the operand. This
gives the register allocator freedom to pick a different register
for each instruction.
2024-04-02 11:49:08 -07:00
Alexey Bataev
d595080b48 [SLP]Fix PR87384: check for fixed vector type before using.
If we have mixed extractelement instructions, fixed and scalable ones,
need to check that compiler tries to estimate the cost for fixed vector
extractelement, not the scalable one, to avoid compiler crash.
2024-04-02 11:38:26 -07:00
aniplcc
3d469c0e7c
[HLSL] Enable -fconvergent-functions by default (#86571)
Fixes  #86506
2024-04-02 13:29:57 -05:00
Tim Neumann
f792f14b01
[WebAssembly] Allocate MCSymbolWasm data on MCContext (#85866)
Fixes #85578, a use-after-free caused by some `MCSymbolWasm` data being
freed too early.

Previously, `WebAssemblyAsmParser` owned the data that is moved to
`MCContext` by this PR, which caused problems when handling module ASM,
because the ASM parser was destroyed after parsing the module ASM, but
the symbols persisted.

The added test passes locally with an LLVM build with AddressSanitizer
enabled.

Implementation notes:

* I've called the added method
<code>allocate<b><i>Generic</i></b>String</code> and added the second
paragraph of its documentation to maybe guide people a bit on when to
use this method (based on my (limited) understanding of the `MCContext`
class). We could also just call it `allocateString` and remove that
second paragraph.
* The added `createWasmSignature` method does not support taking the
return and parameter types as arguments: Specifying them afterwards is
barely any longer and prevents them from being accidentally specified in
the wrong order.
* This removes a _"TODO: Do the uniquing of Signatures here instead of
ObjectFileWriter?"_ since the field it's attached to is also removed.
Let me know if you think that TODO should be preserved somewhere.
2024-04-02 10:59:29 -07:00
Kevin P. Neal
9c9f94063c [FPEnv][CostModel] Correct strictfp test.
Correct strictfp tests to follow the rules documented in the LangRef:
https://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics

These tests needed the strictfp attribute added to some function
definitions.

Test changes verified with D146845.
2024-04-02 13:53:56 -04:00
Fangrui Song
f599116152 [Driver,test] Remove --gcc-toolchain=""
This option was added so that changing CMake GCC_INSTALL_PREFIX would
not cause test failures or due to cargo culting. Setting
GCC_INSTALL_PREFIX leads to an error now and we should stop making our
tests ugly.
2024-04-02 10:40:19 -07:00
Simon Pilgrim
8bc2d19c13 [X86] canonicalizeShuffleWithOp - don't fold VPERMI(BINOP(X,Y)) -> BINOP(VPERMI(X),VPERMI(Y))
VPERMI (VPERMQ/PD) is nearly always lane-crossing and poorly merges with target shuffles (other than itself).

For now, I've restricted VPERMI to only merge with itself, constants, loads and splats.

We might be able to merge with a few other special cases (AND/ANDNP with constant?), which could help the shuffle-vs-trunc-256.ll AVX512VL regression, but since that now gives similar codegen to the other AVX512 variants, I'd prefer to improve the shuffle lowering for that properly.
2024-04-02 18:38:37 +01:00
aniplcc
82be6e186b
[libc][posix] implement _exit (#87185)
Fixes  #87126.
2024-04-02 10:37:42 -07:00
Nikolas Klauser
239236b8c2
[libc++] Remove pair dependency (#85621)
This moves the definition of a `pair` constructor for `<tuple>` to
`<__utility/pair.h>` and uses the forward declaration of `pair` in
`<tuple>` instead of including the definition.
2024-04-02 19:37:31 +02:00
Aaron Ballman
3cf9f2c3a4 [C99] Claim conformance to WG14 N782
C89 has more restrictions on aggregate initialization that were relaxed
in C99. We started diagnosing the C89 extension in Clang 3.4.
2024-04-02 13:36:45 -04:00
aniplcc
451cad3a27
[clang] Prefer logical && over & for boolean operations (#87276) 2024-04-02 19:21:39 +02:00
Aaron Ballman
a5932e182b Add a link to WG14 N835 to the status page 2024-04-02 13:14:09 -04:00
Aaron Ballman
f462d9a97d [C99] Claim conformance to "remove deprecation of aliased array parameters"
I can't locate a document number for this particular change, but C89
had the following entry in Future Language Directions:

The use of two parameters declared with an array type (prior to their
adjustment to pointer type) in separate lvalues to designate the same
object is an obsolescent feature.

C99 removed this entry. Clang and LLVM have never done anything in
support of that deprecation, so we trivially conform to its removal.
2024-04-02 13:08:27 -04:00
Aaron Ballman
74483bd6f6 [C99] Remove entry for LIA compatibility
We previously marked this as "No" but that's confusing; Annex H doesn't
require any changes for a C implementation, it's about how C relates to
other standards. We could mark this N/A, but I think it makes more
sense to treat it like a runtime library-specific change and simply
remove it from the tracker entirely.
2024-04-02 12:57:38 -04:00
Jonas Paulsson
4d5e834c5b
[ClangFE] Improve handling of casting of atomic memory operations. (#86691)
- Factor out a shouldCastToInt() method.
- Also pass through pointer type values to not be casted to integer.

CC @uweigand
2024-04-02 18:52:57 +02:00
Aaron Ballman
668c1ea4aa [C99] Update paper number tracked for arrays & lvalues; NFC
I finally found the original paper proposing the changes, so this
updates the test name, comments, and status page but is otherwise NFC.
2024-04-02 12:36:27 -04:00
Alexey Bataev
9cb7dffa88 [SLP]Fix PR80027: handle case when ext is not reduced but its operand is.
Need to handle the case, where the resize operation itself is not
reduced but its operand is. In this case need to take an extra analysis
for the operand, not the instruction itself.
2024-04-02 09:32:25 -07:00
Jim Lin
4f0b5d5e80
[M68k] Change gcc register name from a7 to sp. (#87095)
In M68kRegisterInfo.td, register SP is defined with name sp and
alternate name a7.

Fixes: https://github.com/llvm/llvm-project/issues/78620
2024-04-02 11:32:15 -05:00
Michael Maitland
153b8431bb
[RISCV][GISEL] Legalize G_BITCAST for scalable vectors (#85970)
SelectionDAG marks ISD::BITCAST as legal between scalable vector types
and ISelDAGToDAG deletes them.

We mark G_BITCAST between scalable vectors as legal in GISel. A future
patch will handle what to do with them after the legalizer (likley
either drop them in a isel-preprocess or convert them to COPYs).

BITCAST is needed for legalization of G_INSERT and G_EXTRACT. This is a
precommit for legalization of G_INSERT and G_EXTRACT.
2024-04-02 12:30:51 -04:00
Cyndy Ishida
207f1531d6 [InstallAPI] Condense std::pair unwrapping in CategoryRecord NFC 2024-04-02 09:17:06 -07:00
Aaron Ballman
f6198686b8 [C99] Claim conformance to "additional floating-point characteristics in <float.h>"
This is another case where we don't have a paper number for the feature
but know about it from the editor's reports.
2024-04-02 12:15:10 -04:00
Atousa Duprat
4aba595f09
[ADT] Add signed and unsigned mulh to APInt (#84719)
Fixes #84207
2024-04-02 17:07:56 +01:00
Rajveer Singh Bharadwaj
e12a1f8b32
[clang] Fix crash when inheriting from a cv-qualified type (#70594)
This change makes the `assertion` less strict in `debug` builds by
stripping qualifiers from the base class and ignoring them. I hope
`weakened` assertions don't affect other cases where such `errors` are
intended to be `caught` by the compiler.

Fixes #35603
Fixes #85256
2024-04-02 12:06:56 -04:00
Joseph Huber
6626eab07e
[Clang][NFC] Clean up unused binary files for offloading tests (#87351)
Summary:
We have a few binary files used for offloading tests that are either
entirely unused or easily replaceable.
2024-04-02 10:54:38 -05:00
Erick Velez
2b6c038e1f
[clang][ExtractAPI] improve template argument name deduction (#77716)
The names of template arguments in partial specializations or parameters
used as types might be mangled according to index and depth. Instead of
looping through parameter lists to find matches like we do now, they can
be deduced via their QualTypes or as written from the AST.
2024-04-02 08:42:13 -07:00
nihui
31880df994
[OpenMP] get logical core count on modern apple platform (#87231)
`hw.logicalcpu` returns the available logical core count

Fix build error for watchOS

```
runtime/src/z_Linux_util.cpp:1821:8: error: 'host_info' is unavailable: not available on watchOS
  rc = host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)&info, &num);
       ^
/Applications/Xcode_15.2.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS10.2.sdk/usr/include/mach/mach_host.h:82:15: note: 'host_info' has been explicitly marked unavailable here
kern_return_t host_info
              ^
1 warning and 1 error generated.
make[2]: *** [runtime/src/CMakeFiles/omp.dir/z_Linux_util.cpp.o] Error 1
```
2024-04-02 11:38:40 -04:00
nihui
c5bbdb6494
[OpenMP] arm64_32 port for Apple WatchOS (#87246)
detect `aarch64_32` with compiler defined macro `__ARM64_ARCH_8_32__`
reuse ARM `__kmp_unnamed_critical_addr` and add `KMP_PREFIX_UNDERSCORE`
macro like AARCH64
reuse AARCH64 `__kmp_invoke_microtask`


build log for watchos armv7k + arm64_32 and watchos simulator x86_64 +
arm64

https://github.com/nihui/action-protobuf/actions/runs/8520684611/job/23337305030
2024-04-02 11:38:32 -04:00
Daniel Grumberg
4c7de02bc0 [ExtractAPI] Add @daniel-grumberg into CODEOWNERS 2024-04-02 16:35:52 +01:00
Chenguang Wang
b714fc7f86
Move format internal code from llvm::detail to llvm::support::detail. (#87288)
Some support code, e.g. llvm/Support/Endian.h, uses
llvm::support::detail, but the format-related code uses llvm::detail. On
VS2019, when a C++ file includes both headers, a `detail::` from
`namespace llvm { ... }` becomes ambiguous.

44253a9c breaks TensorFlow and
[JAX](https://github.com/google/jax/actions/runs/8507773013/job/23300219405)
build because of this.

Since llvm::X::detail seems like a cleaner solution and is used in other
places as well (e.g. llvm::yaml::detail), we should probably migrate all
llvm::detail usages to llvm::X::detail.
2024-04-02 08:35:08 -07:00
Alexey Bataev
6b7b18a1a7 [SLP]Fix PR87329: crash on alternate cast vectorization.
Need to fix the analysis for the alternate instructions, based on int
extension operations. If the alternate extension node is resized, but
not the operand, need to resize the node and do not shuffle final
result, we end up only with trunc instruction.
2024-04-02 08:19:29 -07:00