From 78796ad54b18ad6aa7433cb0a45f6665f85f9743 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Fri, 25 Feb 2005 01:16:17 +0000 Subject: [PATCH] config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Check for vector... config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Check for vector types if to use base reg for misaligned non-word ld/std. OKed by David Edelsohn. From-SVN: r95529 --- gcc/ChangeLog | 5 +++++ gcc/config/rs6000/rs6000.c | 1 + gcc/testsuite/gcc.dg/altivec-20.c | 23 +++++++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/altivec-20.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 59b1dceffa0..36d0804bbd5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-02-24 Fariborz Jahanian + + * config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Check for + vector types if to use base reg for misaligned non-word ld/std. + 2005-02-24 Hans-Peter Nilsson PR target/14619 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index ea5c0108413..e07ac501107 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -3881,6 +3881,7 @@ rs6000_legitimize_reload_address (rtx x, enum machine_mode mode, && REG_MODE_OK_FOR_BASE_P (XEXP (x, 0), mode) && GET_CODE (XEXP (x, 1)) == CONST_INT && (INTVAL (XEXP (x, 1)) & 3) != 0 + && !ALTIVEC_VECTOR_MODE (mode) && GET_MODE_SIZE (mode) >= UNITS_PER_WORD && TARGET_POWERPC64) { diff --git a/gcc/testsuite/gcc.dg/altivec-20.c b/gcc/testsuite/gcc.dg/altivec-20.c new file mode 100644 index 00000000000..f733d18214c --- /dev/null +++ b/gcc/testsuite/gcc.dg/altivec-20.c @@ -0,0 +1,23 @@ +/* { dg-do compile { target powerpc*-*-* } } */ +/* { dg-options "-maltivec -mcpu=G5 -O2" } */ + +#include + +void foo( float scalar) +{ + unsigned long width; + unsigned long x; + vector float vColor; + vector unsigned int selectMask; + vColor = vec_perm( vec_ld( 0, &scalar), vec_ld( 3, &scalar), vec_lvsl( 0, &scalar) ); + + float *destRow; + vector float store, load0; + + for( ; x < width; x++) + { + load0 = vec_sel( vColor, load0, selectMask ); + vec_st( store, 0, destRow ); + store = load0; + } +} -- 2.30.2