@@ -117,6 +117,70 @@ impl<'a, 'll, CX: Borrow<SCx<'ll>>> GenericBuilder<'a, 'll, CX> {
117117 }
118118 bx
119119 }
120+
121+ pub ( crate ) fn my_alloca2 ( & mut self , ty : & ' ll Type , align : Align , name : & str ) -> & ' ll Value {
122+ let val = unsafe {
123+ let alloca = llvm:: LLVMBuildAlloca ( self . llbuilder , ty, UNNAMED ) ;
124+ llvm:: LLVMSetAlignment ( alloca, align. bytes ( ) as c_uint ) ;
125+ // Cast to default addrspace if necessary
126+ llvm:: LLVMBuildPointerCast ( self . llbuilder , alloca, self . cx . type_ptr ( ) , UNNAMED )
127+ } ;
128+ if name != "" {
129+ let name = std:: ffi:: CString :: new ( name) . unwrap ( ) ;
130+ llvm:: set_value_name ( val, & name. as_bytes ( ) ) ;
131+ }
132+ val
133+ }
134+
135+ pub ( crate ) fn inbounds_gep (
136+ & mut self ,
137+ ty : & ' ll Type ,
138+ ptr : & ' ll Value ,
139+ indices : & [ & ' ll Value ] ,
140+ ) -> & ' ll Value {
141+ unsafe {
142+ llvm:: LLVMBuildGEPWithNoWrapFlags (
143+ self . llbuilder ,
144+ ty,
145+ ptr,
146+ indices. as_ptr ( ) ,
147+ indices. len ( ) as c_uint ,
148+ UNNAMED ,
149+ GEPNoWrapFlags :: InBounds ,
150+ )
151+ }
152+ }
153+
154+ pub ( crate ) fn store ( & mut self , val : & ' ll Value , ptr : & ' ll Value , align : Align ) -> & ' ll Value {
155+ debug ! ( "Store {:?} -> {:?}" , val, ptr) ;
156+ assert_eq ! ( self . cx. type_kind( self . cx. val_ty( ptr) ) , TypeKind :: Pointer ) ;
157+ unsafe {
158+ let store = llvm:: LLVMBuildStore ( self . llbuilder , val, ptr) ;
159+ llvm:: LLVMSetAlignment ( store, align. bytes ( ) as c_uint ) ;
160+ store
161+ }
162+ }
163+
164+ pub ( crate ) fn load ( & mut self , ty : & ' ll Type , ptr : & ' ll Value , align : Align ) -> & ' ll Value {
165+ unsafe {
166+ let load = llvm:: LLVMBuildLoad2 ( self . llbuilder , ty, ptr, UNNAMED ) ;
167+ llvm:: LLVMSetAlignment ( load, align. bytes ( ) as c_uint ) ;
168+ load
169+ }
170+ }
171+
172+ fn memset ( & mut self , ptr : & ' ll Value , fill_byte : & ' ll Value , size : & ' ll Value , align : Align ) {
173+ unsafe {
174+ llvm:: LLVMRustBuildMemSet (
175+ self . llbuilder ,
176+ ptr,
177+ align. bytes ( ) as c_uint ,
178+ fill_byte,
179+ size,
180+ false ,
181+ ) ;
182+ }
183+ }
120184}
121185
122186/// Empty string, to be used where LLVM expects an instruction name, indicating
0 commit comments