int is_floating_point_op_with_rounding_mode(IROp op) { IRType t_dst, t_arg1, t_arg2, t_arg3, t_arg4; typeof_primop(op, &t_dst, &t_arg1, &t_arg2, &t_arg3, &t_arg4); // A unary operator cannot have a rounding mode if (t_arg2 == Ity_INVALID) return 0; if (is_floating_point_type(t_dst) || is_floating_point_type(t_arg1) || is_floating_point_type(t_arg2) || is_floating_point_type(t_arg3) || is_floating_point_type(t_arg4)) { // Rounding mode, if present, is the 1st operand return t_arg1 == Ity_I32; } return 0; }
/// Returns true if e has floating point type. bool is_floating_point_expression(const expr& e) { return is_floating_point_type(e.get_type()); }
// Returns true if the expression `e` has floating point type. bool has_floating_point_type(Expr const& e) { return is_floating_point_type(e.type()); }