Compiler und Codegenerierung. Hw-Sw-Co-Design



Ähnliche Dokumente
Beispiel einer Übersetzung

Technische Informatik 2 Adressierungsarten

Praktikum Compilerbau

Mächtigkeit von WHILE-Programmen

Was ist ein Compiler?

Formale Sprachen und Grammatiken

Übersicht Programmablaufsteuerung

Fachseminar WS 2008/09

Grammatiken. Einführung

Programmiersprachen und Übersetzer

Mikrocomputertechnik. Adressierungsarten

Persönliches Adressbuch

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen

Grundbegriffe der Informatik

teischl.com Software Design & Services e.u. office@teischl.com

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Hardware/Software-Codesign

Static-Single-Assignment-Form

Theoretische Grundlagen der Informatik

Einführung in die Programmierung

Ausgewählte Kapitel eingebetteter Systeme

Statuten in leichter Sprache

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Reservierungs-Assistent

Semantik von Formeln und Sequenzen

Pädagogische Hochschule Thurgau. Lehre Weiterbildung Forschung

IT-Basics 2. DI Gerhard Fließ

Zur drittletzten Zeile scrollen

Algorithmen und Datenstrukturen

Einführung in die C++ Programmierung für Ingenieure

Software Engineering Interaktionsdiagramme

Übungen zu C++ Kapitel 1

Projekt 04: Einstieg in Actionscript: Bestimmung von π mit Monte-Carlo-Methode

Übungen Programmieren 1 Felix Rohrer. Übungen

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

4D Server v12 64-bit Version BETA VERSION

Umgang mit der Software ebuddy Ändern von IP Adresse, Firmware und erstellen von Backups von ewon Geräten.

Datensicherung und Wiederherstellung

QuickInfo Dienstplanerstellungund Dienstplanänderung. Erstellung eines Dienstplan bzw. Arbeitszeitmodell

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

ARAkoll 2013 Dokumentation. Datum:

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

2.11 Kontextfreie Grammatiken und Parsebäume

Benutzerkonto unter Windows 2000

Was meinen die Leute eigentlich mit: Grexit?

Mathematische Grundlagen der Informatik 2

Dokumentenverwaltung im Internet

Wissenswertes über binäre Felder

Tutorium Rechnerorganisation

Theoretische Informatik I

Zählen von Objekten einer bestimmten Klasse

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Theoretische Informatik I

Lieferschein Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

Lehrer: Einschreibemethoden

Primzahlen und RSA-Verschlüsselung

Version 0.3. Installation von MinGW und Eclipse CDT

NODELOCKED LIZENZ generieren (ab ST4)

Versand Etiketten / Endlosdruck

Wurzeln als Potenzen mit gebrochenen Exponenten. Vorkurs, Mathematik

Arge Betriebsinformatik GmbH & Co.KG, CAP News 40, Februar CAP-News 40

Evaluationen. Inhalt. 1. Aufbau einer Evaluation in Stud.IP

Quick Guide Mitglieder

Theoretische Informatik 2 (WS 2006/07) Automatentheorie und Formale Sprachen 19

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

Umzug der abfallwirtschaftlichen Nummern /Kündigung

Anleitung für die Hausverwaltung

Anleitung für die Online-Bewerbung über LSF auf Lehrveranstaltungen aller Lehramtsstudiengänge

Professionelle Seminare im Bereich MS-Office

Seminar Analyse von Petrinetz-Modellen

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

GRS SIGNUM Product-Lifecycle-Management

Grundbegriffe der Informatik

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Das Persönliche Budget in verständlicher Sprache

Ziel: Abfrage von Vorwissen oder Überprüfung des vermittelten Wissens. Teilweise sind Mehrfachnennungen möglich.

Methodische Grundlagen des Software Engineering - Übung 9

MESONIC WINLine Jahreswechsel. Umstellung des Wirtschaftsjahres SMC IT AG

0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags.

Datenstrukturen und Algorithmen

4.9 Deterministische Kellerautomaten Wir haben bereits definiert: Ein PDA heißt deterministisch (DPDA), falls

