@@ -44,12 +44,12 @@ fn emit_direct_ptr_va_arg<'ll, 'tcx>(
44
44
45
45
let aligned_size = size. align_to ( slot_size) . bytes ( ) as i32 ;
46
46
let full_direct_size = bx. cx ( ) . const_i32 ( aligned_size) ;
47
- let next = bx. inbounds_gep ( bx . type_i8 ( ) , addr, & [ full_direct_size] ) ;
47
+ let next = bx. inbounds_ptradd ( addr, full_direct_size) ;
48
48
bx. store ( next, va_list_addr, bx. tcx ( ) . data_layout . pointer_align . abi ) ;
49
49
50
50
if size. bytes ( ) < slot_size. bytes ( ) && bx. tcx ( ) . sess . target . endian == Endian :: Big {
51
51
let adjusted_size = bx. cx ( ) . const_i32 ( ( slot_size. bytes ( ) - size. bytes ( ) ) as i32 ) ;
52
- let adjusted = bx. inbounds_gep ( bx . type_i8 ( ) , addr, & [ adjusted_size] ) ;
52
+ let adjusted = bx. inbounds_ptradd ( addr, adjusted_size) ;
53
53
( adjusted, addr_align)
54
54
} else {
55
55
( addr, addr_align)
@@ -109,14 +109,10 @@ fn emit_aapcs_va_arg<'ll, 'tcx>(
109
109
// Table 3, Mapping of C & C++ built-in data types
110
110
let ptr_offset = 8 ;
111
111
let i32_offset = 4 ;
112
- let gr_top = bx. inbounds_gep ( bx. type_i8 ( ) , va_list_addr, & [ bx. cx . const_usize ( ptr_offset) ] ) ;
113
- let vr_top = bx. inbounds_gep ( bx. type_i8 ( ) , va_list_addr, & [ bx. cx . const_usize ( 2 * ptr_offset) ] ) ;
114
- let gr_offs = bx. inbounds_gep ( bx. type_i8 ( ) , va_list_addr, & [ bx. cx . const_usize ( 3 * ptr_offset) ] ) ;
115
- let vr_offs = bx. inbounds_gep (
116
- bx. type_i8 ( ) ,
117
- va_list_addr,
118
- & [ bx. cx . const_usize ( 3 * ptr_offset + i32_offset) ] ,
119
- ) ;
112
+ let gr_top = bx. inbounds_ptradd ( va_list_addr, bx. cx . const_usize ( ptr_offset) ) ;
113
+ let vr_top = bx. inbounds_ptradd ( va_list_addr, bx. cx . const_usize ( 2 * ptr_offset) ) ;
114
+ let gr_offs = bx. inbounds_ptradd ( va_list_addr, bx. cx . const_usize ( 3 * ptr_offset) ) ;
115
+ let vr_offs = bx. inbounds_ptradd ( va_list_addr, bx. cx . const_usize ( 3 * ptr_offset + i32_offset) ) ;
120
116
121
117
let layout = bx. cx . layout_of ( target_ty) ;
122
118
@@ -164,11 +160,11 @@ fn emit_aapcs_va_arg<'ll, 'tcx>(
164
160
let top = bx. load ( top_type, reg_top, dl. pointer_align . abi ) ;
165
161
166
162
// reg_value = *(@top + reg_off_v);
167
- let mut reg_addr = bx. gep ( bx . type_i8 ( ) , top, & [ reg_off_v] ) ;
163
+ let mut reg_addr = bx. ptradd ( top, reg_off_v) ;
168
164
if bx. tcx ( ) . sess . target . endian == Endian :: Big && layout. size . bytes ( ) != slot_size {
169
165
// On big-endian systems the value is right-aligned in its slot.
170
166
let offset = bx. const_i32 ( ( slot_size - layout. size . bytes ( ) ) as i32 ) ;
171
- reg_addr = bx. gep ( bx . type_i8 ( ) , reg_addr, & [ offset] ) ;
167
+ reg_addr = bx. ptradd ( reg_addr, offset) ;
172
168
}
173
169
let reg_type = layout. llvm_type ( bx) ;
174
170
let reg_value = bx. load ( reg_type, reg_addr, layout. align . abi ) ;
@@ -210,14 +206,10 @@ fn emit_s390x_va_arg<'ll, 'tcx>(
210
206
let i64_offset = 8 ;
211
207
let ptr_offset = 8 ;
212
208
let gpr = va_list_addr;
213
- let fpr = bx. inbounds_gep ( bx. type_i8 ( ) , va_list_addr, & [ bx. cx . const_usize ( i64_offset) ] ) ;
214
- let overflow_arg_area =
215
- bx. inbounds_gep ( bx. type_i8 ( ) , va_list_addr, & [ bx. cx . const_usize ( 2 * i64_offset) ] ) ;
216
- let reg_save_area = bx. inbounds_gep (
217
- bx. type_i8 ( ) ,
218
- va_list_addr,
219
- & [ bx. cx . const_usize ( 2 * i64_offset + ptr_offset) ] ,
220
- ) ;
209
+ let fpr = bx. inbounds_ptradd ( va_list_addr, bx. cx . const_usize ( i64_offset) ) ;
210
+ let overflow_arg_area = bx. inbounds_ptradd ( va_list_addr, bx. cx . const_usize ( 2 * i64_offset) ) ;
211
+ let reg_save_area =
212
+ bx. inbounds_ptradd ( va_list_addr, bx. cx . const_usize ( 2 * i64_offset + ptr_offset) ) ;
221
213
222
214
let layout = bx. cx . layout_of ( target_ty) ;
223
215
@@ -248,7 +240,7 @@ fn emit_s390x_va_arg<'ll, 'tcx>(
248
240
let reg_ptr_v = bx. load ( bx. type_ptr ( ) , reg_save_area, dl. pointer_align . abi ) ;
249
241
let scaled_reg_count = bx. mul ( reg_count_v, bx. const_u64 ( 8 ) ) ;
250
242
let reg_off = bx. add ( scaled_reg_count, bx. const_u64 ( reg_save_index * 8 + reg_padding) ) ;
251
- let reg_addr = bx. gep ( bx . type_i8 ( ) , reg_ptr_v, & [ reg_off] ) ;
243
+ let reg_addr = bx. ptradd ( reg_ptr_v, reg_off) ;
252
244
253
245
// Update the register count.
254
246
let new_reg_count_v = bx. add ( reg_count_v, bx. const_u64 ( 1 ) ) ;
@@ -262,11 +254,11 @@ fn emit_s390x_va_arg<'ll, 'tcx>(
262
254
let arg_ptr_v =
263
255
bx. load ( bx. type_ptr ( ) , overflow_arg_area, bx. tcx ( ) . data_layout . pointer_align . abi ) ;
264
256
let arg_off = bx. const_u64 ( padding) ;
265
- let mem_addr = bx. gep ( bx . type_i8 ( ) , arg_ptr_v, & [ arg_off] ) ;
257
+ let mem_addr = bx. ptradd ( arg_ptr_v, arg_off) ;
266
258
267
259
// Update the argument overflow area pointer.
268
260
let arg_size = bx. cx ( ) . const_u64 ( padded_size) ;
269
- let new_arg_ptr_v = bx. inbounds_gep ( bx . type_i8 ( ) , arg_ptr_v, & [ arg_size] ) ;
261
+ let new_arg_ptr_v = bx. inbounds_ptradd ( arg_ptr_v, arg_size) ;
270
262
bx. store ( new_arg_ptr_v, overflow_arg_area, dl. pointer_align . abi ) ;
271
263
bx. br ( end) ;
272
264
0 commit comments