diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 43c2c9d8282bbfb3f2a0883cc08f2b0a5db3a2ae..d10a6c5bac1bef5a976ec85424018e9c4e504d2c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2007-10-09  Kenneth Zadeck <zadeck@naturalbridge.com>
+
+	PR middle-end/33669
+	* ra-conflict.c (record_one_conflict_between_regnos,
+	set_conflicts_for_earlyclobber, global_conflicts): Improved
+	logging.
+	(global_conflicts): Removed incorrect check.
+
 2007-10-09  Richard Sandiford  <rsandifo@nildram.co.uk>
 
 	PR tree-optimization/33615
diff --git a/gcc/ra-conflict.c b/gcc/ra-conflict.c
index 27a9fcc81eb5b42939198fc57417edc9e8e3d736..a18444329bec00035c1c8619b72371c3ed27d45e 100644
--- a/gcc/ra-conflict.c
+++ b/gcc/ra-conflict.c
@@ -196,7 +196,7 @@ record_one_conflict_between_regnos (enum machine_mode mode1, int r1,
   int allocno2 = reg_allocno[r2];
 
   if (dump_file)
-    fprintf (dump_file, "  rocbr adding %d<=>%d\n", r1, r2);
+    fprintf (dump_file, "    rocbr adding %d<=>%d\n", r1, r2);
 
   if (allocno1 >= 0 && allocno2 >= 0)
     set_conflict (allocno1, allocno2);
@@ -401,9 +401,6 @@ set_conflicts_for_earlyclobber (rtx insn)
 						    recog_data.operand[use + 1]);
 		}
 	}
-
-  if (dump_file) 
-    fprintf (dump_file, "  finished early clobber conflicts.\n");
 }
 
 
@@ -983,8 +980,7 @@ global_conflicts (void)
 			set_renumbers_live (&renumbers_live, live_subregs, live_subregs_used, 
 					    allocnum, renumber);
 		    }
-		  
-		  else if (!sparseset_bit_p (allocnos_live, allocnum))
+		  else
 		    {
 		      if (dump_file)
 			fprintf (dump_file, "    dying pseudo\n");
@@ -1071,6 +1067,8 @@ global_conflicts (void)
 		 FIXME: We should consider either adding a new kind of
 		 clobber, or adding a flag to the clobber distinguish
 		 these two cases.  */
+	      if (dump_file && VEC_length (df_ref_t, clobbers))
+		fprintf (dump_file, "  clobber conflicts\n");
 	      for (k = VEC_length (df_ref_t, clobbers) - 1; k >= 0; k--)
 		{
 		  struct df_ref *def = VEC_index (df_ref_t, clobbers, k);
@@ -1132,6 +1130,8 @@ global_conflicts (void)
 	      if (GET_CODE (PATTERN (insn)) == PARALLEL && multiple_sets (insn))
 		{ 
 		  int j;
+		  if (dump_file)
+		    fprintf (dump_file, "  multiple sets\n");
 		  for (j = VEC_length (df_ref_t, dying_regs) - 1; j >= 0; j--)
 		    {
 		      int used_in_output = 0;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 61dd6de929bb6d762802d5b19d317068436f2794..c37814b98eea03b1d67079773635920dab595845 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-10-09  Kenneth Zadeck <zadeck@naturalbridge.com>
+
+	PR middle-end/33669
+	* gcc.c-torture/execute/pr33669.c: New.
+
 2007-10-09  Richard Sandiford  <rsandifo@nildram.co.uk>
 
 	PR tree-optimization/33615
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr33669.c b/gcc/testsuite/gcc.c-torture/execute/pr33669.c
new file mode 100644
index 0000000000000000000000000000000000000000..69d86258d21cc27d87224c472ace54c0588d24af
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr33669.c
@@ -0,0 +1,40 @@
+extern void abort (void);
+
+typedef struct foo_t
+{ 
+  unsigned int blksz;
+  unsigned int bf_cnt; 
+} foo_t;
+
+#define _RNDUP(x, unit)  ((((x) + (unit) - 1) / (unit)) * (unit))
+#define _RNDDOWN(x, unit)  ((x) - ((x)%(unit)))
+
+long long
+foo (foo_t *const pxp,  long long offset, unsigned int extent)
+{
+  long long blkoffset = _RNDDOWN(offset, (long long )pxp->blksz);
+  unsigned int diff = (unsigned int)(offset - blkoffset);
+  unsigned int blkextent = _RNDUP(diff + extent, pxp->blksz);
+
+  if (pxp->blksz < blkextent)
+    return -1LL;
+
+  if (pxp->bf_cnt > pxp->blksz)
+    pxp->bf_cnt = pxp->blksz;
+
+  return blkoffset;
+}
+
+int
+main ()
+{
+  foo_t x;
+  long long xx;
+
+  x.blksz = 8192;
+  x.bf_cnt = 0;
+  xx = foo (&x, 0, 4096);
+  if (xx != 0LL)
+    abort ();
+  return 0;
+}