Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Add simd_bswap, simd_bitreverse, simd_ctlz, and simd_cttz intrinsics #114156

Merged
merged 4 commits into from
Jul 29, 2023

Conversation

calebzulawski
Copy link
Member

@rustbot
Copy link
Collaborator

rustbot commented Jul 28, 2023

r? @compiler-errors

(rustbot has picked a reviewer for you, use r? to override)

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jul 28, 2023
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@workingjubilee
Copy link
Member

Intrinsic has incorrect argument type!
<4 x i32> (<4 x i32>, i8)* @llvm.ctlz.v4i32
Intrinsic has incorrect argument type!
<4 x i32> (<4 x i32>, i8)* @llvm.ctlz.v4i32
Intrinsic has incorrect argument type!
<4 x i32> (<4 x i32>, i8)* @llvm.cttz.v4i32
Intrinsic has incorrect argument type!
<4 x i32> (<4 x i32>, i8)* @llvm.cttz.v4i32
LLVM ERROR: Broken module found, compilation aborted!

well
that won't do.

@calebzulawski
Copy link
Member Author

Is that LLVM 14 specific? I'm pretty sure the bump to 15 is imminent.

@calebzulawski
Copy link
Member Author

Ah, actually, the problem is that it's encoding the last argument as i8 instead of i1. Why does it work elsewhere?

@workingjubilee
Copy link
Member

Is that LLVM 14 specific? I'm pretty sure the bump to 15 is imminent.

I don't thiiink so?

@Urgau
Copy link
Member

Urgau commented Jul 28, 2023

Is that LLVM 14 specific? I'm pretty sure the bump to 15 is imminent.

I don't thiiink so?

#114148 8 hours ago ;-)

@workingjubilee
Copy link
Member

@Urgau I mean that I don't think the issue is LLVM 14 specific, I could be wrong.

@Urgau
Copy link
Member

Urgau commented Jul 28, 2023

@Urgau I mean that I don't think the issue is LLVM 14 specific, I could be wrong.

Oh, yeah sorry. As for the issue here, I would just note that type_bool() is indeed i8 not i1; to have i1 you should call type_i1().

@bjorn3
Copy link
Member

bjorn3 commented Jul 28, 2023

cg_clif and cg_gcc will need these intrinsics too.

@calebzulawski
Copy link
Member Author

Is that LLVM 14 specific? I'm pretty sure the bump to 15 is imminent.

I don't thiiink so?

It compiles on newer LLVM so at some point it became flexible enough to accept i8.

cg_clif and cg_gcc will need these intrinsics too.

@bjorn3 do you expect that to be part of this PR, or just making a note of it?

@bjorn3
Copy link
Member

bjorn3 commented Jul 28, 2023

Mostly making a note. I can implement it on the cg_clif side myself. I don't know what @antoyo prefers for cg_gcc.

@antoyo
Copy link
Contributor

antoyo commented Jul 28, 2023

I'm also taking note for cg_gcc and I'll implement it myself.

@calebzulawski
Copy link
Member Author

@Urgau I mean that I don't think the issue is LLVM 14 specific, I could be wrong.

Oh, yeah sorry. As for the issue here, I would just note that type_bool() is indeed i8 not i1; to have i1 you should call type_i1().

It looks like this worked!

@compiler-errors
Copy link
Member

@bors r+

@bors
Copy link
Contributor

bors commented Jul 29, 2023

📌 Commit ce4a48f has been approved by compiler-errors

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 29, 2023
@RalfJung
Copy link
Member

Any chance someone could make a PR to also implement these in Miri? :) Let me know if you need any pointers for getting started. The existing SIMD intrinsics are probably a good template.

@bors
Copy link
Contributor

bors commented Jul 29, 2023

⌛ Testing commit ce4a48f with merge 03a5725...

@bors
Copy link
Contributor

bors commented Jul 29, 2023

☀️ Test successful - checks-actions
Approved by: compiler-errors
Pushing 03a5725 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Jul 29, 2023
@bors bors merged commit 03a5725 into rust-lang:master Jul 29, 2023
@rustbot rustbot added this to the 1.73.0 milestone Jul 29, 2023
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (03a5725): comparison URL.

Overall result: no relevant changes - no action needed

@rustbot label: -perf-regression

Instruction count

This benchmark run did not return any relevant results for this metric.

Max RSS (memory usage)

Results

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
1.6% [0.8%, 5.6%] 16
Regressions ❌
(secondary)
4.7% [1.4%, 9.0%] 5
Improvements ✅
(primary)
-1.8% [-1.8%, -1.8%] 1
Improvements ✅
(secondary)
-2.6% [-3.5%, -2.0%] 4
All ❌✅ (primary) 1.4% [-1.8%, 5.6%] 17

Cycles

This benchmark run did not return any relevant results for this metric.

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 652.746s -> 651.287s (-0.22%)

workingjubilee added a commit to workingjubilee/rustc that referenced this pull request Jul 31, 2023
…er-errors

Fix simd_bswap for i8/u8

rust-lang#114156 missed this test case ☹️
cc `@workingjubilee`
bors added a commit to rust-lang-ci/rust that referenced this pull request Jul 31, 2023
…-errors

Fix simd_bswap for i8/u8

rust-lang#114156 missed this test case ☹️
cc `@workingjubilee`
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
merged-by-bors This PR was explicitly merged by bors. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.