This is the mail archive of the gcc@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]

[tree-ssa] inlining now works on bnw-simple-branch


I've now converted the tree inliner to work on generic backend trees
instead of C or Java frontend trees.  The old inliner is temporarily
retained in old-tree-inline.c, for the benefit of the C++ and Java
frontends.

The current branch sources bootstrap successfully, with no additional
testsuite failures outside of the C frontend.  Additional C failures are
elaborated below; I think that these are acceptable for this stage of
development, and would like to proceed with the merge this week.

Thoughts?

Jason

FAIL: gcc.dg/20020220-2.c  (test for warnings, line 10)
FAIL: gcc.dg/20020220-2.c (test for excess errors)

A line numbering issue; warn_if_unused_value uses the line number from the
last rtl line note emitted, which doesn't work very well if we want to call
it before expand time.  It should be fixed.

FAIL: gcc.dg/20020304-1.c (test for excess errors)

A failure with -fssa -fssa-ccp.  I assume this is due to fragility in the
RTL SSA infrastructure, and not worth worrying about.

FAIL: gcc.dg/Wswitch-2.c enum e4 (test for warnings, line 20)
FAIL: gcc.dg/Wswitch-2.c enum e1 (test for warnings, line 29)
FAIL: gcc.dg/Wswitch-default.c  (test for warnings, line 14)
FAIL: gcc.dg/Wswitch-default.c  (test for warnings, line 22)
FAIL: gcc.dg/Wswitch-default.c  (test for warnings, line 31)
FAIL: gcc.dg/Wswitch-default.c  (test for warnings, line 41)
FAIL: gcc.dg/Wswitch-default.c  (test for warnings, line 53)
FAIL: gcc.dg/Wswitch-default.c (test for excess errors)
FAIL: gcc.dg/Wswitch-enum.c enum e1 (test for warnings, line 23)
FAIL: gcc.dg/Wswitch-enum.c enum e2 (test for warnings, line 23)
FAIL: gcc.dg/Wswitch-enum.c enum e1 (test for warnings, line 28)
FAIL: gcc.dg/Wswitch-enum.c enum e2 (test for warnings, line 28)
FAIL: gcc.dg/Wswitch-enum.c enum e2 (test for warnings, line 32)
FAIL: gcc.dg/Wswitch-enum.c enum e2 (test for warnings, line 37)
FAIL: gcc.dg/Wswitch-enum.c excess 3 (test for warnings, line 54)
FAIL: gcc.dg/Wswitch-enum.c excess 3 (test for warnings, line 61)
FAIL: gcc.dg/Wswitch.c enum e1 (test for warnings, line 23)
FAIL: gcc.dg/Wswitch.c enum e2 (test for warnings, line 23)
FAIL: gcc.dg/Wswitch.c enum e2 (test for warnings, line 32)
FAIL: gcc.dg/Wswitch.c excess 3 (test for warnings, line 54)

SWITCH_EXPRs don't record the original type of a switch condition, as
needed for this warning.  The warning should be handled by the frontend,
anyway.

FAIL: gcc.dg/m-un-1.c uninitialized warning regression (test for bogus messages, line 28)

Currently, if (a && b) c; is simplified to

T.1 = (a != 0);
if (T.1)
  T.1 = (b != 0);
if (T.1)
  c;

The RTL flow pass can't currently tell that any path which would reach 'c'
must also have passed through the earlier 'if', so if 'c' refers to a
variable which was only initialized in 'b', it will give a false warning.
Boolean propagation should help flow to get the right answer.  Another
possible fix would be to simplify to

if (a)
  if (b)
    c;

instead.  This would require special-casing && used as a condition, but is
feasible.

FAIL: gcc.dg/noreturn-1.c detect noreturn candidate (test for warnings, line 31)
FAIL: gcc.dg/noreturn-1.c detect return from noreturn (test for warnings, line 38)
FAIL: gcc.dg/noreturn-1.c detect return from tail call (test for warnings, line 59)
FAIL: gcc.dg/noreturn-1.c (test for excess errors)
FAIL: gcc.dg/noreturn-4.c warn for main (test for warnings, line 10)
FAIL: gcc.dg/noreturn-4.c (test for excess errors)

In these tests, the warnings expected for the closing brace have moved to
the previous line, because there is no longer any code on that line; the
closing SCOPE_STMT has been discarded.  I'm not sure what we want to do
about this; one option would be to just move the warnings to the previous
line.

FAIL: 155: expected branch percentages not found: 50 25
FAIL: 165: expected branch percentages not found: 10 11
FAIL: gcc.misc-tests/gcov-4b.c gcov: 0 failures in line counts, 2 in branch percentages, 0 in return percentages

This failure is related to the one for m-un-1.c, above; where in the
original example if 'a' is false we would immediately branch to the next
statement, in the simplified form we always execute two tests.
The same alternate simplification would fix the && case, but the || case is
more difficult.  We could simplify to something like

if (a) goto in;
if (b)
  {
  in:
    c;
  }

or

if (a);
else if (b);
else goto not;
c;
not:

but nothing without either a goto or an extra test.


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