Transcript
Page 1: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Design und Implementierung einer Binding Time Analyse für C

Diplomarbeit

von

Daniel Kutzmann

Page 2: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Übersicht

• Einleitung• Partielle Evaluation• Binding Time Analyse• Die Implementierung• Verzweigungen und Pointer• Switch Statement• Weitere Analyseprobleme• Zusammenfassung

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 3: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Einleitung

• Häufiges Problem in der Informatik: Lösen ähnlicher Aufgaben– entweder mit einem generischen

Programm,– oder mit vielen speziellen

Programmen.

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 4: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

• Generisches Programm– Vorteil

• Es muss nur ein Programm entwickelt werden (Zeitersparnis).

• Wird mit Parametern an Aufgabe angepasst

– Nachteil• Meist langsamer als ein spezielles Programm

• Spezielles Programm– Vorteil

• Schnell und klein

– Nachteil• Nur für eine Aufgabe einsetzbar• Deswegen müssen viele Programme entwickelt werden

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 5: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

• Generische Programme sind nur bei genügend Ressourcen möglich– Ressourcen sind in eingebetteten

Systemen meist knapp– Trotzdem soll hier generisch

programmiert werden

• Lösung: Partielle Evaluation– Automatisches spezialisieren eines

generischen Programms

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 6: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Partielle Evaluation

• Ist eine Technik zur Programmoptimierung

• Folgende Idee der Mathematik steht dahinter– Eine Funktion mit 2 Parametern

„spezialisieren“ indem man ein Parameter festhält.

• Bsp f(x,y)=xy wird zu f(x)=x2 bei y=2

– Projektion der Funktion

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 7: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

• Bei der partiellen Evaluierung werden statt Funktionen Programmtexte benutzt.

• Ein partieller Evaluator erstellt aus einem Programm p[in1,in2] und einem Teil seiner Eingabedaten (in1) ein spezialisiertes Programm pin1

• pin1 hat als Eingabe dann nur noch in2

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 8: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Die Funktionalität wird dadurch nicht verändert:

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 9: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

• Das spezialisierte Programm wird in 2 Phasen erstellt– Zunächst werden die

Transformationen der einzelnen Programmteile festgelegt

• Kann dieser Teil ausgewertet werden oder nicht?

• Dazu müssen die tatsächlichen Werte der Variablen nicht bekannt sein

– Danach wird mit dieser Information das Programm spezialisiert

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 10: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Binding Time Analyse

• Ihre Aufgabe: Finde heraus, welche Konstrukte schon während der Spezialisierung berechnet werden können!– Dies sind die Konstrukte, die nur von bekannten

(statischen) Werten abhängen.– Hängt ein Konstrukt auch von unbekannten

(dynamischen) Werten ab, so muss es residualisiert werden.

– Die Partitionierung von globalen Variablen und den Parametern der Startfunktion in statisch und dynamisch wird vom Benutzer vorgegeben

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 11: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

• Beispiel: size, u sind statisch, v ist dynamisch

• size= 5 u=[1,5,8,7,2]

Binding Time Markierungen Residualprogramm

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 12: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Bereits existierende BTAs

• Es gibt zwei partielle Evaluatoren für C: C-Mix & Tempo– Beide haben natürlich auch eine

BTA– Diese BTAs unterscheiden sich

deutlich

• Wenn es bereits BTAs für C gibt, warum dann eine neue entwickeln?

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 13: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

• Beide BTAs „verstehen“ nur einen kleinen Teil der C Syntax– Zu analysierende Programme

müssen vorher vereinfacht werden– Das Residualprogramm

unterscheidet sich sehr stark von Original

• C-Mix ist relativ „ungenau“– Nicht Programmpunkt abhängig– Monovariant

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 14: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

• Tempo ist hier besser...– Flow sensitiv

• Also BTs abhängig vom Programmpunkt

– Context sensitiv• Polyvariante Analyse von Funktionen

– Use sensitiv• Variablendefinitionen können gleichzeitig

