495344 Commits

Author SHA1 Message Date
David Green
fbc247367a
[AArch64][GlobalISel] Legalization for small anyext/sext/zext (#86438)
Similar to #85625, some of the codegen is still far from optimal but
this helps fix quite a few fallback cases.
2024-03-26 09:48:06 +00:00
NagyDonat
4fa736ba41
[Clang] NFC Silence compiler warning spam (#86532)
This non-functional change eliminates the compiler warning
```
/repo/llvm-project/clang/include/clang/Basic/SyncScope.h: In member function ‘virtual bool clang::AtomicScopeGenericModel::isValid(unsigned int) const’:
/repo/llvm-project/clang/include/clang/Basic/SyncScope.h:255:14: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits]
     return S >= static_cast<unsigned>(System) &&
            ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```
which was appearing repeatedly, as this header is included into very
many source files (through various chains of 6-7 header files).
2024-03-26 10:33:12 +01:00
XChy
3f8431ec66
[SCCIterator] Union MST node by rank correctly (#86389)
Fixes #85975
2024-03-26 17:31:55 +08:00
Christian Sigg
eb70b485a9
[mlir][bazel] Export more headers by a single target only. (#86637)
Ideally, header files should be used by only one target, but this is
hard because CMake is less strict with headers (no layering check). But
even with bazel, headers should only be exported once in the `hdrs`
attribute. Other targets may use them in the `srcs` attribute to avoid
circular dependencies.
2024-03-26 10:23:47 +01:00
David Green
4d315ff382
[GlobalISel] Add CTLZ known bits. (#86436)
Replicated from SDAG.
2024-03-26 09:11:35 +00:00
Bevin Hansson
14c30189fb
[ExpandLargeFpConvert] Fix incorrect values in fp-to-int conversion. (#86514)
The IR for a double-to-i129 conversion looks like this in one of the
blocks in compiler-rt:

  %cmp5.i = icmp ult i16 %3, -129, !dbg !24

But in ExpandLargeFpConvert, it looks like:

  %13 = icmp ult i129 %12, 4294967167, !dbg !19

ExpandLargeFpConvert is wrong; the value should have been
signed before negating, but instead we get a very large
unsigned value. Another value in the same pass also has this
issue.
2024-03-26 10:08:22 +01:00
Timm Baeder
6a6f9bf38e
[clang] Fix assertion failure when printing atomic apvalues (#85259)
When printing an `_Atomic(some struct type)`, we would later run into an
assertion because we do a `Ty->castAs<RecordType>()`, which doesn't work
with an `AtomicType`.
2024-03-26 08:35:03 +01:00
Fangrui Song
6ff61914a1 [Driver] Reject -fptrauth-intrinsics on non-AArch64 targets
And add a driver test missing from the original patch #65996.
2024-03-26 00:04:19 -07:00
ZhangYin
5c663aa9ae
[libc++] <experimental/simd> Reduce types for template parameter U in tests (#83781) 2024-03-26 14:38:20 +08:00
ShihPo Hung
5dc0c75aab [RISCV][TTI] Fix missing return in the end of function 2024-03-25 23:32:18 -07:00
Shih-Po Hung
817f453aa5
[RISCV][TTI] Refactor getCastInstrCost to exit early (#86619)
To reduce the indentation by using early returns, this patch hoist the
return for illegal type and non vector type earlier.

It should mostly be an NFC.
2024-03-26 14:15:40 +08:00
Younan Zhang
c6a65e4b0c
[clangd] Support go-to-definition on type hints. The protocol part (#85497)
This is in preparation for implementing go-to-definition support on type
inlay hints, switching the `label` field within the InlayHint protocol from a
string to an array of `InlayHintLabelPart`.
2024-03-26 12:57:09 +08:00
Changpeng Fang
64a7114702
AMDGPU: Simplify SMInstruction definitions, NFC (#86613)
Copy OtherPredicates from Pseudo to Real. Real should inherit predicates
from the corresponding Pseudo
2024-03-25 21:53:19 -07:00
Kai Sasaki
08a321e1b7
[mlir][complex] Canonicalize complex.div by one (#85513)
We can canonicalize the complex.div if the divisor is one (real = 1.0,
imag = 0.0) with the input number itself.

Ref: https://www.cuemath.com/numbers/division-of-complex-numbers/
2024-03-26 13:50:28 +09:00
Sam Clegg
3e046ee0c9
[lld][ELF] Add --why-extract for bitcode libcalls (#78781)
The Wasm linker already records these and its seems useful to do so.
2024-03-25 21:50:00 -07:00
Fangrui Song
7196518f1f [ELF,test] Improve -r incompatibility tests 2024-03-25 21:46:57 -07:00
Nathan Ridge
bc31be7949
[clang][CodeComplete] Handle deref operator in getApproximateType (#86466)
This allows completing after `(*this).` in a dependent context.

Fixes https://github.com/clangd/clangd/issues/1952
2024-03-25 23:54:40 -04:00
Philip Reames
a6b870db09
[RISCV] Enable sub(max, min) lowering for ABDS and ABDU (#86592)
We have the ISD nodes for representing signed and unsigned absolute
difference. For RISCV, we have vector min/max in the base vector
extension, so we can expand to the sub(max,min) lowering.

We could almost use the default expansion, but since fixed length
min/max are custom (not legal), the default expansion doesn't cover the
fixed vector cases. The expansion here is just a copy of the generic
code specialized to allow the custom min/max nodes to be created so they
can in turn be legalized to the _vl variants.

Existing DAG combines handle the recognition of absolute difference
idioms and conversion into the respective ISD::ABDS and ISD::ABDU nodes.

This change does have the net effect of potentially pushing a free
floating zero/sign extend after the expansion, and we don't do a great
job of folding that into later expressions. However, since in general
narrowing can reduce required work (by reducing LMUL) this seems like
the right general tradeoff.
2024-03-25 20:13:53 -07:00
Finn Plummer
cc3b6f9495
[mlir][spirv] Add folding for [S|U|GreaterThan[Equal] (#85434)
Add missing constant propogation folder for [S|U]GreaterThan[Equal].

Implement additional folding when the operands are equal for all ops.

Allows for constant folding in the IndexToSPIRV pass.

Part of work #70704
2024-03-25 19:49:12 -07:00
Craig Topper
93f9fb2c82 [RISCV] Rename Binary->Ternary and Unary->Binary for some cases in RISCVInstrInfoZvk.td. NFC
For instructions that use vd as an input and not just a merge, we
weren't including it in the operand count for the naming.
2024-03-25 18:37:35 -07:00
Craig Topper
3e664ac9cd [RISCV] Use inheritance instead of instantiating multiclasses inside another multiclass. NFC 2024-03-25 18:30:11 -07:00
dong jianqiang
ce73b1672a
[CodeExtractor] Resolving the Inconsistency of Compiled Binary Files (#86497)
When the compiler enables ALSR by default, binary inconsistency occurs
when the extractCodeRegion function is called. The reason is that the
sequence of traversing ExitBlocks containers of the SmallPtrSet type is
changed due to randomization of BasicBlock pointers.
This fixes https://github.com/llvm/llvm-project/issues/86427
2024-03-26 09:23:28 +08:00
Longsheng Mou
9c8dd5e6f6
[X86_64] fix SSE type error in vaarg. (#86377)
tweak the position of the ++neededSSE when Lo is NoClass and Hi is SSE.
Fix #86371.
2024-03-26 09:19:42 +08:00
YAMAMOTO Takashi
6420f37926
[WebAssembly] Implement an alternative translation for -wasm-enable-sjlj (#84137)
Instead of maintaining per-function-invocation malloc()'ed tables to track which functions each label belongs to, store the equivalent info in jump buffers (jmp_buf) themselves.

Also, use a less emscripten-looking ABI symbols:
```
    saveSetjmp     -> __wasm_setjmp
    testSetjmp      -> __wasm_setjmp_test
    getTempRet0    -> (removed)
    __wasm_longjmp  -> (no change)
```

While I want to use this for WASI, it should work for emscripten as well.

An example runtime and a few tests:
https://github.com/yamt/garbage/tree/wasm-sjlj-alt2/wasm/longjmp

wasi-libc version of the runtime:
https://github.com/WebAssembly/wasi-libc/pull/483

emscripten version of the runtime:
https://github.com/emscripten-core/emscripten/pull/21502

Discussion:
https://docs.google.com/document/d/1ZvTPT36K5jjiedF8MCXbEmYjULJjI723aOAks1IdLLg/edit
2024-03-25 18:11:56 -07:00
Akira Hatanaka
8bd1f9116a
[CodeGen][arm64e] Add methods and data members to Address, which are needed to authenticate signed pointers (#67454)
To authenticate pointers, CodeGen needs access to the key and
discriminators that were used to sign the pointer. That information is
sometimes known from the context, but not always, which is why `Address`
needs to hold that information.

This patch adds methods and data members to `Address`, which will be
needed in subsequent patches to authenticate signed pointers, and uses
the newly added methods throughout CodeGen. Although this patch isn't
strictly NFC as it causes CodeGen to use different code paths in some
cases (e.g., `mergeAddressesInConditionalExpr`), it doesn't cause any
changes in functionality as it doesn't add any information needed for
authentication.

In addition to the changes mentioned above, this patch introduces class
`RawAddress`, which contains a pointer that we know is unsigned, and
adds several new functions for creating `Address` and `LValue` objects.
2024-03-25 18:05:42 -07:00
Takuto Ikuta
83eb8aee4b Use timeTraceAsyncProfilerBegin for Source span (#83961)
This fixes incorrect trace for https://github.com/llvm/llvm-project/issues/56554.

This shows trace like

https://ui.perfetto.dev/#!/?s=aa809778dc50f2b155b062317fa18bbe2bb2fb9175e6282add8121c7c178214e
for the case shown in https://github.com/llvm/llvm-project/issues/83236.

https://github.com/llvm/llvm-project/pull/83778 is preparing PR.

Fix #56554
2024-03-25 18:04:40 -07:00
Thomas Köppe
c48aa781a3
Add missing declarations of explicit template instantiations. (#86591)
Found with `-Wundefined-func-template`.
2024-03-25 17:30:49 -07:00
Farzon Lotfi
366592b4eb
[HLSL] prevent generation of double intrinsics via the builtins (#86555)
fixes #86551
closes #86552

Thanks to #86440 and #86407 it makes more sense for us to do type checks
early via Sema to prevent the generation of invalid intrinsics.
2024-03-25 20:27:52 -04:00
Changpeng Fang
350bda4419
AMDGPU: Rename intrinsics and remove f16/bf16 versions for load transpose (#86313)
Rename the intrinsics to close to the instruction mnemonic names:
Use global_load_tr_b64 and global_load_tr_b128 instead of
global_load_tr.

This patch also removes f16/bf16 versions of builtins/intrinsics. To
simplify the design, we should avoid enumerating all possible types in
implementing builtins. We can always use bitcast.
2024-03-25 16:55:22 -07:00
NAKAMURA Takumi
8f86c6bf95 compiler-rt: Fix variadic macro warnings [-Wc++20-extensions]
They began complaining since #84520.
2024-03-26 08:45:12 +09:00
Amir Ayupov
213eda157a
[BOLT] Add CallSiteInfo entries in YAMLBAT (#76896)
Attach call counters to YAML profile, covering inter-function control
flow.

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

Test Plan: 
Updated bolt/test/X86/bolt-address-translation-yaml.test
2024-03-25 16:23:21 -07:00
Ed Maste
4fc8df9c6a
[libc++] Switch FreeBSD CI job to Clang 17 (#86320)
libc++ will drop support for Clang 16 before long.
2024-03-25 19:17:30 -04:00
Parth Arora
ebb326a51f [ELF] Fix unnecessary inclusion of unreferenced provide symbols
Previously, linker was unnecessarily including a PROVIDE symbol which
was referenced by another unused PROVIDE symbol. For example, if a
linker script contained the below code and 'not_used_sym' provide symbol
is not included, then linker was still unnecessarily including 'foo' PROVIDE
symbol because it was referenced by 'not_used_sym'. This commit fixes
this behavior.

PROVIDE(not_used_sym = foo)
PROVIDE(foo = 0x1000)

This commit fixes this behavior by using dfs-like algorithm to find
all the symbols referenced in provide expressions of included provide
symbols.

This commit also fixes the issue of unused section not being garbage-collected
if a symbol of the section is referenced by an unused PROVIDE symbol.

Closes #74771
Closes #84730

Co-authored-by: Fangrui Song <i@maskray.me>
2024-03-25 16:11:21 -07:00
jimingham
b6dfaf4c29
Make the correct (5 argument) form of the command definition be the primary one suggested in the docs (#86593)
This has been available for years now, so it should be safe to always
use it.
2024-03-25 16:06:51 -07:00
Fangrui Song
f1f06f31b8 [ELF] Move parse files from Driver.cpp to InputFiles.cpp. NFC
Fixes: 36146d2b6be53e5e98dee3c1fce8699db9615728

When `doParseFile template defintion` in InputFiles.cpp is optimized
out, we will get a link failure. Actually, we can move the file parsing
loop from Driver.too to InputFiles.cpp and merge it with
parseArmCMSEImportLib.
2024-03-25 16:02:34 -07:00
Slava Zakharin
8ebf741136
[flang][runtime] Prepare enabling PRINT of integer32 for device. (#86247)
This commit adds required files into the offload build closure,
which means adding RT_API_ATTRS and other markers.

The implementation does not work for CUDA yet, because of
std::variant,swap,reverse usage. These issues will be resolved
separately (e.g. by using libcudacxx header files).
2024-03-25 16:01:25 -07:00
Iman Hosseini
bc02c0825a
[documentation] [mlir] DataLayout.md: fix broken link to DLTI dialect (#86524)
The link to DLTI dialect was broken.
2024-03-25 15:54:05 -07:00
Craig Topper
efa54949b9 [RISCV] Remove ', vm' from comment for instruction that doesn't have mask. NFC 2024-03-25 15:52:52 -07:00
Fangrui Song
dd7151094f [ELF] Simplify parseArmCMSEImportLib. NFC 2024-03-25 15:46:52 -07:00
Craig Topper
8551454313 [RISCV] Rename $merge to $rd in Zvk* pseudoinstructions and patterns.
These instructions use the destination operand as a source, not
only as a passthru for mask/tail.
2024-03-25 15:27:30 -07:00
Jonas Devlieghere
4dcb1db44f
Revert "[lldb] Implement coalescing of disjoint progress events (#84854)"
This reverts commit 930f64689c1fb487714c3836ffa43e49e46aa488 as it's
failing on the Linux bots.
2024-03-25 15:25:58 -07:00
Craig Topper
6708beb357 [RISCV] Remove more unneeded template parameters from RISCVInstrInfoZvk.td. NFC 2024-03-25 15:20:40 -07:00
jimingham
2c76e88e9e
Add register lookup as another fallback computation for address-expressions (#85492)
The idea behind the address-expression is that it handles all the common
expressions that produce addresses. It handles actual valid expressions
that return a scalar, and it handles useful cases that the various
source languages don't support. At present, the fallback handles:

<symbol_name>{+-}<offset>

which isn't valid C but is very handy.

This patch adds handling of:

$<reg_name>

and

$<reg_name>{+-}<offset>

That's kind of pointless in C because the C expression parser handles
that expression already. But some languages don't have a straightforward
way to represent register values like this (swift) so having this
fallback is quite a quality of life improvement.

I added a test which tests that I didn't mess up either of these
fallbacks, though it doesn't test the actually handling of registers
that I added, since the expression parser for C succeeds in that case
and returns before this code gets run.

I will add a test on the swift fork for that checks that this works the
same way for a swift frame after this check.
2024-03-25 15:17:23 -07:00
Eric
8e625db153
Revert "Actually disable the module generation tests." (#84527)
This reverts commit 0bbada93a559b604797fe57978f3eca5e41edaeb.

The update of Clang in the CI broke due to the new LLVM version naming.
It needs to look for the clang 18.1 package instead of 18. Since it
couldn't find 18 it used 17 as fallback. This gives ODR violations which
caused the output for the module test to be wrong. (It didn't crash
which would be a lot more obvious to debug.)

The clang-tidy selection was fixed by
https://github.com/llvm/llvm-project/pull/81362. That patch also makes
clang-19 work with clang-tidy-19 out of the box.

The time-out have not been addressed; that is a CI issue and not an
issue with this test. They run in 200-ish s so they are slow but far
below the 1500s threshold. (Due to a dependency in this test it can't be
split in multiple tests.)
2024-03-25 18:14:55 -04:00
Amir Ayupov
1b763f230a
[BOLT] Add secondary entry points to BAT
Provide secondary entry points for `EntryDiscriminator` call info field
in YAML profile.

Increases BAT section size to:
- large binary: 39655300 bytes (1.03x the original),
- medium binary: 3834328 bytes (0.65x),
- small binary: 924 bytes (0.64x).

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

Test Plan:
- Updated bolt-address-translation{,-yaml}.test
- Added openssl test: https://github.com/rafaelauler/bolt-tests/pull/30

Reviewers: dcci, rafaelauler, maksfb, ayermolo

Reviewed By: rafaelauler

Pull Request: https://github.com/llvm/llvm-project/pull/86218
2024-03-25 15:14:33 -07:00
Nathan Lanza
da385e8251
[aarch64] Unguard GEPOpt from O3
This chunk of code currently runs only if the optimization mode is O3
AND the EnableGEPOpt flag is set. Given that this is the only use case
for the EnableGEPOpt flag, the guarding against O3 is kinda pointless.
IF the user wants to enable it then the flag should be sufficient.

Reviewers: TNorthover, aeubanks

Reviewed By: aeubanks

Pull Request: https://github.com/llvm/llvm-project/pull/86588
2024-03-25 18:08:36 -04:00
Tom Stellard
de917dc20e
[workflow] Don't add a comment when the first run of the formatter passes (#86335)
This was inadvertently changed in
2120f574103c487787390263b3692c4b167f6bdf.
2024-03-25 15:04:11 -07:00
Farzon Lotfi
4cea2d049f
[HLSL][DXIL] implement sqrt intrinsic (#86560)
completes #86187
- fix hlsl_intrinsic to cover the correct cases
- move to using `__builtin_elementwise_sqrt`
- add lowering of `Intrinsic::sqrt` to dxilop 24.
2024-03-25 18:02:30 -04:00
Farzon Lotfi
060df78cdb
[DXIL] Add Float Dot Intrinsic Lowering (#86071)
Completes #83626
- `CGBuiltin.cpp` - modify `getDotProductIntrinsic` to be able to emit
`dot2`, `dot3`, and `dot4` intrinsics based on element count
- `IntrinsicsDirectX.td` - for floating point add `dot2`, `dot3`, and
`dot4` inntrinsics -`DXIL.td` add dxilop intrinsic lowering for `dot2`,
`dot3`, & `dot4`.
- `DXILOpLowering.cpp` - add vector arg flattening for dot product. 
- `DXILOpBuilder.h` - modify `createDXILOpCall` to take a smallVector
instead of an iterator
- `DXILOpBuilder.cpp` - modify `createDXILOpCall` by moving the small
vector up to the calling function in `DXILOpLowering.cpp`.
- Moving one function up gives us access to the `CallInst` and
`Function` which were needed to distinguish the dot product intrinsics
and get the operands without using the iterator.
2024-03-25 18:01:46 -04:00
Jason Molenda
765d4c402f
[lldb] [ObjectFileMachO] LLVM_COV is not mapped into firmware memory (#86359)
It is possible to gather code coverage in a firmware environment, where
the __LLVM_COV segment will not be mapped in memory but does exist in
the binary, see

https://llvm.org/devmtg/2020-09/slides/PhippsAlan_EmbeddedCodeCoverage_LLVM_Conf_Talk_final.pdf

The __LLVM_COV segment in the binary happens to be at the same address
as the __DATA segment, so if lldb treats this segment as loaded, it
shadows the __DATA segment and address->symbol resolution can fail.

For these non-userland code cases, we need to mark __LLVM_COV as not a
loadable segment.

rdar://124475661
2024-03-25 15:00:36 -07:00