495344 Commits

Author SHA1 Message Date
Connor Sughrue
a950c06d98
[CI] Run pre-merge build with -k 0 placed after "${BUILD_DIR}" (#84846)
#84828 added `-k 0` to pre-merge CI so that if one job fails the others
would continue building. This pull request fixes the location of `-k 0`
in the ninja command line.

Resolves #84842 and #83371
2024-03-11 18:41:50 -04:00
Vitaly Buka
6397f223c4 [clang] Fix test after #84214 2024-03-11 15:33:32 -07:00
Quinn Dawkins
60e562d11a
[mlir][linalg] Add unit dim folding pattern for tensor.pad (#84684)
Unit extent dims that are not padded by a tensor.pad can be folded away.
When folding unit extent dims of surrounding linalg ops, this increases
the chance that the iteration space of the linalg op will align with
nearby pad ops, improving fusion opportunities.
2024-03-11 18:24:23 -04:00
Martin Storsjö
c93c76b562
[LLD] [COFF] Set the right alignment for DelayDirectoryChunk (#84697)
This makes a difference when linking executables with delay loaded
libraries for arm32; the delay loader implementation can load data from
the registry with instructions that assume alignment.

This issue does not show up when linking in MinGW mode, because a
PseudoRelocTableChunk gets injected, which also sets alignment, even if
the chunk itself is empty.
2024-03-12 00:03:26 +02:00
lntue
762cbd82da
[libc][NFC] Do not add libc test framework and -fno-rtti to C tests. (#84837) 2024-03-11 17:43:50 -04:00
jimingham
3707c540d2
Make ValueObject::Cast work for casts from smaller to larger structs in the cases where this currently can work. (#84588)
The ValueObjectConstResult classes that back expression result variables
play a complicated game with where the data for their values is stored.
They try to make it appear as though they are still tied to the memory
in the target into which their value was written when the expression is
run, but they also keep a copy in the Host which they use after the
value is made (expression results are "history values" so that's how we
make sure they have "the value at the time of the expression".)

However, that means that if you ask them to cast themselves to a value
bigger than their original size, they don't have a way to get more
memory for that purpose. The same thing is true of ValueObjects backed
by DataExtractors, the data extractors don't know how to get more data
than they were made with in general.

The only place where we actually ask ValueObjects to sample outside
their captured bounds is when you do ValueObject::Cast from one
structure type to a bigger structure type. In
https://reviews.llvm.org/D153657 I handled this by just disallowing
casts from one structure value to a larger one. My reasoning at the time
was that the use case for this was to support discriminator based C
inheritance schemes, and you can't directly cast values in C, only
pointers, so this was not a natural way to handle those types. It seemed
logical that since you would have had to start with pointers in the
implementation, that's how you would write your lldb introspection code
as well.

Famous last words...

Turns out there are some heavy users of the SB API's who were relying on
this working, and this is a behavior change, so this patch makes this
work in the cases where it used to work before, while still disallowing
the cases we don't know how to support.

Note that if you had done this Cast operation before with either
expression results or value objects from data extractors, lldb would not
have returned the correct results, so the cases this patch outlaws are
ones that actually produce invalid results. So nobody should be using
Cast in these cases, or if they were, this patch will point out the bug
they hadn't yet noticed.
2024-03-11 14:13:37 -07:00
Arthur Eubanks
0f0f0ffc75 [NFC] Remove unused variable after 94c988bc 2024-03-11 21:08:54 +00:00
Florian Hahn
31ffdb56b4
[ArgPromotion] Add test case for #84807.
Test case for https://github.com/llvm/llvm-project/issues/84807,
showing a mis-compile in ArgPromotion.
2024-03-11 21:06:15 +00:00
Mehdi Amini
65fd664daf
Run pre-merge build with -k 0 to ensure all tests runs (#84828)
The -k option allows to continue the build after failures as much as
possible. This is useful here because when we run

> ninja check-llvm check-clang

we would like the clang tests to run even if there is a failure in a
llvm tests.

The downside is that a build failure in one file that would prevent from
running any test does not prevent from building more targets, wasting
build resources potentially.

Fixes #83371
2024-03-11 14:00:03 -07:00
Noah Goldstein
d81db0e5f5 [KnownBits] Implement knownbits lshr/ashr with exact flag
The exact flag basically allows us to set an upper bound on shift
amount when we have a known 1 in `LHS`.

Typically we deduce exact using knownbits (on non-exact incoming
shifts), so this is particularly impactful, but may be useful in some
circumstances.

Closes #84254
2024-03-11 15:51:07 -05:00
Noah Goldstein
a9d913ebcd [KnownBits] Add API support for exact in lshr/ashr; NFC 2024-03-11 15:51:06 -05:00
Noah Goldstein
f19d9e1617 [KnownBits] Add test for computing more information for lshr/ashr with exact flag; NFC 2024-03-11 15:51:06 -05:00
Valentin Clement (バレンタイン クレメン)
f832beebda
[flang][NFC] Use the tablegen definition for FIR dialect (#84822)
FIROpsDialect has been declared manually with a class inheriting from
the MLIR Dialect class. Another declaration is done using tablegen here
`flang/include/flang/Optimizer/Dialect/FIRDialect.td`. This patch merge
the two declaration so we can use the tablegen generated class for all
the FIROpsDialect needs.

This is part of a series of patch to bring FIR up to date with the
current MLIR infra.
2024-03-11 13:41:27 -07:00
David Benjamin
f4c1e8747b
[libc++][hardening] Reclassify string_view(ptr, len)'s size assertion (#79297)
The comment makes this error condition sound less problematic than it
is. If the length does not match the pointer's bounds, all
bounds-checking in string_view goes wrong. A length over PTRDIFF_MAX
cannot possibly be a correct bounds and was mostly an underflowed
negative number cast to a size_t.

The documentation for _LIBCPP_ASSERT_VALID_INPUT_RANGE discusses ranges
being valid, including an iterator and a count, which seemed appropriate
here.
2024-03-11 16:28:05 -04:00
lntue
4d21e75210
[libc][math][c23] Add fmodl and fmodf128 math functions. (#84600)
- Allow `FMod` template to have different computational types and make
it work for 80-bit long double.
- Switch to use `uint64_t` as the intermediate computational types for
`float`, significantly reduce the latency of `fmodf` when the exponent
difference is large.
2024-03-11 16:27:42 -04:00
Bill Wendling
4628e33a77 [NFC][docs] Rename duplicate label to something unique 2024-03-11 13:22:09 -07:00
Adrian Prantl
6462eadbd3
Report back errors in GetNumChildren() (#84265)
This is a proof-of-concept patch that illustrates how to use the
Expected return values to surface rich error messages all the way up
to the ValueObjectPrinter.

This is the final patch in the series that includes
https://github.com/llvm/llvm-project/pull/83501 and
https://github.com/llvm/llvm-project/pull/84219
2024-03-11 13:04:56 -07:00
Arthur Eubanks
94c988bcfd [NFC] Remove unused parameter from shouldAssumeDSOLocal() 2024-03-11 19:48:17 +00:00
Florian Hahn
5feaef63c0
[TBAA] Generate tbaa.struct single field with char tag for unions. (#84370)
At the moment,distinct fields for each union member are generated. When
copying a union, we don't know which union member is active, so there's
no benefit from recording the different fields. It can result in
converting tbaa.struct fields to incorrect tbaa nodes when extracting
fields.

PR: https://github.com/llvm/llvm-project/pull/84370
2024-03-11 19:40:43 +00:00
Craig Topper
884b051a42 Recommit "[TypePromotion] Support positive addition amounts in isSafeWrap. (#81690)"
With special case with Add constant is 0.

Original message:
We can support these by changing the sext promotion to -zext(-C) and
replacing a sgt check with ugt. Reframing the logic in terms of how the
unsigned range are affected. More comments in the patch.

The new cases check isLegalAddImmediate to avoid some
regressions in lit tests.
2024-03-11 12:39:38 -07:00
lntue
a25fa92d87
[libc][stdbit] Add C tests for stdbit generic macros. (#84670)
Currently there is no tests for generic macros of generated `stdbit.h`
header in C, and it is easy to make typo mistakes as in
https://github.com/llvm/llvm-project/issues/84658. In this patch, we
add a simple test for them in C.
2024-03-11 15:39:05 -04:00
Krzysztof Parzyszek
1def98d9f2
[flang] Avoid forming a reference from null pointer (#84787)
Doing so is an undefined behavior.

This was detected by the undefined behavior sanitizer.
2024-03-11 14:35:31 -05:00
Krzysztof Parzyszek
a70d729881
[flang] Avoid left shifts of negative signed values (#84786)
Shifting left a signed, negative value is an undefined behavior in C++.

This was detected by the undefined behavior sanitizer.
2024-03-11 14:30:30 -05:00
Aaron Ballman
42ee286e51 Fixing test from 8467457afc61d70e881c9817ace26356ef757733
The clangd test was testing the previous diagnostic logic and now it's
testing with the new warning flag.
2024-03-11 15:26:46 -04:00
Louis Dionne
d2e57c5c36
[libc++] Re-enable the clang_modules_include test for Objective-C++ (#66801)
This reverts commit aa60b2687, which was a temporary workaround.
The underlying issue was fixed in Clang via c2c840bd92cf.

This was originally https://reviews.llvm.org/D158694.
2024-03-11 15:22:51 -04:00
Louis Dionne
18f49cf2e6
[libc++] Remove XFAIL for SIMD in optimized build (#84767)
It seems that updating the compiler in the CI resolved the issue, which
causes the test to be XPASSing now.

Fixes #74327
2024-03-11 15:21:38 -04:00
amilendra
6aef8dfe44
[libcxx] Update 128-bit-atomics feature test (#83841)
The `128-bit-atomics` libcxx feature is incorrectly named because tests
that are Xfailed with it is really using `int[128]`. Additionally,
because toolchain support for that feature is determined based on a much
smaller size (`char[16]`), tests would execute incorrectly without
required toolchain support.

So, rename `128-bit-atomics` as `1024-bit-atomics`, and use an
appropriate type to check for the presence of the feature.
2024-03-11 15:20:47 -04:00
Alexander Yermolovich
6d4aa9d70e
[BOLT][DWWARF] Fix foreign TU index with local TUs (#84594)
The foreign TU list immediately follows the local TU list and they both
use the same index, so that if there are N local TU entries, the index
for the first foreign TU is N.

Changed so that the size of local TU is accounted for when setting
foreign TU index.
2024-03-11 12:20:25 -07:00
Joseph Huber
d1d80cc319
[HIP] Make the new driver bundle outputs for device-only (#84534)
Summary:
The current behavior of HIP is that when --offload-device-only is set it
still bundles the outputs into a fat binary. Even though this is
different from how all the other targets handle this, it seems to be
dependned on by some tooling so just make it backwards compatible for
the `-fno-gpu-rdc` case.
2024-03-11 14:09:59 -05:00
Vitaly Buka
eaa71a97f9
[clang] Add optional pass to remove UBSAN traps using PGO (#84214)
With #83471 it reduces UBSAN overhead from 44% to 6%.
Measured as "Geomean difference" on "test-suite/MultiSource/Benchmarks"
with PGO build.

On real large server binary we see 95% of code is still instrumented,
with 10% -> 1.5% UBSAN overhead improvements. We can pass this test only
with subset of UBSAN, so base overhead is smaller.

We have followup patches to improve it even further.
2024-03-11 12:07:28 -07:00
Usama Hameed
08a9207f94
[LLDB] ASanLibsanitizers Use sanitizers_address_on_report breakpoint (#84583)
symbol

This patch puts the default breakpoint on the
sanitizers_address_on_report symbol, and uses the old symbol as a backup
if the default case is not found

rdar://123911522
2024-03-11 11:57:53 -07:00
Florian Mayer
337a200715
[NFC] [scudo] Move static_assert to class it concerns (#84245) 2024-03-11 11:47:59 -07:00
Egor Zhdan
a8eb2f0dab
[Clang][AST] Print attributes of Obj-C interfaces
When pretty printing an Objective-C interface declaration, Clang
previously didn't print any attributes that are applied to the
declaration.
2024-03-11 18:47:30 +00:00
Florian Mayer
b4e0890458
[NFC] [scudo] move static_assert closer to class it relates to (#84257)
delete other static_assert
2024-03-11 11:46:45 -07:00
Jeff Niu
8846b91e15
Revert "[CMake][LIT] Add option to run lit testsuites in parallel" (#84813)
Reverts llvm/llvm-project#82899

Per the discussion on the PR, this needs more design and justification.
2024-03-11 11:44:11 -07:00
Krzysztof Parzyszek
5b4c350647
[flang][unittests] Fix buffer underrun in LengthWithoutTrailingSpaces (#84382)
Account for the descriptor containing a zero-length string. Also, avoid
iterating backwards too far.

This was detected by address sanitizer.
2024-03-11 13:39:47 -05:00
Changpeng Fang
23be73208d
AMDGPU: Add an argument to DS_Real_gfx12 to disable alias, NFC (#84717)
This is for cased that we simply want to rename from ps.Mnemonic, but
ps.Mnemonic itself is not supported as an alias.
2024-03-11 11:34:58 -07:00
Jay Foad
212604698c
[AMDGPU] Add missing tests for GFX10 (t)buffer format d16 instructions (#84789) 2024-03-11 18:25:49 +00:00
Paul T Robinson
725a0523a1
[Headers][X86] Add specific results to comparisons (#83316)
Some comparison intrinsics were described as returning the "result" without
specifying how. The "cmp" intrinsics return zero or all 1's in the
corresponding elements of a returned vector; the "com" intrinsics return
an integer 0 or 1.

Also removed some redundant information.
2024-03-11 14:14:17 -04:00
Joe Nash
2a3f27cce8
[AMDGPU][True16] Make NotHasTrue16BitInsts a True16Predicate (#84771)
NFC.
Test coverage on VOPC shows NotHasTrue16BitInsts on the pre-gfx11
instructions is necessary (we cannot use the default NoTrue16Predicate).
Update the VOP2 instructions in the same manner.
2024-03-11 13:58:45 -04:00
Michael Maitland
034cc2f5d0
[GISEL] Add G_INSERT_SUBVECTOR and G_EXTRACT_SUBVECTOR (#84538)
G_INSERT and G_EXTRACT are not sufficient to use to represent both
INSERT/EXTRACT on a subregister and INSERT/EXTRACT on a vector.

We would like to be able to INSERT/EXTRACT on vectors in cases that
INSERT/EXTRACT on vector subregisters are not sufficient, so we add
these opcodes.

I tried to do a patch where we treated G_EXTRACT as both
G_EXTRACT_SUBVECTOR and G_EXTRACT_SUBREG, but ran into an infinite loop
at this
[point](8b5b294ec2/llvm/lib/Target/RISCV/RISCVISelLowering.cpp (L9932))
in the SDAG equivalent code.
2024-03-11 13:47:30 -04:00
Bhuminjay Soni
8467457afc
Add new flag -Wreturn-mismatch (#82872)
This pull request fixes #72116 where a new flag is introduced for
compatibility with GCC 14, the functionality of -Wreturn-type is
modified to split some of its behaviors into -Wreturn-mismatch

Fixes #72116
2024-03-11 13:25:32 -04:00
annamthomas
866ac9a165
[LV] Address postcommit review for PR84782 (#84797)
This testcase was added to show miscompile in
https://github.com/llvm/llvm-project/issues/81872
2024-03-11 13:23:00 -04:00
Benjamin Kramer
36a2752923 [bazel] Grab correct version info after 81e20472a0c5a4a8edc5ec38dc345d580681af81
This is a bit awkward.
2024-03-11 18:21:42 +01:00
Jason Molenda
bdbad0d07b
Turn off instruction flow control annotations by default (#84607)
Walter Erquinigo added optional instruction annotations for x86
instructions in 2022 for the `thread trace dump instruction` command,
and code to DisassemblerLLVMC to add annotations for instructions that
change flow control, v. https://reviews.llvm.org/D128477

This was added as an option to `disassemble`, and the trace dump command
enables it by default, but several other instruction dumpers were
changed to display them by default as well. These are only implemented
for Intel instructions, so our disassembly on other targets ends up
looking like

```
(lldb) x/5i 0x1000086e4
0x1000086e4: 0xa9be6ffc   unknown     stp    x28, x27, [sp, #-0x20]!
0x1000086e8: 0xa9017bfd   unknown     stp    x29, x30, [sp, #0x10]
0x1000086ec: 0x910043fd   unknown     add    x29, sp, #0x10
0x1000086f0: 0xd11843ff   unknown     sub    sp, sp, #0x610
0x1000086f4: 0x910c63e8   unknown     add    x8, sp, #0x318
```

instead of `disassemble`'s output style of

```
lldb`main:
lldb[0x1000086e4] <+0>:  stp    x28, x27, [sp, #-0x20]!
lldb[0x1000086e8] <+4>:  stp    x29, x30, [sp, #0x10]
lldb[0x1000086ec] <+8>:  add    x29, sp, #0x10
lldb[0x1000086f0] <+12>: sub    sp, sp, #0x610
lldb[0x1000086f4] <+16>: add    x8, sp, #0x318
```

Adding symbolic annotations for assembly instructions is something I'm
interested in too, because we may have users investigating a crash or
apparent-incorrect behavior who must debug optimized assembly and they
may not be familiar with the ISA they're using, so short of flipping
through a many-thousand-page PDF to understand each instruction, they're
lost. They don't write assembly or work at that level, but to understand
a bug, they have to understand what the instructions are actually doing.

But the annotations that exist today don't move us forward much on that
front - I'd argue that the flow control instructions on Intel are not
hard to understand from their names, but that might just be my personal
bias. Much trickier instructions exist in any event.

Displaying this information by default for all targets when we only have
one class of instructions on one target is not a good default.

Also, in 2011 when Greg implemented the `memory read -f i` (aka `x/i`)
command
```
commit 5009f9d5010a7e34ae15f962dac8505ea11a8716
Author: Greg Clayton <gclayton@apple.com>
Date:   Thu Oct 27 17:55:14 2011 +0000
[...]
    eFormatInstruction will print out disassembly with bytes and it will use the
    current target's architecture. The format character for this is "i" (which
    used to be being used for the integer format, but the integer format also has
    "d", so we gave the "i" format to disassembly), the long format is
    "instruction".
```

he had DumpDataExtractor's DumpInstructions print the bytes of the
instruction -- that's the first field we see above for the `x/5i` after
the address -- and this is only useful for people who are debugging the
disassembler itself, I would argue. I don't want this displayed by
default either.

tl;dr this patch removes both fields from `memory read -f -i` and I
think this is the right call today. While I'm really interested in
instruction annotation, I don't think `x/i` is the right place to have
it enabled by default unless it's really compelling on at least some of
our major targets.
2024-03-11 10:21:07 -07:00
Guillaume Chatelet
07d7b9c255
[libc] Fix forward arm32 builtbot (#84794)
Introduced by https://github.com/llvm/llvm-project/pull/83441.
2024-03-11 18:17:18 +01:00
karzan
501bc101c0
[lldb] Save the edited line before clearing it in Editline::PrintAsync (#84154)
If the `m_editor_status` is `EditorStatus::Editing`, PrintAsync clears
the currently edited line. In some situations, the edited line is not
saved. After the stream flushes, PrintAsync tries to display the unsaved
line, causing the loss of the edited line.

The issue arose while I was debugging REPRLRun in
[Fuzzilli](https://github.com/googleprojectzero/fuzzilli). I started
LLDB and attempted to set a breakpoint in libreprl-posix.c. I entered
`breakpoint set -f lib` and used the "tab" key for command completion.
After completion, the edited line was flushed, leaving a blank line.
2024-03-11 10:07:12 -07:00
Mark de Wever
9a9aa41dea
[LLDB][doc] Updates build instructions. (#84630)
Recently building libc++ requires building libunwind too. This updates
the LLDB instructions.

I noticed this recently and it was separately filed as
https://github.com/llvm/llvm-project/issues/84053
2024-03-11 17:45:48 +01:00
Mark de Wever
81e20472a0
[cmake] Exposes LLVM version number in the runtimes. (#84641)
This allows sharing the LLVM version number in libc++.
2024-03-11 17:43:14 +01:00
Simon Pilgrim
6cd68c2f87 [X86] Add base SSE2 coverage to SRL/SRA combines tests 2024-03-11 16:25:05 +00:00