ausgewertet und residualisiert werden

• ...aber es kann nicht alles Analysieren– Versteht keine Switch Statements– Ungenau bei Structs– ...

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 15: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Die Implementierung

• Die erstellte Implementierung benutzt den selben Ansatz wie die BTA von Tempo, dieser wird– erweitert, so dass annähernd die

komplette C Syntax analysiert werden kann

– verbessert, so dass die Analyseergebnisse genauer sind

• Weniger Überabschätzungen

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 16: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

• Die BTs werden mittels abstrakter Interpretation berechnet– Interpretieren des Programms über

die abstrakten Werte statisch/dynamisch

– Abstrakter Speicher wird durch einen Zustand (State) repräsentiert

– Ergebnis wird außerdem am Konstrukt gespeichert

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 17: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

• Analyse wird in 2 Phasen durchgeführt– Binding Time Phase (vorwärts)

• Berechnet ob ein Konstrukt nur von statischen Werten abhängt (dann ist es statisch) oder auch von dynamischen (dann ist es dynamisch).

– Transformation Phase (rückwärts)• Berechnet ob ein Konstrukt während der

Spezialisierung ausgewertet und/oder residualisiert wird

• Dies hängt natürlich von der BT ab, aber zusätzlich noch von den Kontexten der Variablenbenutzung und dem Typ der Variablen (liftable?)

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 18: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Binding Time Phase

• Ein Konstrukt bekommt hier immer eines von zwei Werten– Static: Wenn das Konstrukt nur von

statischen Werten abhängt– Dynamic: Wenn das Konstrukt auch

von dynamischen Werten abhängt

• In BTState wird der aktuelle Zustand gespeichert

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 19: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 20: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic)}BTState={(a,static),(b,static),(c,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 21: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic)}BTState={(a,static),(b,static),(c,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 22: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 23: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 24: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 25: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic) } ,(res,static)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 26: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,static)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 27: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,static)}BTState={(a,static),(b,static),(c,dynamic), (res,static)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 28: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,static)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 29: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,static)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 30: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,static)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 31: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,static) }(res,dynamic)

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 32: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 33: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 34: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 35: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 36: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 37: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res=2;}

