diff options
| author | Tobias Decking <Tobias.Decking@gmail.com> | 2025-07-25 17:56:10 +0200 | 
|---|---|---|
| committer | Tobias Decking <Tobias.Decking@gmail.com> | 2025-07-25 17:56:10 +0200 | 
| commit | 948c7952b8ea6052d0c753e962061e7201c331a7 (patch) | |
| tree | ca6723dcc9d72d1317649c7601c13c1d241cd199 /compiler/rustc_codegen_llvm/src/intrinsic.rs | |
| parent | b56aaec52bc0fa35591a872fb4aac81f606e265c (diff) | |
| download | rust-948c7952b8ea6052d0c753e962061e7201c331a7.tar.gz rust-948c7952b8ea6052d0c753e962061e7201c331a7.zip | |
Unify LLVM ctlz/cttz intrinsic generation
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/intrinsic.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/intrinsic.rs | 28 | 
1 files changed, 9 insertions, 19 deletions
| diff --git a/compiler/rustc_codegen_llvm/src/intrinsic.rs b/compiler/rustc_codegen_llvm/src/intrinsic.rs index fcc0d378f06..7b27e496986 100644 --- a/compiler/rustc_codegen_llvm/src/intrinsic.rs +++ b/compiler/rustc_codegen_llvm/src/intrinsic.rs @@ -382,26 +382,16 @@ impl<'ll, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> { let width = size.bits(); let llty = self.type_ix(width); match name { - sym::ctlz | sym::cttz => { - let y = self.const_bool(false); - let ret = self.call_intrinsic( - format!("llvm.{name}"), - &[llty], - &[args[0].immediate(), y], - ); - - self.intcast(ret, result.layout.llvm_type(self), false) - } - sym::ctlz_nonzero => { - let y = self.const_bool(true); - let ret = - self.call_intrinsic("llvm.ctlz", &[llty], &[args[0].immediate(), y]); - self.intcast(ret, result.layout.llvm_type(self), false) - } - sym::cttz_nonzero => { - let y = self.const_bool(true); + sym::ctlz | sym::ctlz_nonzero | sym::cttz | sym::cttz_nonzero => { + let y = + self.const_bool(name == sym::ctlz_nonzero || name == sym::cttz_nonzero); + let llvm_name = if name == sym::ctlz || name == sym::ctlz_nonzero { + "llvm.ctlz" + } else { + "llvm.cttz" + }; let ret = - self.call_intrinsic("llvm.cttz", &[llty], &[args[0].immediate(), y]); + self.call_intrinsic(llvm_name, &[llty], &[args[0].immediate(), y]); self.intcast(ret, result.layout.llvm_type(self), false) } sym::ctpop => { | 