Der digitale. Workflow Workflow. [PDF-Erstellung aus CorelDraw für Windows]

Anwendungsbeispiele Buchhaltung

Lernmaterial für die Fernuni Hagen effizient und prüfungsnah

1 ÜBERSETZER. Compilerbau 1

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Österreichische Trachtenjugend

Etikettendruck mit Works 7.0

Bedienungsanleitung Albumdesigner. Neues Projekt: Bestehendes Projekt öffnen:

Eine Anwendung mit InstantRails 1.7

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Die Post hat eine Umfrage gemacht

Ihr CMS für die eigene Facebook Page - 1

Fax einrichten auf Windows XP-PC

Leichte-Sprache-Bilder

Benutzerverwaltung Business- & Company-Paket

Es können nur Werte ausgelesen werden, Es kann -NICHT- geschaltet werden!!

Algorithmen und Datenstrukturen 2

Automatisches Parallelisieren

Transkript:

Compiler und Codegenerierung Hw-Sw-Co-Design

Wo sind wir? System Verhalten Modul Architektur Block SW HW Logik Struktur

Compiler und Codegenerierung Compiler - Aufbau Codegenerierung Codeoptimierung Codegenerierung für Spezialprozessoren Retargetable Compiler

Übersetzungsprozess skeletal source program source program assembler program relocatable machine code preprocessor compiler assembler linker / loader library absolute machine code

Phasen eines Compilers Quellprogramm Lexikalische Analyse Analyse Syntaktische Analyse Symboltabelle Semantische Analyse Zwischencodegenerierung Fehlerbehandlung Codeoptimierung Codegenerierung Zielprogramm Synthese

lexikalische Analyse Analyse Quellprogramm scannen und in Symbole zerlegen reguläre Ausdrücke: Erkennung durch endliche Automaten syntaktische Analyse Symbolfolgen parsen und daraus Sätze bilden Sätze werden durch eine kontextfreie Grammatik beschrieben Z Bezeichner := A A A + A A * A Bezeichner Zahl semantische Analyse sicherstellen, dass die Teile sinnvoll zusammenpassen Bsp.: Typumwandlungen

Beispiel (1) Quellprogramm lexikalische Analyse Zuweisungssymbol Operator position := initial + rate * 60 id1 := id2 + id3 60 Bezeichner Zahl

Beispiel (2) syntaktische Analyse semantische Analyse := := id1 + id1 + id2 id2 id3 60 id3 IntToReal 60

Beispiel (3) Zwischencodegenerierung tmp1 := IntToReal(60) tmp2 := id3*tmp1 tmp3 := id2+tmp2 id1 := tmp3 Codeoptimierung tmp1 := id3 * 60.0 id1 := id2 + tmp1 Codegenerierung MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1

Synthese Zwischencode(generierung) maschinenunabhängig retargeting einfacher soll leicht erzeugbar sein soll leicht ins Zielprogramm übersetzbar sein Optimierung GP-Prozessoren: schneller Code, schnelle Übersetzung Spezialprozessoren: schneller Code, kurzer Code, wenig Speicherbedarf Zwischencode und Zielcode optimierbar Codegenerierung

Syntaxbaum und DAG a := b*(c-d) + e*(c-d) Syntaxbaum DAG (directed acyclic graph) := := a + a + b e b c d c d e c d

3-Adress-Befehle 3-Adress-Code (1) maximal 3 Adressen (2 Operanden, 1 Resultat) maximal 2 Operatoren Zuweisungen x := y op z x := op y x := y x := y[i] x[i] := y x := &y y := *x *x := y Kontrollflussbefehle goto L if x relop y goto L Unterprogramme param x call p,n return y

3-Adress-Code (2) Generierung von 3-Adress-Code a b := t3 + t4 t2 t1 t1 := c - d t2 := e * t1 t3 := b * t1 t4 := t2 + t3 a := t4 e c d

