Rollup merge of #58308 - gnzlbg:context_insert_intr, r=eddyb
Extract block to insert an intrinsic into its own function r? @eddyb
This commit is contained in:
commit
a0767d6096
1 changed files with 17 additions and 12 deletions
|
@ -465,6 +465,20 @@ impl CodegenCx<'b, 'tcx> {
|
||||||
self.declare_intrinsic(key).unwrap_or_else(|| bug!("unknown intrinsic '{}'", key))
|
self.declare_intrinsic(key).unwrap_or_else(|| bug!("unknown intrinsic '{}'", key))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn insert_intrinsic(
|
||||||
|
&self, name: &'static str, args: Option<&[&'b llvm::Type]>, ret: &'b llvm::Type
|
||||||
|
) -> &'b llvm::Value {
|
||||||
|
let fn_ty = if let Some(args) = args {
|
||||||
|
self.type_func(args, ret)
|
||||||
|
} else {
|
||||||
|
self.type_variadic_func(&[], ret)
|
||||||
|
};
|
||||||
|
let f = self.declare_cfn(name, fn_ty);
|
||||||
|
llvm::SetUnnamedAddr(f, false);
|
||||||
|
self.intrinsics.borrow_mut().insert(name, f.clone());
|
||||||
|
f
|
||||||
|
}
|
||||||
|
|
||||||
fn declare_intrinsic(
|
fn declare_intrinsic(
|
||||||
&self,
|
&self,
|
||||||
key: &str
|
key: &str
|
||||||
|
@ -472,26 +486,17 @@ impl CodegenCx<'b, 'tcx> {
|
||||||
macro_rules! ifn {
|
macro_rules! ifn {
|
||||||
($name:expr, fn() -> $ret:expr) => (
|
($name:expr, fn() -> $ret:expr) => (
|
||||||
if key == $name {
|
if key == $name {
|
||||||
let f = self.declare_cfn($name, self.type_func(&[], $ret));
|
return Some(self.insert_intrinsic($name, Some(&[]), $ret));
|
||||||
llvm::SetUnnamedAddr(f, false);
|
|
||||||
self.intrinsics.borrow_mut().insert($name, f.clone());
|
|
||||||
return Some(f);
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
($name:expr, fn(...) -> $ret:expr) => (
|
($name:expr, fn(...) -> $ret:expr) => (
|
||||||
if key == $name {
|
if key == $name {
|
||||||
let f = self.declare_cfn($name, self.type_variadic_func(&[], $ret));
|
return Some(self.insert_intrinsic($name, None, $ret));
|
||||||
llvm::SetUnnamedAddr(f, false);
|
|
||||||
self.intrinsics.borrow_mut().insert($name, f.clone());
|
|
||||||
return Some(f);
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
($name:expr, fn($($arg:expr),*) -> $ret:expr) => (
|
($name:expr, fn($($arg:expr),*) -> $ret:expr) => (
|
||||||
if key == $name {
|
if key == $name {
|
||||||
let f = self.declare_cfn($name, self.type_func(&[$($arg),*], $ret));
|
return Some(self.insert_intrinsic($name, Some(&[$($arg),*]), $ret));
|
||||||
llvm::SetUnnamedAddr(f, false);
|
|
||||||
self.intrinsics.borrow_mut().insert($name, f.clone());
|
|
||||||
return Some(f);
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue