Google's Summer Of Code
Thanks for your interest in the GNU Compiler Collection as your mentoring organization in Google's Summer of Code.
Contents
-
Google's Summer Of Code
- Project Ideas
- Application
- Summer of Code 2012 Accepted GCC Projects
- Summer of Code 2011 Accepted GCC Projects
- Summer of Code 2010 Accepted GCC Projects
- Summer of Code 2009 Accepted GCC Projects
- Summer of Code 2008 Accepted GCC Projects
- Summer of Code 2007 Accepted GCC Projects
- Summer of Code 2006 Accepted GCC Projects
Project Ideas
There are several pages with general ideas for GCC. These ideas are not just one project but many different projects linked here for easy of access.
Relatively simple tasks
- Improve the regression testing system, for example to detect places where the generated code changed (useful for refactoring).
- Fix -ftrapv so that it works.
GCC Improvement Projects
This category of projects deals with a range of changes, from simple to challenging. These projects are of great interest to us, because they address some long-standing architectural issues that we want to fix. See the GCC Improvement Projects page for details.
New optimization passes
- Implement code motion of stores towards entry (and use this to improve code for int to float conversion on rs6000-based targets)
- Implement a prototype for early instruction selection
- Propagate interprocedural dataflow from GIMPLE to RTL
- Add Factored Use-Def (FUD) chains to RTL
Loop optimizations and automatic parallelization based on Graphite (Graphite Summer of Code ideas)
Language front-ends and run-time libraries
libstdc++ todo (Broken Link!)
- Refactor libstdc++ for optional smaller footprint configuration, e.g., iostreams without templates
Fortran front end:
Extend OOP support (possible mentor: Janus Weil, Tobias Burnus)
- Fortran supports polymorphism, but some parts are still missing such as: finalization (destructor), ...
coarray support for SMP and distributed memory systems (possible mentor: Tobias Burnus)
- Coarrays is a PGAS extension, which is part of Fortran 2008. The parsing/resolving support is mostly implemented and, hence, -fcoarray=single
Possible task: Improving the multi-image support, which uses CAF communication library and as backend Message Passing Interface (MPI) - or ARMCI
- Run-time argument checking: Uninitialized variables, correctness of arguments
- Better IEEE support
Other Unimplemented Fortran 2003, Fortran 2008 features, TS 29113 features
- Asynchronous IO support. Currently F2003 asynchronous IO syntax is supported, but all IO is done synchronously.
- IO optimization. Currently formatted scalar IO is quite slow and uses lots of stack space.
- F2003 intrinsics support. As of F2003 many intrinsics must support arbitrary kinds.
OpenMP 4.0 runtime improvements: openmp
Port GCC's implementation of the Google Go programming language to GNU Hurd. Presumably less work will be needed on the language's frontend itself, but rather on the supporting libraries. As time permits, this task can also involve enhancing the port for GNU Hurd specialities, like Remote Procedure Calls to Hurd servers, and so on. GNU Hurd Open Issue page. For discussing your application, please cross-post the emails to both <gcc@gcc.gnu.org> and <bug-hurd@gnu.org>.
Port GCC's implementation of the Ada programming language (GNAT) to GNU Hurd. Presumably less work will be needed on the language's frontend itself, but rather on the supporting libraries. As time permits, this task can also involve enhancing the port for GNU Hurd specialities, like Remote Procedure Calls to Hurd servers, and so on. GNU Hurd Open Issue page. For discussing your application, please cross-post the emails to both <gcc@gcc.gnu.org> and <bug-hurd@gnu.org>.
Other projects
- Develop XML format to represent GCC optimization flow (function, loop, block enumeration) and IDE/visualization environment for fine-grain program optimization or tuning of the default GCC optimization heuristic
Extend GCC generic function cloning to be able to create static binaries adaptable to different architectures at run-time (including multiple ISA generation). Cupertino Miranda has been extending this work recently and we may need to sync on that ... GCC function adaptation, GCC function specific optimization
Extend GCC plugin framework/ICI/MILEPOST framework to enable fine-grain transformation parameter tuning. Currently we can perform search for good combination of passes, their orders and parameter tuning on function level and we would like to be able to do it for each individual transformation to tune optimization heuristic for Graphite loop transformations, loop vectorization, inlining, unrolling, etc. Maybe the project can be separated in several sub-projects to focus on some specific optimizations such as GRAPHITE/vectorization optimization heuristic tuning.
- Extend GCC plugin framework/ICI to enable code instrumentation (insert calls to external function after individual instructions) for dynamic code analysis. We need it to extend our TM/TLS models.
- Port and stabilize GCC4NET to the trunk together with the plugin system.
- Converting different program representation levels of GCC back to the source code. It's not a trivial task but I saw substantial interest to that recently.
Separate the frontends from the middle-end (near bottom of page)
- Make -O2 (and other -On options) be a sum of individual -f* options, by adding a -fother-O2-optimizations (and same for other -On levels)
- Separate frontend folder from middle-end folder
- Emit debug information about types and declarations early (needed for LTO)
Diagnostics XML output for IDEs (there is a prototype available).
Replace libiberty with gnulib. See http://gcc.gnu.org/ml/gcc-patches/2012-08/msg00362.html
If you are interested in learning your way around the GCC codebase, the Partial_Transitions is a good place to start.
Other project ideas can be found in the bug database. Look for old bugs which are still open.
Or invent your own project. We're always open to good ideas. But note that we are probably not too interested in projects to add new extensions to the C or C++ languages. We've found over time that these tend to introduce more problems than they solve.
Thanks, and we look forward to your submissions!
Application
The Drupal project has a great page on How to write an SOC application. A gcc Summer of Code participant for 2006, Laurynas Biveinis, wrote a blog about it.
A former GCC Summer of Code student has written an excellent page reporting important advices for students : 5 advices to get your Google Summer of Code proposal accepted.
You should also have a copyright assignment filed with the Free Software Foundation. Otherwise, we will not be able to accept your contributions. See the legal prerequisites for details.
Some guidelines are:
Do not copy text verbatim from the GCC wiki to your proposals. That gives a feeling of carelessness. If you don't understand some proposal or need more information, ask in the mailing list gcc@gcc.gnu.org .
- Provide a plan and a timeline with your proposal. A proposal without this is probably overestimating or underestimating the effort.
- Provide clearly defined goals in your proposal. Vague proposals give the impression that the student does not actually know sufficient about the topic to spend time efficiently.
- Be honest and realistic. We prefer a small, simple project with clearly defined goals that doesn't require much prior knowledge, than a far-reaching but vague proposal that is never going to be finished by the student.
Present your project in the mailing list gcc@gcc.gnu.org (or, if applicable, at fortran@gcc.gnu.org or java@gcc.gnu.org ) to be sure it is a good idea.
- Students that have already participated in GCC or submitted good patches give a better impression to reviewers.
Starting with some small patch for the area you are interested in before the proposal submittal period can help (ask for guidance and a simple enough project): It helps you to get the code known and to decide whether you really want to do the project, it shows how the development procedure is, and helps potential mentors to judge the proposal based on actual work. Besides: Also small fixes are good and getting people known by email (or IRC) exchange is nice by itself
Summer of Code 2012 Accepted GCC Projects
Project |
Student |
Mentor |
Dimitrios Apostolou |
Andrey Belevantsev |
|
Morgen Matvey |
Benjamin De Kosnik |
|
Gimple FE : Extending the text gimple recognizer to a real front end |
Sandeep Soni |
Diego Novillo |
Sergey Lega |
Benjamin De Kosnik |
Summer of Code 2011 Accepted GCC Projects
Project |
Student |
Mentor |
Extend GFortran's Coarray support with MPI-based paralellization (project page) |
Daniel Carrera |
Tobias Burnus |
GCC Optimisation Final Report, Various Notes: (1) (2) (3) |
Dimitrios Apostolou |
Steven Bosscher |
Integration of transactional memory support into a data-flow extension of OpenMP |
Ismail KURU |
Richard Henderson |
Ketaki |
Diego Novillo |
|
Philip Herron |
Ian Lance Taylor |
|
Piervit |
Basile Starynkevitch |
|
Sho Nakatani (中谷 翔) |
Jakub Jelínek |
Summer of Code 2010 Accepted GCC Projects
The source code for finished projects can be found at Google's code hosting site and their respective SVN branches.
Project |
Student |
Mentor |
Yi-Hong Lu |
H. J. Lu |
|
Sandeep Soni |
Diego Novillo |
|
Artjoms Sinkarovs |
Richard Günther |
|
Philip Herron |
Ian Taylor |
|
Improving the static control part detection mechanism in Graphite |
Vladimir Kargov |
Sebastian Pop |
Ankur Deshwal |
David Edelsohn |
|
ScopLib support for Graphite - Linking Graphite to the huge industrial and research community |
Sebastian Pop |
|
Andreas Simbuerger |
Tobias Grosser |
|
Tobias Burnus |
||
Extending Fortran 2003 and 2008 support for gfortran (esp. Co-Arrays) |
Daniel Kraft |
Tobias Burnus |
Summer of Code 2009 Accepted GCC Projects
Project |
Student |
Mentor |
Li Feng |
Tobias Grosser |
|
Enable generic function cloning and program instrumentation in GCC to be able to create static binaries adaptable to varying program and system behavior or different architectures at run-time |
Liang Peng |
Grigori Fursin |
gfortran: Procedure Pointer Components & OOP |
Tobias Burnus |
|
Traditional Loop Transformations |
pranav garg |
Sebastian Pop |
Make the OpenCL Platform Layer API and Runtime API for the Cell Processor and CPUs |
phil prattszeliga |
Paolo Bonzini |
Provide fine-grain optimization selection and tuning abilities in GCC to be able to tune default optimization heuristic of the compiler or fine optimizations for a given program on a given architecture entirely automatically using statistical and machine learning techniques from the MILEPOST project. |
Yuanjie Huang |
Grigori Fursin |
Summer of Code 2008 Accepted GCC Projects
Project |
Student |
Mentor |
Steven Bosscher |
||
Improving Dead Store Elimination |
Jakub Staszak |
|
Extend Fortran 2003 support for gfortran |
Daniel Kraft |
François-Xavier Coudert |
C++0x lambda functions for GCC |
John Freeman |
|
Tobias Grosser |
||
Finish work on propagation aliasing and array dependence information from Tree-SSA to RTL. |
Alexander Monakov |
Diego Novillo |
Tobias Burnus |
Summer of Code 2007 Accepted GCC Projects
Project |
Student |
Mentor |
Propagating array data dependence information from Tree-SSA to RTL |
Alexander Monakov |
Daniel Berlin |
Manuel López-Ibáñez |
Diego Novillo |
|
Speeding up GCC for fun and profit |
James Webber |
Eric Marshall Christopher |
Steven Bosscher |
||
Open Mutliprogramming Interprocedural Analasis and Optimalizations |
Jakub Staszak |
Daniel Berlin |
Integrating OpenJDK's javac bytecode compiler into gcj |
Dalibor Topic |
Mark J. Wielaard |
New static scheduling heuristic for GCC |
Dmitry Zhurikhin |
Vladimir Makarov |
GCC support for Windows-compatible Structured Exception Handling (SEH) on the i386 platform |
Michele Cicciotti |
Ian Lance Taylor |
Summer of Code 2006 Accepted GCC Projects
Project |
Student |
Mentor |
Plesco Alexandru |
Daniel Berlin |
|
Paul Biggar |
Daniel Berlin |
|
Laurynas Biveinis |
Daniel Berlin |
|
Andrew John Hughes |
Mark Wielaard |
|
Phillip Jordan |
Benjamin Kosnik |
|
Manuel López-Ibáñez |
Ian Lance Taylor |