On Mon, 9 Sep 2019, Martin Liška wrote: > On 9/9/19 3:10 PM, Richard Biener wrote: > > 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 <heli...@linux.ibm.com> > > Martin Liska <mli...@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? > > Fixed. > > > > > * 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. > > Likewise here. > > > > > 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 > > Ah, got it. > > > > > 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, > > Yes, that part is included in part 3. I'm going to send the updated patch > 3 as well soon. > > > > > 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. > > I see. But what I need is to insert newly created GIMPLE assignment to > the provided gimple sequence (gsi), right?
There is no newly created GIMPLE? Richard.