diff mbox series

[2/4] PDP11: Use a mode with `const_double_zero' expressions

Message ID alpine.LFD.2.21.2101080106410.1637534@eddie.linux-mips.org
State Accepted
Headers show
Series Fixes for `const_double_zero' use + VAX iterator simplification | expand

Commit Message

Maciej W. Rozycki Jan. 8, 2021, 1:50 a.m. UTC
For predictable semantics propagate the mode from operands referred by 
FP substitutions to the `const_double_zero' expressions used with the 
associated condition code calculation, resulting in the following update 
to insn-emit.c code produced for the `pdp11-aout' target (with machine 
description line numbering change noise removed):

@@ -1514,7 +1514,7 @@
 	gen_rtx_COMPARE (CCmode,
 	gen_rtx_ABS (DFmode,
 	operand1),
-	CONST_DOUBLE_ATOF ("0", VOIDmode))),
+	CONST_DOUBLE_ATOF ("0", DFmode))),
 		gen_rtx_SET (operand0,
 	gen_rtx_ABS (DFmode,
 	copy_rtx (operand1)))));
@@ -1555,7 +1555,7 @@
 	gen_rtx_COMPARE (CCmode,
 	gen_rtx_NEG (DFmode,
 	operand1),
-	CONST_DOUBLE_ATOF ("0", VOIDmode))),
+	CONST_DOUBLE_ATOF ("0", DFmode))),
 		gen_rtx_SET (operand0,
 	gen_rtx_NEG (DFmode,
 	copy_rtx (operand1)))));
@@ -1790,7 +1790,7 @@
 	gen_rtx_MULT (DFmode,
 	operand1,
 	operand2),
