]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc_codegen_llvm/llvm/ffi.rs
Generalized SynchronisationScope for BuilderMethods
[rust.git] / src / librustc_codegen_llvm / llvm / ffi.rs
index b994b1ffc4bce91842b64630d4d88cf2a4afc974..8ac6e218d86b5a736b4477a9a8bddfbdbe141ceb 100644 (file)
@@ -19,6 +19,7 @@
 use libc::{c_ulonglong, c_void};
 
 use std::marker::PhantomData;
+use traits;
 
 use super::RustString;
 
@@ -141,6 +142,23 @@ pub enum IntPredicate {
     IntSLE = 41,
 }
 
+impl IntPredicate {
+    pub fn from_generic(intpre: traits::IntPredicate) -> Self {
+        match intpre {
+            traits::IntPredicate::IntEQ => IntPredicate::IntEQ,
+            traits::IntPredicate::IntNE => IntPredicate::IntNE,
+            traits::IntPredicate::IntUGT => IntPredicate::IntUGT,
+            traits::IntPredicate::IntUGE => IntPredicate::IntUGE,
+            traits::IntPredicate::IntULT => IntPredicate::IntULT,
+            traits::IntPredicate::IntULE => IntPredicate::IntULE,
+            traits::IntPredicate::IntSGT => IntPredicate::IntSGT,
+            traits::IntPredicate::IntSGE => IntPredicate::IntSGE,
+            traits::IntPredicate::IntSLT => IntPredicate::IntSLT,
+            traits::IntPredicate::IntSLE => IntPredicate::IntSLE,
+        }
+    }
+}
+
 /// LLVMRealPredicate
 #[derive(Copy, Clone)]
 #[repr(C)]
@@ -163,6 +181,29 @@ pub enum RealPredicate {
     RealPredicateTrue = 15,
 }
 
+impl RealPredicate {
+    pub fn from_generic(realpred: traits::RealPredicate) -> Self {
+        match realpred {
+            traits::RealPredicate::RealPredicateFalse => RealPredicate::RealPredicateFalse,
+            traits::RealPredicate::RealOEQ => RealPredicate::RealOEQ,
+            traits::RealPredicate::RealOGT => RealPredicate::RealOGT,
+            traits::RealPredicate::RealOGE => RealPredicate::RealOGE,
+            traits::RealPredicate::RealOLT => RealPredicate::RealOLT,
+            traits::RealPredicate::RealOLE => RealPredicate::RealOLE,
+            traits::RealPredicate::RealONE => RealPredicate::RealONE,
+            traits::RealPredicate::RealORD => RealPredicate::RealORD,
+            traits::RealPredicate::RealUNO => RealPredicate::RealUNO,
+            traits::RealPredicate::RealUEQ => RealPredicate::RealUEQ,
+            traits::RealPredicate::RealUGT => RealPredicate::RealUGT,
+            traits::RealPredicate::RealUGE => RealPredicate::RealUGE,
+            traits::RealPredicate::RealULT => RealPredicate::RealULT,
+            traits::RealPredicate::RealULE => RealPredicate::RealULE,
+            traits::RealPredicate::RealUNE => RealPredicate::RealUNE,
+            traits::RealPredicate::RealPredicateTrue => RealPredicate::RealPredicateTrue
+        }
+    }
+}
+
 /// LLVMTypeKind
 #[derive(Copy, Clone, PartialEq, Debug)]
 #[repr(C)]
@@ -203,6 +244,24 @@ pub enum AtomicRmwBinOp {
     AtomicUMin = 10,
 }
 
+impl AtomicRmwBinOp {
+    pub fn from_generic(op : traits::AtomicRmwBinOp) -> Self {
+        match op {
+            traits::AtomicRmwBinOp::AtomicXchg => AtomicRmwBinOp::AtomicXchg,
+            traits::AtomicRmwBinOp::AtomicAdd => AtomicRmwBinOp::AtomicAdd,
+            traits::AtomicRmwBinOp::AtomicSub => AtomicRmwBinOp::AtomicSub,
+            traits::AtomicRmwBinOp::AtomicAnd => AtomicRmwBinOp::AtomicAnd,
+            traits::AtomicRmwBinOp::AtomicNand => AtomicRmwBinOp::AtomicNand,
+            traits::AtomicRmwBinOp::AtomicOr => AtomicRmwBinOp::AtomicOr,
+            traits::AtomicRmwBinOp::AtomicXor => AtomicRmwBinOp::AtomicXor,
+            traits::AtomicRmwBinOp::AtomicMax => AtomicRmwBinOp::AtomicMax,
+            traits::AtomicRmwBinOp::AtomicMin => AtomicRmwBinOp::AtomicMin,
+            traits::AtomicRmwBinOp::AtomicUMax => AtomicRmwBinOp::AtomicUMax,
+            traits::AtomicRmwBinOp::AtomicUMin => AtomicRmwBinOp::AtomicUMin
+        }
+    }
+}
+
 /// LLVMAtomicOrdering
 #[derive(Copy, Clone)]
 #[repr(C)]
