@@ -53,7 +53,7 @@ use mir::place::PlaceRef;
53
53
use attributes;
54
54
use builder:: { Builder , MemFlags } ;
55
55
use callee;
56
- use common:: { C_bool , C_bytes_in_context , C_i32 , C_usize } ;
56
+ use common:: { C_bool , C_bytes_in_context , C_usize } ;
57
57
use rustc_mir:: monomorphize:: item:: DefPathBasedNames ;
58
58
use common:: { C_struct_in_context , C_array , val_ty} ;
59
59
use consts;
@@ -77,7 +77,6 @@ use rustc_data_structures::sync::Lrc;
77
77
use std:: any:: Any ;
78
78
use std:: cmp;
79
79
use std:: ffi:: CString ;
80
- use std:: i32;
81
80
use std:: ops:: { Deref , DerefMut } ;
82
81
use std:: sync:: mpsc;
83
82
use std:: time:: { Instant , Duration } ;
@@ -319,8 +318,8 @@ pub fn coerce_unsized_into(
319
318
}
320
319
321
320
if src_f. layout . ty == dst_f. layout . ty {
322
- memcpy_ty ( bx, dst_f. llval , src_f. llval , src_f. layout ,
323
- src_f. align . min ( dst_f . align ) , MemFlags :: empty ( ) ) ;
321
+ memcpy_ty ( bx, dst_f. llval , dst_f . align , src_f. llval , src_f. align ,
322
+ src_f. layout , MemFlags :: empty ( ) ) ;
324
323
} else {
325
324
coerce_unsized_into ( bx, src_f, dst_f) ;
326
325
}
@@ -420,44 +419,42 @@ pub fn to_immediate_scalar(
420
419
pub fn call_memcpy (
421
420
bx : & Builder < ' _ , ' ll , ' _ > ,
422
421
dst : & ' ll Value ,
422
+ dst_align : Align ,
423
423
src : & ' ll Value ,
424
+ src_align : Align ,
424
425
n_bytes : & ' ll Value ,
425
- align : Align ,
426
426
flags : MemFlags ,
427
427
) {
428
428
if flags. contains ( MemFlags :: NONTEMPORAL ) {
429
429
// HACK(nox): This is inefficient but there is no nontemporal memcpy.
430
- let val = bx. load ( src, align ) ;
430
+ let val = bx. load ( src, src_align ) ;
431
431
let ptr = bx. pointercast ( dst, val_ty ( val) . ptr_to ( ) ) ;
432
- bx. store_with_flags ( val, ptr, align , flags) ;
432
+ bx. store_with_flags ( val, ptr, dst_align , flags) ;
433
433
return ;
434
434
}
435
435
let cx = bx. cx ;
436
- let ptr_width = & cx. sess ( ) . target . target . target_pointer_width ;
437
- let key = format ! ( "llvm.memcpy.p0i8.p0i8.i{}" , ptr_width) ;
438
- let memcpy = cx. get_intrinsic ( & key) ;
439
436
let src_ptr = bx. pointercast ( src, Type :: i8p ( cx) ) ;
440
437
let dst_ptr = bx. pointercast ( dst, Type :: i8p ( cx) ) ;
441
438
let size = bx. intcast ( n_bytes, cx. isize_ty , false ) ;
442
- let align = C_i32 ( cx, align. abi ( ) as i32 ) ;
443
- let volatile = C_bool ( cx, flags. contains ( MemFlags :: VOLATILE ) ) ;
444
- bx. call ( memcpy, & [ dst_ptr, src_ptr, size, align, volatile] , None ) ;
439
+ let volatile = flags. contains ( MemFlags :: VOLATILE ) ;
440
+ bx. memcpy ( dst_ptr, dst_align. abi ( ) , src_ptr, src_align. abi ( ) , size, volatile) ;
445
441
}
446
442
447
443
pub fn memcpy_ty (
448
444
bx : & Builder < ' _ , ' ll , ' tcx > ,
449
445
dst : & ' ll Value ,
446
+ dst_align : Align ,
450
447
src : & ' ll Value ,
448
+ src_align : Align ,
451
449
layout : TyLayout < ' tcx > ,
452
- align : Align ,
453
450
flags : MemFlags ,
454
451
) {
455
452
let size = layout. size . bytes ( ) ;
456
453
if size == 0 {
457
454
return ;
458
455
}
459
456
460
- call_memcpy ( bx, dst, src, C_usize ( bx. cx , size) , align , flags) ;
457
+ call_memcpy ( bx, dst, dst_align , src, src_align , C_usize ( bx. cx , size) , flags) ;
461
458
}
462
459
463
460
pub fn call_memset (
0 commit comments