494924 Commits

Author SHA1 Message Date
Matthias Springer
76435f2dca
[mlir][SCF] ValueBoundsConstraintSet: Support scf.if (branches) (#87860)
This commit adds support for `scf.if` to `ValueBoundsConstraintSet`.

Example:
```
%0 = scf.if ... -> index {
  scf.yield %a : index
} else {
  scf.yield %b : index
}
```

The following constraints hold for %0:
* %0 >= min(%a, %b)
* %0 <= max(%a, %b)

Such constraints cannot be added to the constraint set; min/max is not
supported by `IntegerRelation`. However, if we know which one of %a and
%b is larger, we can add constraints for %0. E.g., if %a <= %b:
* %0 >= %a
* %0 <= %b

This commit required a few minor changes to the
`ValueBoundsConstraintSet` infrastructure, so that values can be
compared while we are still in the process of traversing the IR/adding
constraints.

Note: This is a re-upload of #85895, which was reverted. The bug that
caused the failure was fixed in #87859.
2024-04-06 13:04:49 +09:00
Matthias Springer
08200fa3f5
[mlir][Arith] Specify evaluation order of getExpr (#87859)
The C++ standard does not specify an evaluation order for addition/...
operands. E.g., in `a() + b()`, the compiler is free to evaluate `a` or
`b` first.

This lead to different `mlir-opt` outputs in #85895. (FileCheck passed
when compiled with LLVM but failed when compiled with gcc.)
2024-04-06 12:43:26 +09:00
Jakub Kuderski
c8f3d211fc
[ADT] Allow reverse to find free rbegin/rend functions (#87840)
Lift the requirement that rbegin/rend must be member functions. Also
allow the rbegin/rend to be found through Argument Dependent Lookup
(ADL) and add `adl_rbegin`/`adl_rend` to STLExtras.
2024-04-05 22:40:18 -04:00
Jeff Niu
0f52f4ddd9
[mlir][ods] Emit "trivial" ODS getter/setters inline (#87741)
Emitting trivial getters that amount to `(*this)->getOperand(1)`
out-of-line or `getProperties().foo` is a pretty significant performance
hit on these basic MLIR APIs for manipulating ops (3-4x). Emit them
inline (without adding additional dependencies to header files).
2024-04-06 04:01:37 +02:00
Mike
ed4e505c21
[clang-tidy] Fix readability-duplicate-include for includes with macro (#87433)
Completely skip include directives that form the filename using macros.

fixes #87303
2024-04-06 04:38:08 +03:00
Amir Ayupov
e64eede0dc
[BOLT][BAT] Fix encoded NumBasicBlocks
Emit the recorded number of blocks, not the number of basic block
hashes. There might be differences in corner cases (openssl
BN_BLINDING_convert_ex function).

Test Plan:
Updated openssl.test in https://github.com/rafaelauler/bolt-tests/pull/31

Reviewers: rafaelauler, ayermolo, maksfb, dcci

Reviewed By: ayermolo

Pull Request: https://github.com/llvm/llvm-project/pull/87830
2024-04-05 17:54:07 -07:00
Amir Ayupov
0227623915
[BOLT][BAT] Support multi-way split functions
BAT writeMaps encoded the assumption that functions are only split into
two fragments (hot and cold). However, BOLT supports splitting into
arbitrary number of fragments. Relax that assumption and look up primary
(hot) fragment explicitly.

Depends on: https://github.com/llvm/llvm-project/pull/86219

Test Plan: Updated bolt/test/X86/yaml-secondary-entry-discriminator.s

Reviewers: ayermolo, rafaelauler, maksfb, dcci

Reviewed By: maksfb, dcci

Pull Request: https://github.com/llvm/llvm-project/pull/87123
2024-04-05 17:50:50 -07:00
Craig Topper
8bd391457f
[RISCV] Rename OP-P to OP-VE. (#87546)
This has been updated in the isa-manual
https://github.com/riscv/riscv-isa-manual/pull/1311
2024-04-05 17:02:03 -07:00
Jie Fu
3f2f700633 [flang] Fix -Wunused-but-set-variable in Bridge.cpp (NFC)
llvm-project/flang/lib/Lower/Bridge.cpp:3775:14:
error: variable 'nbDeviceResidentObject' set but not used [-Werror,-Wunused-but-set-variable]
    unsigned nbDeviceResidentObject = 0;
             ^
1 error generated.
2024-04-06 07:31:53 +08:00
Amir Ayupov
2d3c827c05
[BOLT] Use BAT for YAML profile call target information
Provide a mechanism to resolve call target information for calls from non-BAT
functions to BAT functions (`YAMLProfileWriter::convert`). Make it generic for
future use in BAT-to-BAT calls.

Test Plan: Updated bolt/test/X86/bolt-address-translation-yaml.test

Reviewers: ayermolo, maksfb, rafaelauler, dcci

Reviewed By: maksfb

Pull Request: https://github.com/llvm/llvm-project/pull/86219
2024-04-05 16:08:59 -07:00
lntue
5748ad84e5
[libc] Add proxy header math_macros.h. (#87598)
Context: https://github.com/llvm/llvm-project/pull/87017

- Add proxy header `libc/hdr/math_macros.h` that will:
  - include `<math.h>` in overlay mode,
- include `"include/llvm-libc-macros/math-macros.h"` in full build mode.
- Its corresponding CMake target `libc.hdr.math_macros` will only depend
on `libc.include.math` and `libc.include.llvm-libc-macros.math_macros`
in full build mode.
- Replace all `#include "include/llvm-libc-macros/math-macros.h"` with
`#include "hdr/math_macros.h"`.
- Add dependency to `libc.hdr.math_macros` CMake target when using
`add_fp_unittest`.
- Update the remaining dependency.
- Update bazel overlay: add `libc:hdr_math_macros` target, and replacing
all dependency on `libc:llvm_libc_macros_math_macros` with
`libc:hdr_math_macros`.
2024-04-05 18:21:16 -04:00
Slava Zakharin
3b337242ee
[NFC][flang][runtime] Moved freestanding-tools.h to use it in FortranDecimal. (#87827)
I will add `toupper` implementation into it in the next PR.
2024-04-05 15:10:04 -07:00
Diego Caballero
42a6ad7bad
[mlir][Vector] Fix n-D vector.extract/insert lowering to LLVM (#87591)
The lowering of n-D vector.extract/insert ops to LLVM is not supported
but if one of these accidentally reaches the vector-to-llvm conversion
patterns, we end up with a kind of puzzling crash. This PR fixes that
crash and gracefully bails out in those cases.
2024-04-05 15:01:20 -07:00
Slava Zakharin
9202984560
[flang][build] Fixed paths discrovery for the out-of-tree build. (#87822)
When building flang out-of-tree with relative paths in LLVM_DIR,
CLANG_DIR and MLIR_DIR, we need to compute the absolute paths
based on the CMake build directory (i.e. where the cmake is invoked
from).
2024-04-05 14:52:35 -07:00
Nick Desaulniers
af34a5d382
[libc][docs] Introduce docgen (#87682)
This script+config should help us generate more consistent documentation wrt.
what we currently support or not.

As an example usage:

    $ ./libc/utils/docgen/docgen.py fenv.h

Will spit out an RST formatted table that can be copy+pasted into our docs.

The config is not filled out entirely, but doing so and then updating our docs
would be great beginner bugs for new contributors.

Having python+json generate things like docs, or headers (as imagined in
https://github.com/nickdesaulniers/llvm-project/tree/hdr-gen2) is perhaps
easier to work with than tablegen, and doesn't introduce a dependency on a host
tool that needs to be compiled from llvm sources before building the rest of
the libc. This can probably be merged with whatever we end up doing to replace
libc-hdrgen.

Please use

https://llvm.org/docs/CodingStandards.html#python-version-and-source-code-formatting
for keeping this file formatted.
2024-04-05 14:50:45 -07:00
Cyndy Ishida
fe45029dbd [cmake] Back out of making unsupported -no_exported_symbols linker a
fatal error for now

Appeases build bots while being investigated.
2024-04-05 14:50:19 -07:00
Robin Caloudis
80deb8269f
[libc][fenv] Add compile time check (#87826)
Take care of a TODO. This
check makes sure that the fexcept_t
value fits in an int value.

TODO introduced in:
9550f8ba9a
2024-04-05 17:49:46 -04:00
Usama Hameed
65e5391657
Pass the linker version to libfuzzer tests on darwin (#87719)
The HOST_LINK_VERSION is a hardcoded string in Darwin clang that detects
the linker version at configure time. The driver uses this information
to build the correct set of arguments for the linker. This patch detects
the linker version again during compiler-rt configuration and passes it
to the libfuzzer tests. This allows a clang built on a machine with a
new linker to run compiler-rt tests on a machine with an old linker.

rdar://125932376
2024-04-05 14:48:16 -07:00
Slava Zakharin
b329da896c
[flang][runtime] Support for offload build of FortranDecimal. (#87653) 2024-04-05 14:46:24 -07:00
Cyndy Ishida
25cf27910c
[cmake] Build executables with -no_exported_symbols when building Apple toolchain (#87684)
Building the Apple way turns off plugin support, meaning we don't need
to export unloadable symbols from all executables. While deadstripping
effects aren't expected to change, enabling this across all tools
prevents the creation of export tries. This saves us ~3.5 MB in just the
universal build of `clang`.
2024-04-05 14:41:20 -07:00
Nick Desaulniers
2744a243bb
[libc][support][bit] use new type generic builtins (#86746)
These are new in clang-19+, gcc-14+.
2024-04-05 14:29:23 -07:00
Christopher Ferris
0a39f1a7e5
[scudo] Add errno description to mmap failure. (#87713)
Added unit tests for all of the linux report error functions.
2024-04-05 14:25:39 -07:00
Cyndy Ishida
27b2d7d4bb
[InstallAPI] Capture & compare load commands that may differ per arch slice (#87674)
* Capture reexported libraries, allowable clients, rpaths, shared cache
eligibility.
* Add support for select Xarch options.
* Add diagnostics related to capturing these options.
* Add support for verifying these attributes against what is encoded in
the dylib.
2024-04-05 13:58:24 -07:00
aniplcc
8ee6ab7f69
[libc][c23][fenv] implement fesetexcept (#87603)
Closes #87564
2024-04-05 13:52:57 -07:00
Valentin Clement (バレンタイン クレメン)
0aa982fb32
[flang][cuda] Add restriction on implicit data transfer (#87720)
In section 3.4.2, some example of illegal data transfer using expression
are given. One of it is when multiple device objects are part of an
expression in the rhs. Current implementation allow a single device
object in such case. This patch adds a similar restriction.
2024-04-05 13:40:38 -07:00
Amara Emerson
60fc4ac67a [GlobalISel] Don't form anyextending atomic loads.
Until we can reliably check the legality and improve our selection of these,
don't form them at all.
2024-04-05 13:34:59 -07:00
Craig Topper
4abb722ffa [RISCV] Add tests for opportunities to reassociate to form more shXadd instructions. NFC
These tests consist of patterns like (sh3add Z, (add X, (slli Y, 6)))
that can be reassociated to form (sh3add (sh3add Y, Z), X).
2024-04-05 12:50:48 -07:00
Craig Topper
0a6a40d62e [RISCV] Add Zca predicate to BrccCompressOpt patterns used for MinSize.
Previously we only checked for C.
2024-04-05 12:39:39 -07:00
Craig Topper
e7e78274a6 [RISCV] Remove uses of sed from compress-opt-branch.ll. NFC
sed was being used to use the same test functions with eq/ne branch
condition.

This commit duplicates the test functions so that we have a version
with each condition. This allows us to remove 2 RUN lines.

I plan to add a Zca testing to this file which now requires 1 new
RUN line instead of 2.
2024-04-05 12:35:46 -07:00
Slava Zakharin
25ebbe3851
[flang][doc] Added information about REAL(16) math intrinsics support. (#87710) 2024-04-05 12:14:55 -07:00
Shourya Goel
9f0758405b
reland: [libc] Added transitive bindings for OffsetType (#87680)
Followup to issues addressed here: #87397
2024-04-05 12:11:44 -07:00
Haojian Wu
5e77dfecd2
[clang] CTAD: build aggregate deduction guides for alias templates. (#85904)
Fixes https://github.com/llvm/llvm-project/issues/85767.

The aggregate deduction guides are handled in a separate code path. We
don't generate dedicated aggregate deduction guides for alias templates
(we just reuse the ones from the underlying template decl by accident).
The patch fixes this incorrect issue.

Note: there is a small refactoring change in this PR, where we move the
cache logic from `Sema::DeduceTemplateSpecializationFromInitializer` to
`Sema::DeclareImplicitDeductionGuideFromInitList`
2024-04-05 21:07:14 +02:00
Daniel Paoliello
43ba568daa
Prepend all library intrinsics with # when building for Arm64EC (#87542)
While attempting to build some Rust code, I was getting linker errors
due to missing functions that are implemented in `compiler-rt`. Turns
out that when `compiler-rt` is built for Arm64EC, all its function names
are mangled with the leading `#`.

This change removes the hard-coded list of library-implemented
intrinsics to mangle for Arm64EC, and instead assumes that they all must
be mangled.
2024-04-05 12:06:47 -07:00
Hristo Hristov
a834436099
[libc++] P2872R3: Remove `wstring_convert` From C++26 (#87100)
Implements: https://wg21.link/P2872R3
2024-04-05 22:04:07 +03:00
Craig Topper
3c37f926a1 [RISCV] Fix comment in compress-opt-branch.ll to match description. NFC
Test description says constant does not fit in 12 bits, but the constant
used was -2048 which does fit in 12 bits. Update to -2049.

Also remove uses of -NOT in favor of positive checks. One of the -NOT
should have been using RESBROPT instead of "c.beqz" so that it would
check for the absense of the correct instruction based on the sed
replacement on the RUN line.
2024-04-05 11:52:46 -07:00
Daniil Kovalev
3989e22457
[test][lld][ELF] Enhance pack-dyn-relocs.s test (#87756)
Use symbol `.data` (STT_SECTION) instead of `__ehdr_start` for some
relocation entries. See discussion in

[72714/#discussion_r1517127619](https://github.com/llvm/llvm-project/pull/72714/#discussion_r1517127619)
2024-04-05 21:50:29 +03:00
Chris B
0a0fccfc6c
[HLSL] Implement floating literal suffixes (#87270)
This change implements the HLSL floating literal suffixes for half and
double literals. The PR for the HLSL language specification for this
behavior is https://github.com/microsoft/hlsl-specs/pull/175.

The TL;DR is that the `h` suffix on floating literals means `half`, and
the `l` suffix means `double`.

The expected behavior and diagnostics are different if native half is
supported. When native half is not enabled half is 32-bit so implicit
conversions to float do not lose precision and do not warn.

In all cases `half` and `float` are distinct types.

Resolves #85712
2024-04-05 13:46:14 -05:00
Dmitry Vasilyev
225e14e5b6
[Support][Windows] Use the original path if GetFinalPathNameByHandleW() failed (#87749)
The commit f11b056c (#76304) breaks `clang` and other tools if they are
used from a RAMDrive. `GetFinalPathNameByHandleW()` may return 0 and
GetLastError 0x28. This patch fixes that issue. Note `real_path()` uses
`openFileForRead()` but it reports the error only if failed to open a
file. Getting `RealPath` is optional functionality.

BTW, `sys::fs::real_path()` resolves not only symlinks, but also network
drives and virtual drives created by the `subst` tool. It may break an
automation. It is better to detect symlinks and resolve only symlinks.
2024-04-05 22:40:07 +04:00
David Green
e4169f79ef [AArch64] Add extra zip and uzp shuffle cost tests. NFC 2024-04-05 19:33:22 +01:00
Alexey Bataev
66b528078e
[SLP]Improve minbitwidth analysis for abs/smin/smax/umin/umax intrinsics.
https://alive2.llvm.org/ce/z/ivPZ26 for the abs transformations.

Reviewers: RKSimon

Reviewed By: RKSimon

Pull Request: https://github.com/llvm/llvm-project/pull/86135
2024-04-05 14:29:26 -04:00
Haojian Wu
9264c85b47
[Sema] Remove the duplicated DeduceTemplateArguments for partial specialization, NFC (#87782)
We have two identical "DeduceTemplateArguments" implementations for
class and variable partial template specializations, this patch removes
the duplicated code.
2024-04-05 20:16:54 +02:00
Aaron Ballman
2606c87788
[C99] Claim conformance to WG14 N717 (#87228)
This was the paper that added Universal Character Names to C.
2024-04-05 14:04:29 -04:00
Fangrui Song
e915b7d816
[ELF,test] Add test for R_AARCH64_* implicit addends
to support certain static relocations in the REL format. See #87328 for
the armasm need.

Note: `R_AARCH64_{ABS64,PREL32,PREL64}` have been implemented by https://reviews.llvm.org/D120535

Pull Request: https://github.com/llvm/llvm-project/pull/87733
2024-04-05 10:52:10 -07:00
Arthur Eubanks
5772fc890f [gn build] Add missing dependency 2024-04-05 17:42:36 +00:00
Arthur Eubanks
965e053eb3 [gn build] Port f5960c168dfe 2024-04-05 17:37:46 +00:00
Arthur Eubanks
6411aaf99c [gn build] Port e84a757222aa 2024-04-05 17:37:45 +00:00
Arthur Eubanks
666fd665e9 [gn build] Port 30f6eafaa978 2024-04-05 17:37:44 +00:00
Arthur Eubanks
0e60cf7f4b [gn build] Manually port 68b939f9 2024-04-05 17:37:30 +00:00
Argyrios Kyrtzidis
c7eede5d4c
[clang][deps] Remove pgo profile flags from modules (#87724)
These are not necessary when not performing codegen.
2024-04-05 10:31:16 -07:00
Ian Anderson
0cd0aa0296
[clang][modules] Headers meant to be included multiple times can be completely invisible in clang module builds (#83660)
Once a file has been `#import`'ed, it gets stamped as if it was `#pragma
once` and will not be re-entered, even on #include. This means that any
errant #import of a file designed to be included multiple times, such as
<assert.h>, will incorrectly mark it as include-once and break the
multiple include functionality. Normally this isn't a big problem, e.g.
<assert.h> can't have its NDEBUG mode changed after the first #import,
but it is still mostly functional. However, when clang modules are
involved, this can cause the header to be hidden entirely.

Objective-C code most often uses #import for everything, because it's
required for most Objective-C headers to prevent double inclusion and
redeclaration errors. (It's rare for Objective-C headers to use macro
guards or `#pragma once`.) The problem arises when a submodule includes
a multiple-include header. The "already included" state is global across
all modules (which is necessary so that non-modular headers don't get
compiled into multiple translation units and cause redeclaration
errors). If another module or the main file #import's the same header,
it becomes invisible from then on. If the original submodule is not
imported, the include of the header will effectively do nothing and the
header will be invisible. The only way to actually get the header's
declarations is to somehow figure out which submodule consumed the
header, and import that instead. That's basically impossible since it
depends on exactly which modules were built in which order.

#import is a poor indicator of whether a header is actually
include-once, as the #import is external to the header it applies to,
and requires that all inclusions correctly and consistently use #import
vs #include. When modules are enabled, consider a header marked
`textual` in its module as a stronger indicator of multiple-include than
#import's indication of include-once. This will allow headers like
<assert.h> to always be included when modules are enabled, even if
#import is erroneously used somewhere.
2024-04-05 10:13:42 -07:00