@@ -154,8 +154,6 @@ fn call_simple_intrinsic<'ll, 'tcx>(
154154 sym:: roundf64 => ( "llvm.round" , & [ bx. type_f64 ( ) ] ) ,
155155 sym:: roundf128 => ( "llvm.round" , & [ bx. type_f128 ( ) ] ) ,
156156
157- sym:: ptr_mask => ( "llvm.ptrmask" , & [ bx. type_ptr ( ) , bx. type_isize ( ) ] ) ,
158-
159157 _ => return None ,
160158 } ;
161159 Some ( bx. call_intrinsic (
@@ -181,6 +179,14 @@ impl<'ll, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
181179 let simple = call_simple_intrinsic ( self , name, args) ;
182180 let llval = match name {
183181 _ 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+ }
184190 sym:: is_val_statically_known => {
185191 if let OperandValue :: Immediate ( imm) = args[ 0 ] . val {
186192 self . call_intrinsic (
@@ -232,11 +238,14 @@ impl<'ll, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
232238 return Ok ( ( ) ) ;
233239 }
234240 sym:: breakpoint => self . call_intrinsic ( "llvm.debugtrap" , & [ ] , & [ ] ) ,
235- sym:: va_copy => self . call_intrinsic (
236- "llvm.va_copy" ,
237- & [ self . type_ptr ( ) ] ,
238- & [ args[ 0 ] . immediate ( ) , args[ 1 ] . immediate ( ) ] ,
239- ) ,
241+ sym:: va_copy => {
242+ let dest = args[ 0 ] . immediate ( ) ;
243+ self . call_intrinsic (
244+ "llvm.va_copy" ,
245+ & [ self . val_ty ( dest) ] ,
246+ & [ dest, args[ 1 ] . immediate ( ) ] ,
247+ )
248+ }
240249 sym:: va_arg => {
241250 match result. layout . backend_repr {
242251 BackendRepr :: Scalar ( scalar) => {
@@ -309,15 +318,11 @@ impl<'ll, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
309318 sym:: prefetch_write_instruction => ( 1 , 0 ) ,
310319 _ => bug ! ( ) ,
311320 } ;
321+ let ptr = args[ 0 ] . immediate ( ) ;
312322 self . call_intrinsic (
313323 "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- ] ,
324+ & [ self . val_ty ( ptr) ] ,
325+ & [ ptr, self . const_i32 ( rw) , args[ 1 ] . immediate ( ) , self . const_i32 ( cache_type) ] ,
321326 )
322327 }
323328 sym:: carrying_mul_add => {
@@ -637,11 +642,11 @@ impl<'ll, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
637642 }
638643
639644 fn va_start ( & mut self , va_list : & ' ll Value ) -> & ' ll Value {
640- self . call_intrinsic ( "llvm.va_start" , & [ self . type_ptr ( ) ] , & [ va_list] )
645+ self . call_intrinsic ( "llvm.va_start" , & [ self . val_ty ( va_list ) ] , & [ va_list] )
641646 }
642647
643648 fn va_end ( & mut self , va_list : & ' ll Value ) -> & ' ll Value {
644- self . call_intrinsic ( "llvm.va_end" , & [ self . type_ptr ( ) ] , & [ va_list] )
649+ self . call_intrinsic ( "llvm.va_end" , & [ self . val_ty ( va_list ) ] , & [ va_list] )
645650 }
646651}
647652
@@ -1018,7 +1023,7 @@ fn codegen_emcc_try<'ll, 'tcx>(
10181023 let selector = bx. extract_value ( vals, 1 ) ;
10191024
10201025 // 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] ) ;
1026+ let rust_typeid = bx. call_intrinsic ( "llvm.eh.typeid.for" , & [ bx. val_ty ( tydesc ) ] , & [ tydesc] ) ;
10221027 let is_rust_panic = bx. icmp ( IntPredicate :: IntEQ , selector, rust_typeid) ;
10231028 let is_rust_panic = bx. zext ( is_rust_panic, bx. type_bool ( ) ) ;
10241029
0 commit comments