Message ID | 54C8D6ED.7050206@arm.com |
---|---|
State | New |
Headers | show |
On Wed, Jan 28, 2015 at 12:32:45PM +0000, Alan Lawrence wrote: > Ok for stage 4? This is a regression from 4.9, so once we iron out some nits, it should be. > gcc/ChangeLog: > > * config/aarch64/aarch64.md (*xor_one_cmpl<mode>3): Use FP_REGNUM_P > as split condition. And a testcase, please! > diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md > index bc49fbe68a978b3ca069c6d084f542773df84bcb..d4b3f7b03ba0ab570cec5ce862e8c5f38f417ed1 100644 > --- a/gcc/config/aarch64/aarch64.md > +++ b/gcc/config/aarch64/aarch64.md > @@ -3054,7 +3054,7 @@ > (match_operand:GPI 2 "register_operand" "r,w"))))] > "" > "eon\\t%<w>0, %<w>1, %<w>2" ;; For GPR registers (only). This should be: "@ eon\\t%<w>0, %<w>1, %<w>2 #" which would have forced a split. Your patch is useful regardless, as I guess we could have ended up needlessly splitting if we got unlucky with whatever had been left in which_alternative. Thanks, James > - "reload_completed && (which_alternative == 1)" ;; For SIMD registers. > + "reload_completed && FP_REGNUM_P (REGNO (operands[0]))" ;; For SIMD registers. > [(set (match_operand:GPI 0 "register_operand" "=w") > (xor:GPI (match_operand:GPI 1 "register_operand" "w") > (match_operand:GPI 2 "register_operand" "w")))
On Wed, Jan 28, 2015 at 02:04:04PM +0000, James Greenhalgh wrote: > On Wed, Jan 28, 2015 at 12:32:45PM +0000, Alan Lawrence wrote: > > Ok for stage 4? > > This is a regression from 4.9, so once we iron out some nits, it should > be. > > > gcc/ChangeLog: > > > > * config/aarch64/aarch64.md (*xor_one_cmpl<mode>3): Use FP_REGNUM_P > > as split condition. > > And a testcase, please! > > > diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md > > index bc49fbe68a978b3ca069c6d084f542773df84bcb..d4b3f7b03ba0ab570cec5ce862e8c5f38f417ed1 100644 > > --- a/gcc/config/aarch64/aarch64.md > > +++ b/gcc/config/aarch64/aarch64.md > > @@ -3054,7 +3054,7 @@ > > (match_operand:GPI 2 "register_operand" "r,w"))))] > > "" > > "eon\\t%<w>0, %<w>1, %<w>2" ;; For GPR registers (only). > > This should be: > "@ > eon\\t%<w>0, %<w>1, %<w>2 > #" > > which would have forced a split. > > Your patch is useful regardless, as I guess we could have ended up > needlessly splitting if we got unlucky with whatever had been left > in which_alternative. Hi Alan, Do you have any plans to respin this patch? I'd like to see it fixed for GCC 5.0 if possible. Thanks, James
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index bc49fbe68a978b3ca069c6d084f542773df84bcb..d4b3f7b03ba0ab570cec5ce862e8c5f38f417ed1 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -3054,7 +3054,7 @@ (match_operand:GPI 2 "register_operand" "r,w"))))] "" "eon\\t%<w>0, %<w>1, %<w>2" ;; For GPR registers (only). - "reload_completed && (which_alternative == 1)" ;; For SIMD registers. + "reload_completed && FP_REGNUM_P (REGNO (operands[0]))" ;; For SIMD registers. [(set (match_operand:GPI 0 "register_operand" "=w") (xor:GPI (match_operand:GPI 1 "register_operand" "w") (match_operand:GPI 2 "register_operand" "w")))