569 research outputs found
Survey on Instruction Selection: An Extensive and Modern Literature Review
Instruction selection is one of three optimisation problems involved in the
code generator backend of a compiler. The instruction selector is responsible
of transforming an input program from its target-independent representation
into a target-specific form by making best use of the available machine
instructions. Hence instruction selection is a crucial part of efficient code
generation.
Despite on-going research since the late 1960s, the last, comprehensive
survey on the field was written more than 30 years ago. As new approaches and
techniques have appeared since its publication, this brings forth a need for a
new, up-to-date review of the current body of literature. This report addresses
that need by performing an extensive review and categorisation of existing
research. The report therefore supersedes and extends the previous surveys, and
also attempts to identify where future research should be directed.Comment: Major changes: - Merged simulation chapter with macro expansion
chapter - Addressed misunderstandings of several approaches - Completely
rewrote many parts of the chapters; strengthened the discussion of many
approaches - Revised the drawing of all trees and graphs to put the root at
the top instead of at the bottom - Added appendix for listing the approaches
in a table See doc for more inf
Data Definitions in the ACL2 Sedan
We present a data definition framework that enables the convenient
specification of data types in ACL2s, the ACL2 Sedan. Our primary motivation
for developing the data definition framework was pedagogical. We were teaching
undergraduate students how to reason about programs using ACL2s and wanted to
provide them with an effective method for defining, testing, and reasoning
about data types in the context of an untyped theorem prover. Our framework is
now routinely used not only for pedagogical purposes, but also by advanced
users.
Our framework concisely supports common data definition patterns, e.g. list
types, map types, and record types. It also provides support for polymorphic
functions. A distinguishing feature of our approach is that we maintain both a
predicative and an enumerative characterization of data definitions.
In this paper we present our data definition framework via a sequence of
examples. We give a complete characterization in terms of tau rules of the
inclusion/exclusion relations a data definition induces, under suitable
restrictions. The data definition framework is a key component of
counterexample generation support in ACL2s, but can be independently used in
ACL2, and is available as a community book.Comment: In Proceedings ACL2 2014, arXiv:1406.123
S2E: A Platform for In-Vivo Multi-Path Analysis of Software Systems
This paper presents S2E, a platform for analyzing the properties and behavior of software systems. We demonstrate S2E's use in developing practical tools for comprehensive performance profiling, reverse engineering of proprietary software, and bug finding for both kernel-mode and user-mode binaries. Building these tools on top of S2E took less than 770 LOC and 40 person-hours each. S2E's novelty consists of its ability to scale to large real systems, such as a full Windows stack. S2E is based on two new ideas: selective symbolic execution, a way to automatically minimize the amount of code that has to be executed symbolically given a target analysis, and relaxed execution consistency models, a way to make principled performance/accuracy trade-offs in complex analyses. These techniques give S2E three key abilities: to simultaneously analyze entire families of execution paths, instead of just one execution at a time; to perform the analyses in-vivo within a real software stack—user programs, libraries, kernel, drivers, etc.—instead of using abstract models of these layers; and to operate directly on binaries, thus being able to analyze even proprietary software. Conceptually, S2E is an automated path explorer with modular path analyzers: the explorer drives the target system down all execution paths of interest, while analyzers check properties of each such path (e.g., to look for bugs) or simply collect information (e.g., count page faults). Desired paths can be specified in multiple ways, and S2E users can either combine existing analyzers to build a custom analysis tool, or write new analyzers using the S2E API
Printing books from HTML and CSS: metrics, formatters and results
In this document we analyzed the possibility to use CSS as a solid successor of XSL-FO for producing books in PDF format.
We collected three test suites: a combination of crafted documents, some book excerpts from the publisher “Il Mulino” and some complete books from the public domain. We also devised a set of metrics to evaluate the quality of the produced PDFs.
We tested the most used formatters to generate PDFs so as to get an overview of the market status in terms of support for CSS Paged Media.
While book excerpts and crafted short PDFs were easily checkable manually, for the larger books we recurred to a software we developed to automatically scan the pages and check for errors.
Most of the commercial PDF formatters’ output was up to expectations. Given enough time we hope that the gap between the open source offering and the commercial one will be reduced enough to consider them comparable.
Overall, we were able to demonstrate how CSS Paged Media supports all of the requirements and output capabilities of XSL-FO either directly or, in a few cases, with manual intervention on the HTML/CSS code. Specifically, XSL-FO is designed with the concept of page sequences, lacking in CSS which instead works on individual pages. This different paradigm resulted in the inability to insert conditional spaces and blank pages at predefined positions. Thus, the overall process cannot be fully automated yet
Abstraction and Acceleration in SMT-based Model-Checking for Array Programs
Abstraction (in its various forms) is a powerful established technique in
model-checking; still, when unbounded data-structures are concerned, it cannot
always cope with divergence phenomena in a satisfactory way. Acceleration is an
approach which is widely used to avoid divergence, but it has been applied
mostly to integer programs. This paper addresses the problem of accelerating
transition relations for unbounded arrays with the ultimate goal of avoiding
divergence during reachability analysis of abstract programs. For this, we
first design a format to compute accelerations in this domain; then we show how
to adapt the so-called 'monotonic abstraction' technique to efficiently handle
complex formulas with nested quantifiers generated by the acceleration
preprocessing. Notably, our technique can be easily plugged-in into
abstraction/refinement loops, and strongly contributes to avoid divergence:
experiments conducted with the MCMT model checker attest the effectiveness of
our approach on programs with unbounded arrays, where acceleration and
abstraction/refinement technologies fail if applied alone.Comment: Published in the proceedings of the 9th International Symposium on
Frontiers of Combining Systems (FroCoS) with the title "Definability of
Accelerated Relations in a Theory of Arrays and its Applications" (available
at http://www.springerlink.com
Synthesizing Instruction Selection
Instruction selection is the part in a compiler that transforms IR code into machine code. Instruction selectors build on a library of hundreds if not thousands of rules. Creating and maintaining these rules is a tedious and error-prone manual process.
In this paper, we present a fully automatic approach to create provably correct rule libraries from formal specifications of the instruction set architecture and the compiler IR using template-based counter-example guided synthesis (CEGIS). Thereby, we overcome several shortcomings of an existing SMT-based CEGIS approach, which was not applicable to our setting in the first place.We propose a novel way of handling memory operations and show how the search space can be iteratively explored to synthesize rules that are relevant for instruction selection.
Our approach synthesized a large part of the integer arithmetic rules for the x86 architecture within a few days where existing techniques could not deliver a substantial rule library within weeks. With respect to the runtime of the compiled programs, we show that the synthesized rules are close to a manually-tuned instruction selector
- …