Commit 1f36fbf4 by Jeff Law Committed by Jeff Law

re PR target/59946 (-mpcrel -O2 produces illegal asm code)

2015-01-20  Jeff Law  <law@redhat.com>

	PR target/59946
	* config/m68k/m68k.md (Comparison expanders and patterns): Do not
	allow pc-relative addresses in operand predicates or constraints.

	PR target/59946
	* gcc.target/m68k/pr59946.c: New test.

From-SVN: r219927
parent 18092bec
2015-01-20 Jeff Law <law@redhat.com>
PR target/59946
* config/m68k/m68k.md (Comparison expanders and patterns): Do not
allow pc-relative addresses in operand predicates or constraints.
2015-01-21 Bin Cheng <bin.cheng@arm.com> 2015-01-21 Bin Cheng <bin.cheng@arm.com>
* config/arm/arm.c (arm_cortex_a53_tune, arm_cortex_a57_tune): Prefer * config/arm/arm.c (arm_cortex_a53_tune, arm_cortex_a57_tune): Prefer
......
...@@ -489,10 +489,19 @@ ...@@ -489,10 +489,19 @@
;; A composite of the cmp, cmpa, cmpi & cmpm m68000 op codes. ;; A composite of the cmp, cmpa, cmpi & cmpm m68000 op codes.
;;
;; In theory we ought to be able to use some 'S' constraints and
;; operand predicates that allow PC-rel addressing modes in the
;; comparison patterns and expanders below. But we would have to be
;; cognizant of the fact that PC-rel addresses are not allowed for
;; both operands and determining whether or not we emit the operands in
;; order or reversed is not trivial to do just based on the constraints
;; and operand predicates. So to be safe, just don't allow the PC-rel
;; versions in the various comparison expanders, patterns, for comparisons.
(define_insn "" (define_insn ""
[(set (cc0) [(set (cc0)
(compare (match_operand:SI 0 "nonimmediate_operand" "rKT,rKs,mSr,mSa,>") (compare (match_operand:SI 0 "nonimmediate_operand" "rKT,rKs,mr,ma,>")
(match_operand:SI 1 "general_src_operand" "mSr,mSa,KTr,Ksr,>")))] (match_operand:SI 1 "general_operand" "mr,ma,KTr,Ksr,>")))]
"!TARGET_COLDFIRE" "!TARGET_COLDFIRE"
{ {
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
...@@ -529,7 +538,7 @@ ...@@ -529,7 +538,7 @@
(define_expand "cbranchhi4" (define_expand "cbranchhi4"
[(set (cc0) [(set (cc0)
(compare (match_operand:HI 1 "nonimmediate_src_operand" "") (compare (match_operand:HI 1 "nonimmediate_operand" "")
(match_operand:HI 2 "m68k_subword_comparison_operand" ""))) (match_operand:HI 2 "m68k_subword_comparison_operand" "")))
(set (pc) (set (pc)
(if_then_else (match_operator 0 "ordered_comparison_operator" (if_then_else (match_operator 0 "ordered_comparison_operator"
...@@ -551,8 +560,8 @@ ...@@ -551,8 +560,8 @@
(define_insn "" (define_insn ""
[(set (cc0) [(set (cc0)
(compare (match_operand:HI 0 "nonimmediate_src_operand" "rnmS,d,n,mS,>") (compare (match_operand:HI 0 "nonimmediate_operand" "rnm,d,n,m,>")
(match_operand:HI 1 "general_src_operand" "d,rnmS,mS,n,>")))] (match_operand:HI 1 "general_operand" "d,rnm,m,n,>")))]
"!TARGET_COLDFIRE" "!TARGET_COLDFIRE"
{ {
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
...@@ -568,7 +577,7 @@ ...@@ -568,7 +577,7 @@
(define_expand "cbranchqi4" (define_expand "cbranchqi4"
[(set (cc0) [(set (cc0)
(compare (match_operand:QI 1 "nonimmediate_src_operand" "") (compare (match_operand:QI 1 "nonimmediate_operand" "")
(match_operand:QI 2 "m68k_subword_comparison_operand" ""))) (match_operand:QI 2 "m68k_subword_comparison_operand" "")))
(set (pc) (set (pc)
(if_then_else (match_operator 0 "ordered_comparison_operator" (if_then_else (match_operator 0 "ordered_comparison_operator"
...@@ -580,7 +589,7 @@ ...@@ -580,7 +589,7 @@
(define_expand "cstoreqi4" (define_expand "cstoreqi4"
[(set (cc0) [(set (cc0)
(compare (match_operand:QI 2 "nonimmediate_src_operand" "") (compare (match_operand:QI 2 "nonimmediate_operand" "")
(match_operand:QI 3 "m68k_subword_comparison_operand" ""))) (match_operand:QI 3 "m68k_subword_comparison_operand" "")))
(set (match_operand:QI 0 "register_operand") (set (match_operand:QI 0 "register_operand")
(match_operator:QI 1 "ordered_comparison_operator" (match_operator:QI 1 "ordered_comparison_operator"
...@@ -590,8 +599,8 @@ ...@@ -590,8 +599,8 @@
(define_insn "" (define_insn ""
[(set (cc0) [(set (cc0)
(compare (match_operand:QI 0 "nonimmediate_src_operand" "dn,dmS,>") (compare (match_operand:QI 0 "nonimmediate_operand" "dn,dm,>")
(match_operand:QI 1 "general_src_operand" "dmS,nd,>")))] (match_operand:QI 1 "general_operand" "dm,nd,>")))]
"!TARGET_COLDFIRE" "!TARGET_COLDFIRE"
{ {
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
......
2015-01-20 Jeff Law <law@redhat.com>
PR target/59946
* gcc.target/m68k/pr59946.c: New test.
2015-01-20 Christophe Lyon <christophe.lyon@linaro.org> 2015-01-20 Christophe Lyon <christophe.lyon@linaro.org>
* gcc.target/aarch64/advsimd-intrinsics/vmlXl_n.inc: New file. * gcc.target/aarch64/advsimd-intrinsics/vmlXl_n.inc: New file.
......
/* { dg-do compile } */
/* { dg-options "-O2 -mpcrel -m68000" } */
int copyNextDtaToAtari(void);
char fsnextIsForUs;
int custom_fsnext( void *sp )
{
int res;
if(!fsnextIsForUs) {
return 0;
}
res = copyNextDtaToAtari();
return res;
}
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