This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix PR optimization/5854 (m68hc11 bootstrap problem)


Hi!

The following patch seems to fix PR optimization/5854.
muldi3 compilation there dies because initialize_uninitialized_subregs
inserts a pseudo clear insn too early and the port could not handle it.

But looking at the machine description, it looks like the port handles
clearing if soft registers/non-push memory very well without
need for a scratch register.
The following patch changes that, so that mov{di,df,si,sf} does not require
scratch in that case, kills constraints in define_split patterns and
uses GEN_INT everywhere instead of gen_rtx (CONST_INT, ...), so that
e.g. == const0_rtx tests work as expected.
Furthermore, it fixes a crash in reload_cse_regs which needs BLOCK_FOR_INSN
to be valid, yet this info is freed before machine reorg pass.
Maybe just the find_basic_blocks call should be moved above reload_cse_regs
instead what I do below (call compute_bb_for_insn (get_max_uid ())), but I'm
not sure if reload_cse_regs maintains that info up-to-date.

Ok to commit?

2002-03-22  Jakub Jelinek  <jakub@redhat.com>

	PR optimization/5854
	* config/m68hc11/m68hc11.h (CONST_OK_FOR_LETTER_VALUE_P): Use K for 0.
	Shut up warnings.
	(CONST_DOUBLE_OK_FOR_LETTER_P): Use G for 0.0.
	(EXTRA_CONSTRAINT): Use S for non-push memory operand.
	* config/m68hc11/m68hc11.c (m68hc11_split_move): Handle setting from
	const0 if scratch register was not allocated.
	(m68hc11_reload_operands, m68hc11_gen_lowpart, m68hc11_gen_highpart,
	m68hc11_z_replacement): Replace gen_rtx (CONST_INT, VOIDmode, ...)
	with GEN_INT (...).
	(m68hc11_reorg): Compute BLOCK_FOR_INSN before reload_cse_regs.
	* config/m68hc11/m68hc11.md: Replace gen_rtx (CONST_INT, VOIDmode, ...)
	with GEN_INT (...) everywhere.  Remove constraints in define_split
	patterns.
	(movdi_internal, movdf_internal, movsi_internal, movsf_internal): Don't
	require scratch register for setting 0 into regs/non-pushable memory.

--- gcc/config/m68hc11/m68hc11.h.jj	Mon Mar 18 23:23:52 2002
+++ gcc/config/m68hc11/m68hc11.h	Fri Mar 22 14:13:51 2002
@@ -830,32 +830,38 @@ extern enum reg_class m68hc11_tmp_regs_c
    C is the letter, and VALUE is a constant value.
    Return 1 if VALUE is in the range specified by C.
 
+   `K' is for 0.
    `L' is for range -65536 to 65536
    `M' is for values whose 16-bit low part is 0
    'N' is for +1 or -1.
    'O' is for 16 (for rotate using swap).
    'P' is for range -8 to 2 (used by addhi_sp)
 
-   'I', 'J', 'K' are not used.  */
+   'I', 'J' are not used.  */
 
 #define CONST_OK_FOR_LETTER_P(VALUE, C) \
-  ((C) == 'L' ? (VALUE) >= -65536 && (VALUE) <= 65535 : \
+  ((C) == 'K' ? (VALUE) == 0 : \
+   (C) == 'L' ? ((VALUE) >= -65536 && (VALUE) <= 65535) : \
    (C) == 'M' ? ((VALUE) & 0x0ffffL) == 0 : \
-   (C) == 'N' ? ((VALUE) == 1 || (VALUE) == -1): \
+   (C) == 'N' ? ((VALUE) == 1 || (VALUE) == -1) : \
    (C) == 'O' ? (VALUE) == 16 : \
-   (C) == 'P' ? (VALUE) <= 2 && (VALUE) >= -8 : 0)
+   (C) == 'P' ? ((VALUE) <= 2 && (VALUE) >= -8) : 0)
 
 /* Similar, but for floating constants, and defining letters G and H.
-   No floating-point constants are valid on 68HC11.  */
-#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C)  0
+
+   `G' is for 0.0.  */
+#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
+  ((C) == 'G' ? (GET_MODE_CLASS (GET_MODE (VALUE)) == MODE_FLOAT \
+		 && VALUE == CONST0_RTX (GET_MODE (VALUE))) : 0) 
 
 /* 'U' represents certain kind of memory indexed operand for 68HC12.
    and any memory operand for 68HC11.  */
 #define EXTRA_CONSTRAINT(OP, C)                         \
 ((C) == 'U' ? m68hc11_small_indexed_indirect_p (OP, GET_MODE (OP)) \
  : (C) == 'Q' ? m68hc11_symbolic_p (OP, GET_MODE (OP)) \
- : (C) == 'R' ? m68hc11_indirect_p (OP, GET_MODE (OP)) : 0)
-
+ : (C) == 'R' ? m68hc11_indirect_p (OP, GET_MODE (OP)) \
+ : (C) == 'S' ? (memory_operand (OP, GET_MODE (OP)) \
+		 && non_push_operand (OP, GET_MODE (OP))) : 0)
 
 
 /* Stack layout; function entry, exit and calling.  */
--- gcc/config/m68hc11/m68hc11.c.jj	Mon Mar 18 23:23:52 2002
+++ gcc/config/m68hc11/m68hc11.c	Fri Mar 22 14:48:20 2002
@@ -778,7 +778,7 @@ m68hc11_reload_operands (operands)
 
 	  /* Create the lowest part offset that still remains to be added.
 	     If it's not a valid offset, do a 16-bit add.  */
-	  offset = gen_rtx (CONST_INT, VOIDmode, vl);
+	  offset = GEN_INT (vl);
 	  if (!VALID_CONSTANT_OFFSET_P (offset, mode))
 	    {
 	      emit_insn (gen_rtx (SET, VOIDmode, reg,
@@ -789,8 +789,7 @@ m68hc11_reload_operands (operands)
 	    {
 	      emit_insn (gen_rtx (SET, VOIDmode, reg,
 				  gen_rtx (PLUS, HImode, reg,
-					   gen_rtx (CONST_INT,
-						    VOIDmode, vh << 8))));
+					   GEN_INT (vh << 8))));
 	    }
 	  emit_move_insn (operands[0],
 			  gen_rtx (MEM, GET_MODE (operands[1]),
@@ -1874,20 +1873,18 @@ m68hc11_gen_lowpart (mode, x)
 	      return second;
 	    }
 	  if (mode == SImode)
-	    return gen_rtx (CONST_INT, VOIDmode, l[0]);
+	    return GEN_INT (l[0]);
 
-	  return gen_rtx (CONST_INT, VOIDmode,
-                          trunc_int_for_mode (l[0], HImode));
+	  return GEN_INT (trunc_int_for_mode (l[0], HImode));
 	}
       else
 	{
 	  l[0] = CONST_DOUBLE_LOW (x);
 	}
       if (mode == SImode)
-	return gen_rtx (CONST_INT, VOIDmode, l[0]);
+	return GEN_INT (l[0]);
       else if (mode == HImode && GET_MODE (x) == SFmode)
-	return gen_rtx (CONST_INT, VOIDmode,
-                        trunc_int_for_mode (l[0], HImode));
+	return GEN_INT (trunc_int_for_mode (l[0], HImode));
       else
 	abort ();
     }
@@ -1953,10 +1950,9 @@ m68hc11_gen_highpart (mode, x)
 	      return first;
 	    }
 	  if (mode == SImode)
-	    return gen_rtx (CONST_INT, VOIDmode, l[1]);
+	    return GEN_INT (l[1]);
 
-	  return gen_rtx (CONST_INT, VOIDmode,
-                          trunc_int_for_mode ((l[1] >> 16), HImode));
+	  return GEN_INT (trunc_int_for_mode ((l[1] >> 16), HImode));
 	}
       else
 	{
@@ -1964,10 +1960,9 @@ m68hc11_gen_highpart (mode, x)
 	}
 
       if (mode == SImode)
-	return gen_rtx (CONST_INT, VOIDmode, l[1]);
+	return GEN_INT (l[1]);
       else if (mode == HImode && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
-	return gen_rtx (CONST_INT, VOIDmode,
-                        trunc_int_for_mode ((l[0] >> 16), HImode));
+	return GEN_INT (trunc_int_for_mode ((l[0] >> 16), HImode));
       else
 	abort ();
     }
@@ -1977,13 +1972,11 @@ m68hc11_gen_highpart (mode, x)
 
       if (mode == QImode)
 	{
-	  return gen_rtx (CONST_INT, VOIDmode,
-                          trunc_int_for_mode (val >> 8, QImode));
+	  return GEN_INT (trunc_int_for_mode (val >> 8, QImode));
 	}
       else if (mode == HImode)
 	{
-	  return gen_rtx (CONST_INT, VOIDmode,
-                          trunc_int_for_mode (val >> 16, HImode));
+	  return GEN_INT (trunc_int_for_mode (val >> 16, HImode));
 	}
     }
   if (mode == QImode && D_REG_P (x))
