The Treewidth of Java Programs [chapter]

Jens Gustedt, Ole A. Mæhle, Jan Arne Telle
2002 Lecture Notes in Computer Science  
Intuitively, the treewidth of a graph G measures how close G is to being a tree. The lower the treewidth, the faster we can solve various optimization problems on G, by dynamic programming along the tree structure. In the paper M. Thorup, it is shown that the control-flow graph of any goto-free C program is at most 6. This result opened for the possibility of applying the dynamic programming bounded treewidth algorithms to various compiler optimization tasks. In this paper we explore this
more » ... ility, in particular for Java programs. We first show that even if Java does not have a goto, the labelled break and continue statements are in a sense equally bad, and can be used to construct Java programs that are arbitrarily hard to understand and optimize. For Java programs lacking these labelled constructs Thorup's result for C still holds, and in the second part of the paper we analyze the treewidth of label-free Java programs empirically. We do this by means of a parser that computes a tree-decomposition of the control-flow graph of a given Java program. We report on experiments running the parser on several of the Java API packages, and the results tell us that on average the treewidth of the control-flow graph of these Java programs is no more than 2.5. This is the first empirical test of Thorup's result, and it confirms our suspicion that the upper bounds of treewidth 6, 5 and 4 are rarely met in practice, boding well for the application of treewidth to compiler optimization. Résumé : Intuitivement, le treewidth d'un graphe G mesure la déviation de G d'un arbre. Le moins élevé ce paramètre, le plus vite nous pouvons à l'aide de la programmation dynamique résoudre de différentes problèmes d'optimisation sur G. Dans le papier M.Thorup, All Structured Programs have Small Tree-Width and Good Register Allocation [8] il est montré que le graphe de flux de contrôle de tous programme C qui ne contient pas de goto est borné par 6. Ce résultat a ouvert la voie pour l'application de la programmation dynamique à l'aide d'algorithmes à treewidth borné à de différentes tâches d'optimisation d'un compilateur. Au présent papier nous exploitons cette possibilité, en particulier pour les programmes Java. D'abord nous montrons que même si Java ne connaît pas de goto, les instructions break et continue étiquetés sont dans un sens aussi mauvaise et peuvent être abuser pour la construction de programmes Java qui sont arbitrairement difficile à comprendre et à optimiser. Pour les programmes Java sans tels instructions étiquetés le résultat de Thorup est toujours valable et dans la deuxième partie du présent papier nous analysons empiriquement le treewidth de Java programmes sans étiquettes. Nous le faisons avec un parseur qui calcul une décomposition en arbre du graphe de flux de contrôle d'un programme Java donné. Nous rapportons sur des expériences de lancer ce parseur sur plusieurs des paquets API de Java et le résultat nous montre qu'en moyenne le treewidth du graphe de flux de contrôla n'est pas plus que 2,5. Ceci effectue le premier teste empirique du résultat de Thorup et confirme notre supposition que les bornes supérieurs de 6, 5, et 4 sont rarement atteints en pratique. C'est alors une bonne augure pour l'application du treewidth à l'optimisation dans les compilateurs.
doi:10.1007/3-540-45643-0_7 fatcat:pesn3cuoazdjzito4jmaqlgwyq