diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 757d529ec0fb6f9745eeaa8a457c563e014dfae4..79022e8218061e5bba2b8a481b0ee93b9499713f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-02-19  James E Wilson  <wilson@specifixinc.com>
+
+	* config/i386/i386.md (doloop_end_internal): Use nonimmediate_operand
+	for operand2.  Add condition that requires register_operand operand2
+	before reload.
+
 2004-02-19  Richard Sandiford  <rsandifo@redhat.com>
 	    Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
 
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 77336814934b74d9010872e7528f2ac71168769b..abd7f3dd77394da4c30e8091de83dbd550a48de7 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -13468,12 +13468,14 @@
 			  (const_int 1))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (set (match_operand:SI 2 "register_operand" "=1,1,*m*r")
+   (set (match_operand:SI 2 "nonimmediate_operand" "=1,1,*m*r")
 	(plus:SI (match_dup 1)
 		 (const_int -1)))
    (clobber (match_scratch:SI 3 "=X,X,r"))
    (clobber (reg:CC 17))]
-  "!TARGET_64BIT && TARGET_USE_LOOP"
+  "!TARGET_64BIT && TARGET_USE_LOOP
+   && (reload_in_progress || reload_completed
+       || register_operand (operands[2], VOIDmode))"
 {
   if (which_alternative != 0)
     return "#";