Commit b0ba96c2 by Kelvin Nilsen

re PR target/79963 (vec_eq_any extracts wrong CR bit when compiling with -mcpu=power9)

gcc/testsuite/ChangeLog:

2017-03-20  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	PR target/79963
	* gcc.target/powerpc/vsu/vec-any-eq-10.c: Add scan-assembler
	directive to assure selection of proper bit using rlwinm insn.
	* gcc.target/powerpc/vsu/vec-any-eq-14.c: Likewise.
	* gcc.target/powerpc/vsu/vec-any-eq-7.c: Likewise.
	* gcc.target/powerpc/vsu/vec-any-eq-8.c: Likewise.
	* gcc.target/powerpc/vsu/vec-any-eq-9.c: Likewise.

gcc/ChangeLog:

2017-03-20  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	PR target/79963
	* config/rs6000/altivec.h (vec_all_ne): Under __cplusplus__ and
	__POWER9_VECTOR__ #ifdef control, change template definition to
	use Power9-specific built-in function.
	(vec_any_eq): Likewise.
	* config/rs6000/vector.md (vector_ae_v2di_p): Change the flag used
	to control outcomes from this test.
	(vector_ae_<mode>p): For VEC_F modes, likewise.

From-SVN: r246287
parent dd629845
2017-03-20 Kelvin Nilsen <kelvin@gcc.gnu.org>
PR target/79963
* config/rs6000/altivec.h (vec_all_ne): Under __cplusplus__ and
__POWER9_VECTOR__ #ifdef control, change template definition to
use Power9-specific built-in function.
(vec_any_eq): Likewise.
* config/rs6000/vector.md (vector_ae_v2di_p): Change the flag used
to control outcomes from this test.
(vector_ae_<mode>p): For VEC_F modes, likewise.
2017-03-20 Ian Lance Taylor <iant@google.com> 2017-03-20 Ian Lance Taylor <iant@google.com>
* config/i386/i386.c (ix86_function_regparm): Save an extra * config/i386/i386.c (ix86_function_regparm): Save an extra
......
...@@ -521,9 +521,9 @@ __altivec_scalar_pred(vec_all_nez, ...@@ -521,9 +521,9 @@ __altivec_scalar_pred(vec_all_nez,
__altivec_scalar_pred(vec_any_eqz, __altivec_scalar_pred(vec_any_eqz,
__builtin_vec_vcmpnez_p (__CR6_LT_REV, a1, a2)) __builtin_vec_vcmpnez_p (__CR6_LT_REV, a1, a2))
__altivec_scalar_pred(vec_all_ne, __altivec_scalar_pred(vec_all_ne,
__builtin_vec_allne_p (a1, a2)) __builtin_vec_vcmpne_p (a1, a2))
__altivec_scalar_pred(vec_any_eq, __altivec_scalar_pred(vec_any_eq,
__builtin_vec_anyeq_p (a1, a2)) __builtin_vec_vcmpae_p (a1, a2))
#endif #endif
__altivec_scalar_pred(vec_any_ne, __altivec_scalar_pred(vec_any_ne,
......
...@@ -790,7 +790,7 @@ ...@@ -790,7 +790,7 @@
(eq:V2DI (match_dup 1) (eq:V2DI (match_dup 1)
(match_dup 2)))]) (match_dup 2)))])
(set (match_operand:SI 0 "register_operand" "=r") (set (match_operand:SI 0 "register_operand" "=r")
(lt:SI (reg:CC CR6_REGNO) (eq:SI (reg:CC CR6_REGNO)
(const_int 0))) (const_int 0)))
(set (match_dup 0) (set (match_dup 0)
(xor:SI (match_dup 0) (xor:SI (match_dup 0)
...@@ -837,7 +837,7 @@ ...@@ -837,7 +837,7 @@
(eq:VEC_F (match_dup 1) (eq:VEC_F (match_dup 1)
(match_dup 2)))]) (match_dup 2)))])
(set (match_operand:SI 0 "register_operand" "=r") (set (match_operand:SI 0 "register_operand" "=r")
(lt:SI (reg:CC CR6_REGNO) (eq:SI (reg:CC CR6_REGNO)
(const_int 0))) (const_int 0)))
(set (match_dup 0) (set (match_dup 0)
(xor:SI (match_dup 0) (xor:SI (match_dup 0)
......
2017-03-20 Kelvin Nilsen <kelvin@gcc.gnu.org>
PR target/79963
* gcc.target/powerpc/vsu/vec-any-eq-10.c: Add scan-assembler
directive to assure selection of proper bit using rlwinm insn.
* gcc.target/powerpc/vsu/vec-any-eq-14.c: Likewise.
* gcc.target/powerpc/vsu/vec-any-eq-7.c: Likewise.
* gcc.target/powerpc/vsu/vec-any-eq-8.c: Likewise.
* gcc.target/powerpc/vsu/vec-any-eq-9.c: Likewise.
2017-03-20 Marek Polacek <polacek@redhat.com> 2017-03-20 Marek Polacek <polacek@redhat.com>
Paolo Carlini <paolo.carlini@oracle.com> Paolo Carlini <paolo.carlini@oracle.com>
......
...@@ -16,3 +16,4 @@ test_any_equal (vector unsigned long long *arg1_p, ...@@ -16,3 +16,4 @@ test_any_equal (vector unsigned long long *arg1_p,
} }
/* { dg-final { scan-assembler "vcmpequd." } } */ /* { dg-final { scan-assembler "vcmpequd." } } */
/* { dg-final { scan-assembler "rlwinm r?\[0-9\]+,r?\[0-9\]+,27,1" } } */
...@@ -15,3 +15,4 @@ test_any_equal (vector bool long long *arg1_p, vector bool long long *arg2_p) ...@@ -15,3 +15,4 @@ test_any_equal (vector bool long long *arg1_p, vector bool long long *arg2_p)
} }
/* { dg-final { scan-assembler "vcmpequd." } } */ /* { dg-final { scan-assembler "vcmpequd." } } */
/* { dg-final { scan-assembler "rlwinm r?\[0-9\]+,r?\[0-9\]+,27,1" } } */
...@@ -15,3 +15,4 @@ test_any_equal (vector float *arg1_p, vector float *arg2_p) ...@@ -15,3 +15,4 @@ test_any_equal (vector float *arg1_p, vector float *arg2_p)
} }
/* { dg-final { scan-assembler "xvcmpeqsp." } } */ /* { dg-final { scan-assembler "xvcmpeqsp." } } */
/* { dg-final { scan-assembler "rlwinm r?\[0-9\]+,r?\[0-9\]+,27,1" } } */
...@@ -15,3 +15,4 @@ test_any_equal (vector double *arg1_p, vector double *arg2_p) ...@@ -15,3 +15,4 @@ test_any_equal (vector double *arg1_p, vector double *arg2_p)
} }
/* { dg-final { scan-assembler "xvcmpeqdp." } } */ /* { dg-final { scan-assembler "xvcmpeqdp." } } */
/* { dg-final { scan-assembler "rlwinm r?\[0-9\]+,r?\[0-9\]+,27,1" } } */
...@@ -15,3 +15,4 @@ test_any_equal (vector long long *arg1_p, vector long long *arg2_p) ...@@ -15,3 +15,4 @@ test_any_equal (vector long long *arg1_p, vector long long *arg2_p)
} }
/* { dg-final { scan-assembler "vcmpequd." } } */ /* { dg-final { scan-assembler "vcmpequd." } } */
/* { dg-final { scan-assembler "rlwinm r?\[0-9\]+,r?\[0-9\]+,27,1" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment