Chap. 10, Intermediate Representations J. H. Wang Dec. 14, 2015.

Slides:



Advertisements
Similar presentations
Chapter 16 Java Virtual Machine. To compile a java program in Simple.java, enter javac Simple.java javac outputs Simple.class, a file that contains bytecode.
Advertisements

Virtual Machines Matthew Dwyer 324E Nichols Hall
1 Lecture 10 Intermediate Representations. 2 front end »produces an intermediate representation (IR) for the program. optimizer »transforms the code in.
Chapter 8 ICS 412. Code Generation Final phase of a compiler construction. It generates executable code for a target machine. A compiler may instead generate.
Compilation 2007 Code Generation Michael I. Schwartzbach BRICS, University of Aarhus.
Programming Languages Marjan Sirjani 2 2. Language Design Issues Design to Run efficiently : early languages Easy to write correctly : new languages.
1 1 Lecture 14 Java Virtual Machine Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung Institute of Technology.
CS 153: Concepts of Compiler Design November 10 Class Meeting Department of Computer Science San Jose State University Fall 2014 Instructor: Ron Mak
Chapter 5: Elementary Data Types Properties of types and objects –Data objects, variables and constants –Data types –Declarations –Type checking –Assignment.
The Java Virtual Machine
Advice Weaving in AspectJ Alex Gontmakher. Outline Possible implementation approaches Quick JVM primer AJC implementation Performance Evaluation.
Lab 9 Java Bytecode & The Jasmin Assembler
1 Chapter 4 Language Fundamentals. 2 Identifiers Program parts such as packages, classes, and class members have names, which are formally known as identifiers.
IPT Readings on Instrumentation, Profiling, and Tracing Seminar presentation by Alessandra Gorla University of Lugano December 7, 2006.
Procedure calls (1) The fact: Most programming languages support the concept of procedures (methods). Each method has its own local variables that are.
Compilation 2007 The What and Why of Compilers Michael I. Schwartzbach BRICS, University of Aarhus.
JVM-1 Introduction to Java Virtual Machine. JVM-2 Outline Java Language, Java Virtual Machine and Java Platform Organization of Java Virtual Machine Garbage.
Chapter 2: Impact of Machine Architectures What is the Relationship Between Programs, Programming Languages, and Computers.
Chapter 16 Java Virtual Machine. To compile a java program in Simple.java, enter javac Simple.java javac outputs Simple.class, a file that contains bytecode.
Compilation 2007 The Java Virtual Machine Michael I. Schwartzbach BRICS, University of Aarhus.
Compiler Construction1 A Compulsory Module for Students in Computer Science Department Faculty of IT / Al – Al Bayt University First Semester 2009/2010.
CSc 453 Interpreters & Interpretation Saumya Debray The University of Arizona Tucson.
Code Generation Introduction. Compiler (scalac, gcc) Compiler (scalac, gcc) machine code (e.g. x86, arm, JVM) efficient to execute i=0 while (i < 10)
Intro to Java The Java Virtual Machine. What is the JVM  a software emulation of a hypothetical computing machine that runs Java bytecodes (Java compiler.
David Evans CS201j: Engineering Software University of Virginia Computer Science Lecture 18: 0xCAFEBABE (Java Byte Codes)
Introduction to Java Appendix A. Appendix A: Introduction to Java2 Chapter Objectives To understand the essentials of object-oriented programming in Java.
JVM And CLR Dan Agar April 16, Outline Java and.NET Design Philosophies Overview of Virtual Machines Technical Look at JVM and CLR Comparison of.
UNDER THE HOOD: THE JAVA VIRTUAL MACHINE Lecture 24 – CS2110 – Fall 2009.
Arpit Jain Mtech1. Outline Introduction Dalvik VM Java VM Examples Comparisons Experimental Evaluation.
1 The Java Virtual Machine Yearly Programming Project.
The Java Virtual Machine 1 Course Overview PART I: overview material 1Introduction 2Language processors (tombstone diagrams, bootstrapping) 3Architecture.
Implement High-level Program Language on JVM CSCE 531 ZHONGHAO LIU ZHONGHAO LIU XIAO LIN.
Machine Instruction Characteristics
1 October 1, October 1, 2015October 1, 2015October 1, 2015 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University Azusa.
Java Bytecode What is a.class file anyway? Dan Fleck George Mason University Fall 2007.
ITEC 352 Lecture 20 JVM Intro. Functions + Assembly Review Questions? Project due today Activation record –How is it used?
Lecture 10 : Introduction to Java Virtual Machine
Java Programming Introduction & Concepts. Introduction to Java Developed at Sun Microsystems by James Gosling in 1991 Object Oriented Free Compiled and.
1 Introduction to JVM Based on material produced by Bill Venners.
A Java Compiler Overview. October 21, 2003Shane A. Brewer2 Who Am I? Shane A. Brewer Masters Graduate.
Syntax Directed Translation Compiler Design Lecture (03/16//98) Computer Science Rensselaer Polytechnic.
Computer Architecture Instruction Set Architecture Lynn Choi Korea University.
12/10/2002© 2002 Hal Perkins & UW CSET-1 CSE 582 – Compilers Java Implementation – JVMs, JITs &c Hal Perkins Autumn 2002.
Unit-1 Introduction Prepared by: Prof. Harish I Rathod
Object-Oriented Program Development Using Java: A Class-Centered Approach, Enhanced Edition.
Building a Java Interpreter CS 142 (b) 01/14. Lab Sessions Monday, Wednesday – 10am – noon – ICS 189 Send an or make an appointment with the TA.
CS216: Program and Data Representation University of Virginia Computer Science Spring 2006 David Evans Lecture 18: Code Safety and Virtual Machines
Chap. 10, Intermediate Representations J. H. Wang Dec. 27, 2011.
UNDER THE HOOD: THE JAVA VIRTUAL MACHINE II CS2110 Fall 200 Lecture 25 1.
Review on Program Challenge CSc3210 Yuan Long.
Recap: Printing Trees into Bytecodes To evaluate e 1 *e 2 interpreter –evaluates e 1 –evaluates e 2 –combines the result using * Compiler for e 1 *e 2.
RealTimeSystems Lab Jong-Koo, Lim
CS 536 © CS 536 Spring Introduction to Programming Languages and Compilers Charles N. Fischer Lecture 15.
CS 153: Concepts of Compiler Design November 9 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak
CS 432: Compiler Construction Lecture 15
The Java Virtual Machine (JVM)
Compilers Principles, Techniques, & Tools Taught by Jing Zhang
CS216: Program and Data Representation
CS 153: Concepts of Compiler Design November 2 Class Meeting
Java Virtual Machine (JVM)
Java Byte Codes (0xCAFEBABE) cs205: engineering software
CSc 453 Interpreters & Interpretation
Lecture 19: 0xCAFEBABE (Java Byte Codes) CS201j: Engineering Software
Byte Code Verification
Course Overview PART I: overview material PART II: inside a compiler
CS 153: Concepts of Compiler Design November 6 Class Meeting
Building a Java Interpreter
CMPE 152: Compiler Design April 11 Class Meeting
Course Overview PART I: overview material PART II: inside a compiler
CMPE 152: Compiler Design April 16 Class Meeting
Presentation transcript:

Chap. 10, Intermediate Representations J. H. Wang Dec. 14, 2015

Outline Overview Java Virtual Machine Static Single Assignment Form

Overview Ch.7: AST Ch.8-9: Semantic analysis Ch.10: Intermediate representation Ch.11: Code synthesis for virtual machines Ch.12: Runtime support Ch.13: Target code generation

Overview Semantic gap between high-level source languages and target machine language Examples –Early C++ compilers cpp: preprocessor cfront: translate C++ into C C compiler

Another Example LaTeX –TeX: designed by Donald Knuth –dvi: device-independent intermediate representation –Ps: PostScript –pixels Portability enhanced

Challenges –An intermediate language (IL) must be precisely defined –Translators and processors must be crafted for an IL –Connections must be made between levels so that feedback from intermediate steps can be related to the source program Other concerns –Efficiency

The Middle-End Front-end: parser Back-end: code generator Middle-end: components between front- and back-ends Compiler suites that host multiple source languages and target multiple instruction sets obtain great leverage from a middle-end –Ex: s source languages, t target languages s*t vs. s+t

Additional Advantages An IL allows various system components to interoperate by facilitating access to information about the program –E.g. variable names and types, and source line numbers could be useful in the debugger An IL simplifies development and testing of system components The middle-end contains phases that would otherwise be duplicated among the front- and back-ends It allows components and tools to interface with other products

It can simply the pioneering and prototyping of news ideas The ILs and its interpreter can serve as a reference definition of a language Interpreters written for a well-defined IL are helpful in testing and porting compilers An IL enables the crafting of a retargetable code generator, which greatly enhances its portability –Pascal: P-code –Java: JVM –Ada: DIANA (Descriptive Intermediate Attributed Notation for Ada)

Java Virtual Machine Java class files: binary encodings of the data and instructions in a Java program Design principles (borrowed from JVM reference) –Compactness Instructions in nearly zero-address form –A runtime stack is used –Operands are implicit »E.g.: iadd instructionL pops two items and pushes the sum onto TOS (tops of stack) –A loss of runtime performance Multiple instructions to accomplish the same effect –To push 0 on TOS » iconst_0 : 1 byte » ldc_w 0 : 3 bytes

–Safety An instruction can reference storage only if it’s of the type allowed by the instruction, and only if the storage is located in an area appropriate for access From security’s point of view, purely zero-address form is problematic –The registers that could be accessed by a load instruction may not be known until runtime –JVM: not zero-address »E.g. iload 5 When a class file is loaded, many other checks are performed by the bytecode verifier

Contents of a Class File A class file is organized into sections called attributes that contain various information about the compiled class –Types: primitive and reference types –(Fig. 10.4) Primitive type: a single character Reference type t : L t; –E.g.: String type in java.lang package: Ljava/lang/String; Array: [ a

–Constant pools tagged union –int, float, java.lang.String Referenced by its ordinal position, not byte-offset –1 byte for some instructions, e.g. ldc –2 bytes for some instructions, e.g. ldc_w

JVM Instructions Arithmetic Register traffic Registers and types Static fields Instance fields Branching Other method calls Stack operations

Arithmetic Popping operands from the runtime stack, computing result, and pushing the result on TOS –E.g. iadd int: 32-bit, 2’s complement –For other primitive types fadd(float) ladd(long) dadd(double) –Subtraction, multiplication, division, …

Register Traffic JVM has an unlimited number of virtual registers –Usually allocated in a method’s stack frame JVM registers typically host a method’s local variables –Registers starting from 0 are set aside for a method’s parameters JVM registers are untyped –iload 2: push iload_2: abbreviated (2 bytes) –istore 10: pop –fload n: for float values –aload and astore: for reference types (32 bits for object references)

Registers and Types Static analysis (or bytecode verification) –To ensure that values flow in and our of registers without compromising Java’s type systems JVM appears to be stricter than Java language –E.g. Type conversion i2f: from 2’s complement to IEEE floating point format

Static Fields A class’s static fields are present in every instance of the class getstatic name type : push –E.g.: getstatic java/lang/System/out Ljava/io/PrintStream; –Only 3 bytes in representation One: getstatic opcode Two: 16-bit integer specifying a constant-pool entry putstatic: pop

Instance Fields A class can declare instance field for which instance-specific storage is allocated getfield name type : push –E.g.: getfield Point/x I putfield: pop –putfield Point/x I

Branching Instructions to alter the control flow of the executing program –Unconditional goto: (3 bytes) goto_w: 5 bytes –Conditional branches Comparison against 0: ifeq, ifne, iflt, ifle, ifgt, ifge Comparison of non-zero values: if_icmpeq, if_icmpne, if_icmplt, if_icmple, if_icmpgt, if_icmpge

Static Method Calls Static methods: are common to all instances of some type t –E.g.: Math.pow(double a, double b) invokestatic –invokestatic java/lang/Math/pow(DD)D –Parameters pushed on the stack in left-to-right order –3 bytes Method signature: (DD)D

Instance-Specific Method Calls invokevirtual –invokevirtual java/io/PrintStream/print(Z)V –An instance must be pushed on the stack before the method’s parameters: this

Other Method Calls invokespecial A constructor call is special –An uninitialized reference to an object instance is pushed on TOS method –No return value Methods called by invokespecial are dispatched based on the actual (runtime) type of the instance Invokespecial can also be used to invoke a private method, for efficiency reasons only

Stack Operations Instructions specifically for manipulating items near the TOS –To facilitate shorter instruction sequences for common program fragments –dup2: duplicate the top two cells to accommodate long and double types –dup: nicely accommodates multiple assignments x=y=z=value –Pop, swap –dup_x1: in embedded assignment

Static Single Assignment Form (omitted)

Thanks for Your Attention!