@@ -218,6 +277,22 @@ pub enum AtomicOrdering {
     SequentiallyConsistent = 7,
 }
 
+impl AtomicOrdering {
+    pub fn from_generic(ao : traits::AtomicOrdering) -> Self {
+        match ao {
+            traits::AtomicOrdering::NotAtomic => AtomicOrdering::NotAtomic,
+            traits::AtomicOrdering::Unordered => AtomicOrdering::Unordered,
+            traits::AtomicOrdering::Monotonic => AtomicOrdering::Monotonic,
+            traits::AtomicOrdering::Acquire => AtomicOrdering::Acquire,
+            traits::AtomicOrdering::Release => AtomicOrdering::Release,
+            traits::AtomicOrdering::AcquireRelease => AtomicOrdering::AcquireRelease,
+            traits::AtomicOrdering::SequentiallyConsistent =>
+                AtomicOrdering::SequentiallyConsistent
+        }
+    }
+}
+
+
 /// LLVMRustSynchronizationScope
 #[derive(Copy, Clone)]
 #[repr(C)]
@@ -229,6 +304,16 @@ pub enum SynchronizationScope {
     CrossThread,
 }
 
+impl SynchronizationScope {
+    pub fn from_generic(sc : traits::SynchronizationScope) -> Self {
+        match sc {
+            traits::SynchronizationScope::Other => SynchronizationScope::Other,
+            traits::SynchronizationScope::SingleThread => SynchronizationScope::SingleThread,
+            traits::SynchronizationScope::CrossThread => SynchronizationScope::CrossThread,
+        }
+    }
+}
+
 /// LLVMRustFileType
 #[derive(Copy, Clone)]
 #[repr(C)]
@@ -1057,42 +1142,42 @@ pub fn LLVMBuildInsertValue(B: &Builder<'a>,
     pub fn LLVMRustBuildVectorReduceFAdd(B: &Builder<'a>,
                                          Acc: &'a Value,
                                          Src: &'a Value)
-                                         -> Option<&'a Value>;
+                                         -> &'a Value;
     pub fn LLVMRustBuildVectorReduceFMul(B: &Builder<'a>,
                                          Acc: &'a Value,
                                          Src: &'a Value)
-                                         -> Option<&'a Value>;
+                                         -> &'a Value;
     pub fn LLVMRustBuildVectorReduceAdd(B: &Builder<'a>,
                                         Src: &'a Value)
-                                        -> Option<&'a Value>;
+                                        -> &'a Value;
     pub fn LLVMRustBuildVectorReduceMul(B: &Builder<'a>,
                                         Src: &'a Value)
-                                        -> Option<&'a Value>;
+                                        -> &'a Value;
     pub fn LLVMRustBuildVectorReduceAnd(B: &Builder<'a>,
                                         Src: &'a Value)
-                                        -> Option<&'a Value>;
+                                        -> &'a Value;
     pub fn LLVMRustBuildVectorReduceOr(B: &Builder<'a>,
                                        Src: &'a Value)
-                                       -> Option<&'a Value>;
+                                       -> &'a Value;
     pub fn LLVMRustBuildVectorReduceXor(B: &Builder<'a>,
                                         Src: &'a Value)
-                                        -> Option<&'a Value>;
+                                        -> &'a Value;
     pub fn LLVMRustBuildVectorReduceMin(B: &Builder<'a>,
                                         Src: &'a Value,
                                         IsSigned: bool)
-                                        -> Option<&'a Value>;
+                                        -> &'a Value;
     pub fn LLVMRustBuildVectorReduceMax(B: &Builder<'a>,
                                         Src: &'a Value,
                                         IsSigned: bool)
-                                        -> Option<&'a Value>;
+                                        -> &'a Value;
     pub fn LLVMRustBuildVectorReduceFMin(B: &Builder<'a>,
                                          Src: &'a Value,
                                          IsNaN: bool)
-                                         -> Option<&'a Value>;
+                                         -> &'a Value;
     pub fn LLVMRustBuildVectorReduceFMax(B: &Builder<'a>,
                                          Src: &'a Value,
                                          IsNaN: bool)
-                                         -> Option<&'a Value>;
+                                         -> &'a Value;
 
     pub fn LLVMRustBuildMinNum(
         B: &Builder<'a>,
@@ -1173,7 +1258,7 @@ pub fn LLVMPassManagerBuilderPopulateLTOPassManager(PMB: &PassManagerBuilder,
                                                         RunInliner: Bool);
     pub fn LLVMRustPassManagerBuilderPopulateThinLTOPassManager(
         PMB: &PassManagerBuilder,
-        PM: &PassManager) -> bool;
+        PM: &PassManager);
 
     // Stuff that's in rustllvm/ because it's not upstream yet.