add intrinsic to access vtable size and align

This commit is contained in:
Ralf Jung 2022-07-18 09:48:20 -04:00
parent b5a32d01f4
commit 8affef2ccb
6 changed files with 66 additions and 2 deletions

View file

@ -363,6 +363,20 @@ impl<'ll, 'tcx> IntrinsicCallMethods<'tcx> for Builder<'_, 'll, 'tcx> {
return;
}
sym::vtable_size | sym::vtable_align => {
let ptr = args[0].immediate();
let layout = self.layout_of(self.tcx.types.usize);
let type_ = self.backend_type(layout);
let offset = match name {
sym::vtable_size => 1,
sym::vtable_align => 2,
_ => bug!(),
};
let offset = self.const_int(type_, offset);
let vtable_field_ptr = self.inbounds_gep(type_, ptr, &[offset]);
self.load(type_, vtable_field_ptr, layout.align.abi)
}
_ if name.as_str().starts_with("simd_") => {
match generic_simd_intrinsic(self, name, callee_ty, args, ret_ty, llret_ty, span) {
Ok(llval) => llval,