diff options
author | Philip Herron <philip.herron@embecosm.com> | 2022-05-03 12:45:45 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2022-05-04 13:13:12 +0100 |
commit | 74f4ee8d38f5aa58e4722725f3016f6420d4654b (patch) | |
tree | be164dafb951987e1e8a25ac3be87c9555d0b6b3 /gcc/rust/backend/rust-compile-expr.h | |
parent | 21b9e1226cfbc4137a881a71c5e6f904fc5b364e (diff) | |
download | gcc-74f4ee8d38f5aa58e4722725f3016f6420d4654b.zip gcc-74f4ee8d38f5aa58e4722725f3016f6420d4654b.tar.gz gcc-74f4ee8d38f5aa58e4722725f3016f6420d4654b.tar.bz2 |
Take advantage of OBJ_TYPE_REF'S in dyn calls
OBJ_TYPE_REF's are the gcc nodes that signify that this is a virtual call
which gives a hint to the optimizers for devirtualization.
Fixes #996
Fixes #854
Diffstat (limited to 'gcc/rust/backend/rust-compile-expr.h')
-rw-r--r-- | gcc/rust/backend/rust-compile-expr.h | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/rust/backend/rust-compile-expr.h b/gcc/rust/backend/rust-compile-expr.h index 8aeb703..bb81d4e 100644 --- a/gcc/rust/backend/rust-compile-expr.h +++ b/gcc/rust/backend/rust-compile-expr.h @@ -789,11 +789,13 @@ public: void visit (HIR::AsyncBlockExpr &) override {} protected: - tree compile_dyn_dispatch_call (const TyTy::DynamicObjectType *dyn, - TyTy::BaseType *receiver, - TyTy::FnType *fntype, tree receiver_ref, - std::vector<HIR::Expr *> &arguments, - Location expr_locus); + tree get_fn_addr_from_dyn (const TyTy::DynamicObjectType *dyn, + TyTy::BaseType *receiver, TyTy::FnType *fntype, + tree receiver_ref, Location expr_locus); + + tree get_receiver_from_dyn (const TyTy::DynamicObjectType *dyn, + TyTy::BaseType *receiver, TyTy::FnType *fntype, + tree receiver_ref, Location expr_locus); tree resolve_method_address (TyTy::FnType *fntype, HirId ref, TyTy::BaseType *receiver, |