• [^] # Re: Compilation lente <=> Analyse de flot

    Posté par . En réponse à la dépêche Lancement du projet GlobalGCC. Évalué à 4.

    Genre pourquoi il y a duplication des sous-graphes ? à priori il suffirait de faire un arc d'un graphe vers un autre pour un appel de fonction par exemple, sans rien dupliquer du tout.

    Normalement, le but de l'analyse de flot est d'annoter les variables avec des propriétés décrivant leurs valeurs possibles. Pour cela on déroule le programme de toutes les façons possibles. Il y a théoriquement un jeu complet d'annotations séparées par façon de dérouler le programme, même si on peut factoriser. De plus, les annotations doivent être le plus fines possibles (par exemple l'intervalle de valeurs que peut prendre un entier).

    Un noeud dans un tel graphe n'est pas une fonction, mais un bloc de code, ainsi l'intérieur d'un "if" est un noeud indépendant. Mettons que tu as le fragment de code suivant :

    /* bloc A */
    if (cond) {
    /* bloc B */
    }
    /* bloc C */

    Alors le fragment de graphe correspondant comprendra trois noeuds A, B, C, et des arcs A->B, B->C et A->C. L'arc A->B sera annoté avec "cond" et l'arc A->C avec "not cond".

    On comprend vite que sur un programme ou sous-programme non-trivial, la combinatoire est explosive.