]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc_codegen_llvm/intrinsic.rs
Generalized base.rs#call_memcpy and everything that it uses
[rust.git] / src / librustc_codegen_llvm / intrinsic.rs
index 29831473ba2bb8f0c6d07365d2f0f5a604d71987..48afda73d792a7711e9f8ecf3464df90659197c1 100644 (file)
@@ -31,6 +31,8 @@
 use builder::Builder;
 use value::Value;
 
+use traits::BuilderMethods;
+
 use rustc::session::Session;
 use syntax_pos::Span;
 
@@ -591,7 +593,7 @@ fn ty_to_type(cx: &CodegenCx<'ll, '_>, t: &intrinsics::Type) -> Vec<&'ll Type> {
                     Vector(ref t, ref llvm_elem, length) => {
                         let t = llvm_elem.as_ref().unwrap_or(t);
                         let elem = one(ty_to_type(cx, t));
-                        vec![Type::vector(elem, length as u64)]
+                        vec![Type::vector::<Value>(elem, length as u64)]
                     }
                     Aggregate(false, ref contents) => {
                         let elems = contents.iter()
@@ -640,7 +642,10 @@ fn modify_as_needed(
                     }
                     intrinsics::Type::Vector(_, Some(ref llvm_elem), length) => {
                         let llvm_elem = one(ty_to_type(bx.cx, llvm_elem));
-                        vec![bx.bitcast(arg.immediate(), Type::vector(llvm_elem, length as u64))]
+                        vec![
+                            bx.bitcast(arg.immediate(),
+                            Type::vector::<Value>(llvm_elem, length as u64))
+                        ]
                     }
                     intrinsics::Type::Integer(_, width, llvm_width) if width != llvm_width => {
                         // the LLVM intrinsic uses a smaller integer
@@ -668,7 +673,7 @@ fn modify_as_needed(
                 intrinsics::IntrinsicDef::Named(name) => {
                     let f = declare::declare_cfn(cx,
                                                  name,
-                                                 Type::func(&inputs, outputs));
+                                                 Type::func::<Value>(&inputs, outputs));
                     bx.call(f, &llargs, None)
                 }
             };
@@ -1155,7 +1160,7 @@ macro_rules! require_simd {
         }
         // truncate the mask to a vector of i1s
         let i1 = Type::i1(bx.cx);
-        let i1xn = Type::vector(i1, m_len as u64);
+        let i1xn = Type::vector::<Value>(i1, m_len as u64);
         let m_i1s = bx.trunc(args[0].immediate(), i1xn);
         return Ok(bx.select(m_i1s, args[1].immediate(), args[2].immediate()));
     }
@@ -1296,7 +1301,7 @@ fn llvm_vector_ty(cx: &CodegenCx<'ll, '_>, elem_ty: ty::Ty, vec_len: usize,
             elem_ty = elem_ty.ptr_to();
             no_pointers -= 1;
         }
-        Type::vector(elem_ty, vec_len as u64)
+        Type::vector::<Value>(elem_ty, vec_len as u64)
     }
 
 
@@ -1379,7 +1384,7 @@ fn non_ptr(t: ty::Ty) -> ty::Ty {
         // Truncate the mask vector to a vector of i1s:
         let (mask, mask_ty) = {
             let i1 = Type::i1(bx.cx);
-            let i1xn = Type::vector(i1, in_len as u64);
+            let i1xn = Type::vector::<Value>(i1, in_len as u64);
             (bx.trunc(args[2].immediate(), i1xn), i1xn)
         };
 
@@ -1394,8 +1399,11 @@ fn non_ptr(t: ty::Ty) -> ty::Ty {
         let llvm_intrinsic = format!("llvm.masked.gather.{}.{}",
                                      llvm_elem_vec_str, llvm_pointer_vec_str);
         let f = declare::declare_cfn(bx.cx, &llvm_intrinsic,
-                                     Type::func(&[llvm_pointer_vec_ty, alignment_ty, mask_ty,
-                                                  llvm_elem_vec_ty], llvm_elem_vec_ty));
+                                     Type::func::<Value>(&[
+                                         llvm_pointer_vec_ty,
+                                         alignment_ty,
+                                         mask_ty,
+                                         llvm_elem_vec_ty], llvm_elem_vec_ty));
         llvm::SetUnnamedAddr(f, false);
         let v = bx.call(f, &[args[1].immediate(), alignment, mask, args[0].immediate()],
                         None);
@@ -1476,7 +1484,7 @@ fn non_ptr(t: ty::Ty) -> ty::Ty {
         // Truncate the mask vector to a vector of i1s:
         let (mask, mask_ty) = {
             let i1 = Type::i1(bx.cx);
-            let i1xn = Type::vector(i1, in_len as u64);
+            let i1xn = Type::vector::<Value>(i1, in_len as u64);
             (bx.trunc(args[2].immediate(), i1xn), i1xn)
         };
 
@@ -1493,7 +1501,7 @@ fn non_ptr(t: ty::Ty) -> ty::Ty {
         let llvm_intrinsic = format!("llvm.masked.scatter.{}.{}",
                                      llvm_elem_vec_str, llvm_pointer_vec_str);
         let f = declare::declare_cfn(bx.cx, &llvm_intrinsic,
-                                     Type::func(&[llvm_elem_vec_ty,
+                                     Type::func::<Value>(&[llvm_elem_vec_ty,
                                                   llvm_pointer_vec_ty,
                                                   alignment_ty,
                                                   mask_ty], ret_t));
@@ -1628,7 +1636,7 @@ macro_rules! bitwise_red {
 
                     // boolean reductions operate on vectors of i1s:
                     let i1 = Type::i1(bx.cx);
-                    let i1xn = Type::vector(i1, in_len as u64);
+                    let i1xn = Type::vector::<Value>(i1, in_len as u64);
                     bx.trunc(args[0].immediate(), i1xn)
                 };
                 return match in_elem.sty {