On 1/7/21 6:50 PM, Maciej W. Rozycki wrote:
> Handle machine mode specification with `const_double_zero' and handle
> the rtx with callable code produced from named insns. Complementing
> commit 20ab43b5cad6 ("RTL: Add `const_double_zero' syntactic rtx") and
> removing a commit c60d0736dff7 ("PDP11: Use `const_double_zero' to
> express double zero constant") build regression observed with the
> `pdp11-aout' target:
>
> genemit: Internal error: abort in gen_exp, at genemit.c:202
> make[2]: *** [Makefile:2427: s-emit] Error 1
>
> where a:
>
> (const_double 0 [0] 0 [0] 0 [0] 0 [0])
>
> rtx coming from:
>
> (parallel [
> (set (reg:CC 16)
> (compare:CC (abs:DF (match_operand:DF 1 ("general_operand")
> ("0,0")))
> (const_double 0 [0] 0 [0] 0 [0] 0 [0])))
> (set (match_operand:DF 0 ("nonimmediate_operand") ("=fR,Q"))
> (abs:DF (match_dup 1)))
> ])
>
> and ultimately `(const_double_zero)' referred in a named RTL insn cannot
> be interpreted. Handle the rtx then by supplying the constant 0 double
> operand requested, resulting in the following update to insn-emit.c code
> produced for the `pdp11-aout' target, relative to before the triggering
> commit:
>
> @@ -1514,7 +1514,7 @@ gen_absdf2_cc (rtx operand0 ATTRIBUTE_UN
> gen_rtx_COMPARE (CCmode,
> gen_rtx_ABS (DFmode,
> operand1),
> - const0_rtx)),
> + CONST_DOUBLE_ATOF ("0", VOIDmode))),
> gen_rtx_SET (operand0,
> gen_rtx_ABS (DFmode,
> copy_rtx (operand1)))));
> @@ -1555,7 +1555,7 @@ gen_negdf2_cc (rtx operand0 ATTRIBUTE_UN
> gen_rtx_COMPARE (CCmode,
> gen_rtx_NEG (DFmode,
> operand1),
> - const0_rtx)),
> + CONST_DOUBLE_ATOF ("0", VOIDmode))),
> gen_rtx_SET (operand0,
> gen_rtx_NEG (DFmode,
> copy_rtx (operand1)))));
> @@ -1790,7 +1790,7 @@ gen_muldf3_cc (rtx operand0 ATTRIBUTE_UN
> gen_rtx_MULT (DFmode,
> operand1,
> operand2),
> - const0_rtx)),
> + CONST_DOUBLE_ATOF ("0", VOIDmode))),
> gen_rtx_SET (operand0,
> gen_rtx_MULT (DFmode,
> copy_rtx (operand1),
> @@ -1942,7 +1942,7 @@ gen_divdf3_cc (rtx operand0 ATTRIBUTE_UN
> gen_rtx_DIV (DFmode,
> operand1,
> operand2),
> - const0_rtx)),
> + CONST_DOUBLE_ATOF ("0", VOIDmode))),
> gen_rtx_SET (operand0,
> gen_rtx_DIV (DFmode,
> copy_rtx (operand1),
>
> This does not (yet) remove VOIDmode CONST_DOUBLE use, as it is up to
> individual machine descriptions to choose.
>
> gcc/
> * genemit.c (gen_exp) <CONST_DOUBLE>: Handle `const_double_zero'
> rtx.
> * read-rtl.c (rtx_reader::read_rtx_code): Handle machine mode
> with `const_double_zero'.
> * doc/rtl.texi (Constant Expression Types): Document it.
OK
jeff