Praktikum Compilerbau Sitzung 7 libfirm

Ähnliche Dokumente
Praktikum Compilerbau Sitzung 4 Semantik und Typprüfung

Praktikum Compilerbau Sitzung 10 Codeerzeugung

Praktikum Compilerbau Sitzung 4 Abstrakter Syntaxbaum

Praktikum Compilerbau Sitzung 6 libfirm Teil 2

Universität Karlsruhe (TH)

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

14 Abstrakte Klassen, finale Klassen, Interfaces

Praktikum Compilerbau Sitzung 9 Codeerzeugung

Software Entwicklung 1

II.4.2 Abstrakte Klassen und Interfaces - 1 -

12 Abstrakte Klassen, finale Klassen und Interfaces

Programmierung Nachklausurtutorium

Programmieren in Java

Einstieg in die Informatik mit Java

5. Tutorium zu Programmieren

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Praktikum Compilerbau Sitzung 6 libfirm

Vorkurs Informatik WiSe 15/16

1 Abstrakte Klassen, finale Klassen und Interfaces

Einstieg in die Informatik mit Java

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Binärbäume. Prof. Dr. E. Ehses,

Einstieg in die Informatik mit Java

Datenstruktur Baum Software Entwicklung 1

Die abstrakte Klasse Expression:

Client-Server-Beziehungen

Programmieren in Java

Klassen und Konstruktoren in Java

Ersetzbarkeit und Verhalten

Informatik II Übung 7. Pascal Schärli

Abstrakte Basisklassen

Algorithmen und Datenstrukturen CS1017

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Einführung in die Informatik 1

II.4.5 Generische Datentypen - 1 -

Prüfung Softwareentwicklung II (IB)

Abstrakte Basisklassen

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Software Entwicklung 1

Java Einführung Abstrakte Klassen und Interfaces

1 Maschinenunabhängige Optimierungen. Maschinenunabhängige Optimierungen Wintersemester 2008/09 1 / 17

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Aktivitätsanalyse (Liveness Analysis)

2.3 Implementierung und Anwendung von ADT Anwendung von ADT... am Beispiel "Stapel"

Praktikum Compilerbau Sitzung 9 Java Bytecode

Kapitel 5: Interfaces

Grundlagen der Modellierung und Programmierung, Übung

Name: Seite 1. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Objektorientierte Programmierung

Informatik II SS Der Kompilationsprozess (-phasen) Schreiben des Programms. Die Organisation eines typischen Compilers

3. Übungsbesprechung Programmkonstruktion

Info B VL 11: Innere Klassen/Collections

3. Java - Sprachkonstrukte I

Einführung in die Informatik 2

ADT: Verkettete Listen

Programmieren 2 Java Überblick

