diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-09-02 13:53:32 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-09-02 13:53:32 +0000 |
commit | d6b19f6bc6c71621f8c894b07706e14e1301cb39 (patch) | |
tree | a60e543826617c5a8adf334f075bb61da4cc0003 /gcc/optabs.h | |
parent | d066d69aa5fa551244d8e2aa3479e3404480721a (diff) | |
download | gcc-d6b19f6bc6c71621f8c894b07706e14e1301cb39.tar.gz |
2011-09-02 Richard Guenther <rguenther@suse.de>
PR tree-optimization/27460
PR middle-end/29269
* doc/md.texi (vcond): Document.
* genopinit.c (optabs): Turn vcond{,u}_optab into a conversion
optab with two modes.
* optabs.h (enum convert_optab_index): Add COI_vcond, COI_vcondu.
(enum direct_optab_index): Remove DOI_vcond, DOI_vcondu.
(vcond_optab): Adjust.
(vcondu_optab): Likewise.
(expand_vec_cond_expr_p): Adjust prototype.
* optabs.c (get_vcond_icode): Adjust.
(expand_vec_cond_expr_p): Likewise.
(expand_vec_cond_expr): Likewise.
* tree-vect-stmts.c (vect_is_simple_cond): Return the comparison
vector type.
(vectorizable_condition): Allow differing types for comparison
and result.
* config/i386/i386.c (ix86_expand_sse_cmp): Use proper mode
for the comparison.
* config/i386/sse.md (vcond<mode>): Split to
vcond<V_256:mode><VF_256:mode>, vcond<V_128:mode><VF_128:mode>,
vcond<V_128:mode><VI124_128:mode> and
vcondu<V_128:mode><VI124_128:mode>.
(vcondv2di): Change to vcond<VI8F_128:mode>v2di.
(vconduv2di): Likewise.
* config/arm/neon.md (vcond<mode>): Change to vcond*<mode><mode>.
(vcondu<mode>): Likewise.
* config/ia64/vect.md (vcond<mode>): Likewise.
(vcondu<mode>): Likewise.
(vcondv2sf): Likewise.
* config/mips/mips-ps-3d.md (vcondv2sf): Likewise.
* config/rs6000/paired.md (vcondv2sf): Likewise.
* config/rs6000/vector.md (vcond<mode>): Likewise.
(vcondu<mode>): Likewise.
* config/spu/spu.md (vcond<mode>): Likewise.
(vcondu<mode>): Likewise.
* gcc.dg/vect/vect-cond-7.c: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178480 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/optabs.h')
-rw-r--r-- | gcc/optabs.h | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/gcc/optabs.h b/gcc/optabs.h index cf5a659647b..56df6718462 100644 --- a/gcc/optabs.h +++ b/gcc/optabs.h @@ -589,6 +589,10 @@ enum convert_optab_index COI_vec_load_lanes, COI_vec_store_lanes, + /* Vector conditional operations. */ + COI_vcond, + COI_vcondu, + COI_MAX }; @@ -611,6 +615,8 @@ enum convert_optab_index #define satfractuns_optab (&convert_optab_table[COI_satfractuns]) #define vec_load_lanes_optab (&convert_optab_table[COI_vec_load_lanes]) #define vec_store_lanes_optab (&convert_optab_table[COI_vec_store_lanes]) +#define vcond_optab (&convert_optab_table[(int) COI_vcond]) +#define vcondu_optab (&convert_optab_table[(int) COI_vcondu]) /* Contains the optab used for each rtx code. */ extern optab code_to_optab[NUM_RTX_CODE + 1]; @@ -632,10 +638,6 @@ enum direct_optab_index DOI_reload_in, DOI_reload_out, - /* Vector conditional operations. */ - DOI_vcond, - DOI_vcondu, - /* Block move operation. */ DOI_movmem, @@ -699,8 +701,6 @@ typedef struct direct_optab_d *direct_optab; #endif #define reload_in_optab (&direct_optab_table[(int) DOI_reload_in]) #define reload_out_optab (&direct_optab_table[(int) DOI_reload_out]) -#define vcond_optab (&direct_optab_table[(int) DOI_vcond]) -#define vcondu_optab (&direct_optab_table[(int) DOI_vcondu]) #define movmem_optab (&direct_optab_table[(int) DOI_movmem]) #define setmem_optab (&direct_optab_table[(int) DOI_setmem]) #define cmpstr_optab (&direct_optab_table[(int) DOI_cmpstr]) @@ -877,7 +877,7 @@ extern bool expand_sfix_optab (rtx, rtx, convert_optab); extern rtx expand_widening_mult (enum machine_mode, rtx, rtx, rtx, int, optab); /* Return tree if target supports vector operations for COND_EXPR. */ -bool expand_vec_cond_expr_p (tree, enum machine_mode); +bool expand_vec_cond_expr_p (tree, tree); /* Generate code for VEC_COND_EXPR. */ extern rtx expand_vec_cond_expr (tree, tree, tree, tree, rtx); |