-	CONST_DOUBLE_ATOF ("0", VOIDmode))),
+	CONST_DOUBLE_ATOF ("0", DFmode))),
 		gen_rtx_SET (operand0,
 	gen_rtx_MULT (DFmode,
 	copy_rtx (operand1),
@@ -1942,7 +1942,7 @@
 	gen_rtx_DIV (DFmode,
 	operand1,
 	operand2),
-	CONST_DOUBLE_ATOF ("0", VOIDmode))),
+	CONST_DOUBLE_ATOF ("0", DFmode))),
 		gen_rtx_SET (operand0,
 	gen_rtx_DIV (DFmode,
 	copy_rtx (operand1),

Provide a new iterator to provide copies of FP substitutions across the 
FP modes supported as the substitutions now need to match the mode of 
the operands.

	gcc/
	* config/pdp11/pdp11.md (PDPfp): New mode iterator.
	(fcc_cc, fcc_ccnz): Use it.  Add mode to `const_double_zero' and 
	operands.
---
 gcc/config/pdp11/pdp11.md |   10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

gcc-pdp11-const-double-zero-mode.diff

Comments

Paul Koning Jan. 8, 2021, 3:04 p.m. UTC | #1
> On Jan 7, 2021, at 8:50 PM, Maciej W. Rozycki <macro@linux-mips.org> wrote:
> 
> ...
> 
> Provide a new iterator to provide copies of FP substitutions across the 
> FP modes supported as the substitutions now need to match the mode of 
> the operands.
> 
> 	gcc/
> 	* config/pdp11/pdp11.md (PDPfp): New mode iterator.
> 	(fcc_cc, fcc_ccnz): Use it.  Add mode to `const_double_zero' and 
> 	operands.
> ---
> gcc/config/pdp11/pdp11.md |   10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
> 
> gcc-pdp11-const-double-zero-mode.diff
> Index: gcc/gcc/config/pdp11/pdp11.md
> ===================================================================
> --- gcc.orig/gcc/config/pdp11/pdp11.md
> +++ gcc/gcc/config/pdp11/pdp11.md
> @@ -82,6 +82,8 @@
> 
> (define_code_iterator SHF [ashift ashiftrt lshiftrt])
> 
> +(define_mode_iterator PDPfp [SF DF])
> +
> ;; Substitution to turn a CC clobber into a CC setter.  We have four of
> ;; these: for CCmode vs. CCNZmode, and for CC_REGNUM vs. FCC_REGNUM.
> (define_subst "cc_cc"
> @@ -101,19 +103,19 @@
>    (set (match_dup 0) (match_dup 1))])
> 
> (define_subst "fcc_cc"
> -  [(set (match_operand 0 "") (match_operand 1 ""))
> +  [(set (match_operand:PDPfp 0 "") (match_operand:PDPfp 1 ""))
>    (clobber (reg FCC_REGNUM))]
>   ""
>   [(set (reg:CC FCC_REGNUM)
> -	(compare:CC (match_dup 1) (const_double_zero)))
> +	(compare:CC (match_dup 1) (const_double_zero:PDPfp)))
>    (set (match_dup 0) (match_dup 1))])
> 
> (define_subst "fcc_ccnz"
> -  [(set (match_operand 0 "") (match_operand 1 ""))
> +  [(set (match_operand:PDPfp 0 "") (match_operand:PDPfp 1 ""))
>    (clobber (reg FCC_REGNUM))]
>   ""
>   [(set (reg:CCNZ FCC_REGNUM)
> -	(compare:CCNZ (match_dup 1) (const_double_zero)))
> +	(compare:CCNZ (match_dup 1) (const_double_zero:PDPfp)))
>    (set (match_dup 0) (match_dup 1))])
> 
> (define_subst_attr "cc_cc" "cc_cc" "_nocc" "_cc")


Ok.  Thanks Maciej.

	paul
Maciej W. Rozycki Jan. 10, 2021, 2:34 p.m. UTC | #2
On Fri, 8 Jan 2021, Paul Koning wrote:

> Ok.  Thanks Maciej.

 Thank you for your review.  I have applied this change now (and the 
remaining from the series, approved by Jeff).

  Maciej
diff mbox series

Patch

Index: gcc/gcc/config/pdp11/pdp11.md
===================================================================
--- gcc.orig/gcc/config/pdp11/pdp11.md
+++ gcc/gcc/config/pdp11/pdp11.md
@@ -82,6 +82,8 @@ 
 
 (define_code_iterator SHF [ashift ashiftrt lshiftrt])
 
+(define_mode_iterator PDPfp [SF DF])
+
 ;; Substitution to turn a CC clobber into a CC setter.  We have four of
 ;; these: for CCmode vs. CCNZmode, and for CC_REGNUM vs. FCC_REGNUM.
 (define_subst "cc_cc"
@@ -101,19 +103,19 @@ 
    (set (match_dup 0) (match_dup 1))])
 
 (define_subst "fcc_cc"
-  [(set (match_operand 0 "") (match_operand 1 ""))
+  [(set (match_operand:PDPfp 0 "") (match_operand:PDPfp 1 ""))
    (clobber (reg FCC_REGNUM))]
   ""
   [(set (reg:CC FCC_REGNUM)
-	(compare:CC (match_dup 1) (const_double_zero)))
+	(compare:CC (match_dup 1) (const_double_zero:PDPfp)))
    (set (match_dup 0) (match_dup 1))])
 
 (define_subst "fcc_ccnz"
-  [(set (match_operand 0 "") (match_operand 1 ""))
+  [(set (match_operand:PDPfp 0 "") (match_operand:PDPfp 1 ""))
    (clobber (reg FCC_REGNUM))]
   ""
   [(set (reg:CCNZ FCC_REGNUM)
-	(compare:CCNZ (match_dup 1) (const_double_zero)))
+	(compare:CCNZ (match_dup 1) (const_double_zero:PDPfp)))
    (set (match_dup 0) (match_dup 1))])
 
 (define_subst_attr "cc_cc" "cc_cc" "_nocc" "_cc")