Qu'est-ce que Représentation intermédiaire ?

Forme interne au compilateur représentant le programme indépendamment du langage source et du CPU. La plupart des optimisations s'y effectuent, ce qui sépare le front-end propre au langage du back-end propre au CPU.

Nom japonais: 中間表現

« Représentation intermédiaire » apparaît dans 5 questions d'entraînement réparties sur 1 thèmes, dont Compilateurs.

Domaine: Compilateurs

S'entraîner : questions sur Représentation intermédiaire

Quel est le principal avantage d'utiliser, à l'intérieur d'un compilateur, une représentation intermédiaire (IR) indépendante du langage source comme du CPU ?

  1. AElle permet de compiler sans lire le code source
  2. BLe CPU pouvant l'exécuter telle quelle, la génération de code machine devient inutile
  3. CElle sépare la partie avant propre à chaque langage de la partie arrière propre à chaque CPU, et les optimisations peuvent être partagées
Afficher la réponse et l'explication

Réponse : C. Elle sépare la partie avant propre à chaque langage de la partie arrière propre à chaque CPU, et les optimisations peuvent être partagées

Pour prendre en charge M langages et N CPU, un compilateur par combinaison en exigerait M×N ; avec une représentation intermédiaire commune, M parties avant (frontend) du langage vers l'IR et N parties arrière (backend) de l'IR vers le CPU suffisent. La plupart des optimisations, réalisées une fois sur l'IR, profitent à tous les langages et CPU. L'IR n'est pas directement exécutable par le CPU et doit finalement être convertie en code machine.

Quelle caractéristique d'une représentation intermédiaire en forme SSA est correcte ?

  1. AChaque variable n'est affectée qu'exactement une fois dans le programme
  2. BToutes les variables sont placées en mémoire et non en registres
  3. CLe programme est réécrit sans aucune instruction de branchement conditionnel
Afficher la réponse et l'explication

Réponse : A. Chaque variable n'est affectée qu'exactement une fois dans le programme

En forme SSA, les variables sont renommées pour n'être affectées qu'une fois, et aux points de jonction une fonction φ choisit la valeur. Par exemple, une variable x affectée deux fois est scindée en x1 et x2, ce qui rend explicite laquelle est utilisée. Les relations définition-utilisation étant claires, les optimisations comme la propagation de constantes ou l'élimination de code mort sont facilitées. Les branchements étant traités par les fonctions φ, les instructions de branchement ne disparaissent pas. Les variables ne sont pas non plus placées en mémoire ; elles sont le plus souvent traitées comme candidates aux registres.

« Représentation intermédiaire » dans les explications

Questions mentionnant « Représentation intermédiaire » (5)

  1. Quel est le principal avantage d'utiliser, à l'intérieur d'un compilateur, une représentation intermédiaire (IR) indépendante du langage source comme du CPU ?
  2. Quelle caractéristique d'une représentation intermédiaire en forme SSA est correcte ?
  3. Quelle est l'architecture de base de LLVM ?
  4. Quelle optimisation l'optimisation à l'édition de liens (LTO) rend-elle possible ?
  5. Quelle définition de la sélection d'instructions, l'une des étapes de la génération de code, est correcte ?

Termes associés

Forme SSA LLVM GPU Inlining (expansion en ligne) FMA (multiplication-addition fusionnée) Allocation de registres Analyse lexicale Analyse syntaxique Arbre syntaxique abstrait (AST) Bloc de base

Retour au glossaire