This document is obsolete and kept for historical reference only.

GCC 3.0 Release Criteria

This page provides the release criteria for GCC 3.0. GCC 3.0 will not be released until these criteria have been met. This page enumerates the release criteria and provides a rationale for some of the choices made in determining these criteria.

In all cases, these criteria represent the minimum functionality required in order to make the release. If this level of minimum functionality is not provided by a release candidate, then that candidate will not become the eventual release. However, a release candidate that does meet these criteria may not necessarily become the official release; there may be other unforseen issues that prevent release. For example, if support for the Intel Pentium II is required by the release criteria, it is nevertheless unlikely that GCC 3.0 would be released even though it did not support the Intel Pentium.

Because the development of GCC is largely dependent on volunteers, the Steering Committee may eventually have to decide whether to make a release, even if the criteria here are not met. For example, if no volunteer can be found to verify correct operation of a particular application program on a particular system, then that criterion may be abandoned. However, that eventuality should be avoided if at all possible.

Functionality

GCC 3.0 will contain considerable improvements in functionality relative to previous releases of GCC. Each of these improvements must be completed before GCC 3.0 is released:

Platform Support

GCC is available on a vast number of platforms. However, it is not possible to effectively test GCC in all possible configurations. Therefore, a smaller number of platforms have been selected as targets. The targets chosen represent both the most popular operating systems and the most popular microprocessors. Of course, where possible, the release will support other targets as well.

Primary Evaluation Platforms
Chip OS Triplet
Alpha Red Hat Linux 6.2
HPPA HPUX 11.0 hppa2.0w-hp-hpux11.00
Intel x86Debian GNU/Linux 2.2i386-pc-linux-gnu
Intel x86Red Hat Linux 6.2 i686-pc-linux-gnu
MIPS IRIX 6.5 mips-sgi-irix6.5
PowerPC AIX 4.3.3 powerpc-ibm-aix4.3.3.0
SPARC Solaris 2.7 sparc-sun-solaris2.7

GCC's performance on the following platforms will not be required to meet all the criteria mentioned in this document before GCC 3.0 ships, but the performance on these systems will be of considerable interest, and it is likely that serious problems on these platforms will delay the release.

Among the secondary evaluation platforms, we are are especially concerned about free systems (i.e., GNU/Linux and the BSDs) where GCC also serves as the system compiler.

Volunteers will be required, both to test and to fix bugs, for all secondary platforms. (These volunteers may be the same person, but volunteers should be careful not to sign up for more work than they can actually do.) If volunteers cannot be found for these platforms, then the secondary platforms will be dropped from this list.

The bug-fixing volunteer will commit to ensuring that GCC 3.0 will at least bootstrap itself on each of these secondary platforms. That commitment doesn't necessarily mean fixing bugs personally; for example, if you are a manager for a company with GCC expertise you could be the volunteer if you'll commit to donating your employee's efforts as necessary. The release manager, and the GCC development team, will make reasonable efforts to assist these volunteers by answering questions and reviewing patches as time permits.

Secondary Evaluation Platforms
Chip OS Triplet Tester
Intel x86FreeBSD 4.2 i386-unknown-freebsd4.2 David O'Brien
PowerPC GNU/Linux
SPARC SunOS 4.1.4 sparc-sun-sunos4.1.4
SPARC Debian GNU/Linux 2.2sparc-linux Ben Collins
ARM GNU/Linux armv4l-unknown-linux-gnu
Intel x86Cygwin i686-pc-cygwin

Language Support

There are GCC front-ends for many different languages. However, in this release, only the behavior of front-ends for the following languages will be considered part of the release criteria:

The following languages will be supported by the release, but their behavior will not be a primary consideration in determining whether or not to ship a particular release candidate:

In particular, no application testing, code quality, or compile-time performance testing will be required for these languages. However, the regression testing criteria documented below will apply to these languages, except Chill, for which no regression tests are available.

Regression Tests

