[PATCH 1/2] Auto-generate maybe_fold_and/or_comparisons from match.pd
Richard Biener
rguenther@suse.de
Mon Sep 9 13:10:00 GMT 2019
On Mon, 9 Sep 2019, Martin Liška wrote:
> Hi.
>
> I'm sending slightly updated version of the patch where we
> need to properly select type in maybe_fold_comparisons_from_match_pd
> function for the created SSA_NAMEs. We can be called for a VECTOR_TYPE
> and so that we can't return a boolean_type_node.
>
> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>
> Ready to be installed?
2019-07-16 Li Jia He <helijia@linux.ibm.com>
Martin Liska <mliska@suse.cz>
* gimple.h (gimple_init): Declare.
(gimple_size): Likewise.
* gimple.c (gimple_init): Remove static and inline restrictions.
(gimple_alloc): Only allocate memory and call gimple_init.
(gimple_size): Likewise.
Likewise?
* tree-ssanames.c (init_ssa_name_imm_use): Use make_ssa_name_fn.
(make_ssa_name_fn): New.
You didn't touch make_ssa_name_fn.
Since we're needing another iteration:
+ /* Allocate gimple stmt1 on the stack. */
+ gimple *stmt1 = (gimple *) XALLOCAVEC (char, gimple_size
(GIMPLE_ASSIGN, 2));
You can use gassign *stmt1 here so all the gimple_assign_ fns below
get cheaper.
+ if (op.resimplify (NULL, follow_all_ssa_edges))
+ {
+ if (gimple_simplified_result_is_gimple_val (&op))
+ {
+ tree res = op.ops[0];
+ switch (TREE_CODE (res))
+ {
+ case SSA_NAME:
+ {
+ gimple *def = SSA_NAME_DEF_STMT (res);
you shouldn't expand SSA names here unless that SSA name is
exactly lhs1 or lhs2 from above. So
if (res == lhs1)
return build2 (...);
else if (res == lhs2)
return build2 (..);
else
return res;
plus you miss the case where 'op' became a simplified comparison
in itself. So,
if (op.code.is_tree_code ()
&& TREE_CODE_CLASS ((enum tree_code)op.code) == tcc_comparison)
{
tree op0 = op.ops[0];
tree op1 = op.ops[1];
if (op0 == lhs1 || op0 == lhs2 || op1 == lhs1 || op1 == lhs2)
return NULL_TREE; /* not simple */
return build2 ((enum tree_code)op.code, op.type,
op0, op1);
}
note you need not fold_ again. It's of course ugly that we
need to build a GENERIC tree here but that's the current interface
and thus OK at the moment.
Thanks,
Richard.
More information about the Gcc-patches
mailing list