Lower VEC_COND_EXPR into internal functions.
authorMartin Liska <mliska@suse.cz>
Mon, 9 Mar 2020 12:23:03 +0000 (13:23 +0100)
committerMartin Liska <mliska@suse.cz>
Wed, 17 Jun 2020 10:04:22 +0000 (12:04 +0200)
commit502d63b6d6141597bb18fd23c87736a1b384cf8f
treeeba6680f649788bfbb44d1ec63183781460c997f
parent2021af0c23acaa827b5a8c5c5ba82b713f9cff1e
Lower VEC_COND_EXPR into internal functions.

gcc/ChangeLog:

* Makefile.in: Add new file.
* expr.c (expand_expr_real_2): Add gcc_unreachable as we should
not meet this condition.
(do_store_flag): Likewise.
* gimplify.c (gimplify_expr): Gimplify first argument of
VEC_COND_EXPR to be a SSA name.
* internal-fn.c (vec_cond_mask_direct): New.
(vec_cond_direct): Likewise.
(vec_condu_direct): Likewise.
(vec_condeq_direct): Likewise.
(expand_vect_cond_optab_fn):  New.
(expand_vec_cond_optab_fn): Likewise.
(expand_vec_condu_optab_fn): Likewise.
(expand_vec_condeq_optab_fn): Likewise.
(expand_vect_cond_mask_optab_fn): Likewise.
(expand_vec_cond_mask_optab_fn): Likewise.
(direct_vec_cond_mask_optab_supported_p): Likewise.
(direct_vec_cond_optab_supported_p): Likewise.
(direct_vec_condu_optab_supported_p): Likewise.
(direct_vec_condeq_optab_supported_p): Likewise.
* internal-fn.def (VCOND): New OPTAB.
(VCONDU): Likewise.
(VCONDEQ): Likewise.
(VCOND_MASK): Likewise.
* optabs.c (get_rtx_code): Make it global.
(expand_vec_cond_mask_expr): Removed.
(expand_vec_cond_expr): Removed.
* optabs.h (expand_vec_cond_expr): Likewise.
(vector_compare_rtx): Make it global.
* passes.def: Add new pass_gimple_isel pass.
* tree-cfg.c (verify_gimple_assign_ternary): Add check
for VEC_COND_EXPR about first argument.
* tree-pass.h (make_pass_gimple_isel): New.
* tree-ssa-forwprop.c (pass_forwprop::execute): Prevent
propagation of the first argument of a VEC_COND_EXPR.
* tree-ssa-reassoc.c (ovce_extract_ops): Support SSA_NAME as
first argument of a VEC_COND_EXPR.
(optimize_vec_cond_expr): Likewise.
* tree-vect-generic.c (expand_vector_divmod): Make SSA_NAME
for a first argument of created VEC_COND_EXPR.
(expand_vector_condition): Fix coding style.
* tree-vect-stmts.c (vectorizable_condition): Gimplify
first argument.
* gimple-isel.cc: New file.

gcc/testsuite/ChangeLog:

* g++.dg/vect/vec-cond-expr-eh.C: New test.
16 files changed:
gcc/Makefile.in
gcc/expr.c
gcc/gimple-isel.cc [new file with mode: 0644]
gcc/gimplify.c
gcc/internal-fn.c
gcc/internal-fn.def
gcc/optabs.c
gcc/optabs.h
gcc/passes.def
gcc/testsuite/g++.dg/vect/vec-cond-expr-eh.C [new file with mode: 0644]
gcc/tree-cfg.c
gcc/tree-pass.h
gcc/tree-ssa-forwprop.c
gcc/tree-ssa-reassoc.c
gcc/tree-vect-generic.c
gcc/tree-vect-stmts.c