On Wed, May 03, 2006 at 12:29:17PM +0200, Bernd Schmidt wrote:
> Does anyone find the use of #line in insn-recog.c actually useful? It
> seems to make debugging recog() impossible.
Try this patch. It adds #line directives to insn-recog.c and other generated
files to revert the ones already there. It should improve debugging. A few
notes, though:
1) The line numbers are limited to 32767. I simply haven't found a trivially
easy way of fixing that.
2) The change to genrecog.c was added when I saw your message.
3) No testing on other backends than i386 and my ongoing i8086 one.
4) Lines longer than 80 chars.
5) The paperwork isn't done yet.
Index: gcc/Makefile.in
===================================================================
--- gcc/Makefile.in (revision 112877)
+++ gcc/Makefile.in (working copy)
@@ -2711,7 +2713,9 @@
$(simple_generated_c:insn-%.c=s-%): s-%: build/gen%$(build_exeext) \
$(MD_DEPS) insn-conditions.md
$(RUN_GEN) build/gen$*$(build_exeext) $(md_file) \
- insn-conditions.md > tmp-$*.c
+ insn-conditions.md \
+ | awk '/^LINE$$/ { if (FNR < 32767) print "#line", FNR + 1,
"\"'$(objdir)'/insn-'$*'.c\""; next; } { print; }' \
+ > tmp-$*.c
$(SHELL) $(srcdir)/../move-if-change tmp-$*.c insn-$*.c
$(STAMP) s-$*
@@ -2786,7 +2790,9 @@
tm-constrs.h: s-constrs-h; @true
s-preds: $(MD_DEPS) build/genpreds$(build_exeext)
- $(RUN_GEN) build/genpreds$(build_exeext) $(md_file) > tmp-preds.c
+ $(RUN_GEN) build/genpreds$(build_exeext) $(md_file) \
+ | awk '/^LINE$$/ { if (FNR < 32767) print "#line", FNR + 1,
"\"'$(objdir)'/insn-preds.c\""; next; } { print; }' \
+ > tmp-preds.c
$(SHELL) $(srcdir)/../move-if-change tmp-preds.c insn-preds.c
$(STAMP) s-preds
@@ -2796,7 +2802,9 @@
$(STAMP) s-preds-h
s-constrs-h: $(MD_DEPS) build/genpreds$(build_exeext)
- $(RUN_GEN) build/genpreds$(build_exeext) -c $(md_file) > tmp-constrs.h
+ $(RUN_GEN) build/genpreds$(build_exeext) -c $(md_file) \
+ | awk '/^LINE$$/ { if (FNR < 32767) print "#line", FNR + 1,
"\"'$(objdir)'/tm-constrs.h\""; next; } { print; }' \
+ > tmp-constrs.h
$(SHELL) $(srcdir)/../move-if-change tmp-constrs.h tm-constrs.h
$(STAMP) s-constrs-h
Index: gcc/genattrtab.c
===================================================================
--- gcc/genattrtab.c (revision 112877)
+++ gcc/genattrtab.c (working copy)
@@ -3770,7 +3770,7 @@
printf ("%sif ", first_if ? "" : "else ");
first_if = 0;
write_test_expr (testexp, 0);
- printf ("\n");
+ printf ("\nLINE\n");
write_indent (indent + 2);
printf ("{\n");
Index: gcc/genemit.c
===================================================================
--- gcc/genemit.c (revision 112877)
+++ gcc/genemit.c (working copy)
@@ -511,6 +511,7 @@
is generated. */
print_rtx_ptr_loc (XSTR (expand, 3));
printf ("%s\n", XSTR (expand, 3));
+ puts ("LINE");
/* Output code to copy the arguments back out of `operands'
(unless we aren't going to use them at all). */
@@ -634,6 +635,7 @@
{
print_rtx_ptr_loc (XSTR (split, 3));
printf ("%s\n", XSTR (split, 3));
+ puts ("LINE");
}
/* Output code to copy the arguments back out of `operands' */
Index: gcc/genoutput.c
===================================================================
--- gcc/genoutput.c (revision 112877)
+++ gcc/genoutput.c (working copy)
@@ -674,6 +674,7 @@
puts ("{");
print_rtx_ptr_loc (template);
puts (template + 1);
+ puts ("LINE");
puts ("}");
}
Index: gcc/genpreds.c
===================================================================
--- gcc/genpreds.c (revision 112877)
+++ gcc/genpreds.c (working copy)
@@ -188,7 +188,7 @@
fputs (p->c_block, stdout);
else
printf ("{\n %s\n}", p->c_block);
- fputs ("\n\n", stdout);
+ fputs ("\nLINE\n\n", stdout);
}
/* Given a predicate expression EXP, from form NAME, determine whether
@@ -536,7 +536,7 @@
"{\n return ",
p->name);
write_predicate_expr (p->exp);
- fputs (";\n}\n\n", stdout);
+ fputs (";\nLINE\n}\n\n", stdout);
}
/* Constraints fall into two categories: register constraints
@@ -998,7 +998,7 @@
fputs (" return ", stdout);
write_predicate_expr (c->exp);
- fputs (";\n}\n", stdout);
+ fputs (";\nLINE\n}\n", stdout);
}
puts ("#endif /* tm-constrs.h */");
}
@@ -1049,7 +1049,7 @@
{
printf (" case CONSTRAINT_%s:\n return ", c->c_name);
write_predicate_expr (c->exp);
- fputs (";\n\n", stdout);
+ fputs (";\nLINE\n\n", stdout);
}
puts (" default: break;\n"
Index: gcc/genrecog.c
===================================================================
--- gcc/genrecog.c (revision 112877)
+++ gcc/genrecog.c (working copy)
@@ -2129,6 +2129,7 @@
case DT_c_test:
print_c_condition (p->u.c_test);
+ puts ("\nLINE");
break;
case DT_accept_insn:
--
Rask Ingemann Lambertsen