Skip to content

Commit

Permalink
Rollup merge of rust-lang#124003 - WaffleLapkin:dellvmization, r=scot…
Browse files Browse the repository at this point in the history
…tmcm,RalfJung,antoyo

Dellvmize some intrinsics (use `u32` instead of `Self` in some integer intrinsics)

This implements rust-lang/compiler-team#693 minus what was implemented in rust-lang#123226.

Note: I decided to _not_ change `shl`/... builder methods, as it just doesn't seem worth it.

r? ``@scottmcm``
  • Loading branch information
matthiaskrgr authored Apr 23, 2024
2 parents e654877 + d5273ff commit 6a2ad55
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 5 deletions.
2 changes: 1 addition & 1 deletion example/example.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ pub fn array_as_slice(arr: &[u8; 3]) -> &[u8] {
arr
}

pub unsafe fn use_ctlz_nonzero(a: u16) -> u16 {
pub unsafe fn use_ctlz_nonzero(a: u16) -> u32 {
intrinsics::ctlz_nonzero(a)
}

Expand Down
2 changes: 1 addition & 1 deletion example/mini_core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -627,7 +627,7 @@ pub mod intrinsics {
pub fn min_align_of_val<T: ?::Sized>(val: *const T) -> usize;
pub fn copy<T>(src: *const T, dst: *mut T, count: usize);
pub fn transmute<T, U>(e: T) -> U;
pub fn ctlz_nonzero<T>(x: T) -> T;
pub fn ctlz_nonzero<T>(x: T) -> u32;
#[rustc_safe_intrinsic]
pub fn needs_drop<T: ?::Sized>() -> bool;
#[rustc_safe_intrinsic]
Expand Down
10 changes: 7 additions & 3 deletions src/intrinsics/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ use rustc_span::source_map::Spanned;
use rustc_span::symbol::{sym, Symbol};

pub(crate) use self::llvm::codegen_llvm_intrinsic_call;
use crate::cast::clif_intcast;
use crate::prelude::*;

fn bug_on_incorrect_arg_count(intrinsic: impl std::fmt::Display) -> ! {
Expand Down Expand Up @@ -627,7 +628,8 @@ fn codegen_regular_intrinsic_call<'tcx>(

// FIXME trap on `ctlz_nonzero` with zero arg.
let res = fx.bcx.ins().clz(val);
let res = CValue::by_val(res, arg.layout());
let res = clif_intcast(fx, res, types::I32, false);
let res = CValue::by_val(res, ret.layout());
ret.write_cvalue(fx, res);
}
sym::cttz | sym::cttz_nonzero => {
Expand All @@ -636,15 +638,17 @@ fn codegen_regular_intrinsic_call<'tcx>(

// FIXME trap on `cttz_nonzero` with zero arg.
let res = fx.bcx.ins().ctz(val);
let res = CValue::by_val(res, arg.layout());
let res = clif_intcast(fx, res, types::I32, false);
let res = CValue::by_val(res, ret.layout());
ret.write_cvalue(fx, res);
}
sym::ctpop => {
intrinsic_args!(fx, args => (arg); intrinsic);
let val = arg.load_scalar(fx);

let res = fx.bcx.ins().popcnt(val);
let res = CValue::by_val(res, arg.layout());
let res = clif_intcast(fx, res, types::I32, false);
let res = CValue::by_val(res, ret.layout());
ret.write_cvalue(fx, res);
}
sym::bitreverse => {
Expand Down

0 comments on commit 6a2ad55

Please sign in to comment.