diff options
| author | Masaki Hara <ackie.h.gmai@gmail.com> | 2018-05-29 00:07:23 +0900 |
|---|---|---|
| committer | Masaki Hara <ackie.h.gmai@gmail.com> | 2018-08-19 08:06:42 +0900 |
| commit | cd0476a390bbaf754501859bc56328b0078c88f5 (patch) | |
| tree | 0544ceb783c0a5c5003bee743542f9ab0f7b2fc8 | |
| parent | 9f0168a9f3bc546f12d07018bdacbb1798c571e9 (diff) | |
| download | rust-cd0476a390bbaf754501859bc56328b0078c88f5.tar.gz rust-cd0476a390bbaf754501859bc56328b0078c88f5.zip | |
Add Builder::array_alloca.
| -rw-r--r-- | src/librustc_codegen_llvm/builder.rs | 19 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/llvm/ffi.rs | 5 |
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; |
