diff options
| author | Ralf Jung <post@ralfj.de> | 2025-07-28 07:11:11 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-28 07:11:11 +0000 |
| commit | fb464108acad905de43b03dd61c5a69ca509a73d (patch) | |
| tree | aa6ef95360aa10acfbd64d92c17755baa0796f9c /compiler/rustc_codegen_llvm/src/intrinsic.rs | |
| parent | 0570fb420f3a37a1e9af69dcf52b1030bdfb6ad6 (diff) | |
| parent | dea3e131d53eccd46703a304d942778b5c6edef6 (diff) | |
| download | rust-fb464108acad905de43b03dd61c5a69ca509a73d.tar.gz rust-fb464108acad905de43b03dd61c5a69ca509a73d.zip | |
Merge pull request #4500 from RalfJung/rustup
Rustup
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 => { |
