@@ -23,7 +23,7 @@ use rustc_codegen_ssa::traits::{
23
23
use rustc_middle:: bug;
24
24
#[ cfg( feature = "master" ) ]
25
25
use rustc_middle:: ty:: layout:: FnAbiOf ;
26
- use rustc_middle:: ty:: layout:: { HasTypingEnv , LayoutOf } ;
26
+ use rustc_middle:: ty:: layout:: LayoutOf ;
27
27
use rustc_middle:: ty:: { self , Instance , Ty } ;
28
28
use rustc_span:: { Span , Symbol , sym} ;
29
29
use rustc_target:: callconv:: { ArgAbi , PassMode } ;
@@ -205,21 +205,10 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
205
205
span : Span ,
206
206
) -> Result < ( ) , Instance < ' tcx > > {
207
207
let tcx = self . tcx ;
208
- let callee_ty = instance. ty ( tcx, self . typing_env ( ) ) ;
209
208
210
- let ( def_id, fn_args) = match * callee_ty. kind ( ) {
211
- ty:: FnDef ( def_id, fn_args) => ( def_id, fn_args) ,
212
- _ => bug ! ( "expected fn item type, found {}" , callee_ty) ,
213
- } ;
214
-
215
- let sig = callee_ty. fn_sig ( tcx) ;
216
- let sig = tcx. normalize_erasing_late_bound_regions ( self . typing_env ( ) , sig) ;
217
- let arg_tys = sig. inputs ( ) ;
218
- let ret_ty = sig. output ( ) ;
219
- let name = tcx. item_name ( def_id) ;
209
+ let name = tcx. item_name ( instance. def_id ( ) ) ;
220
210
let name_str = name. as_str ( ) ;
221
-
222
- let llret_ty = self . layout_of ( ret_ty) . gcc_type ( self ) ;
211
+ let fn_args = instance. args ;
223
212
224
213
let simple = get_simple_intrinsic ( self , name) ;
225
214
let simple_func = get_simple_function ( self , name) ;
@@ -320,8 +309,7 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
320
309
| sym:: rotate_right
321
310
| sym:: saturating_add
322
311
| sym:: saturating_sub => {
323
- let ty = arg_tys[ 0 ] ;
324
- match int_type_width_signed ( ty, self ) {
312
+ match int_type_width_signed ( args[ 0 ] . layout . ty , self ) {
325
313
Some ( ( width, signed) ) => match name {
326
314
sym:: ctlz | sym:: cttz => {
327
315
let func = self . current_func . borrow ( ) . expect ( "func" ) ;
@@ -400,7 +388,7 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
400
388
tcx. dcx ( ) . emit_err ( InvalidMonomorphization :: BasicIntegerType {
401
389
span,
402
390
name,
403
- ty,
391
+ ty : args [ 0 ] . layout . ty ,
404
392
} ) ;
405
393
return Ok ( ( ) ) ;
406
394
}
@@ -492,7 +480,14 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
492
480
}
493
481
494
482
_ if name_str. starts_with ( "simd_" ) => {
495
- match generic_simd_intrinsic ( self , name, callee_ty, args, ret_ty, llret_ty, span) {
483
+ match generic_simd_intrinsic (
484
+ self ,
485
+ name,
486
+ args,
487
+ result. layout . ty ,
488
+ result. layout . gcc_type ( self ) ,
489
+ span,
490
+ ) {
496
491
Ok ( value) => value,
497
492
Err ( ( ) ) => return Ok ( ( ) ) ,
498
493
}
@@ -503,13 +498,10 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
503
498
} ;
504
499
505
500
if result. layout . ty . is_bool ( ) {
506
- OperandRef :: from_immediate_or_packed_pair ( self , value, result. layout )
507
- . val
508
- . store ( self , result) ;
501
+ let val = self . from_immediate ( value) ;
502
+ self . store_to_place ( val, result. val ) ;
509
503
} else if !result. layout . ty . is_unit ( ) {
510
- let ptr_llty = self . type_ptr_to ( result. layout . gcc_type ( self ) ) ;
511
- let ptr = self . pointercast ( result. val . llval , ptr_llty) ;
512
- self . store ( value, ptr, result. val . align ) ;
504
+ self . store_to_place ( value, result. val ) ;
513
505
}
514
506
Ok ( ( ) )
515
507
}
0 commit comments