@@ -2752,6 +2745,10 @@ m68hc11_split_move (to, from, scratch)
       m68hc11_split_move (high_to, high_from, scratch);
     }
   else if (H_REG_P (to) || H_REG_P (from)
+	   || (low_from == const0_rtx
+	       && high_from == const0_rtx
+	       && ! push_operand (to, GET_MODE (to))
+	       && ! H_REG_P (scratch))
 	   || (TARGET_M6812
 	       && (!m68hc11_register_indirect_p (from, GET_MODE (from))
 		   || m68hc11_small_indexed_indirect_p (from,
@@ -4758,12 +4755,7 @@ m68hc11_z_replacement (insn)
 	      src = SET_SRC (body);
 	      dst = SET_DEST (body);
 	      if (SP_REG_P (src) && Z_REG_P (dst))
-		{
-		  emit_insn_after (gen_addhi3 (dst,
-					       dst,
-					       gen_rtx (CONST_INT,
-							VOIDmode, 2)), insn);
-		}
+		emit_insn_after (gen_addhi3 (dst, dst, const2_rtx), insn);
 	    }
 
 	  /* Replace any (REG:HI Z) occurrence by either X or Y.  */
@@ -4944,7 +4936,10 @@ m68hc11_reorg (first)
   /* After some splitting, there are some oportunities for CSE pass.
      This happens quite often when 32-bit or above patterns are split.  */
   if (optimize > 0 && split_done)
-    reload_cse_regs (first);
+    {
+      compute_bb_for_insn (get_max_uid ());
+      reload_cse_regs (first);
+    }
 
   /* Re-create the REG_DEAD notes.  These notes are used in the machine
      description to use the best assembly directives.  */
--- gcc/config/m68hc11/m68hc11.md.jj	Mon Mar 18 23:23:52 2002
+++ gcc/config/m68hc11/m68hc11.md	Fri Mar 22 14:43:05 2002
@@ -552,9 +552,9 @@
   
 (define_split /* cmpqi_z_used */
   [(set (cc0)
-	(compare (match_operand:QI 0 "tst_operand" "dxy,m")
-		 (match_operand:QI 1 "cmp_operand" "m,dxy")))
-   (use (match_operand:HI 2 "hard_reg_operand" "dxy,dxy"))
+	(compare (match_operand:QI 0 "tst_operand" "")
+		 (match_operand:QI 1 "cmp_operand" "")))
+   (use (match_operand:HI 2 "hard_reg_operand" ""))
    (use (reg:HI 11))]
   "z_replacement_completed == 2"
   [(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 2))
@@ -579,8 +579,8 @@
   "#")
 
 (define_split
-  [(set (strict_low_part (match_operand:SI 0 "non_push_operand" "+um,D,D"))
-	(match_operand:SI 1 "general_operand" "D,Dim,u"))]
+  [(set (strict_low_part (match_operand:SI 0 "non_push_operand" ""))
+	(match_operand:SI 1 "general_operand" ""))]
   "z_replacement_completed == 2"
   [(set (match_dup 0) (match_dup 1))]
   "")
@@ -592,8 +592,8 @@
   "#")
 
 (define_split
-  [(set (strict_low_part (match_operand:HI 0 "non_push_operand" "+um,dA,dA"))
-	(match_operand:HI 1 "general_operand" "dA,dAim,u"))]
+  [(set (strict_low_part (match_operand:HI 0 "non_push_operand" ""))
+	(match_operand:HI 1 "general_operand" ""))]
   "z_replacement_completed == 2"
   [(set (match_dup 0) (match_dup 1))]
   "")
@@ -605,8 +605,8 @@
   "#")
 
 (define_split
-  [(set (strict_low_part (match_operand:QI 0 "non_push_operand" "+mu,dA"))
-	(match_operand:QI 1 "general_operand" "d,imudA"))]
+  [(set (strict_low_part (match_operand:QI 0 "non_push_operand" ""))
+	(match_operand:QI 1 "general_operand" ""))]
   "z_replacement_completed == 2"
   [(set (match_dup 0) (match_dup 1))]
   "")
@@ -651,16 +651,16 @@
 ")
 
 (define_insn "movdi_internal"
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=U,!u,U,m,m,!u")
-	(match_operand:DI 1 "general_operand" "iU,iU,!u,mi,!u,!mu"))
-   (clobber (match_scratch:HI 2 "=&d,&d,&d,&d,&d,&d"))]
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=uS,U,!u,U,m,m,!u")
+	(match_operand:DI 1 "general_operand" "K,iU,iU,!u,mi,!u,!mu"))
+   (clobber (match_scratch:HI 2 "=X,&d,&d,&d,&d,&d,&d"))]
   ""
   "#")
 
 (define_split
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=uUm")
-	(match_operand:DI 1 "general_operand" "iuUm"))
-   (clobber (match_scratch:HI 2 "=&d"))]
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
+	(match_operand:DI 1 "general_operand" ""))
+   (clobber (match_scratch:HI 2 ""))]
   "reload_completed"
   [(const_int 0)]
   "m68hc11_split_move (operands[0], operands[1], operands[2]);
@@ -687,16 +687,16 @@
 ")
 
 (define_insn "movdf_internal"
-  [(set (match_operand:DF 0 "nonimmediate_operand" "=U,!u,U,m,m,!u")
-	(match_operand:DF 1 "general_operand" "iU,iU,!u,mi,!u,!mu"))
-   (clobber (match_scratch:HI 2 "=&d,&d,&d,&d,&d,&d"))]
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=uS,U,!u,U,m,m,!u")
+	(match_operand:DF 1 "general_operand" "G,iU,iU,!u,mi,!u,!mu"))
+   (clobber (match_scratch:HI 2 "=X,&d,&d,&d,&d,&d,&d"))]
   ""
   "#")
 
 (define_split
-  [(set (match_operand:DF 0 "nonimmediate_operand" "=uUm")
-	(match_operand:DF 1 "general_operand" "iuUm"))
-   (clobber (match_scratch:HI 2 "=&d"))]
+  [(set (match_operand:DF 0 "nonimmediate_operand" "")
+	(match_operand:DF 1 "general_operand" ""))
+   (clobber (match_scratch:HI 2 ""))]
   "reload_completed"
   [(const_int 0)]
   "m68hc11_split_move (operands[0], operands[1], operands[2]);
@@ -732,16 +732,16 @@
 ")
 
 (define_insn "movsi_internal"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=mu,?D,m,?D,?u,?u,!u,D")
-	(match_operand:SI 1 "general_operand"      "imu,im,?D,!u,?D,mi,!u,!D"))
-   (clobber (match_scratch:HI 2                    "=&d,X,X,X,X,&d,&d,X"))]
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=uS,mu,?D,m,?D,?u,?u,!u,D")
+	(match_operand:SI 1 "general_operand"      "K,imu,im,?D,!u,?D,mi,!u,!D"))
+   (clobber (match_scratch:HI 2                    "=X,&d,X,X,X,X,&d,&d,X"))]
   ""
   "#")
 
 (define_split
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=m,D,m,D,!u,!u,!u,D")
-	(match_operand:SI 1 "general_operand" "im,im,D,!u,D,mi,!u,!D"))
-   (clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))]
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
+	(match_operand:SI 1 "general_operand" ""))
+   (clobber (match_scratch:HI 2 ""))]
   "reload_completed"
   [(const_int 0)]
   "m68hc11_split_move (operands[0], operands[1], operands[2]);
