From: Victor Kaplansky Date: Thu, 16 Feb 2006 09:59:00 +0000 (+0000) Subject: re PR testsuite/25918 (gcc.dg/vect/vect-reduc-dot-s16.c scan-tree-dump-times vectoriz... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4035f24587ce1716adcdafadc5d4a1f7528ddf58;p=gcc.git re PR testsuite/25918 (gcc.dg/vect/vect-reduc-dot-s16.c scan-tree-dump-times vectorized 1 loops 1 and gcc.dg/vect/vect-reduc-pattern-2.c scan-tree-dump-times vectorized 2 loops 1 fail) testsuite/ 2006-02-16 Victor Kaplansky PR tree-opt/25918 * lib/target-supports.exp (check_effective_target_vect_short_mult): New. (check_effective_target_vect_char_mult): New. (check_effective_target_vect_widen_sum_qi_to_si): New. (check_effective_target_vect_widen_sum_qi_to_hi): New. (check_effective_target_vect_widen_sum_hi_to_si): New. * gcc.dg/vect/vect-reduc-dot-s16.c: Remove, split into vect-reduc-dot-s16a.c and vect-reduc-dot-s16b.c * vect-reduc-dot-s16a.c: New, split from vect-reduc-dot-s16.c. * vect-reduc-dot-s16b.c: New, split from vect-reduc-dot-s16.c. * gcc.dg/vect/vect-reduc-pattern-2.c: Remove, split into vect-reduc-pattern-2a.c, vect-reduc-pattern-2b.c and vect-reduc-pattern-2c.c * gcc.dg/vect/vect-reduc-pattern-1.c: Remove, split into vect-reduc-pattern-1a.c, vect-reduc-pattern-1b.c and vect-reduc-pattern-1c.c From-SVN: r111135 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7f464ab7188..2ef471615b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,23 @@ +2006-02-16 Victor Kaplansky + + PR tree-opt/25918 + * lib/target-supports.exp + (check_effective_target_vect_short_mult): New. + (check_effective_target_vect_char_mult): New. + (check_effective_target_vect_widen_sum_qi_to_si): New. + (check_effective_target_vect_widen_sum_qi_to_hi): New. + (check_effective_target_vect_widen_sum_hi_to_si): New. + * gcc.dg/vect/vect-reduc-dot-s16.c: Remove, split into + vect-reduc-dot-s16a.c and vect-reduc-dot-s16b.c + * vect-reduc-dot-s16a.c: New, split from vect-reduc-dot-s16.c. + * vect-reduc-dot-s16b.c: New, split from vect-reduc-dot-s16.c. + * gcc.dg/vect/vect-reduc-pattern-2.c: Remove, split into + vect-reduc-pattern-2a.c, vect-reduc-pattern-2b.c and + vect-reduc-pattern-2c.c + * gcc.dg/vect/vect-reduc-pattern-1.c: Remove, split into + vect-reduc-pattern-1a.c, vect-reduc-pattern-1b.c and + vect-reduc-pattern-1c.c + 2005-02-16 Paul Thomas PR fortran/24557 diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16.c deleted file mode 100644 index ddffc109d35..00000000000 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16.c +++ /dev/null @@ -1,70 +0,0 @@ -/* { dg-require-effective-target vect_int } */ - -#include -#include "tree-vect.h" - -#define N 64 - -#define DOT1 43680 -#define DOT2 43680 - -signed short X[N] __attribute__ ((__aligned__(16))); -signed short Y[N] __attribute__ ((__aligned__(16))); - -/* short->short->int dot product. - Not detected as a dot-product pattern. - Currently fails to be vectorized due to presence of type conversions. */ -int -foo1(int len) { - int i; - int result = 0; - short prod; - - for (i=0; iint->int dot product. - Detected as a dot-product pattern. - Vectorized on targets that support dot-product for signed shorts. */ -int -foo2(int len) { - int i; - int result = 0; - - for (i=0; i +#include "tree-vect.h" + +#define N 64 +#define DOT 43680 + +signed short X[N] __attribute__ ((__aligned__(16))); +signed short Y[N] __attribute__ ((__aligned__(16))); + +/* short->int->int dot product. + Detected as a dot-product pattern. + Vectorized on targets that support dot-product for signed shorts. */ + +int +foo (int len) +{ + int i; + int result = 0; + + for (i = 0; i < len; i++) + { + result += (X[i] * Y[i]); + } + return result; +} + + +int +main (void) +{ + int i; + int dot; + + check_vect (); + + for (i = 0; i < N; i++) + { + X[i] = i; + Y[i] = N - i; + } + + dot = foo (N); + if (dot != DOT) + abort (); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vect_recog_dot_prod_pattern: detected" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_sdot_hi } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ + diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16b.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16b.c new file mode 100644 index 00000000000..feb7df03149 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16b.c @@ -0,0 +1,56 @@ +/* { dg-require-effective-target vect_int } */ + +#include +#include "tree-vect.h" + +#define N 64 + +#define DOT 43680 + +signed short X[N] __attribute__ ((__aligned__(16))); +signed short Y[N] __attribute__ ((__aligned__(16))); + +/* short->short->int dot product. Should be vectorized on architectures + supporting vectorized multiplication of two short args with short result, + e.g "mulv4hi3" and widenning sum */ +int +foo (int len) +{ + int i; + int result = 0; + short prod; + + for (i = 0; i < len; i++) + { + prod = X[i] * Y[i]; + result += prod; + } + return result; +} + +int +main (void) +{ + int i, dot; + + check_vect (); + + for (i = 0; i < N; i++) + { + X[i] = i; + Y[i] = 64 - i; + } + + dot = foo (N); + if (dot != DOT) + abort (); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_short_mult && vect_widen_sum_hi_to_si } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_short_mult } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_widen_sum_hi_to_si } } } } */ + +/* { dg-final { cleanup-tree-dump "vect" } } */ + diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1.c deleted file mode 100644 index 61f1da19d6e..00000000000 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1.c +++ /dev/null @@ -1,60 +0,0 @@ -/* { dg-require-effective-target vect_int } */ - -#include -#include "tree-vect.h" - -#define N 16 -#define SH_SUM 210 -#define CH_SUM 120 - -int main1 () -{ - int i; - unsigned short udata_sh[N] = {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28}; - unsigned char udata_ch[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; - unsigned int intsum = 0; - unsigned short shortsum = 0; - - /* widenning sum: sum shorts into int. */ - for (i = 0; i < N; i++){ - intsum += udata_sh[i]; - } - - /* check results: */ - if (intsum != SH_SUM) - abort (); - - /* widenning sum: sum chars into int. */ - intsum = 0; - for (i = 0; i < N; i++){ - intsum += udata_ch[i]; - } - - /* check results: */ - if (intsum != CH_SUM) - abort (); - - /* widenning sum: sum chars into short. - pattern detected, but not vectorized yet. */ - for (i = 0; i < N; i++){ - shortsum += udata_ch[i]; - } - - /* check results: */ - if (shortsum != CH_SUM) - abort (); - - return 0; -} - -int main (void) -{ - check_vect (); - - return main1 (); -} - -/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 3 "vect" } } */ -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail *-*-* } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target vect_widen_sum } } } */ -/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1a.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1a.c new file mode 100644 index 00000000000..ca578a48306 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1a.c @@ -0,0 +1,40 @@ +/* { dg-require-effective-target vect_int } */ + +#include +#include "tree-vect.h" + +#define N 16 +unsigned short udata_sh[N] = + { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; +#define SUM 210 + +int +foo () +{ + int i; + unsigned int intsum = 0; + + /* widenning sum: sum shorts into int. */ + for (i = 0; i < N; i++) + { + intsum += udata_sh[i]; + } + + /* check results: */ + if (intsum != SUM) + abort (); + + return 0; +} + +int +main (void) +{ + check_vect (); + return foo (); +} + +/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_widen_sum_hi_to_si } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_widen_sum_hi_to_si } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1b.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1b.c new file mode 100644 index 00000000000..443ec931916 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1b.c @@ -0,0 +1,40 @@ +/* { dg-require-effective-target vect_int } */ + +#include +#include "tree-vect.h" + +#define N 16 +unsigned char udata_ch[N] = + { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; +#define SUM 210 + +int +foo () +{ + int i; + unsigned int intsum = 0; + + /* widenning sum: sum chars into int. */ + for (i = 0; i < N; i++) + { + intsum += udata_ch[i]; + } + + /* check results: */ + if (intsum != SUM) + abort (); + + return 0; +} + +int +main (void) +{ + check_vect (); + return foo (); +} + +/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_widen_sum_qi_to_si } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_widen_sum_qi_to_si } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1c.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1c.c new file mode 100644 index 00000000000..39eb48e720b --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1c.c @@ -0,0 +1,40 @@ +/* { dg-require-effective-target vect_int } */ + +#include +#include "tree-vect.h" + +#define N 16 +unsigned char udata_ch[N] = + { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; +#define SUM 210 + +int +foo () +{ + int i; + unsigned short shortsum = 0; + + /* widenning sum: sum chars into short. */ + for (i = 0; i < N; i++) + { + shortsum += udata_ch[i]; + } + + /* check results: */ + if (shortsum != SUM) + abort (); + + return 0; +} + +int +main (void) +{ + check_vect (); + return foo (); +} + +/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_widen_sum_qi_to_hi } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_widen_sum_qi_to_hi } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2.c deleted file mode 100644 index 5423c4376d9..00000000000 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2.c +++ /dev/null @@ -1,67 +0,0 @@ -/* { dg-require-effective-target vect_int } */ - -#include -#include "tree-vect.h" - -#define N 16 -#define SH_SUM 210 -#define CH_SUM 120 - -int main1 () -{ - int i; - signed short data_sh[N] = {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28}; - signed char data_ch[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; - signed int intsum = 0; - signed short shortsum = 0; - - /* widenning sum: sum shorts into int. */ - for (i = 0; i < N; i++){ - intsum += data_sh[i]; - } - - /* check results: */ - if (intsum != SH_SUM) - abort (); - - /* widenning sum: sum chars into int. */ - intsum = 0; - for (i = 0; i < N; i++){ - intsum += data_ch[i]; - } - - /* check results: */ - if (intsum != CH_SUM) - abort (); - - /* widenning sum: sum chars into short. - The widening-summation pattern is currently not detected because of this - patch: - - 2005-12-26 Kazu Hirata - - PR tree-optimization/25125 - */ - for (i = 0; i < N; i++){ - shortsum += data_ch[i]; - } - - /* check results: */ - if (shortsum != CH_SUM) - abort (); - - return 0; -} - -int main (void) -{ - check_vect (); - - return main1 (); -} - -/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 3 "vect" { xfail *-*-* } } } */ -/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 2 "vect" } } */ -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail *-*-* } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target vect_widen_sum } } } */ -/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2a.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2a.c new file mode 100644 index 00000000000..a5030c65920 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2a.c @@ -0,0 +1,40 @@ +/* { dg-require-effective-target vect_int } */ + +#include +#include "tree-vect.h" + +#define N 16 +signed short data_sh[N] = + { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; +#define SUM 210 + +int +foo () +{ + int i; + signed int intsum = 0; + + /* widenning sum: sum shorts into int. */ + for (i = 0; i < N; i++) + { + intsum += data_sh[i]; + } + + /* check results: */ + if (intsum != SUM) + abort (); + + return 0; +} + +int +main (void) +{ + check_vect (); + return foo (); +} + +/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_widen_sum_hi_to_si } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_widen_sum_hi_to_si } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2b.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2b.c new file mode 100644 index 00000000000..5ca5185628a --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2b.c @@ -0,0 +1,40 @@ +/* { dg-require-effective-target vect_int } */ + +#include +#include "tree-vect.h" + +#define N 16 +signed char data_ch[N] = + { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; +#define SUM 210 + +int +foo () +{ + int i; + signed int intsum = 0; + + /* widenning sum: sum chars into int. */ + for (i = 0; i < N; i++) + { + intsum += data_ch[i]; + } + + /* check results: */ + if (intsum != SUM) + abort (); + + return 0; +} + +int +main (void) +{ + check_vect (); + return foo (); +} + +/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_widen_sum_qi_to_si } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_widen_sum_qi_to_si } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2c.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2c.c new file mode 100644 index 00000000000..7444ac737e5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2c.c @@ -0,0 +1,48 @@ +/* { dg-require-effective-target vect_int } */ + +#include +#include "tree-vect.h" + +#define N 16 +signed char data_ch[N] = + { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; +#define SUM 210 + +int +foo () +{ + int i; + signed short shortsum = 0; + + /* widenning sum: sum chars into short. + The widening-summation pattern is currently not detected because of this + patch: + + 2005-12-26 Kazu Hirata + + PR tree-optimization/25125 + */ + + for (i = 0; i < N; i++) + { + shortsum += data_ch[i]; + } + + /* check results: */ + if (shortsum != SUM) + abort (); + + return 0; +} + +int +main (void) +{ + check_vect (); + return foo (); +} + +/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 1 "vect" { xfail *-*-* } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_widen_sum_qi_to_hi } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-pattern-2.c b/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-pattern-2.c deleted file mode 100755 index 6c844eac38e..00000000000 --- a/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-pattern-2.c +++ /dev/null @@ -1,59 +0,0 @@ -/* { dg-require-effective-target vect_int } */ - -#include -#include "tree-vect.h" - -#define N 16 -#define SH_SUM 210 -#define CH_SUM 120 - -int main1 () -{ - int i; - signed short data_sh[N] = {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28}; - signed char data_ch[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; - signed int intsum = 0; - signed short shortsum = 0; - - /* widenning sum: sum shorts into int. */ - for (i = 0; i < N; i++){ - intsum += data_sh[i]; - } - - /* check results: */ - if (intsum != SH_SUM) - abort (); - - /* widenning sum: sum chars into int. */ - intsum = 0; - for (i = 0; i < N; i++){ - intsum += data_ch[i]; - } - - /* check results: */ - if (intsum != CH_SUM) - abort (); - - /* widenning sum: sum chars into short. */ - for (i = 0; i < N; i++){ - shortsum += data_ch[i]; - } - - /* check results: */ - if (shortsum != CH_SUM) - abort (); - - return 0; -} - -int main (void) -{ - check_vect (); - - return main1 (); -} - -/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 3 "vect" } } */ -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail *-*-* } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target vect_widen_sum } } } */ -/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-pattern-2c.c b/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-pattern-2c.c new file mode 100644 index 00000000000..9296098d73f --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-pattern-2c.c @@ -0,0 +1,41 @@ +/* { dg-require-effective-target vect_int } */ + +#include +#include "tree-vect.h" + +#define N 16 +signed char data_ch[N] = + { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; +#define SUM 210 + +int +foo () +{ + int i; + signed short shortsum = 0; + + /* widenning sum: sum chars into short. */ + + for (i = 0; i < N; i++) + { + shortsum += data_ch[i]; + } + + /* check results: */ + if (shortsum != SUM) + abort (); + + return 0; +} + +int +main (void) +{ + check_vect (); + return foo (); +} + +/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_widen_sum_qi_to_hi } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_widen_sum_qi_to_hi } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 88794a3cb98..49264b6eef6 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1434,6 +1434,67 @@ proc check_effective_target_vect_no_bitwise { } { return $et_vect_no_bitwise_saved } +# Return 1 if the target plus current options supports a vector +# widening summation of *short* args into *int* result, 0 otherwise. +# +# This won't change for different subtargets so cache the result. + +proc check_effective_target_vect_widen_sum_hi_to_si { } { + global et_vect_widen_sum_hi_to_si + + if [info exists et_vect_widen_sum_hi_to_si_saved] { + verbose "check_effective_target_vect_widen_sum_hi_to_si: using cached result" 2 + } else { + set et_vect_widen_sum_hi_to_si_saved 0 + if { [istarget powerpc*-*-*] + || [istarget ia64-*-*] } { + set et_vect_widen_sum_hi_to_si_saved 1 + } + } + verbose "check_effective_target_vect_widen_sum_hi_to_si: returning $et_vect_widen_sum_hi_to_si_saved" 2 + return $et_vect_widen_sum_hi_to_si_saved +} + +# Return 1 if the target plus current options supports a vector +# widening summation of *char* args into *short* result, 0 otherwise. +# +# This won't change for different subtargets so cache the result. + +proc check_effective_target_vect_widen_sum_qi_to_hi { } { + global et_vect_widen_sum_qi_to_hi + + if [info exists et_vect_widen_sum_qi_to_hi_saved] { + verbose "check_effective_target_vect_widen_sum_qi_to_hi: using cached result" 2 + } else { + set et_vect_widen_sum_qi_to_hi_saved 0 + if { [istarget ia64-*-*] } { + set et_vect_widen_sum_qi_to_hi_saved 1 + } + } + verbose "check_effective_target_vect_widen_sum_qi_to_hi: returning $et_vect_widen_sum_qi_to_hi_saved" 2 + return $et_vect_widen_sum_qi_to_hi_saved +} + +# Return 1 if the target plus current options supports a vector +# widening summation of *char* args into *int* result, 0 otherwise. +# +# This won't change for different subtargets so cache the result. + +proc check_effective_target_vect_widen_sum_qi_to_si { } { + global et_vect_widen_sum_qi_to_si + + if [info exists et_vect_widen_sum_qi_to_si_saved] { + verbose "check_effective_target_vect_widen_sum_qi_to_si: using cached result" 2 + } else { + set et_vect_widen_sum_qi_to_si_saved 0 + if { [istarget powerpc*-*-*] } { + set et_vect_widen_sum_qi_to_si_saved 1 + } + } + verbose "check_effective_target_vect_widen_sum_qi_to_si: returning $et_vect_widen_sum_qi_to_si_saved" 2 + return $et_vect_widen_sum_qi_to_si_saved +} + # Return 1 if the target plus current options supports a vector # widening summation, 0 otherwise. # @@ -1583,6 +1644,46 @@ proc check_effective_target_vect_condition { } { return $et_vect_cond_saved } +# Return 1 if the target supports vector char multiplication, 0 otherwise. + +proc check_effective_target_vect_char_mult { } { + global et_vect_char_mult_saved + + if [info exists et_vect_char_mult_saved] { + verbose "check_effective_target_vect_char_mult: using cached result" 2 + } else { + set et_vect_char_mult_saved 0 + if { [istarget ia64-*-*] + || [istarget i?86-*-*] + || [istarget x86_64-*-*] } { + set et_vect_char_mult_saved 1 + } + } + + verbose "check_effective_target_vect_char_mult: returning $et_vect_char_mult_saved" 2 + return $et_vect_char_mult_saved +} + +# Return 1 if the target supports vector short multiplication, 0 otherwise. + +proc check_effective_target_vect_short_mult { } { + global et_vect_short_mult_saved + + if [info exists et_vect_short_mult_saved] { + verbose "check_effective_target_vect_short_mult: using cached result" 2 + } else { + set et_vect_short_mult_saved 0 + if { [istarget ia64-*-*] + || [istarget i?86-*-*] + || [istarget x86_64-*-*] } { + set et_vect_short_mult_saved 1 + } + } + + verbose "check_effective_target_vect_short_mult: returning $et_vect_short_mult_saved" 2 + return $et_vect_short_mult_saved +} + # Return 1 if the target supports vector int multiplication, 0 otherwise. proc check_effective_target_vect_int_mult { } {