public static void replace(stringbuffer b) { for (int i = 0; i < b.length(); i++) { char replacechar; switch( b.charat(i) ) {

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Bäume 1. Thomas Röfer

Enhanced Collection API

Sprachtechnologie und Compiler

Graphalgorithmen. Graphen

OPP II Klausuraufgaben - Schnittstellen

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Übung Algorithmen und Datenstrukturen

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Paket umfaßt alle Dateien bzw. Klassen im selben Ordner. Kürzer durch Import-Deklaration (am Dateianfang)

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Kapitel 4: Datentyp Keller und Schlange

22. Subtyping, Polymorphie und Vererbung

Einfache Datentypen in JAVA

Aufgabe 1 (Programmanalyse):

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

Übungsstunde 10. Einführung in die Programmierung I

Bäume, Anwendung und Begriffe

Special on Design Patterns Übungen zur objektorientierten Programmierung und Modellierung

Wintersemester 2004/ Januar Aus der Vorlesung sind Datenstrukturen zur Repräsentation von Wäldern disjunkter Mengen bekannt.

Java Grundlagen 2 - OOP

Programmieren in Java

12.1 Das Schlüsselwort super

Allgemeine Informatik II SS :30-13:30 Uhr

Variablenarten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Theorie zu Übung 8 Implementierung in Java

Informatik II - Übung 07

Kapitel 11: Bäume. Beispiele Definition und Eigenschaften Implementierungen Durchlaufen von Bäumen Binäre Suchbäume

Analyse und Modellierung von Informationssystemen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Analyse und Modellierung von Informationssystemen

ADT: Verkettete Listen

Programmieren I. Kapitel 10. Spezielle Features

Anweisungen zur Ablaufsteuerung

Transkript:

Praktikum Compilerbau Sitzung 7 libfirm Lehrstuhl für Programmierparadigmen Universität Karlsruhe (TH) 3. Juni 29 (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 / 2

Letzte Woche 2 Firmgraph Optimierungen 3 Aufgabe 4 Sonstiges (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 2 / 2

Letzte Woche Letzte Woche Was waren die Probleme? Hat soweit alles geklappt? (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 3 / 2

Firmgraph Optimierungen Letzte Woche 2 Firmgraph Optimierungen 3 Aufgabe 4 Sonstiges (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 4 / 2

Firmgraph Optimierungen Compilerphasen Lexer Parser Tokens AST Semantik Zwischencodeerzeugung Optimierung attributierter AST Zwischencode Zwischencode Codeerzeugung (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 5 / 2

Firmgraph Optimierungen Optimieren mit Firm Ersetzen von teueren Strukturen durch Billigere Entfernen unnötiger Befehle Gemeinsame Teilausdrücke Konstantenfalten Arithmetische Vereinfachung... Graphbasierter Zwischencode Ablaufen des Graphen SSA Form Def-Use enthalten Viele Optimierungen gehen einfacher (ohne Datenfluss Analyse) Tipp: Normalisieren als erster Schritt hilft oft (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 6 / 2

Firmgraph Optimierungen Beispiel: Konstantenfalten public int foo3() { int x; x = 2 + 3; return x + x + 4; Konstante Ausdrücke vorberechnen Variablen mit Konstanten Werten propagieren In Firm sehr einfach: keine Variablen vorhanden public int foo3() { return 4; (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 7 / 2

Firmgraph Optimierungen Beispiel: Firmgraph foo3()i Block 46 public int foo3() { int x; x = 2 + 3; return x + x + 4; Start 49 ProjM 54 ProjX X_initial_exec 5 Block 56 ConstIs x3 59 ConstIs x2 58 AddIs 6 AddIs 6 ConstIs x4 62 AddIs 63 Return 65 Block 44 End 45 (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 8 / 2

Firmgraph Optimierungen Beispiel: Firm Konstantenfalten Block 56 Graph durchlaufen und konstante Ausdrücke suchen Wie durchlaufen? Tiefensuche, Breitensuche, Postorder,...? ConstIs x3 59 ConstIs x2 58 AddIs 6 AddIs 6 ConstIs x4 62 AddIs 63 Return 65 (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 9 / 2

Firmgraph Optimierungen Tiefensuche void preorder(node node) { act(node); for (Node pred : node.predcessors) { preorder(pred); void postorder(node node) { for (Node pred : node.predcessors) { postorder(pred); act(node); (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 / 2

Firmgraph Optimierungen Beispiel: Tiefensuche Block 56 ConstIs x3 59 ConstIs x2 58 AddIs 6 AddIs 6 ConstIs x4 62 AddIs 63 Return 65 (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 / 2

Firmgraph Optimierungen Start 49 Beispiel: Tiefensuche ProjM 54 ProjX X_initial_exec 5 ConstIs x3 59 ConstIs x2 58 Block 56 Preorder Block 56 AddIs 6 ConstIs x5 67 AddIs 6 ConstIs x4 62 AddIs 6 ConstIs x4 62 AddIs 63 Return 65 AddIs 63 Return 65 Block 44 End 45 (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 / 2

Firmgraph Optimierungen Beispiel: Tiefensuche Block 56 ConstIs x3 59 ConstIs x2 58 AddIs 6 AddIs 6 ConstIs x4 62 AddIs 63 Return 65 (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 2 / 2

Firmgraph Optimierungen Beispiel: Tiefensuche Start 49 Block 46 ConstIs x3 59 ConstIs x2 58 Block 56 ProjM 54 ProjX X_initial_exec 5 AddIs 6 AddIs 6 ConstIs x4 62 Postorder Block 56 ConstIs xe 69 AddIs 63 Return 65 Return 65 Block 44 End 45 (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 2 / 2

Firmgraph Optimierungen Graph traversieren in Firm Preorder Tiefensuche im Firmgraph: walk(nodevisitor visitor) Postorder Tiefensuche im Firmgraph: walkpostorder(nodevisitor visitor) public interface NodeVisitor { void visit(nomem node); void visit(end node);... static abstract class Default implements NodeVisitor { public abstract void defaultvisit(node n); public void visit(nomem node) { defaultvisit(node); (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 3 / 2

Firmgraph Optimierungen Beispiel: Konstantenfalten - Initialisierung public class FoldConstants extends NodeVisitor.Default { private final Graph graph; public FoldConstants(Graph method) { this.graph = method; public void optimize() { graph.walkpostorder(this); //graph.walk(this); public void defaultvisit(node n) { // Leave nodes untouched per default. (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 4 / 2

Firmgraph Optimierungen Beispiel: Konstantenfalten - Add public void visit(add add) { Node left = add.getleft(); Node right = add.getright(); if (left instanceof Const && right instanceof Const) { Const c = (Const) left; Const c2 = (Const) right; TargetValue val = c.gettarval(); TargetValue val2 = c2.gettarval(); TargetValue valsum = val.add(val2); Node sum = graph.newconst(valsum); Graph.exchange(add, sum); (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 5 / 2

Firmgraph Optimierungen Demo Demo (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 6 / 2

Aufgabe Letzte Woche 2 Firmgraph Optimierungen 3 Aufgabe 4 Sonstiges (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 7 / 2

Aufgabe Optimierungen Implementiere Konstantenfaltung. Entwirf eine sinnvolle Normalisierung und begründe sie. Implementiere die Normalisierung. (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 8 / 2

Sonstiges Letzte Woche 2 Firmgraph Optimierungen 3 Aufgabe 4 Sonstiges (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 9 / 2

Sonstiges Feedback! Fragen? Probleme? Anmerkungen? Probleme? Fragen? (IPD Snelting) Sitzung 7 libfirm 3. Juni 29 2 / 2