Vorteile 3-Adress-Code (3) Auflösung langer arithmetischer Ausdrücke und geschachtelter Schleifen temporäre Namen erlauben einfache Umordnung von Befehlen bereits gültiger Ablaufplan Definition: Ein 3-Adress-Befehl x := y op z definiert x und verwendet y und z

Grundblöcke (1) Definition: Ein Grundblock (basic block) ist eine Folge von fortlaufenden Anweisungen, in die der Kontrollfluss am Anfang eintritt, und die er am Ende verlässt ohne dass er dazwischen anhält oder - außer am Ende - verzweigt. t1 := c - d t2 := e * t1 t3 := b * t1 t4 := t2 + t3 if t4 < 10 goto L

Grundblöcke (2) Sequenz von 3-Adress-Befehlen Menge von Grundblöcken: 1. Bestimmung der Blockanfänge Blockanfänge sind der erste Befehl Ziele von bedingten oder unbedingten Sprüngen Befehle, die direkt auf bedingte oder unbedingte Sprünge folgen 2. Bestimmung der Grundblöcke zu jedem Blockanfang gehört ein Grundblock der Grundblock besteht aus dem Anfang selbst und geht bis zum (exklusive) nächsten Blockanfang oder bis zum Programmende

Kontrollflussgraphen entarteter Kontrollflussgraph (CFG) die Knoten stellen ganze Grundblöcke dar i := 0 t2 := 0 L t2 := t2 + i i := i + 1 if i < 10 goto L x := t2 i < 10 i >= 10

DAG eines Grundblocks Definition: Ein DAG eines Grundblocks ist ein gerichteter azyklischer Graph mit folgender Knotenmarkierung: Blätter werden mit einem Variablen/Konstantennamen markiert. Variablen mit Initialwerten bekommen den Index 0. Innere Knoten werden mit einem Operatorsymbol markiert. Aus dem Operator kann man bestimmen, ob der Wert oder die Adresse der Variablen verwendet wird. Optional kann ein Knoten mit einer Sequenz von Variablennamen markiert werden. Dann wird allen Variablen der berechnete Wert zugewiesen.

Beispiel (1) C Programm 3-Adress Code int i, prod, a[20], b[20];... prod = 0; i = 0; do { prod = prod + a[i]*b[i]; i++; } while (i < 20); (1) prod := 0 (2) i := 0 (3) t1 := 4 * i (4) t2 := a[t1] (5) t3 := 4 * i (6) t4 := b[t3] (7) t5 := t2 * t4 (8) t6 := prod + t5 (9) prod := t6 (10) t7 := i + 1 (11) i := t7 (12) if i < 20 goto (3)

Beispiel (2) Grundblöcke (1) prod := 0 B1 (2) i := 0 (3) t1 := 4 * i B2 (4) t2 := a[t1] (5) t3 := 4 * i (6) t4 := b[t3] (7) t5 := t2 * t4 (8) t6 := prod + t5 (9) prod := t6 (10) t7 := i + 1 (11) i := t7 (12) if i < 20 goto (3) Kontrollflussgraph B1 B2

Grundblock B2 Beispiel (3) + t6,prod DAG für B2 t1 := 4 * i t2 := a[t1] t3 := 4 * i t4 := b[t3] t5 := t2 * t4 t6 := prod + t5 prod := t6 t7 := i + 1 i := t7 if i < 20 goto (3) b prod 0 t4 [] a t5 [] t2 t1,t3 t7,i + < 20 4 i 0 1

Compiler und Codegenerierung Compiler - Aufbau Codegenerierung Codeoptimierung Codegenerierung für Spezialprozessoren Retargetable Compiler

Anforderungen korrekter Code effizienter Code effiziente Generierung Codegenerierung Codegenerierung = Softwaresynthese Allokation: meist schon gegeben Bindung: Registervergabe, Registerzuweisung Befehlsauswahl Ablaufplanung Instruktionsreihenfolge

