{"title":"Sparse functional stores for imperative programs","authors":"B. Steensgaard","doi":"10.1145/202529.202536","DOIUrl":"https://doi.org/10.1145/202529.202536","url":null,"abstract":"In recent years, the trend in program representations for imperative programs has been to make them more functional, or to make them more sparse. However, new sparse representations have been non-functional, and new functional representations have not been sparse in the presence of pointer operations. In this paper, we present a functional representation that is sparse even in the presence of pointer operations.\u0000Conventionally, a store is represented in a functional program representation by a single object—typically a mapping from locations to values. We show how such a store object may be fragmented into several objects, each representing part of the store. The result is a sparser representation, which has not only the usual benefit of directly linking producers to consumers, but which also for static program analysis often leads to smaller domains of abstract values for store objects. Store fragmentation corresponds to assignment factored SSA form (a factorization of SSA form introduced in this paper). We report on experiments with a thorough fragmentation based on a data flow points-to analysis and an intermediate level fragmentation based on an almost linear time complexity points-to analysis by type inference.","PeriodicalId":398799,"journal":{"name":"ACM SIGPLAN Workshop on Intermediate Representations","volume":"10 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1995-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116870739","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Clarity MCode: a retargetable intermediate representation for compilation","authors":"B. Lewis, L. Deutsch, Theodore C. Goldstein","doi":"10.1145/202529.202542","DOIUrl":"https://doi.org/10.1145/202529.202542","url":null,"abstract":"The Clarity C++ programming language is a dialect of C++ being developed in Sun Micro-systems Laboratories to support the development of reliable systems and application software, and especially distributed software. We have developed a high-level, machine-independent intermediate representation to compile Clarity that we call MCode (for \"middle code\"). We use MCode to compile Clarity programs at program runtime (i.e., on-the-fly) into SPARC - code for the Solaris TM operating system. The runtime code generator produces good quality machine code and is designed to be easily retargetable to new machines. We also support an interpreter for MCode that supports full interoperation with C code and existing C libraries. The choice of whether to compile or interpret MCode is done at runtime on a procedure-by-procedure basis. MCode is significantly more compact than native machine code. This fact, plus our ability to selectively interpret seldom-exe-cuted code instead of compiling it, means that MCode programs have a smaller working set and run better with less memory than the corresponding native machine code programs. In order to support systems programming, we store MCode in platform-standard object files. This enables MCode programs to fully interoperate with existing C libraries and code. It also allows programmers to use standard linkers and other program development tools with MCode object files.","PeriodicalId":398799,"journal":{"name":"ACM SIGPLAN Workshop on Intermediate Representations","volume":"56 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1995-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114987225","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"A simple graph-based intermediate representation","authors":"C. Click, Michael H. Paleczny","doi":"10.1145/202529.202534","DOIUrl":"https://doi.org/10.1145/202529.202534","url":null,"abstract":"We present a graph-based intermediate representation (IR) with simple semantics and a low-memory-cost C++ implementation. The IR uses a directed graph with labeled vertices and ordered inputs but unordered outputs. Vertices are labeled with opcodes, edges are unlabeled. We represent the CFG and basic blocks with the same vertex and edge structures. Each opcode is defined by a C++ class that encapsulates opcode-specific data and behavior. We use inheritance to abstract common opcode behavior, allowing new opcodes to be easily defined from old ones. The resulting IR is simple, fast and easy to use.","PeriodicalId":398799,"journal":{"name":"ACM SIGPLAN Workshop on Intermediate Representations","volume":"244 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1995-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"132993135","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Optimizing sparse representations for dataflow analysis","authors":"Erik Ruf","doi":"10.1145/202529.202535","DOIUrl":"https://doi.org/10.1145/202529.202535","url":null,"abstract":"Sparse program representations allow inter-statement dependences to be represented explicitly, enabling dataflow analyzers to restrict the propagation of information to paths where it could potentially affect the dataflow solution. This paper describes the use of a single sparse program representation, the value dependence graph, in both general and analysis-specific contexts, and demonstrates its utility in reducing the cost of dataflow analysis. We find that several semantics-preserving transformations are beneficial in both contexts.","PeriodicalId":398799,"journal":{"name":"ACM SIGPLAN Workshop on Intermediate Representations","volume":"52 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1995-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133790102","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"GURRR: a global unified resource requirements representation","authors":"David A. Berson, Rajiv Gupta, M. Soffa","doi":"10.1145/202529.202533","DOIUrl":"https://doi.org/10.1145/202529.202533","url":null,"abstract":"When compiling for instruction level parallelism (ILP), the integration of the optimization phases can lead to an improvement in the quality of code generated. However, since several different representations of a program are used in the various phases, only a partial integration has been achieved to date. We present a program representation that combines resource requirements and availability information with control and data dependence information. The representation enables the integration of several optimizing phases, including transformations, register allocation, and instruction scheduling. The basis of this integration is the simultaneous allocation of different types of resources. We define the representation and show how it is constructed. We then formulate several optimization phases to use the representation to achieve better integration.","PeriodicalId":398799,"journal":{"name":"ACM SIGPLAN Workshop on Intermediate Representations","volume":"19 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1995-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128141321","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"A correspondence between continuation passing style and static single assignment form","authors":"R. Kelsey","doi":"10.1145/202529.202532","DOIUrl":"https://doi.org/10.1145/202529.202532","url":null,"abstract":"We define syntactic transformations that convert continuation passing style (CPS) programs into static single assignment form (SSA) and vice versa. Some CPS programs cannot be converted to SSA, but these are not produced by the usual CPS transformation. The CPS→SSA transformation is especially helpful for compiling functional programs. Many optimizations that normally require flow analysis can be performed directly on functional CPS programs by viewing them as SSA programs. We also present a simple program transformation that merges CPS procedures together and by doing so greatly increases the scope of the SSA flow information. This transformation is useful for analyzing loops expressed as recursive procedures.","PeriodicalId":398799,"journal":{"name":"ACM SIGPLAN Workshop on Intermediate Representations","volume":"24 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1995-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133427755","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
K. O'Brien, Kathryn M. O'Brien, Martin E. Hopkins, A. Shepherd, Ronald C. Unrau
{"title":"XIL and YIL: the intermediate languages of TOBEY","authors":"K. O'Brien, Kathryn M. O'Brien, Martin E. Hopkins, A. Shepherd, Ronald C. Unrau","doi":"10.1145/202529.202537","DOIUrl":"https://doi.org/10.1145/202529.202537","url":null,"abstract":"Typically, the choice of intermediate representation by a particular compiler implementation seeks to address a specific goal. The intermediate language of the TOBEY compilers, XIL, was initially chosen to facilitate the production of highly optimal scalar code, yet, it was easily extended to a higher level form YIL in order to support a new suite of optimizations which in most existing compilers are done at the level of source to source translation. In this paper we will discuss those design features of XIL that were important factors in the production of optimal scalar code. In addition we will demonstrate how the strength of the YIL abstraction lay in its ability to access the underlying low level representation.","PeriodicalId":398799,"journal":{"name":"ACM SIGPLAN Workshop on Intermediate Representations","volume":"94 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1995-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133872694","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Frédéric Broustaut, Christian Fabre, F. D. Ferrière, É. Ivanov, Mauro Fiorentini
{"title":"Verification of ANDF components","authors":"Frédéric Broustaut, Christian Fabre, F. D. Ferrière, É. Ivanov, Mauro Fiorentini","doi":"10.1145/202529.202540","DOIUrl":"https://doi.org/10.1145/202529.202540","url":null,"abstract":"This paper presents validation work done on ANDF at the Open Software Foundation Research Institute. The ultimate ANDF scenario splits a compiler into two separate components (producer/installer). This changes the compiler validation process as the two components have to be validated separately. This paper presents the originality and the difficulties of such an approach and summarizes the status of two pieces of software to which the OSF-RI has contributed: the ANDF Validation Suite and the General ANDF Interpreter.","PeriodicalId":398799,"journal":{"name":"ACM SIGPLAN Workshop on Intermediate Representations","volume":"9 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1995-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128342696","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Rationalized three instruction machine","authors":"Sachin V. Chitnis, M. Satpathy, S. Oberoi","doi":"10.1145/202529.202539","DOIUrl":"https://doi.org/10.1145/202529.202539","url":null,"abstract":"The declarative nature of functional programming languages causes many difficulties in their efficient implementation on conventional machines. The problem is much harder when the language has non-strict (lazy) semantics. Abstract machines serve as an intellectual aid in bridging the semantic gap between such languages and the conventional von Neumann architecture. However they become more and more complex with time as efficiency considerations force the instruction set of the machine to grow in size. In this paper we explain the phenomenon in context of the Three Instruction Machine (TIM). We then define a rationalized instruction set for TIM that allows us to view all enhancements to TIM in a uniform way. This instruction set is quite close to RISC instructions and clearly identifies the key operations on closures. Translation of functional programs to our rationalized instruction set opens up scope for various local and global optimizations. We illustrate this by showing how to build control flow graphs and perform optimizations on it. Lazy arguments in functional programs make it hard to predict evaluation order statistically. We define the notion of pseudo-lazy arguments to statically expose the control flow information, wherever possible, for doing better flow analysis.","PeriodicalId":398799,"journal":{"name":"ACM SIGPLAN Workshop on Intermediate Representations","volume":"13 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1995-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127376729","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"GC: the data-flow graph format of synchronous programming","authors":"Pascal Aubry, T. Gautier","doi":"10.1145/202529.202538","DOIUrl":"https://doi.org/10.1145/202529.202538","url":null,"abstract":"Based on an abstraction of the time as a discrete logical time, the synchronous languages, armed with a strong semantics, enable the design of safe real-time applications. Some of them are of imperative style, while others are declarative. Academic and industrial teams involved in synchronous programming defined together three intermediate representations, on the way to standardization:\u0000• IC, a parallel format of imperative style,\u0000• GC, a parallel format of data-flow style,\u0000• OC, a sequential format to describe automata.\u0000In this paper, we describe more specifically the format GC, and its links with the synchronous data-flow language SIGNAL. Thanks to the first experimentations, GC reveals itself as a powerful representation for graph transformations, code production, optimization, hardware synthesis, etc.","PeriodicalId":398799,"journal":{"name":"ACM SIGPLAN Workshop on Intermediate Representations","volume":"6 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1995-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122695932","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}