diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-06-01 12:13:36 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2005-06-01 12:13:36 +0200 |
commit | dcd25113c6c37534621934617f07776b9212ef33 (patch) | |
tree | d4483d63d139eff9738f540f3168a9f08952531c | |
parent | a00cb0b926ac650709e3816bc967c8795869c116 (diff) | |
download | gcc-dcd25113c6c37534621934617f07776b9212ef33.zip gcc-dcd25113c6c37534621934617f07776b9212ef33.tar.gz gcc-dcd25113c6c37534621934617f07776b9212ef33.tar.bz2 |
* fold-const.c (fold_ternary): Optimize BIT_FIELD_REF of VECTOR_CST.
From-SVN: r100442
-rw-r--r-- | gcc/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/fold-const.c | 23 |
2 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6214421..01a685a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,7 @@ 2005-06-01 Jakub Jelinek <jakub@redhat.com> + * fold-const.c (fold_ternary): Optimize BIT_FIELD_REF of VECTOR_CST. + * config/i386/xmmintrin.h (_mm_setzero_ps, _mm_set_ss, _mm_set1_ps, _mm_set_ps, _mm_setr_ps): Add __extension__. * config/i386/emmintrin.h (_mm_set_sd, _mm_set1_pd, _mm_set_pd, diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 18e92e2..13984d1 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -10284,6 +10284,29 @@ fold_ternary (enum tree_code code, tree type, tree op0, tree op1, tree op2) } return NULL_TREE; + case BIT_FIELD_REF: + if (TREE_CODE (arg0) == VECTOR_CST + && type == TREE_TYPE (TREE_TYPE (arg0)) + && host_integerp (arg1, 1) + && host_integerp (op2, 1)) + { + unsigned HOST_WIDE_INT width = tree_low_cst (arg1, 1); + unsigned HOST_WIDE_INT idx = tree_low_cst (op2, 1); + + if (width != 0 + && simple_cst_equal (arg1, TYPE_SIZE (type)) == 1 + && (idx % width) == 0 + && (idx = idx / width) + < TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg0))) + { + tree elements = TREE_VECTOR_CST_ELTS (arg0); + while (idx-- > 0) + elements = TREE_CHAIN (elements); + return TREE_VALUE (elements); + } + } + return NULL_TREE; + default: return NULL_TREE; } /* switch (code) */ |