@@ -154,8 +154,6 @@ fn call_simple_intrinsic<'ll, 'tcx>(
154
154
sym:: roundf64 => ( "llvm.round" , & [ bx. type_f64 ( ) ] ) ,
155
155
sym:: roundf128 => ( "llvm.round" , & [ bx. type_f128 ( ) ] ) ,
156
156
157
- sym:: ptr_mask => ( "llvm.ptrmask" , & [ bx. type_ptr ( ) , bx. type_isize ( ) ] ) ,
158
-
159
157
_ => return None ,
160
158
} ;
161
159
Some ( bx. call_intrinsic (
@@ -181,6 +179,14 @@ impl<'ll, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
181
179
let simple = call_simple_intrinsic ( self , name, args) ;
182
180
let llval = match name {
183
181
_ if simple. is_some ( ) => simple. unwrap ( ) ,
182
+ sym:: ptr_mask => {
183
+ let ptr = args[ 0 ] . immediate ( ) ;
184
+ self . call_intrinsic (
185
+ "llvm.ptrmask" ,
186
+ & [ self . val_ty ( ptr) , self . type_isize ( ) ] ,
187
+ & [ ptr, args[ 1 ] . immediate ( ) ] ,
188
+ )
189
+ }
184
190
sym:: is_val_statically_known => {
185
191
if let OperandValue :: Immediate ( imm) = args[ 0 ] . val {
186
192
self . call_intrinsic (
@@ -309,15 +315,11 @@ impl<'ll, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
309
315
sym:: prefetch_write_instruction => ( 1 , 0 ) ,
310
316
_ => bug ! ( ) ,
311
317
} ;
318
+ let ptr = args[ 0 ] . immediate ( ) ;
312
319
self . call_intrinsic (
313
320
"llvm.prefetch" ,
314
- & [ self . type_ptr ( ) ] ,
315
- & [
316
- args[ 0 ] . immediate ( ) ,
317
- self . const_i32 ( rw) ,
318
- args[ 1 ] . immediate ( ) ,
319
- self . const_i32 ( cache_type) ,
320
- ] ,
321
+ & [ self . val_ty ( ptr) ] ,
322
+ & [ ptr, self . const_i32 ( rw) , args[ 1 ] . immediate ( ) , self . const_i32 ( cache_type) ] ,
321
323
)
322
324
}
323
325
sym:: carrying_mul_add => {
@@ -637,11 +639,11 @@ impl<'ll, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
637
639
}
638
640
639
641
fn va_start ( & mut self , va_list : & ' ll Value ) -> & ' ll Value {
640
- self . call_intrinsic ( "llvm.va_start" , & [ self . type_ptr ( ) ] , & [ va_list] )
642
+ self . call_intrinsic ( "llvm.va_start" , & [ self . val_ty ( va_list ) ] , & [ va_list] )
641
643
}
642
644
643
645
fn va_end ( & mut self , va_list : & ' ll Value ) -> & ' ll Value {
644
- self . call_intrinsic ( "llvm.va_end" , & [ self . type_ptr ( ) ] , & [ va_list] )
646
+ self . call_intrinsic ( "llvm.va_end" , & [ self . val_ty ( va_list ) ] , & [ va_list] )
645
647
}
646
648
}
647
649
@@ -1018,7 +1020,7 @@ fn codegen_emcc_try<'ll, 'tcx>(
1018
1020
let selector = bx. extract_value ( vals, 1 ) ;
1019
1021
1020
1022
// Check if the typeid we got is the one for a Rust panic.
1021
- let rust_typeid = bx. call_intrinsic ( "llvm.eh.typeid.for" , & [ bx. type_ptr ( ) ] , & [ tydesc] ) ;
1023
+ let rust_typeid = bx. call_intrinsic ( "llvm.eh.typeid.for" , & [ bx. val_ty ( tydesc ) ] , & [ tydesc] ) ;
1022
1024
let is_rust_panic = bx. icmp ( IntPredicate :: IntEQ , selector, rust_typeid) ;
1023
1025
let is_rust_panic = bx. zext ( is_rust_panic, bx. type_bool ( ) ) ;
1024
1026
0 commit comments