Computer Software
Print ISSN : 0289-6540
Volume 25, Issue 1
Displaying 1-12 of 12 articles from this issue
  • Munehiro TAKIMOTO, Hideya IWASAKI
    2008 Volume 25 Issue 1 Pages 1_1
    Published: 2008
    Released on J-STAGE: March 31, 2008
    JOURNAL FREE ACCESS
    Download PDF (25K)
  • Ikuo NAKATA, Tan WATANABE, Masataka SASSA, Koichiro MORI, Seika ABE
    2008 Volume 25 Issue 1 Pages 1_2-1_18
    Published: 2008
    Released on J-STAGE: March 31, 2008
    JOURNAL FREE ACCESS
    COINS has been developed as a compiler infrastructure which is used as a base for constructing compilers for various purposes such as research, education, production, and so forth. The salient features of COINS are: (1) two levels of intermediate representation, HIR: High-level Intermediate Representation, and LIR: Low-level Intermediate Representation, (2) entirely written in Java anew, (3) sufficient support for optimization, including an almost full set of SSA optimization, (4) retargetable code generators, (5) basic support for parallelization. It has been developed at more than ten distributed organizations, having developers' meetings once three weeks. The complilers for two languages, C and FORTRAN, and for eight target machines, including SPARC and x86, have been developed in COINS. The performance of their object codes are comparable with those of GCC. COINS is written in about 260KLOC in Java. This paper describes the development aspect as well as technical aspect of this project.
    Download PDF (438K)
  • Masataka SASSA, Munehiro TAKIMOTO
    2008 Volume 25 Issue 1 Pages 1_19-1_29
    Published: 2008
    Released on J-STAGE: March 31, 2008
    JOURNAL FREE ACCESS
    In compilers, in addition to generating the object code in machine language, various transformations are made to improve the efficiency of the execution of the object code. This is called optimization. Previous methods for optimization generally use the data flow analysis of variable definitions and variable uses on the intermediate code. However, optimization methods using the static single assignment form (SSA form) attract compiler writers' recent attention. An SSA form is an intermediate representation, in which all variables are renamed so that for all uses of each variable, the point defining (assigning) its value is made unique in the program text. Various optimizations can be written clearly and easily utilizing this property. In this paper (introduction part) we explain the outline of SSA form, translation from normal form to SSA form, and back translation from SSA form to normal form.
    Download PDF (528K)
  • Munehiro TAKIMOTO, Masataka SASSA
    2008 Volume 25 Issue 1 Pages 1_30-1_46
    Published: 2008
    Released on J-STAGE: March 31, 2008
    JOURNAL FREE ACCESS
    Compilers not only generate target code but also apply to a program a lot of transformations, which are called code optimizations, because of efficient execution of the target code. Though, traditionally, most of them had been implemented using dataflow analysis, the techniques based on Static Single Assignment (SSA) form have been familiar these days. SSA form is an intermediate representation where each variable lexically has only one assignment through an entire program. Such a property makes traditionally complex code optimizations to be implemented easily. We call the code optimizations implementend based on SSA form SSA-optimization. In this paper, we are providing brief explanations of them.
    Download PDF (822K)
  • Ikuo NAKATA, Koichiro MORI
    2008 Volume 25 Issue 1 Pages 1_47-1_64
    Published: 2008
    Released on J-STAGE: March 31, 2008
    JOURNAL FREE ACCESS
    The back-ends of compilers are usually composed of the modules of: (1) the translation from low-level intermediate representations to instruction sequences for the target machine, (2) register allocation, (3) instruction scheduling and peephole optimization. The retargetable code generators generally consist of the machine independent programs and the machine dependent parts generated from the target machine descriptions. In this tutorial, several methods of pattern matching for (1) and the methods of instruction scheduling and software pipeling for (3) are explained. Finally, two examples in practical use, the retargetable code generators in COINS and in GCC, are explained respectively.
    Download PDF (251K)
  • Mitsugu SUZUKI, Nobuhisa FUJINAMI
    2008 Volume 25 Issue 1 Pages 1_65-1_81
    Published: 2008
    Released on J-STAGE: March 31, 2008
    JOURNAL FREE ACCESS
    Most of modern microprocessors have been equipped with SIMD type extended instruction sets mainly for media data processing. We can assume each of them to be a special version of vector instruction set, but they have different features and limitations from conventional ones, and we cannot exploit their potentials only with conventional compiler optimization techniques. Optimization techniques for SIMD instruction sets are classified into two categories in COINS project. One consists chiefly of vectorization-centric transformations that can be accomplished in source-code-level, and another is compiler optimization to generate appropriate SIMD instructions for the transformed codes. We call the latter “SIMD parallelization”, and concentrated upon it in this research. In this article, we report SIMD parallelization in COINS.
    Download PDF (225K)
  • Yuka KOBAYASHI, Yuko ISHIWAKA
    2008 Volume 25 Issue 1 Pages 1_82-1_88
    Published: 2008
    Released on J-STAGE: March 31, 2008
    JOURNAL FREE ACCESS
    Download PDF (70273K)
  • Katsuhiko GONDOW, Hayato KAWASHIMA, Takashi IMAIZUMI
    2008 Volume 25 Issue 1 Pages 1_105-1_123
    Published: 2008
    Released on J-STAGE: February 29, 2008
    JOURNAL FREE ACCESS
    C preprocessor (CPP) is a major cause that makes it much difficult to precisely analyze C source code, which is indispensable to refactoring tools for C programs. To precisely analyze C source code, we need to obtain the mapping information between unpreprocessed C source code and preprocessed one. Previous works obtain the mapping information by extending the existing CPP (e.g., Cpplib), which results in low portability and low maintainability due to the strong dependency on CPP implementation.
    To solve this problem, this paper proposes a novel approach based on tracer, which obtains the mapping information by automatically embedding XML-like tracers in source code, running native CPP “as-is”, and finally analyzing the resulting tracers. Thus the tracer method is highly portable and maintainable, while the previous methods are not. We successfully implemented a first prototype of tracer-based CPP analyzer (called TBCppA), and experimentally applied TBCppA to the code of gcc-4.1.1 (consisting of around 630 KLOC). This preliminary result suggests that our tracer approach works fine both in functionality and performance for obtaining the CPP mapping information in a very portable manner.
    Download PDF (278K)
  • Atsuyuki INUI, Shintaro KUDO, Koji HARA, Ken MIZUNO, Norio KATO, Kazun ...
    2008 Volume 25 Issue 1 Pages 1_124-1_150
    Published: 2008
    Released on J-STAGE: February 29, 2008
    JOURNAL FREE ACCESS
    LMNtal is a simple language model based on hierarchical graph rewriting that uses logical variables to represent connectivity and membranes to represent hierarchy. The major goals of LMNtal have been to unify various computational models addressing multiset rewriting, concurrency and mobility, and at the same time to provide a practical programming language based on hierarchical graph rewriting and demonstrate its versatility. The purpose of this paper is to present the aspects of LMNtal as a full-fledged programming language and demonstrate its expressive power using a number of examples. We have designed important language features such as arithmetics, rule application control, modularity and foreign-language interface and integrated them into the hierarchical graph rewriting model. To demonstrate the expressive power of the language, we have successfully encoded diverse related computational models including the λ-calculous, the π-calculus, the ambient calculus and CHR and run them on our LMNtal system.
    Download PDF (292K)
  • Soichiro SAHARA, Masataka SASSA
    2008 Volume 25 Issue 1 Pages 1_151-1_166
    Published: 2008
    Released on J-STAGE: February 29, 2008
    JOURNAL FREE ACCESS
    It is very important that the compiler optimization works correctly without changing the semantics of a program. However, because there are a lot of complex optimizations, it is difficult to implement them correctly in general. In this paper, we propose a technique for validating whether the optimization transformation into the program have been done correctly or not by using temporal logic after the execution of the optimizer. We describe the properties that points of optimization transformation have to satisfy by using temporal logic, and we check whether these points satisfy the formulas by model checking of the program. This technique can be applied to complex optimizers that already exist, and it can be executed in the realistic time. We implemented and executed this technique, and we found an unknown bug of an optimizer in the COINS compiler.
    Download PDF (334K)
  • Yoshihiko KAKUTANI
    2008 Volume 25 Issue 1 Pages 1_167-1_179
    Published: 2008
    Released on J-STAGE: February 29, 2008
    JOURNAL FREE ACCESS
    This paper provides a call-by-name and a call-by-value term calculus, both of which have a Curry-Howard correspondence to the box fragment of the intuitionistic modal logic IK. The call-by-name calculus is an extension of the simply typed call-by-name λ-calculus, and sound and complete for the categorical semantics. We show the strong normalizability and the confluency of the call-by-name calculus. On the other hand, the call-by-value calculus is an extension of the λc-calculus. We also show the strong normalizability and the confluency of the call-by-value one. This paper shows that a subcalculus of the call-by-value calculus is characterized by a CPS transformation into the call-by-name calculus. Moreover, we extend the call-by-name calculus to the modal logic IS4.
    Download PDF (173K)
  • Jun FURUSE, Akinori YONEZAWA
    2008 Volume 25 Issue 1 Pages 1_180-1_185
    Published: 2008
    Released on J-STAGE: February 29, 2008
    JOURNAL FREE ACCESS
    We have developed a type based information flow analysis for C-style pointers and casts with run-time dynamic security level checking, which prevents secret information from leaking to unauthorized observers. C programs can continue their execution safely even after they face memory based security hole attacks such as buffer overflow exploits, since even the failure oblivious behavior caused by attacks is secured by information flow based security.
    Download PDF (144K)
feedback
Top