Registerbindung Ziel: effiziente Nutzung der Register Befehle mit Registeroperanden sind i.allg. kürzer und schneller ausführbar als Befehle mit Speicheroperanden Registervergabe, Registerzuweisung bestimme für jeden Punkt im Programm die Menge der Variablen, die in Registern gehalten werden sollen weise diesen Variablen bestimmte Register zu das Finden einer optimalen Zuweisung ist ein NPvollständiges Problem zusätzlich gibt es Vorgaben für die Verwendung von Registern durch Prozessorarchitektur, Compiler, Betriebssystem

Befehlsauswahl Codemuster für jeden 3-Adress Befehl x := y + z u := x - w Probleme MOV y, R0 ADD z, R0 MOV R0, x MOV x, R0 SUB w, R0 MOV R0, u oft ineffizienter Code generiert Codeoptimierung es kann viele passende Zielinstruktionen geben manche Instruktionen nur mit bestimmten Registern möglich Ausnutzung von speziellen Prozessoreigenschaften Bsp.: autoinkrement / dekrement Adressierung

Ablaufplanung (1) Ziel: effiziente Ausführungsreihenfolge möglichst kurz und möglichst wenige Register t1 + t4 t3 t2 := c + d t3 := e - t2 t1 := a + b t4 := t1 - t3 a b e c + t2 d t1 := a + b t2 := c + d t3 := e - t2 t4 := t1 - t3

Ablaufplanung (2) t2 := c + d t3 := e - t2 t1 := a + b t4 := t1 - t3 t1 := a + b t2 := c + d t3 := e - t2 t4 := t1 - t3 MOV c, R0 ADD d, R0 MOV e, R1 SUB R0, R1 MOV a, R0 ADD b, R0 SUB R1, R0 MOV R0, t4 MOV a, R0 ADD b, R0 MOV c, R1 ADD d, R1 MOV R0, t1 MOV e, R0 SUB R1, R0 MOV t1, R1 SUB R0, R1 MOV R1, t4

Maschinenmodell n Register R0 Rn-1 Byte-adressierbar, 4 Byte bilden ein Wort Instruktionsformat op source, destination Bsp.: MOV R0, a ADD R1, R0 jede Instruktion hat Kosten von 1 Adressen von Speicheroperanden befinden sich in den folgenden Instruktionsworten

Adressierungsarten mode form address added cost absolute M M 1 register R R 0 indexed c(r) c + contents(r) 1 indirect register *R contents(r) 0 indirect indexed *c(r) contents(c+contents(r)) 1 immediate #c c 1

Lebenszeit von Variablen Definition: Ein Name in einem Grundblock ist aktiv an einem bestimmten Punkt, wenn sein Wert nach diesem Punkt noch verwendet wird (möglicherweise in einem anderen Grundblock). Bestimmung der Lebenszeit 1. gehe zum Ende des Grundblocks und notiere, welche Namen am Ausgang aktiv sein müssen 2. gehe rückwärts zum Blockanfang; für jeden Befehl (I) x := y op z binde die Informationen über x, y, z an (I) setze x auf nicht-aktiv und keine-nächste-verwendung setze y, z auf aktiv und nächste-verwendung auf (I)

Einfacher Codegenerator (1) aktuelle Stelle einer Variablen t Register oder Speicher; wenn t sowohl in einem Register als auch im Speicher steht, bevorzuge das Register für jeden 3-Adress-Befehl x := y op z 1. bestimme durch getreg(x) die Stelle L, wo das Ergebnis x abgelegt werden soll 2. bestimme y, die aktuelle Stelle von y; falls y nicht L ist, generiere MOV y, L 3. bestimme z, die aktuelle Stelle von z, und generiere op z, L

Einfacher Codegenerator (2) L = getreg(x) für den Befehl x := y op z 1. wenn y in einem Register R ist, das sonst keine Variablen hält und y keine nächste Verwendung hat: return(r) 2. wenn ein leeres Register R existiert: return(r) 3. wenn x eine nächste Verwendung hat oder op ein Operator ist, der ein Register benötigt (z.bsp. indirekte Adressierung), finde ein belegtes Register R, speichere das Register (MOV R, M) und return(r) 4. wenn x nicht mehr im Grundblock benutzt wird oder kein passendes Register gefunden wurde: return(m x )