@@ -768,16 +768,16 @@
 ")
 
 (define_insn "movsf_internal"
-  [(set (match_operand:SF 0 "nonimmediate_operand" "=m,D,m,D,!u,!u,!u,D")
-	(match_operand:SF 1 "general_operand" "im,im,D,!u,D,mi,!u,!D"))
-   (clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))]
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=S!u,m,D,m,D,!u,!u,!u,D")
+	(match_operand:SF 1 "general_operand" "G,im,im,D,!u,D,mi,!u,!D"))
+   (clobber (match_scratch:HI 2 "=X,&d,X,X,X,X,&d,&d,X"))]
   ""
   "#")
 
 (define_split
-  [(set (match_operand:SF 0 "nonimmediate_operand" "=m,D,m,D,!u,!u,!u,D")
-	(match_operand:SF 1 "general_operand" "im,im,D,!u,D,mi,!u,!D"))
-   (clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))]
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
+	(match_operand:SF 1 "general_operand" ""))
+   (clobber (match_scratch:HI 2 ""))]
   "reload_completed"
   [(const_int 0)]
   "m68hc11_split_move (operands[0], operands[1], operands[2]);
@@ -933,7 +933,7 @@
 ;; appear in the source operand.
 ;;
 (define_split
-  [(set (match_operand:QI 0 "hard_addr_reg_operand" "=A")
+  [(set (match_operand:QI 0 "hard_addr_reg_operand" "")
         (match_operand:QI 1 "general_operand" ""))]
   "z_replacement_completed == 2 && GET_MODE (operands[0]) == QImode
    && !reg_mentioned_p (operands[0], operands[1])
@@ -950,7 +950,7 @@
 ;;
 (define_split
   [(set (match_operand:QI 0 "nonimmediate_operand" "")
-        (match_operand:QI 1 "hard_addr_reg_operand" "=A"))]
+        (match_operand:QI 1 "hard_addr_reg_operand" ""))]
   "z_replacement_completed == 2 && GET_MODE (operands[1]) == QImode
    && !reg_mentioned_p (operands[1], operands[0])
    && !D_REG_P (operands[0])"
@@ -1097,8 +1097,8 @@
   "#")
 
 (define_split
-  [(set (match_operand:DI 0 "push_operand" "=<")
-	(zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "dmu*B")))
+  [(set (match_operand:DI 0 "push_operand" "")
+	(zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "")))
    (clobber (match_scratch:HI 2 "=&dB"))]
   "z_replacement_completed == 2"
   [(const_int 0)]
@@ -1155,8 +1155,8 @@
 }")
 
 (define_split
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=mu")
-	(zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "dmu*B")))
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
+	(zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "")))
    (clobber (match_scratch:HI 2 "=&dB"))]
   "z_replacement_completed == 2"
   [(const_int 0)]
@@ -1194,10 +1194,10 @@
   "#")
 
 (define_split
-  [(set (match_operand:DI 0 "non_push_operand" "=m,m,m,!u,!u")
+  [(set (match_operand:DI 0 "non_push_operand" "")
 	(zero_extend:DI 
-	    (match_operand:HI 1 "nonimmediate_operand" "m,dA,!u,dmA,!u")))
-   (clobber (match_scratch:HI 2 "=&d,&dB,&dB,&dB,&dB"))]
+	    (match_operand:HI 1 "nonimmediate_operand" "")))
+   (clobber (match_scratch:HI 2 ""))]
   "z_replacement_completed == 2"
   [(const_int 0)]
   "
@@ -1233,10 +1233,10 @@
   "#")
 
 (define_split 
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=m,m,!u,!u")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
 	(zero_extend:DI 
-	    (match_operand:SI 1 "nonimmediate_operand" "m,Du,m,Du")))
-   (clobber (match_scratch:HI 2 "=d,d,&dB,d"))]
+	    (match_operand:SI 1 "nonimmediate_operand" "")))
+   (clobber (match_scratch:HI 2 ""))]
   "z_replacement_completed == 2"
   [(const_int 0)]
   "
