aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend/rust-compile-expr.h
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2022-05-03 12:45:45 +0100
committerPhilip Herron <philip.herron@embecosm.com>2022-05-04 13:13:12 +0100
commit74f4ee8d38f5aa58e4722725f3016f6420d4654b (patch)
treebe164dafb951987e1e8a25ac3be87c9555d0b6b3 /gcc/rust/backend/rust-compile-expr.h
parent21b9e1226cfbc4137a881a71c5e6f904fc5b364e (diff)
downloadgcc-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.h12
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,