BTState={(a,static),(b,static),(c,dynamic), (res,static)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 38: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Transformation Phase• Hier bekommt jedes Konstrukt eines der

folgenden Werte– Bottom: Dieses Konstrukt wird nicht benutzt (z.B.

toter Code)– Evaluate: Dieses Konstrukt wird ausgewertet– Residualize: Dieses Konstrukt wird residualisiert– Eval&Res: Dieses Konstrukt wird ausgewertet und

residualisiert

• Eine globale Variable tr gibt die aktuelle Transformation an

• In TrState werden die Transformations der Benutzungen einer Variablen seit ihrer letzten Definition gespeichert

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 39: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={}tr=Bottom

{(res,Bottom)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 40: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={(res,Bottom)}tr=Bottom

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 41: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={(res,Bottom)}tr=BottomResidualize

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 42: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={(res,Bottom)}tr=Residualize

{(res,Residualize)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 43: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={(res,Residualize)}tr=Residualize

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 44: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={(res,Residualize)}tr=Residualize

{}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 45: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={}tr=Residualize

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 46: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={}tr=Residualize

{(res,Evaluate)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 47: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={(res,Evaluate),(c,Residualize)}tr=Residualize

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 48: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={(res,Evaluate),(c,Residualize)}tr=Residualize

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 49: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={(res,Evaluate),(c,Residualize)}tr=ResidualizeEvaluate

{(c,Residualize)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 50: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2;}

TrState={(c,Residualize)}tr=Evaluate

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 51: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Verzweigungen und Pointer

• Die bisher gezeigten Konstrukte waren relativ einfach zu analysieren. Verzweigungen und Pointer werfen allerdings neue Fragen auf– Verzweigungen: Welche BT hat eine

Variable nach einem If Statement? Wovon hängt die BT hier ab?

– Pointer:Wie wird der Pointer benutzt? Wenn er dereferenziert wird, ist dann bekannt welche Variable benutzt wird? Zu welchem Zeitpunkt ist dies bekannt?

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 52: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

If Statement

• Eine Möglichkeit wäre es, nach einem If Statement zwei Programmstränge zu bearbeiten

• Diese BTA macht dies nicht– Sie vereinigt die zwei Stränge nach

einem If– Variablen die während der Partiellen

Evaluation bekannt sind, sollen dabei statisch bleiben

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 53: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

if (Static_Expr) { a= Static_Expr; b= Static_Expr;}else { a= Static_Expr; b= Dynamic_Expr;}

BTState={(a,dynamic),(b,static)}

BTState={(a,dynamic),(b,static)}

BTState={(a,static),(b,static)}

BTState={(a,dynamic),(b,static)}

BTState={(a,static),(b,dynamic)}

BTState= ?BTState={(a,static),(b,dynamic)}

Was ist zum Zeitpunkt der Partiellen Evaluation bekannt?

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 54: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

if (Dynamic_Expr) { a= Static_Expr; b= Static_Expr;}else { a= Static_Expr; b= Dynamic_Expr;}

BTState={(a,dynamic),(b,static)}

BTState={(a,dynamic),(b,static)}

BTState={(a,static),(b,static)}

BTState={(a,dynamic),(b,static)}

BTState={(a,static),(b,dynamic)}

BTState= ?BTState={(a,dynamic),(b,dynamic)}

Was ist zum Zeitpunkt der Partiellen Evaluation bekannt?

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 55: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Pointer

• Häufig interessiert in der BTA nicht der Wert des Pointers, sondern die Variablen auf die der Pointer zeigt

• Die BTA weiß nichts über den tatsächlichen Wert eines Pointers– Die Information, worauf ein Pointer zeigt,

ist allerdings für die Analyse zwingend notwendig

– Deswegen muss diese Information noch vor der BTA berechnet werden

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 56: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

• Diese Berechnung ist Aufgabe der UseDef Analyse– Sie errechnet für jedes Konstrukt welche

Variablen dort benutzt bzw. definiert werden– Diese Berechnungen sind nicht immer

eindeutig. Es werden also alle möglicherweise benutzen und definierten Variablen berechnet

• Die Qualität dieser Analyse ist entscheidend für die Qualität der BTA– Peac benutzt einen gegenüber bisherigen

Analysen verbesserten Algorithmus. Die Ergebnisse stehen der BTA zur Verfügung

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 57: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int i,j *p;p= &i;*p=2; (p -> i)

int i,j *p;if (static) p= &i;else p= &j; *p=2; (p -> i,j)

BTState={(i,dynamic),(j,static)}

Zugewiesene Variable während BTA bekannt!

BTState={(i,static),(j,static)}

BTState={(i,dynamic),(j,static)}Zugewiesene Variable während BTA unbekannt aber während Partieller Evaluation bekannt!

BTState={(i,dynamic),(j,static)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 58: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

int i,j *p;if (dynamic) p= &i;else p= &j; *p=2; (p -> i,j)

BTState={(i,dynamic),(j,static)}Zugewiesene Variable während BTA unbekannt und während Partieller Evaluation unbekannt!

BTState={(i,dynamic),(j,dynamic)}

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 59: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Switch Statement

• Bisher gab es keine Programmpunkt abhängige Analyse für Switchs

• In dieser Arbeit wurde eine Analyse dafür entwickelt– Relativ komplex durch die Möglichkeit des

breaks

• Die wichtige Frage ist immer: Auf welchem Weg kann ich an diesen Programmpunkt kommen?– Welcher State muss dann dort gelten?

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 60: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

switch (x) { case 1: ... break; case 2: ... if(y) break; case 3: ... default: ...}

Vom switch ist ein Sprung zu jedem case möglich

Bei einem case mit unbedingtem break ist der Kontrollfluss eindeutig

Bei einem case mit bedingtem break gibt es zwei Möglichkeiten

Bei einem case ohne break ist der Kontrollfluss wieder eindeutig

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 61: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

switch (statisch) { case 1: ... break; case 2: ... if(y) break; case 3: ... default: ...}

Welcher State ist nun an den cases aktuell?

• Dies hängt davon ab, wie das case erreicht werden kann

• Ein case kann immer vom Anfang des switchs erreicht werden

• Am case muss der aktuelle State mit dem State vom Beginn des switchs vereinigt werden

• Ein case kann vom vorherigen case erreicht werden, falls kein break davor steht

• Dies geschieht automatisch durch die Vereinigung. Ein break leert den aktuellen State. Dadurch wir erreicht, dass in diesem Fall nur der State vom Beginn des switchs eine Rolle spielt

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 62: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

switch (statisch) { case 1: ... break; case 2: ... if(y) break; case 3: ... default: ...}

Und welcher nach dem Switch?

• Auch hier müssen alle möglichen Pfade vom Beginn zum Ende des switchs beachtet werden

• Das Ende wird entweder nach dem letzten case oder von einem break erreicht.

• Jeder der dort aktuellen States kann auch am Ende des switchs gelten

• Deswegen wird bei einem break der dort aktuelle State aufgesammelt

• und dann am Ende mit dem dort aktuellen State vereinigt

•Hat das switch kein default, kann es sein, dass nichts aus dem switch ausgeführt wird

•In diesem Fall muss auch der State vom Anfang des switchs mit dem am Ende vereinigt werden

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 63: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

switch (dynamisch) { case 1: ... break; case 2: ... if(y) break; case 3: ... default: ...}

Was ist bei einem dynamischen switch?

• Hier ist auch während des Residualisierens nicht klar, welcher Pfad genommen wird

•An jedem case müssen also alle Variablen des switchs, die bis dahin definiert worden sein können, dynamisch werden

• das sind alle Variablen, die seit dem letzten break definiert wurden

•Am Ende des switchs müssen alle Variablen die irgendwo im switch definiert wurden dynamisch

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 64: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Weitere Analyseprobleme

• Ebenfalls umfangreiche Überlegungen erfordert die Analyse von Funktionen und Schleifen

• Hier soll nur kurz auf die dabei entstehenden Probleme hingewiesen werden

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 65: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Funktionen• Können mehrere Return Statements haben

– Wird ähnlich behandelt wie breaks in switchs

• Können Seiteneffekte haben– Es muss zwischen BT des Returns und BT der

Seiteneffekte unterschieden werden

• Können in unterschiedlichem BT Kontext vorkommen– Jede Funktion muss bei einem neuen Kontext

neu analysiert werden– Jedes Konstrukt kann mehr als eine BT haben

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 66: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Schleifen

• Schleifen werden möglicherweise mehrmals durchlaufen– Eine Variablendefinition unterhalb des

aktuellen Programmpunkts kann das aktuelle Konstrukt beeinflussen

• Auch hier gibt es breaks und continues– Muss wieder ähnlich behandelt werden

wie beim switch

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 67: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Zusammenfassung

• Es wurde eine Binding Time Analyse für C implementiert

• Anders als herkömmliche Analysen versteht sie nahezu die vollständige C Syntax

• Erstmals können Switch Statements flow sensitiv analysiert werden

• Auch die Programmpunkt abhängige Analyse von Structs ist ein Novum

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung

Page 68: Design und Implementierung einer Binding Time Analyse für C

Integrierte Schaltungen und SystemeProf. Dr.-Ing. Sorin A. Huss

Vielen Dank für Ihre

Aufmerksamkeit

EinleitungPartielle EvaluationBinding Time AnalyseDie Implementierung Binding Time Phase Transformation Ph.Verzw. & PointerSwitch StatementWeitere AnalysenZusammenfassung


Top Related