@@ -1267,10 +1267,10 @@
   "#")
 
 (define_split
-  [(set (match_operand:SI 0 "non_push_operand" "=D,mu,m,m,!u,!u")
+  [(set (match_operand:SI 0 "non_push_operand" "")
 	(zero_extend:SI 
-	    (match_operand:HI 1 "nonimmediate_operand" "dAmu,dA,m,!u,m,!u")))
-   (clobber (match_scratch:HI 2 "=X,X,&d,&dB,&dB,&dB"))]
+	    (match_operand:HI 1 "nonimmediate_operand" "")))
+   (clobber (match_scratch:HI 2 ""))]
   "reload_completed"
   [(const_int 0)]
   "
@@ -1295,8 +1295,8 @@
   "#")
 
 (define_split 
-  [(set (match_operand:SI 0 "non_push_operand" "=mu")
-	(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "dxy")))]
+  [(set (match_operand:SI 0 "non_push_operand" "")
+	(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
   "reload_completed && !X_REG_P (operands[0])"
   [(set (match_dup 2) (zero_extend:HI (match_dup 1)))
    (set (match_dup 3) (const_int 0))]
@@ -1305,8 +1305,8 @@
    operands[3] = m68hc11_gen_highpart (HImode, operands[0]);")
 
 (define_split 
-  [(set (match_operand:SI 0 "hard_reg_operand" "=D")
-	(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "dxymu")))]
+  [(set (match_operand:SI 0 "hard_reg_operand" "")
+	(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
   "z_replacement_completed == 2 && X_REG_P (operands[0])"
   [(set (match_dup 2) (match_dup 3))
    (set (match_dup 4) (const_int 0))
@@ -1584,8 +1584,8 @@
 ;; a temporary scratch memory location.
 ;;
 (define_split
-  [(set (match_operand:SI 0 "register_operand" "=D")
-	(sign_extend:SI (match_operand:HI 1 "register_operand" "A")))]
+  [(set (match_operand:SI 0 "register_operand" "")
+	(sign_extend:SI (match_operand:HI 1 "register_operand" "")))]
   "reload_completed && (Y_REG_P (operands[1]) || Z_REG_P (operands[1]))"
   [(set (reg:HI D_REGNUM) (match_dup 1))
    (set (match_dup 0) (sign_extend:SI (reg:HI D_REGNUM)))]
@@ -1816,10 +1816,10 @@
 
 
 (define_split /* "*addsi3_zero_extendqi" */
-  [(set (match_operand:SI 0 "register_operand" "=D,D")
+  [(set (match_operand:SI 0 "register_operand" "")
 	(plus:SI (zero_extend:SI 
-		   (match_operand:QI 1 "general_operand" "dAmi,!dAmiu"))
-		 (match_operand:SI 2 "memory_operand" "m,m")))
+		   (match_operand:QI 1 "general_operand" ""))
+		 (match_operand:SI 2 "memory_operand" "")))
    (clobber (match_scratch:HI 3 "=X,X"))]
   "reload_completed"
   [(set (reg:HI D_REGNUM) (zero_extend:HI (match_dup 1)))
@@ -1854,7 +1854,7 @@
 	{
 	  ops[0] = operands[1];
 	}
-      ops[1] = gen_rtx (CONST_INT, VOIDmode, 0);
+      ops[1] = const0_rtx;
     }
   else
     {
@@ -1955,7 +1955,7 @@
     }
   else
     {
-      ops[1] = gen_rtx (CONST_INT, VOIDmode, - val);
+      ops[1] = GEN_INT (- val);
       add_insn = \"subd\\t%1\";
       inc_insn = \"dex\";
       incb_mem  = \"dec\\t%b1\";
@@ -2002,10 +2002,10 @@
 }")
 
 (define_split
-  [(set (match_operand:SI 0 "register_operand" "=D,u")
-	(plus:SI (match_operand:SI 1 "register_operand" "%0,0")
+  [(set (match_operand:SI 0 "register_operand" "")
+	(plus:SI (match_operand:SI 1 "register_operand" "")
 		 (match_operand:SI 2 "const_int_operand" "")))
-   (clobber (match_scratch:HI 3 "=X,d"))]
+   (clobber (match_scratch:HI 3 ""))]
   "reload_completed && z_replacement_completed == 2
    && ((INTVAL (operands[2]) & 0x0FFFF) == 0)"
   [(set (match_dup 5) (match_dup 6))
@@ -2024,9 +2024,9 @@
    ")
 
 (define_split
-  [(set (match_operand:SI 0 "register_operand" "=D")
-	(plus:SI (match_operand:SI 1 "register_operand" "%0")
-		 (match_operand:SI 2 "general_operand" "mui")))
+  [(set (match_operand:SI 0 "register_operand" "")
+	(plus:SI (match_operand:SI 1 "register_operand" "")
+		 (match_operand:SI 2 "general_operand" "")))
    (clobber (match_scratch:HI 3 "=X"))]
   "reload_completed && z_replacement_completed == 2
    && (GET_CODE (operands[2]) != CONST_INT || 
@@ -2392,7 +2392,7 @@
 ;; ??? It's not clear whether this is really necessary.
 ;;
 (define_split
-  [(set (match_operand:QI 0 "hard_reg_operand" "=dA")
+  [(set (match_operand:QI 0 "hard_reg_operand" "")
 	(plus:QI (match_dup 0)
 		 (match_dup 0)))]
   "0 && reload_completed"
@@ -2550,9 +2550,9 @@
 ;; reg:QI 7 -> ccr      reg:QI 5 -> A
 ;;
 (define_split /* "*subsi3" */
-  [(set (match_operand:SI 0 "register_operand" "=D")
-	(minus:SI (match_operand:SI 1 "register_operand" "0")
-		  (match_operand:SI 2 "general_operand" "mui")))
+  [(set (match_operand:SI 0 "register_operand" "")
+	(minus:SI (match_operand:SI 1 "register_operand" "")
+		  (match_operand:SI 2 "general_operand" "")))
    (clobber (match_scratch:HI 3 "=X"))]
   "reload_completed && z_replacement_completed == 2
    && X_REG_P (operands[1])"
@@ -2569,9 +2569,9 @@
    operands[4] = m68hc11_gen_lowpart (QImode, operands[4]);")
 
 (define_split /* "*subsi3" */
-  [(set (match_operand:SI 0 "register_operand" "=D")
-	(minus:SI (match_operand:SI 1 "general_operand" "mui")
-		  (match_operand:SI 2 "register_operand" "D")))
+  [(set (match_operand:SI 0 "register_operand" "")
+	(minus:SI (match_operand:SI 1 "general_operand" "")
+		  (match_operand:SI 2 "register_operand" "")))
    (clobber (match_scratch:HI 3 "=X"))]
   "reload_completed && z_replacement_completed == 2
    && X_REG_P (operands[2])"
@@ -2589,9 +2589,9 @@
    operands[4] = m68hc11_gen_lowpart (QImode, operands[4]);")
 
 (define_split /* "*subsi3" */
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=u")
-	(minus:SI (match_operand:SI 1 "general_operand" "0")
-		  (match_operand:SI 2 "general_operand" "mui")))
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
+	(minus:SI (match_operand:SI 1 "general_operand" "")
+		  (match_operand:SI 2 "general_operand" "")))
    (clobber (match_scratch:HI 3 "=d"))]
   "reload_completed && z_replacement_completed == 2
    && !X_REG_P (operands[0])"
@@ -3045,7 +3045,7 @@
   CC_STATUS_INIT;
 
   /* The bclr instruction uses an inverted mask.  */
-  operands[1] = gen_rtx (CONST_INT, VOIDmode, (~val) & 0x0FFFF);
+  operands[1] = GEN_INT ((~val) & 0x0FFFF);
 
   /* When destination is a global variable, generate a .relax instruction
      and load the address in the clobber register.  That load can be
@@ -3130,7 +3130,7 @@
       rtx ops[2];
 
       ops[0] = operands[0];
-      ops[1] = gen_rtx (CONST_INT, VOIDmode, (~val) & 0x0FF);
+      ops[1] = GEN_INT ((~val) & 0x0FF);
       output_asm_insn (\"bclr\\t%b0, %1\", ops);
     }
   else if ((val & 0x0FF) != 0)
@@ -3147,7 +3147,7 @@
       rtx ops[2];
 
       ops[0] = operands[0];
-      ops[1] = gen_rtx (CONST_INT, VOIDmode, ((~val) & 0x0FF00) >> 8);
+      ops[1] = GEN_INT (((~val) & 0x0FF00) >> 8);
       output_asm_insn (\"bclr\\t%h0, %1\", ops);
     }
   else if ((val & 0x0FF00) != 0)
@@ -3201,7 +3201,7 @@
     }
 
   /* The bclr instruction uses an inverted mask.  */
-  operands[1] = gen_rtx (CONST_INT, VOIDmode, (~val) & 0x0FF);
+  operands[1] = GEN_INT ((~val) & 0x0FF);
 
   /* When destination is a global variable, generate a .relax instruction
      and load the address in the clobber register.  That load can be
@@ -3245,7 +3245,7 @@
       rtx ops[2];
 
       ops[0] = operands[0];
-      ops[1] = gen_rtx (CONST_INT, VOIDmode, (~val) & 0x0FF);
+      ops[1] = GEN_INT ((~val) & 0x0FF);
       output_asm_insn (\"bclr\\t%b0, %b1\", ops);
       return \"\";
     }
@@ -3893,10 +3893,10 @@
 ;;
 ;;
 (define_split
-  [(set (match_operand:HI 0 "hard_addr_reg_operand" "=A")
+  [(set (match_operand:HI 0 "hard_addr_reg_operand" "")
 	(match_operator:HI 3 "m68hc11_arith_operator"
-            [(match_operand:HI 1 "hard_addr_reg_operand" "0")
-	     (match_operand:HI 2 "general_operand" "dAuim")]))]
+            [(match_operand:HI 1 "hard_addr_reg_operand" "")
+	     (match_operand:HI 2 "general_operand" "")]))]
   "z_replacement_completed == 2
    /* If we are adding a small constant to X or Y, it's
      better to use one or several inx/iny instructions.  */
@@ -3943,10 +3943,10 @@
    ")
 
 (define_split
-  [(set (match_operand:HI 0 "hard_addr_reg_operand" "=A")
+  [(set (match_operand:HI 0 "hard_addr_reg_operand" "")
 	(match_operator:HI 3 "m68hc11_arith_operator"
-            [(match_operand:HI 1 "general_operand" "mu")
-	     (match_operand:HI 2 "general_operand" "dAuim")]))]
+            [(match_operand:HI 1 "general_operand" "")
+	     (match_operand:HI 2 "general_operand" "")]))]
   "z_replacement_completed == 2
    /* If we are adding a small constant to X or Y, it's
      better to use one or several inx/iny instructions.  */
@@ -3979,10 +3979,10 @@
 ;; The shift operators are special and must not appear here.
 ;;
 (define_split
-  [(set (match_operand:HI 0 "d_register_operand" "=d")
+  [(set (match_operand:HI 0 "d_register_operand" "")
 	(match_operator:HI 3 "m68hc11_non_shift_operator"
-            [(match_operand:HI 1 "d_register_operand" "%0")
-	     (match_operand:HI 2 "hard_reg_operand" "*d*A")]))]
+            [(match_operand:HI 1 "d_register_operand" "")
+	     (match_operand:HI 2 "hard_reg_operand" "")]))]
   "TARGET_M6811
    && z_replacement_completed == 2 && !SP_REG_P (operands[2])"
   [(set (match_dup 4) (match_dup 2))
@@ -3994,10 +3994,10 @@
 ;; logical/arithmetic operation with a pop.
 ;;
 (define_split
-  [(set (match_operand:HI 0 "d_register_operand" "=d")
+  [(set (match_operand:HI 0 "d_register_operand" "")
 	(match_operator:HI 3 "m68hc11_non_shift_operator"
-            [(match_operand:HI 1 "d_register_operand" "%0")
-	     (match_operand:HI 2 "hard_reg_operand" "*d*A")]))]
+            [(match_operand:HI 1 "d_register_operand" "")
+	     (match_operand:HI 2 "hard_reg_operand" "")]))]
   "TARGET_M6812
    && z_replacement_completed == 2 && !SP_REG_P (operands[2])"
   [(set (match_dup 4) (match_dup 2))
@@ -4071,10 +4071,10 @@
 ;; AND OR XOR PLUS MINUS ASHIFT ASHIFTRT LSHIFTRT ROTATE ROTATERT
 ;;
 (define_split
-  [(set (match_operand:QI 0 "hard_addr_reg_operand" "=xy")
+  [(set (match_operand:QI 0 "hard_addr_reg_operand" "")
 	(match_operator:QI 3 "m68hc11_arith_operator"
-            [(match_operand:QI 1 "hard_addr_reg_operand" "%0")
-	     (match_operand:QI 2 "general_operand" "dxyuim")]))]
+            [(match_operand:QI 1 "hard_addr_reg_operand" "")
+	     (match_operand:QI 2 "general_operand" "")]))]
   "z_replacement_completed == 2
    /* Reject a (plus:QI (reg:QI X) (const_int 1|-1)) because the
       incqi pattern generates a better code.  */
@@ -4342,10 +4342,10 @@
    "#")
 
 (define_split
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=<,um")
-	(ashift:DI (match_operand:DI 1 "general_operand" "umi,umi")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
+	(ashift:DI (match_operand:DI 1 "general_operand" "")
 		   (const_int 32)))
-   (clobber (match_scratch:HI 2 "=&A,d"))]
+   (clobber (match_scratch:HI 2 ""))]
    "reload_completed"
    [(const_int 0)]
    "/* Move the lowpart in the highpart first in case the shift
@@ -4374,10 +4374,10 @@
    "#")
 
 (define_split
-  [(set (match_operand:DI 0 "non_push_operand" "=um")
-	(ashift:DI (match_operand:DI 1 "general_operand" "umi")
+  [(set (match_operand:DI 0 "non_push_operand" "")
+	(ashift:DI (match_operand:DI 1 "general_operand" "")
 		   (const_int 1)))
-   (clobber (match_scratch:HI 2 "=d"))]
+   (clobber (match_scratch:HI 2 ""))]
    "z_replacement_completed == 2"
    [(set (match_dup 2) (match_dup 3))
     (set (match_dup 2) (ashift:HI (match_dup 2) (const_int 1)))
@@ -4456,11 +4456,11 @@
   "#")
 
 (define_split
-  [(set (match_operand:SI 0 "register_operand" "=D")
+  [(set (match_operand:SI 0 "register_operand" "")
           (plus:SI 
-		   (mult:SI (match_operand:SI 2 "general_operand" "uim")
+		   (mult:SI (match_operand:SI 2 "general_operand" "")
 			    (const_int 65536))
-		   (match_operand:SI 1 "general_operand" "0")))
+		   (match_operand:SI 1 "general_operand" "")))
    (clobber (match_scratch:HI 3 "=X"))]
   "0 && reload_completed && z_replacement_completed == 2"
   [(set (reg:HI X_REGNUM) (plus:HI (reg:HI X_REGNUM) (match_dup 4)))]
@@ -4478,10 +4478,10 @@
   "#")
 
 (define_split
-  [(set (match_operand:SI 0 "register_operand" "=D")
-          (plus:SI (and:SI (match_operand:SI 1 "general_operand" "%uim")
+  [(set (match_operand:SI 0 "register_operand" "")
+          (plus:SI (and:SI (match_operand:SI 1 "general_operand" "")
 			   (const_int 65535))
-		   (match_operand:SI 2 "general_operand" "0")))]
+		   (match_operand:SI 2 "general_operand" "")))]
   "z_replacement_completed == 2"
   [(set (reg:HI D_REGNUM) (plus:HI (reg:HI D_REGNUM) (match_dup 3)))
    (set (reg:HI X_REGNUM) (plus:HI (plus:HI (reg:HI X_REGNUM) (const_int 0)) (reg:HI CC_REGNUM)))]
@@ -4509,10 +4509,10 @@
    "")
 
 (define_split
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=D,um")
-	(ashift:SI (match_operand:SI 1 "general_operand" "Duim,D")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
+	(ashift:SI (match_operand:SI 1 "general_operand" "")
 	           (const_int 16)))
-   (clobber (match_scratch:HI 3 "=X,X"))]
+   (clobber (match_scratch:HI 3 ""))]
    ""
   [(set (match_dup 2) (match_dup 3))
    (set (match_dup 4) (const_int 0))]
@@ -4538,9 +4538,9 @@
    "#")
 
 (define_split /* "*ashlsi3_const16_zexthi"*/
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=D")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
 	(ashift:SI (zero_extend:HI 
-			(match_operand:HI 1 "general_operand" "duim*a"))
+			(match_operand:HI 1 "general_operand" ""))
 	           (const_int 16)))
    (clobber (match_scratch:HI 2 "=X"))]
    "reload_completed"
@@ -5152,8 +5152,8 @@
    "#")
 
 (define_split
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=<,um")
-	(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi,umi")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
+	(lshiftrt:DI (match_operand:DI 1 "general_operand" "")
 		     (const_int 32)))
    (clobber (match_scratch:HI 2 "=&A,d"))]
    "reload_completed"
@@ -5174,8 +5174,8 @@
    "#")
 
 (define_split
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=um")
-	(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
+	(lshiftrt:DI (match_operand:DI 1 "general_operand" "")
 		     (match_operand:DI 2 "const_int_operand" "")))
    (clobber (match_scratch:HI 3 "=d"))]
    "z_replacement_completed && INTVAL (operands[2]) >= 56"
@@ -5187,7 +5187,7 @@
     (set (match_dup 5) (reg:HI D_REGNUM))
     (set (match_dup 6) (reg:HI D_REGNUM))
     (set (match_dup 7) (reg:HI D_REGNUM))]
-   "operands[8] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 56);
+   "operands[8] = GEN_INT (INTVAL (operands[2]) - 56);
     operands[4] = m68hc11_gen_lowpart (SImode, operands[0]);
     operands[5] = m68hc11_gen_highpart (HImode, operands[4]);
     operands[4] = m68hc11_gen_lowpart (HImode, operands[4]);
@@ -5201,8 +5201,8 @@
     operands[6] = m68hc11_gen_lowpart (HImode, operands[6]);")
 
 (define_split
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=um")
-	(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
+	(lshiftrt:DI (match_operand:DI 1 "general_operand" "")
 		     (match_operand:DI 2 "const_int_operand" "")))
    (clobber (match_scratch:HI 3 "=d"))]
    "z_replacement_completed && INTVAL (operands[2]) >= 48 
@@ -5214,7 +5214,7 @@
     (set (match_dup 5) (reg:HI D_REGNUM))
     (set (match_dup 6) (reg:HI D_REGNUM))
     (set (match_dup 7) (reg:HI D_REGNUM))]
-   "operands[8] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 48);
+   "operands[8] = GEN_INT (INTVAL (operands[2]) - 48);
     operands[4] = m68hc11_gen_lowpart (SImode, operands[0]);
     operands[5] = m68hc11_gen_highpart (HImode, operands[4]);
     operands[4] = m68hc11_gen_lowpart (HImode, operands[4]);
@@ -5234,10 +5234,10 @@
    "#")
 
 (define_split
-  [(set (match_operand:DI 0 "non_push_operand" "=um")
-	(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi")
+  [(set (match_operand:DI 0 "non_push_operand" "")
+	(lshiftrt:DI (match_operand:DI 1 "general_operand" "")
 		     (const_int 1)))
-   (clobber (match_scratch:HI 2 "=d"))]
+   (clobber (match_scratch:HI 2 ""))]
    "z_replacement_completed == 2"
    [(set (match_dup 2) (match_dup 3))
     (set (match_dup 2) (lshiftrt:HI (match_dup 2) (const_int 1)))
@@ -5283,10 +5283,10 @@
    "")
 
 (define_split
-  [(set (match_operand:SI 0 "non_push_operand" "=D,um")
-	(lshiftrt:SI (match_operand:SI 1 "general_operand" "uim,D")
+  [(set (match_operand:SI 0 "non_push_operand" "")
+	(lshiftrt:SI (match_operand:SI 1 "general_operand" "")
 	             (const_int 16)))
-   (clobber (match_scratch:HI 3 "=X,X"))]
+   (clobber (match_scratch:HI 3 ""))]
    "reload_completed && !(X_REG_P (operands[0]) && X_REG_P (operands[1]))"
   [(set (match_dup 2) (match_dup 3))
    (set (match_dup 4) (const_int 0))]

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]