Hello, currently working on a tiny experimental compiler optimization in the
C++ frontend. Trying to compare the base classes of 2 types at runtime, then if
they are equal, statically cast the second operand's type to the first and the
tree should return the now-casted ptr of the second operand, otherwise the tree
should return a null ptr. I read the docs on the website describing the trees,
but I did not find information on comparing runtime type info. Currently I am
doing:
//context:
build_dynamic_cast_1 (location_t loc, tree type, tree expr,
tsubst_flags_t complain)
...
target_type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
static_type = TYPE_MAIN_VARIANT (TREE_TYPE (exprtype));
td2 = get_tinfo_decl (target_type);
td2 = cp_build_addr_expr (td2, complain);
td3 = get_tinfo_decl (static_type);
td3 = cp_build_addr_expr (td3, complain);
...
// `expr` is what this code attempts to statically cast to the type of `type`,
if their base type matches up
tree cast_expr = cp_convert(type, build_static_cast(loc, type, expr,
complain), complain);
tree cond = build2 (NE_EXPR, boolean_type_node, td2, td3);
tree null_ptr = cp_convert (type, nullptr_node, complain);
tree result = build3 (COND_EXPR, type, cond, null_ptr, cast_expr);
result = cp_convert(type, result, complain);
return build_if_nonnull(expr, result, complain);
the output GIMPLE and assembly don't look anything like what I am trying to
achieve though. Does anyone know how the base classes should be compared from
the runtime type info, should I be doing it manually with MEM_REF instead? I
was unable to find documentation on this, as well as most of the tree building
functions, sorry if stupid/unclear question.
This e-mail and any attachments may contain information that is confidential
and proprietary and otherwise protected from disclosure. If you are not the
intended recipient of this e-mail, do not read, duplicate or redistribute it by
any means. Please immediately delete it and any attachments and notify the
sender that you have received it by mistake. Unintended recipients are
prohibited from taking action on the basis of information in this e-mail or any
attachments. The DRW Companies make no representations that this e-mail or any
attachments are free of computer viruses or other defects.