247157 Commits

Author SHA1 Message Date
Erik Desjardins
87d02e0dfd Recommit "[Support] change StringMap hash function from djbHash to xxHash"
This reverts commit 37eb9d13f891f7656f811516e765b929b169afe0.

Test failures have been fixed:

- ubsan failure fixed by 72eac42f21c0f45a27f3eaaff9364cbb5189b9e4
- warn-unsafe-buffer-usage-fixits-local-var-span.cpp fixed by
  03cc52dfd1dbb4a59b479da55e87838fb93d2067 (wasn't related)
- test-output-format.ll failure was spurious, build failed at
  https://lab.llvm.org/buildbot/#/builders/54/builds/3545 (b4431b2d945b6fc19b1a55ac6ce969a8e06e1e93)
  but passed at
  https://lab.llvm.org/buildbot/#/builders/54/builds/3546 (5ae99be0377248c74346096dc475af254a3fc799)
  which is before my revert
  b4431b2d94...5ae99be037

Original commit message:

    Depends on https://reviews.llvm.org/D142861.

    Alternative to https://reviews.llvm.org/D137601.

    xxHash is much faster than djbHash. This makes a simple Rust test case with a large constant string 10% faster to compile.

    Previous attempts at changing this hash function (e.g. https://reviews.llvm.org/D97396) had to be reverted due to breaking tests that depended on iteration order.
    No additional tests fail with this patch compared to `main` when running `check-all` with `-DLLVM_ENABLE_PROJECTS="all"` (on a Linux host), so I hope I found everything that needs to be changed.

    Differential Revision: https://reviews.llvm.org/D142862
2023-02-19 16:52:26 -05:00
Florian Hahn
f61c9b7569
[SLP] Fix infinite loop in isUndefVector.
This fixes an infinite loop if isa<T>(II->getOperand(1)) is true.
Update Base at the top of the loop, before the continue.

Reviewed By: ABataev

Differential Revision: https://reviews.llvm.org/D144292
2023-02-19 21:42:24 +00:00
Alex Bradbury
d41a73aa94 [RISCV][MC] Mark Zawrs extension as non-experimental
Support for the unratified 1.0-rc3 specification was introduced in
D133443. The specification has since been ratified (in November 2022
according to the recently ratified extensions list
<https://wiki.riscv.org/display/HOME/Recently+Ratified+Extensions>.

A review of the diff
<https://github.com/riscv/riscv-zawrs/compare/V1.0-rc3...main> of the
1.0-rc3 spec vs the current/ratified document shows no changes to the
instruction encoding or naming. At one point, a note was added
<e84f42406a>
indicating Zawrs depends on the Zalrsc extension (not officially
specified, but I believe to be just the LR/SC instructions from the A
extension). The final text ended up as "The instructions in the Zawrs
extension are only useful in conjunction with the LR instructions, which
are provided by the A extension, and which we also expect to be provided
by a narrower Zalrsc extension in the future." I think it's consistent
with this phrasing to not require the A extension for Zawrs, which
matches what was implemented.

No intrinsics are implemented for Zawrs currently, meaning we don't need
to additionally review whether those intrinsics can be considered
finalised and ready for exposure to end users.

Differential Revision: https://reviews.llvm.org/D143507
2023-02-19 20:43:03 +00:00
Craig Topper
7f31a5c4c6 [RISCV] Add fgtq.s and fgeq.s assembler aliases for Zfa.
We can swap operands and use fltq.s and fleq.s. Similar for D and H.
2023-02-19 12:28:01 -08:00
Craig Topper
f962f50fca [RISCV] Remove Commutable property from Zfa fltq/fleq instructions. 2023-02-19 11:37:23 -08:00
Kazu Hirata
cbde2124f1 Use APInt::popcount instead of APInt::countPopulation (NFC)
This is for consistency with the C++20-style bit manipulation
functions in <bit>.
2023-02-19 11:29:12 -08:00
David Green
fd4d29808e [ARM] Add targets for Arm DebugInfo tests. NFC
This prevents the instructions being invalid for the subtarget.
2023-02-19 19:13:41 +00:00
Florian Hahn
7737c05696
[VPlan] Make sure properlyDominates(A, A) returns false.
At the moment, properlyDominates(A, A) can return true via
LocalComesBefore. Add an early exit to ensure it returns false if
A == B.

Note: no test has been added because the existing test suite covers this
case already with libc++ with assertions enabled.

Fixes https://github.com/llvm/llvm-project/issues/60850.
2023-02-19 18:01:16 +00:00
DianQK
1235ed9133
Revert "[SimplifyCFG] Check if the return instruction causes undefined behavior"
This reverts commit b6eed9a82e0ce530d94a194c88615d6c272e1854.
2023-02-19 21:08:29 +08:00
DianQK
b6eed9a82e
[SimplifyCFG] Check if the return instruction causes undefined behavior
This should fix https://github.com/rust-lang/rust/issues/107681.

Return undefined to a noundef return value is undefined.

Example:

```
define noundef i32 @test_ret_noundef(i1 %cond) {
entry:
  br i1 %cond, label %bb1, label %bb2
bb1:
  br label %bb2
bb2:
  %r = phi i32 [ undef, %entry ], [ 1, %bb1 ]
  ret i32 %r
}
```

Differential Revision: https://reviews.llvm.org/D144319
2023-02-19 19:42:40 +08:00
Joshua Cao
e19d9eea6e [SCEV] Add automated test checks for some tests 2023-02-18 23:58:23 -08:00
NAKAMURA Takumi
c45e90cf15 llvm-tblgen: Anonymize some functions. 2023-02-19 14:44:56 +09:00
Craig Topper
3d0a5bf7de [RISCV] Add Zfa test cases for strict ONE and UEQ comparisons. NFC
These correspond to islessgreater and it inverse.
2023-02-18 17:28:10 -08:00
Craig Topper
78f106a554 [RISCV] Handle RISCVISD::SplitF64 and RISCVISD::BuildPairF64 during isel with Zfa.
Instead of special casing Zfa in the custom inserters, select the
correct instructions during isel.

BuildPairF64 we can do with pattern, but SplitF64 requires custom
selection due to the two destinations.

If we didn't need SplitF64 without Zfa, I would have an extract low
and extract high ISD opcode for Zfa to avoid that issue.
2023-02-18 17:03:55 -08:00
Juneyoung Lee
2ad0cc9186 [DivRemPairs] Strip division's poison generating flag
Given this transformation: X % Y -> X - (X / Y) * Y

This patch strips off the poison-generating flag of X / Y such as exact, because it may make the optimized form result poison whereas X % Y does not.

The issue was reported here: https://github.com/llvm/llvm-project/issues/60748

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D144333
2023-02-18 21:00:55 +00:00
Juneyoung Lee
c726b34ea0 Add a test for D144333 2023-02-18 21:00:55 +00:00
Vitaly Buka
a53d940cee [SCEV] Fix FoldID::addInteger(unsigned long I)
"unsigned long" can be 8 bytes, but the code assumes 4.

This this the real root cause D122215 was reverted.

Reviewed By: fhahn

Differential Revision: https://reviews.llvm.org/D144316
2023-02-18 12:29:17 -08:00
Vitaly Buka
c23f29d6f0 Revert "[SimplifyCFG] Check if the return instruction causes undefined behavior"
Breaks bots
https://lab.llvm.org/buildbot/#/builders/236/builds/2349
https://lab.llvm.org/buildbot/#/builders/74/builds/17361
https://lab.llvm.org/buildbot/#/builders/168/builds/11972

This reverts commit 7be55b007698f6b6398cbbea69c327b5a971938a.
2023-02-18 12:21:10 -08:00
David Green
8e3dc1366f [AArch64] Concat zip1 and zip2 is a wider zip1
Given concat(zip1(a, b), zip2(a, b)), we can convert that to a 128bit zip1(a, b)
if we widen a and b out first.

Fixes #54226

Differential Revision: https://reviews.llvm.org/D121088
2023-02-18 19:54:29 +00:00
Noah Goldstein
3bd38f6639 [ValueTracking] Add cases for additional ops in isKnownNonZero
Add cases for the following ops:
    - 0-X            -- https://alive2.llvm.org/ce/z/6C75Li
    - bitreverse(X)  -- https://alive2.llvm.org/ce/z/SGG1q9
    - bswap(X)       -- https://alive2.llvm.org/ce/z/p7pzwh
    - ctpop(X)       -- https://alive2.llvm.org/ce/z/c5y3BC
    - abs(X)         -- https://alive2.llvm.org/ce/z/yxXGz_
                        https://alive2.llvm.org/ce/z/rSRg4K
    - uadd_sat(X, Y) -- https://alive2.llvm.org/ce/z/Zw-y4W
                        https://alive2.llvm.org/ce/z/2NRqRz
                        https://alive2.llvm.org/ce/z/M1OpF8

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D142828
2023-02-18 13:45:15 -06:00
Noah Goldstein
e0ce87509b [ValueTracking] Add tests for additional isKnownNonZero cases; NFC
Add cases for the following ops:
    - 0-X
    - bitreverse(X)
    - bswap(X)
    - ctpop(X)
    - abs(X)
    - uadd_sat(X, Y)

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D142827
2023-02-18 13:44:55 -06:00
Noah Goldstein
9a8f517f57 [ValueTracking] Add KnownBits patterns xor(x, x - 1) and and(x, -x) for knowing upper bits to be zero
These two BMI pattern will clear the upper bits of result past the
first set bit. So if we know a single bit in `x` is set, we know that
`results[bitwidth - 1, log2(x) + 1] = 0`.

Alive2:
blsmsk: https://alive2.llvm.org/ce/z/a397BS
blsi: https://alive2.llvm.org/ce/z/tsbQhC

Differential Revision: https://reviews.llvm.org/D142271
2023-02-18 13:31:17 -06:00
Noah Goldstein
c8fb2775ce [ValueTracking] Add tests for known bits after common BMI pattern (blsmsk/blsi); NFC
Differential Revision: https://reviews.llvm.org/D142270
2023-02-18 13:31:12 -06:00
Jay Foad
6749d187c6 [KnownBits] Add blsi and blsmsk
Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D142519
2023-02-18 13:31:07 -06:00
Cyndy Ishida
4384127549
[llvm-tapi-diff] add default case to switch for symbol flags 2023-02-18 11:27:44 -08:00
Cyndy Ishida
b70d87bc5e
[TextAPI] Capture new properties from TBD to InterfaceFile
* Deployment Versions for targets
* Run Search Paths
* Text vs Data Segment attributes to symbols

Reviewed By: pete

Differential Revision: https://reviews.llvm.org/D144158
2023-02-18 10:52:24 -08:00
NAKAMURA Takumi
aeafcbcd75 llvm-tblgen: Add "TableGenBackends.h" to each emitter.
"TableGenBackends.h" has declarations of emitters.
2023-02-19 03:06:32 +09:00
NAKAMURA Takumi
b3405ace95 llvm-tblgen: Add missing includes 2023-02-19 03:06:31 +09:00
NAKAMURA Takumi
655f4cb0e4 llvm-tblgen: Reformat 2023-02-19 03:06:31 +09:00
Amara Emerson
ddf167c442 [GlobalISel] Fix G_ZEXTLOAD being converted to G_SEXTLOAD incorrectly.
The extending loads combine tries to prefer sign-extends folding into loads vs
zexts, and in cases where a G_ZEXTLOAD is first used by a G_ZEXT, and then used
by a G_SEXT, it would select the G_SEXT even though the load is already
zero-extending.

Fixes issue #59630
2023-02-18 10:05:08 -08:00
Florian Hahn
a9a1950115
Revert "[SCCP] Remove legacy SCCP pass."
This reverts commit 5356fefc19df3fbf32d180b1b10e6226e8743541.

It looks like Polly still relies on the legacy SCCP pass. Bring it back
until the best way forward is determined.
2023-02-18 18:01:37 +00:00
Florian Hahn
5356fefc19
[SCCP] Remove legacy SCCP pass.
This is part of the optimization pipeline, of which the legacy pass manager version is deprecated.

Reviewed By: aeubanks

Differential Revision: https://reviews.llvm.org/D144201
2023-02-18 17:54:30 +00:00
Kristina Bessonova
5dde2bcdd1 [AArch64InstPrinter][llvm-objdump] Print ADR PC-relative label as a target address hexadecimal form
This is similar to ADRP and matches GNU objdump:

GNU objdump:
```
0000000000200100 <_start>:
  200100:    adr    x0, 201000 <_start+0xf00>
```

llvm-objdump (before patch):
```
0000000000200100 <_start>:
  200100:    adr    x0, #3840
```

llvm-objdump (after patch):
```
0000000000200100 <_start>:
  200100:    adr    x0, 0x201000 <_start+0xf00>
```

Reviewed By: simon_tatham, peter.smith

Differential Revision: https://reviews.llvm.org/D144079
2023-02-18 18:31:21 +02:00
DianQK
7be55b0076
[SimplifyCFG] Check if the return instruction causes undefined behavior
This should fix https://github.com/rust-lang/rust/issues/107681.

Return undefined to a noundef return value is undefined.

Example:

```
define noundef i32 @test_ret_noundef(i1 %cond) {
entry:
  br i1 %cond, label %bb1, label %bb2
bb1:
  br label %bb2
bb2:
  %r = phi i32 [ undef, %entry ], [ 1, %bb1 ]
  ret i32 %r
}
```

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D144319
2023-02-18 23:31:57 +08:00
Sanjay Patel
a8831631c7 [InstCombine] add tests for 1<<cttz(x); NFC
issue #60799
issue #60801
2023-02-18 08:34:55 -05:00
eopXD
b531192254 [Doc] Fix type-o under LangRef
Signed-off-by: eop Chen <eop.chen@sifive.com>
2023-02-18 02:12:24 -08:00
Amara Emerson
556657c0fd [NFC][GlobalISel] Regenerate test checks for extending-loads test. 2023-02-18 01:49:08 -08:00
LLVM GN Syncbot
5e262d58c4 [gn build] Port 79320a0c3f82 2023-02-18 06:30:26 +00:00
Cyndy Ishida
79320a0c3f
Reland "[TextAPI] Implement TBDv5 Reader"
Introduce initial reader for TBDv5 which is in JSON. This captures all
the currently understood fields within the internal structure
`InterfaceFile`.
New fields will be followed up in future PRs.

Reviewed By: pete

Differential Revision: https://reviews.llvm.org/D144156
2023-02-17 22:27:08 -08:00
Shengchen Kan
d3745461da [X86][NFC] Assert MRMr0 format from emitREXPrefix
The only instruction of this format is VEX encoding
2023-02-18 14:15:31 +08:00
Lang Hames
2ec1aba2b6 [llvm-jitlink] Discard allocation actions in -noexec mode.
Allocation actions may run JIT'd code, which isn't permitted in -noexec mode.

Testcases that depend on actions running should be moved to the ORC runtime.
2023-02-17 20:18:23 -08:00
Paulo Matos
890146b192 [WebAssembly] Initial support for reference type externref in clang
This patch introduces a new type __externref_t that denotes a WebAssembly opaque
reference type. It also implements builtin __builtin_wasm_ref_null_extern(),
that returns a null value of __externref_t. This lays the ground work
for further builtins and reference types.

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D122215
2023-02-17 18:48:48 -08:00
Matt Arsenault
c42eda5d36 IROutliner: cast instead of dyn_cast and assert 2023-02-17 22:28:09 -04:00
Matt Arsenault
e8444078ed CodeExtractor: Fix creating addrspacecasts for lifetime markers
Also stop caring about typed pointers.
2023-02-17 22:27:29 -04:00
Fangrui Song
432caca39a Simplify with hasFeature. NFC 2023-02-17 18:22:24 -08:00
Philip Reames
495b653480 [RISCV] Add missing plumbing and tests for zfa
Experimental support for the zfa extension was recently added in https://reviews.llvm.org/D141984. A couple of the normal test changes and clang plumbing got missed in that change. This commit updates the usual suspects.

Differential Revision: https://reviews.llvm.org/D144288
2023-02-17 17:56:30 -08:00
LLVM GN Syncbot
e49b93ef29 [gn build] Port 07e3ca238e68 2023-02-18 00:29:10 +00:00
Cyndy Ishida
07e3ca238e Revert "[TextAPI] Implement TBDv5 Reader"
This reverts commit b861b1225380175a5a724e2a677754f5f74e5b0d.
This reverts commit 4be17641b05df1e63fa8e069af92676f1246eb83.

This patch wont build on some compilers on buildbot.
2023-02-17 16:26:23 -08:00
Cyndy Ishida
4be17641b0 [TextAPI] wrap returned Errors in std::move 2023-02-17 16:16:12 -08:00
LLVM GN Syncbot
347954314c [gn build] Port b861b1225380 2023-02-18 00:06:09 +00:00