about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_codegen_llvm/builder.rs19
-rw-r--r--src/librustc_codegen_llvm/llvm/ffi.rs5
2 files changed, 24 insertions, 0 deletions
diff --git a/src/librustc_codegen_llvm/builder.rs b/src/librustc_codegen_llvm/builder.rs
index b0f88bd4189..cfbc2ab9007 100644
--- a/src/librustc_codegen_llvm/builder.rs
+++ b/src/librustc_codegen_llvm/builder.rs
@@ -445,6 +445,25 @@ impl Builder<'a, 'll, 'tcx> {
         }
     }
 
+    pub fn array_alloca(&self,
+                        ty: &'ll Type,
+                        len: &'ll Value,
+                        name: &str,
+                        align: Align) -> &'ll Value {
+        self.count_insn("alloca");
+        unsafe {
+            let alloca = if name.is_empty() {
+                llvm::LLVMBuildArrayAlloca(self.llbuilder, ty, len, noname())
+            } else {
+                let name = SmallCStr::new(name);
+                llvm::LLVMBuildArrayAlloca(self.llbuilder, ty, len,
+                                           name.as_ptr())
+            };
+            llvm::LLVMSetAlignment(alloca, align.abi() as c_uint);
+            alloca
+        }
+    }
+
     pub fn load(&self, ptr: &'ll Value, align: Align) -> &'ll Value {
         self.count_insn("load");
         unsafe {
diff --git a/src/librustc_codegen_llvm/llvm/ffi.rs b/src/librustc_codegen_llvm/llvm/ffi.rs
index eec8a3a169c..d3039a05b6d 100644
--- a/src/librustc_codegen_llvm/llvm/ffi.rs
+++ b/src/librustc_codegen_llvm/llvm/ffi.rs
@@ -875,6 +875,11 @@ extern "C" {
 
     // Memory
     pub fn LLVMBuildAlloca(B: &Builder<'a>, Ty: &'a Type, Name: *const c_char) -> &'a Value;
+    pub fn LLVMBuildArrayAlloca(B: &Builder<'a>,
+                                Ty: &'a Type,
+                                Val: &'a Value,
+                                Name: *const c_char)
+                                -> &'a Value;
     pub fn LLVMBuildLoad(B: &Builder<'a>, PointerVal: &'a Value, Name: *const c_char) -> &'a Value;
 
     pub fn LLVMBuildStore(B: &Builder<'a>, Val: &'a Value, Ptr: &'a Value) -> &'a Value;