about summary refs log tree commit diff
path: root/src/librustc_codegen_llvm/context.rs
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-02-14 02:41:24 +0100
committerGitHub <noreply@github.com>2019-02-14 02:41:24 +0100
commita0767d6096e2da69381b4d925f3f22887f754aef (patch)
treefd070f430bac8a7e503c2a8d59302a1bbb987b8f /src/librustc_codegen_llvm/context.rs
parentfab0f9be32dd39b8b821bbc758101720d134fcf1 (diff)
parent7d6bfc53c85d3eb9470fd30621a1b54a61bbbdb6 (diff)
downloadrust-a0767d6096e2da69381b4d925f3f22887f754aef.tar.gz
rust-a0767d6096e2da69381b4d925f3f22887f754aef.zip
Rollup merge of #58308 - gnzlbg:context_insert_intr, r=eddyb
Extract block to insert an intrinsic into its own function

r? @eddyb
Diffstat (limited to 'src/librustc_codegen_llvm/context.rs')
-rw-r--r--src/librustc_codegen_llvm/context.rs29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/librustc_codegen_llvm/context.rs b/src/librustc_codegen_llvm/context.rs
index a4b976dfbd9..8144132832e 100644
--- a/src/librustc_codegen_llvm/context.rs
+++ b/src/librustc_codegen_llvm/context.rs
@@ -465,6 +465,20 @@ impl CodegenCx<'b, 'tcx> {
         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(
         &self,
         key: &str
@@ -472,26 +486,17 @@ impl CodegenCx<'b, 'tcx> {
         macro_rules! ifn {
             ($name:expr, fn() -> $ret:expr) => (
                 if key == $name {
-                    let f = self.declare_cfn($name, self.type_func(&[], $ret));
-                    llvm::SetUnnamedAddr(f, false);
-                    self.intrinsics.borrow_mut().insert($name, f.clone());
-                    return Some(f);
+                    return Some(self.insert_intrinsic($name, Some(&[]), $ret));
                 }
             );
             ($name:expr, fn(...) -> $ret:expr) => (
                 if key == $name {
-                    let f = self.declare_cfn($name, self.type_variadic_func(&[], $ret));
-                    llvm::SetUnnamedAddr(f, false);
-                    self.intrinsics.borrow_mut().insert($name, f.clone());
-                    return Some(f);
+                    return Some(self.insert_intrinsic($name, None, $ret));
                 }
             );
             ($name:expr, fn($($arg:expr),*) -> $ret:expr) => (
                 if key == $name {
-                    let f = self.declare_cfn($name, self.type_func(&[$($arg),*], $ret));
-                    llvm::SetUnnamedAddr(f, false);
-                    self.intrinsics.borrow_mut().insert($name, f.clone());
-                    return Some(f);
+                    return Some(self.insert_intrinsic($name, Some(&[$($arg),*]), $ret));
                 }
             );
         }