The GCC testsuite contains extensive C and C++ regression tests, as well as some Fortran, and Objective-C tests. GCC 3.0 will not fail any of these tests which the previous release GCC passed on any of the supported platforms. In particular, the current regression testsuite will be run using GCC 2.95.2 on each of the supported platforms; those results can then be compared with the output from a release candidate. Because there have often been issues with generating PIC code, we will test with -fPIC as well.

In addition, on all supported platforms, there will be no --enable-checking failures when running any of the regression test-suites.

Applications

In addition to the regression-testing mentioned above, it is important that operation of the compiler be verified on some real-world applications. The following applications represent a mix of low-level and high-level code, of numerical and logical programs, and of different programming languages.

Integration Tests
Name Language Version Source URL
Linux kernel C 2.4.0 linux-2.4.0.tar.gz
GNU Emacs C 20.6
POOMA C++ 2.2.0 pooma-2.3.0.tgz
LAPACK Fortran 3.0 LAPACK (testing programs)

These selections were made for a variety of reasons. The Linux kernel is one of the most important pieces of free software, and kernel developers pay careful attention to GCC performance. It would be an embarrassment to GCC 3.0 if it did not compile the kernel correctly, out of the box. The kernel taxes many of the low-level aspects of GCC, as well as many GCC extensions, including the extended assembly syntax, addresses of labels, and so forth. (Historically, there have been kernel bugs, found only by more aggressive optimization in new releases of GCC. If such bugs are encountered, then appropriate patches should be applied to the kernel before testing.)

GNU Emacs is portable to almost every system available, and is a complex application-level C program, known to have very few bugs.

POOMA is a complex expression-template library that will tax the ability of G++ to deal with templates, an area that has historically been buggy. In addition, templates have historically taken inordinately much time and memory at compile-time. With the widespread prevalence of templates in C++ programs, including the standard library, testing this area heavily is vitally important. For instructions on how to set up and build POOMA and check the outcome of its testing programs see this guide.

LAPACK is a well known linear algebra package that contains code typical for large scale Fortran programs. For instructions on how to set up and build LAPACK and check the outcome of its testing programs see this guide.

As progress is made towards the release, specific information about how these programs should be compiled, and how their correct operation should be verified will be made available here. In general, however, the purpose will not be to exhaustively test these applications; instead, testers should simply verify that they compile, and perform basic functionality correctly.

Code Quality

Historically, there has been no formal release criterion that took into account performance of code generated by the compiler. It is important that the generated code performs approximately as well as previous releases. Therefore, we will use the following benchmarks for measuring code quality:

Name Language Source URL
gzip 1.2.4aC
StepanovC++ stepanov_v1p2.C
LAPACKFortran LAPACK 3.0 (timing programs)

A Java benchmark is not required for this release since there is little precedent for the behavior of the Java compiler. For Java, functional completeness and correctness are still more important than optimization.

In addition to the above benchmarks, the behavior of real programs should be considered as well. For that reason, the behavior of the elliptic curve integer factorization program ecm4c.c, which uses GNU mp, will be considered part of the release criteria.

A release candidate will be deemed unacceptable if the performance of the generated code is not at least as good as that of GCC 2.95.2 on the benchmarks, and within at least 5% on the application tests.

Compile-Time Performance

There is a perception that development snapshots take longer to compile programs than their 2.95.2 counterparts, and that they often use more memory as well. Compile-time performance is an important part of compiler quality. It is not enough simply to provide additional optimizations; the compiler must also continue to compile programs relatively quickly. However, it is to be expected that additional optimizations and additional features will have a non-zero cost.

In order to measure compile-time performance, we will use the following unit tests:

Name Language Source Flags Comments
insn-attrtab.cC -O2 This file contains a large machine-generated switch statement; it is a reasonable benchmark for testing flow optimizations and for handling large functions.
C++
Fortran

In addition to these unit tests, we will measure the time and peak memory usage used when building the entire GNU Emacs distribution with both GCC 2.95.2 and GCC 3.0.

If the release candidate's compile-time exceeds GCC 2.95.2 by more than 15%, or if the peak memory usage exceeds that of GCC 2.95.2 by more than 25%, that candidate will be deemed unacceptable.

Open Issues

The following issues are as of yet unresolved: