This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 09/19/14 10:21, Uros Bizjak wrote:
Needs a comment, even more so than normal given the restrictive nature of the input values. One could bikeshed on using true/false vs 0/-1 since it appears that lb/ub are really boolean values.+static tree +ix86_make_bounds_constant (HOST_WIDE_INT lb, HOST_WIDE_INT ub) +{ + tree low = lb ? build_minus_one_cst (pointer_sized_int_node) + : build_zero_cst (pointer_sized_int_node); + tree high = ub ? build_zero_cst (pointer_sized_int_node) + : build_minus_one_cst (pointer_sized_int_node); + + /* This function is supposed to be used to create zero and + none bounds only. */ + gcc_assert (lb == 0 || lb == -1); + gcc_assert (ub == 0 || ub == -1); + + return build_complex (NULL, low, high);
Are we supposed to be emitting gimple or generic here? I don't think this is valid gimple as we have a CONVERT_EXPR embedded in the INDIRECT_REF's argument.+} + +static int +ix86_initialize_bounds (tree var, tree lb, tree ub, tree *stmts) +{ + tree size_ptr = build_pointer_type (size_type_node); + tree lhs, modify, var_p; + + ub = build1 (BIT_NOT_EXPR, size_type_node, ub); + var_p = build1 (CONVERT_EXPR, size_ptr, + build_fold_addr_expr (var)); + + lhs = build1 (INDIRECT_REF, size_type_node, var_p); + modify = build2 (MODIFY_EXPR, TREE_TYPE (lhs), lhs, lb); + append_to_statement_list (modify, stmts); + + lhs = build1 (INDIRECT_REF, size_type_node, + build2 (POINTER_PLUS_EXPR, size_ptr, var_p, + TYPE_SIZE_UNIT (size_type_node))); + modify = build2 (MODIFY_EXPR, TREE_TYPE (lhs), lhs, ub); + append_to_statement_list (modify, stmts); + + return 2; +}
I think it's valid generic and does the obvious thing. I just Ilya to make sure what we create does get gimplified.
jeff
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |