Results 1  10
of
11
Data flow analysis in software reliability
 ACM Computing Surveys
, 1976
"... The ways that the methods of data flow analysis can be applied to improve software reliability are described. There is also a review of the basic terminology from graph theory and from data flow analysis in global program optimization. The notation of regular expressions is used to describe actions ..."
Abstract

Cited by 46 (0 self)
 Add to MetaCart
The ways that the methods of data flow analysis can be applied to improve software reliability are described. There is also a review of the basic terminology from graph theory and from data flow analysis in global program optimization. The notation of regular expressions is used to describe actions on data for sets of paths.
Structuring Decompiled Graphs
 In Proceedings of the International Conference on Compiler Construction
, 1996
"... . A structuring algorithm for arbitrary control flow graphs is presented. Graphs are structured into functional, semantical and structural equivalent graphs, without code replication or introduction of new variables. The algorithm makes use of a set of generic highlevel language structures that inc ..."
Abstract

Cited by 22 (6 self)
 Add to MetaCart
. A structuring algorithm for arbitrary control flow graphs is presented. Graphs are structured into functional, semantical and structural equivalent graphs, without code replication or introduction of new variables. The algorithm makes use of a set of generic highlevel language structures that includes different types of loops and conditionals. Gotos are used only when the graph cannot be structured with the structures in the generic set. This algorithm is adequate for the control flow analysis required when decompiling programs, given that a pure binary program does not contain information on the highlevel structures used by the initial highlevel language program (i.e. before compilation). The algorithm has been implemented as part of the dcc decompiler, an i80286 decompiler of DOS binary programs, and has proved successful in its aim of structuring decompiled graphs. 1 Introduction A decompiler is a software tool that reverses the compilation process by translating a pure binar...
Finding dominators in practice
 In Proceedings of the 12th Annual European Symposium on Algorithms, volume 3221 of Lecture Notes in Computer Science
, 2004
"... Abstract. The computation of dominators in a flowgraph has applications in program optimization, circuit testing, and other areas. Lengauer and Tarjan [17] proposed two versions of a fast algorithm for finding dominators and compared them experimentally with an iterative bit vector algorithm. They c ..."
Abstract

Cited by 7 (2 self)
 Add to MetaCart
Abstract. The computation of dominators in a flowgraph has applications in program optimization, circuit testing, and other areas. Lengauer and Tarjan [17] proposed two versions of a fast algorithm for finding dominators and compared them experimentally with an iterative bit vector algorithm. They concluded that both versions of their algorithm were much faster than the bitvector algorithm even on graphs of moderate size. Recently Cooper et al. [9] have proposed a new, simple, treebased iterative algorithm. Their experiments suggested that it was faster than the simple version of the LengauerTarjan algorithm on graphs representing computer program control flow. Motivated by the work of Cooper et al., we present an experimental study comparing their algorithm (and some variants) with careful implementations of both versions of the LengauerTarjan algorithm and with a new hybrid algorithm. Our results suggest that, although the performance of all the algorithms is similar, the most consistently fast are the simple LengauerTarjan algorithm and the hybrid algorithm, and their advantage increases as the graph gets bigger or more complicated. 1
Folklore Confirmed: Reducible Flow Graphs are Exponentially Larger
 Proc. of the 30 th ACM SIGPLANSIGACT Symposium on Principles of Programming Languages
, 2003
"... Many program analysis techniques used by compilers are applicable only to programs whose control flow graphs are reducible. Nodesplitting is a technique that can be used to convert any control flow graph to a reducible one. However, as has been observed for various nodesplitting algorithms, there ..."
Abstract

Cited by 6 (0 self)
 Add to MetaCart
Many program analysis techniques used by compilers are applicable only to programs whose control flow graphs are reducible. Nodesplitting is a technique that can be used to convert any control flow graph to a reducible one. However, as has been observed for various nodesplitting algorithms, there can be an exponential blowup in the size of the graph. We prove that exponential blowup is unavoidable. In particular, we show that any reducible graph that is equivalent to the complete graph on n nodes (or to related boundeddegree control flow graphs) must have at least 2 nodes. While this result is not a surprise, it may be relevant to the quest for finding methods of obfuscation for software protection.
Dominator Tree Verification and VertexDisjoint Paths
, 2005
"... We present a lineartime algorithm that given a flowgraph G = (V, A, r) and a tree T, checks whether T is the dominator tree of G. Also we prove that there exist two spanning trees of G, T1 and T2, such that for any vertex v the paths from r to v in T1 and T2 intersect only at the vertices that domi ..."
Abstract

Cited by 4 (3 self)
 Add to MetaCart
We present a lineartime algorithm that given a flowgraph G = (V, A, r) and a tree T, checks whether T is the dominator tree of G. Also we prove that there exist two spanning trees of G, T1 and T2, such that for any vertex v the paths from r to v in T1 and T2 intersect only at the vertices that dominate v. The proof is constructive and our algorithm can build the two spanning trees in linear time. Simpler versions of our two algorithms run in O(mα(m, n))time, where n is the number of vertices and m is the number of arcs in G. The existence of such two spanning trees implies that we can order the calculations of the iterative algorithm for finding dominators, proposed by Allen and Cocke [2], so that it builds the dominator tree in a single iteration.
A Practical Interprocedural Dominance Algorithm
"... Existing algorithms for computing dominators are formulated for control flow graphs of single procedures. With the rise of computing power, and the viability of wholeprogram analyses and optimizations, there is a growing need to extend the dominator computation algorithms to contextsensitive inter ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
Existing algorithms for computing dominators are formulated for control flow graphs of single procedures. With the rise of computing power, and the viability of wholeprogram analyses and optimizations, there is a growing need to extend the dominator computation algorithms to contextsensitive interprocedural dominators. Because the transitive reduction of the interprocedural dominator graph is not a tree, as in the intraprocedural case, it is not possible to extend existing algorithms directly. In this article, we propose a new algorithm for computing interprocedural dominators. Although the theoretical complexity of this new algorithm is as high as that of a straightforward iterative solution of the data flow equations, our experimental evaluation demonstrates that the algorithm is practically viable, even for programs consisting of several hundred thousands of basic blocks.
Calculating Graph Algorithms for Dominance and Shortest Path
"... We calculate two iterative, polynomialtime graph algorithms from the literature: a dominance algorithm and an algorithm for the singlesource shortest path problem. Both algorithms are calculated directly from the definition of the properties by fixedpoint fusion of (1) a least fixed point expres ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
We calculate two iterative, polynomialtime graph algorithms from the literature: a dominance algorithm and an algorithm for the singlesource shortest path problem. Both algorithms are calculated directly from the definition of the properties by fixedpoint fusion of (1) a least fixed point expressing all finite paths through a directed graph and (2) Galois connections that capture dominance and path length. The approach illustrates that reasoning in the style of fixedpoint calculus extends gracefully to the domain of graph algorithms. We thereby bridge common practice from the school of program calculation with common practice from the school of static program analysis, and build a novel view on iterative graph algorithms as instances of abstract interpretation.
Mechanized verification of computing dominators for formalizing compilers
 In CPP
, 2012
"... Abstract. One prerequisite to the formal verification of modern compilers is to formalize computing dominators, which enable SSA forms, specification of dominance analysis that is sufficient for formalizing modern compilers; it describes a certified implementation and instance of the specification t ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
Abstract. One prerequisite to the formal verification of modern compilers is to formalize computing dominators, which enable SSA forms, specification of dominance analysis that is sufficient for formalizing modern compilers; it describes a certified implementation and instance of the specification that is simple to design and reason about, and also reasonably efficient. The paper also presents applications of dominance analysis: an SSAform type checker, verifying SSAbased optimizations, and constructing dominator trees. This development is a part of the Vellvm project. All proofs and implementation have been carried out in Coq. 1
Discovering and Modeling Open Source Software Processes Abstract
"... Open source software (OSS) development has been shown effective as a software development paradigm. In over twenty years since its origin, we have learned a lot about its culture and motivations. Yet despite great interest in its lessons for process improvement, understanding, and participation amon ..."
Abstract
 Add to MetaCart
Open source software (OSS) development has been shown effective as a software development paradigm. In over twenty years since its origin, we have learned a lot about its culture and motivations. Yet despite great interest in its lessons for process improvement, understanding, and participation among corporations, researchers, and wouldbe participants, few have actually sought to discover and model OSS processes. In traditional software engineering, processes are composed of several phases. For example, developers begin by determining what the system will do and how it will do it. These requirements are often described in terms of functional and nonfunctional operation, and are enumerated in a long document, which serves as a basis for system architecture and design later in the (waterfall) software lifecycle. open source software (OSS) projects do not typically have such documents [1]. Linux creator Linus Torvalds even argues against specifications on ideological grounds [2]. How then, do OSS developers know what to do? In an effort to begin answering this question, this paper is a survey of existing studies of OSS processes and a framework for future systematic discovery and modeling these processes. This framework is put into practice via a case study of the NetBeans requirements and release process. 1