Skip to content

Commit a0767d6

Browse files
authored
Rollup merge of #58308 - gnzlbg:context_insert_intr, r=eddyb
Extract block to insert an intrinsic into its own function r? @eddyb
2 parents fab0f9b + 7d6bfc5 commit a0767d6

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

src/librustc_codegen_llvm/context.rs

+17-12
Original file line numberDiff line numberDiff line change
@@ -465,33 +465,38 @@ impl CodegenCx<'b, 'tcx> {
465465
self.declare_intrinsic(key).unwrap_or_else(|| bug!("unknown intrinsic '{}'", key))
466466
}
467467

468+
fn insert_intrinsic(
469+
&self, name: &'static str, args: Option<&[&'b llvm::Type]>, ret: &'b llvm::Type
470+
) -> &'b llvm::Value {
471+
let fn_ty = if let Some(args) = args {
472+
self.type_func(args, ret)
473+
} else {
474+
self.type_variadic_func(&[], ret)
475+
};
476+
let f = self.declare_cfn(name, fn_ty);
477+
llvm::SetUnnamedAddr(f, false);
478+
self.intrinsics.borrow_mut().insert(name, f.clone());
479+
f
480+
}
481+
468482
fn declare_intrinsic(
469483
&self,
470484
key: &str
471485
) -> Option<&'b Value> {
472486
macro_rules! ifn {
473487
($name:expr, fn() -> $ret:expr) => (
474488
if key == $name {
475-
let f = self.declare_cfn($name, self.type_func(&[], $ret));
476-
llvm::SetUnnamedAddr(f, false);
477-
self.intrinsics.borrow_mut().insert($name, f.clone());
478-
return Some(f);
489+
return Some(self.insert_intrinsic($name, Some(&[]), $ret));
479490
}
480491
);
481492
($name:expr, fn(...) -> $ret:expr) => (
482493
if key == $name {
483-
let f = self.declare_cfn($name, self.type_variadic_func(&[], $ret));
484-
llvm::SetUnnamedAddr(f, false);
485-
self.intrinsics.borrow_mut().insert($name, f.clone());
486-
return Some(f);
494+
return Some(self.insert_intrinsic($name, None, $ret));
487495
}
488496
);
489497
($name:expr, fn($($arg:expr),*) -> $ret:expr) => (
490498
if key == $name {
491-
let f = self.declare_cfn($name, self.type_func(&[$($arg),*], $ret));
492-
llvm::SetUnnamedAddr(f, false);
493-
self.intrinsics.borrow_mut().insert($name, f.clone());
494-
return Some(f);
499+
return Some(self.insert_intrinsic($name, Some(&[$($arg),*]), $ret));
495500
}
496501
);
497502
}

0 commit comments

Comments
 (0)