Essential Abstractions in GCC
(Tutorial to be conducted along with PLDI 2014)

Schedule
Motivation
Target Audience
Requirements Overview List of Topics Resources Additional Material

Presenter
Uday P. Khedker

Schedule

Friday, 13 June 2014, Afternoon Slot.

Motivation

The GNU Compiler collection is a compiler generation framework which constructs a compiler for a given architecture by reading the machine descriptions for that architecture. It has been used to create industry strength optimizing compilers on a wide variety of platforms. The GCC generated compilers are routinely used by millions of users for their regular compilation needs.

GCC is a huge infrastructure that has evolved over a quarter century through the efforts of a large number of contributors.  On the one hand, its comprehensiveness, wide applicability, and ability to generate back ends from specifications, makes it a fertile test bed for research; on the other hand the very same features make it difficult to understand GCC. To complicate the matters further, many publicly available explanations of GCC internals tend to be heavy on information rather than insights. As a consequence, a clear and crisp explanation of the journey from the compiler specifications to an actual run of a compiler generated from them is not easily understandable. We believe that this is the main reason why experimentation with GCC (particularly in academia) is not as wide-spread as it could have been, given that the entire source code is available with documentation. We are aware of many efforts that were abondoned because of the overheads of learning GCC internals and the steep ramp up required.

This tutorial describes some carefully chosen abstractions that explain the architecture of the compiler generation framework of GCC and relate it to a generated compiler. The focus is on presenting concepts rather than information so that the desired information can be discovered independently.

Target Audience

The tutorial will be helpful to all those people who are interesting in knowing GCC internals. For students and researchers, it may help them to explore how to use GCC as a test bed for their research projects. For practitioners, it may help them to them to explore how GCC implements the familiar concepts.

Requirements

This tutorial is a lecture based tutorial and hence it is not necessary for the audience to bring a laptop. Soft copies of the slides will be made available on this page well in advance.

Overview

The tutorial is an abridged version of the full tutorial which is organized around the external and the internal views of the specifications, the compiler generator, and the generated compiler as illustrated below.  As a matter of pedagogy, the tutorial introduces internal view only after building a clear external view. This helps in taming the complexity of GCC internals.

TutorialPlan

In the abridged version, the topics listed in gray color will be excluded. Besides, some details of the other topics will be omitted. However, the study material for all these omissions will be made available.


List of Topics and Resources

A tentative list of topics and associated slides is as follows. Note that these slides may be revised from time to time.
  1. Introduction and overview
  2. Gray box probing
  3. Plugin mechnisms in GCC for hooking up a new a translator, front-end, optimizer pass, and back-end
  4. Control flow in a generated compiler
  5. Link time optimization (LTO) framework
  6. Introduction to machine descriptions
  7. Retargetability mechanism
  8. A summary of essential abstractions in GCC

Additional Material


A lot of additional material from different versions of this tutorial are available online. These include slides; lecture videos (to be made available soon); well crafted programming assignments, their resources, and solutions, etc.

Please visit the web pages of our flagship event titled the Workshop on Essential Abstractions in GCC which are summer schools based on on a homogeneous teaching plan and have been held at IIT Bombay in 2013, 2012, 2011, 2010, and 2009. Apart from the slides of various offerings of the workshop, videos of lectures of 2012 workshop are also available.