Commit 0241901b by John David Anglin

re PR target/90530 (Invalid SUBREG insn generated by reload)

	PR target/90530
	* config/pa/pa.c (pa_can_change_mode_class): Accept mode changes from
	DImode to SImode in floating-point registers on 64-bit target.
	* config/pa/pa.md (umulsidi3): Change nonimmediate_operand to
	register_operand in xmpyu patterns.

From-SVN: r271611
parent 6c7ae8c5
2019-05-24 John David Anglin <danglin@gcc.gnu.org>
PR target/90530
* config/pa/pa.c (pa_can_change_mode_class): Accept mode changes from
DImode to SImode in floating-point registers on 64-bit target.
* config/pa/pa.md (umulsidi3): Change nonimmediate_operand to
register_operand in xmpyu patterns.
2019-05-24 Jakub Jelinek <jakub@redhat.com> 2019-05-24 Jakub Jelinek <jakub@redhat.com>
* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE__CONDTEMP_. * tree-core.h (enum omp_clause_code): Add OMP_CLAUSE__CONDTEMP_.
......
...@@ -10011,10 +10011,11 @@ pa_can_change_mode_class (machine_mode from, machine_mode to, ...@@ -10011,10 +10011,11 @@ pa_can_change_mode_class (machine_mode from, machine_mode to,
/* There is no way to load QImode or HImode values directly from memory /* There is no way to load QImode or HImode values directly from memory
to a FP register. SImode loads to the FP registers are not zero to a FP register. SImode loads to the FP registers are not zero
extended. On the 64-bit target, this conflicts with the definition extended. On the 64-bit target, this conflicts with the definition
of LOAD_EXTEND_OP. Thus, we can't allow changing between modes with of LOAD_EXTEND_OP. Thus, we reject all mode changes in the FP registers
different sizes in the floating-point registers. */ except for DImode to SImode on the 64-bit target. It is handled by
register renaming in pa_print_operand. */
if (MAYBE_FP_REG_CLASS_P (rclass)) if (MAYBE_FP_REG_CLASS_P (rclass))
return false; return TARGET_64BIT && from == DImode && to == SImode;
/* TARGET_HARD_REGNO_MODE_OK places modes with sizes larger than a word /* TARGET_HARD_REGNO_MODE_OK places modes with sizes larger than a word
in specific sets of registers. Thus, we cannot allow changing in specific sets of registers. Thus, we cannot allow changing
......
...@@ -5319,8 +5319,8 @@ ...@@ -5319,8 +5319,8 @@
(define_insn "umulsidi3" (define_insn "umulsidi3"
[(set (match_operand:DI 0 "register_operand" "=f") [(set (match_operand:DI 0 "register_operand" "=f")
(mult:DI (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "f")) (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "f"))
(zero_extend:DI (match_operand:SI 2 "nonimmediate_operand" "f"))))] (zero_extend:DI (match_operand:SI 2 "register_operand" "f"))))]
"TARGET_PA_11 && ! TARGET_DISABLE_FPREGS && ! TARGET_SOFT_FLOAT" "TARGET_PA_11 && ! TARGET_DISABLE_FPREGS && ! TARGET_SOFT_FLOAT"
"xmpyu %1,%2,%0" "xmpyu %1,%2,%0"
[(set_attr "type" "fpmuldbl") [(set_attr "type" "fpmuldbl")
...@@ -5328,7 +5328,7 @@ ...@@ -5328,7 +5328,7 @@
(define_insn "" (define_insn ""
[(set (match_operand:DI 0 "register_operand" "=f") [(set (match_operand:DI 0 "register_operand" "=f")
(mult:DI (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "f")) (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "f"))
(match_operand:DI 2 "uint32_operand" "f")))] (match_operand:DI 2 "uint32_operand" "f")))]
"TARGET_PA_11 && ! TARGET_DISABLE_FPREGS && ! TARGET_SOFT_FLOAT && !TARGET_64BIT" "TARGET_PA_11 && ! TARGET_DISABLE_FPREGS && ! TARGET_SOFT_FLOAT && !TARGET_64BIT"
"xmpyu %1,%R2,%0" "xmpyu %1,%R2,%0"
...@@ -5337,7 +5337,7 @@ ...@@ -5337,7 +5337,7 @@
(define_insn "" (define_insn ""
[(set (match_operand:DI 0 "register_operand" "=f") [(set (match_operand:DI 0 "register_operand" "=f")
(mult:DI (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "f")) (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "f"))
(match_operand:DI 2 "uint32_operand" "f")))] (match_operand:DI 2 "uint32_operand" "f")))]
"TARGET_PA_11 && ! TARGET_DISABLE_FPREGS && ! TARGET_SOFT_FLOAT && TARGET_64BIT" "TARGET_PA_11 && ! TARGET_DISABLE_FPREGS && ! TARGET_SOFT_FLOAT && TARGET_64BIT"
"xmpyu %1,%2R,%0" "xmpyu %1,%2R,%0"
......
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