SlideShare a Scribd company logo
The compiler design handbook optimizations and
machine code generation 1st Edition Y.N. Srikant -
PDF Download (2025)
https://ebookultra.com/download/the-compiler-design-handbook-
optimizations-and-machine-code-generation-1st-edition-y-n-
srikant/
Visit ebookultra.com today to download the complete set of
ebooks or textbooks
Here are some recommended products for you. Click the link to
download, or explore more at ebookultra.com
Foundation Engineering Handbook Design and Construction
with the 2006 International Building Code 1st Edition
Robert Day
https://ebookultra.com/download/foundation-engineering-handbook-
design-and-construction-with-the-2006-international-building-code-1st-
edition-robert-day/
Code Generation in Action 1 / Revised Edition Jack
Herrington
https://ebookultra.com/download/code-generation-in-action-1-revised-
edition-jack-herrington/
Machine Tools Design Reliability and Safety Design
Reliability and Safety 1st Edition Scott P. Anderson
https://ebookultra.com/download/machine-tools-design-reliability-and-
safety-design-reliability-and-safety-1st-edition-scott-p-anderson/
Machine Elements Analysis and Design 2nd Revised edition
Edition Peder Klit
https://ebookultra.com/download/machine-elements-analysis-and-
design-2nd-revised-edition-edition-peder-klit/
Design of Machine Tools 5th Edition S.K. Basu And D.K. Pal
https://ebookultra.com/download/design-of-machine-tools-5th-edition-s-
k-basu-and-d-k-pal/
Engineering a Compiler 2nd Edition Keith Cooper
https://ebookultra.com/download/engineering-a-compiler-2nd-edition-
keith-cooper/
Code Design for Dependable Systems Theory and Practical
Applications 1st Edition Eiji Fujiwara
https://ebookultra.com/download/code-design-for-dependable-systems-
theory-and-practical-applications-1st-edition-eiji-fujiwara/
Machine Elements in Mechanical Design 4th Edition Robert
L. Mott
https://ebookultra.com/download/machine-elements-in-mechanical-
design-4th-edition-robert-l-mott/
Power Generation Handbook 2 E 2nd Edition Philip Kiameh
https://ebookultra.com/download/power-generation-handbook-2-e-2nd-
edition-philip-kiameh/
The compiler design handbook optimizations and machine code generation 1st Edition Y.N. Srikant
The compiler design handbook optimizations and machine
code generation 1st Edition Y.N. Srikant Digital Instant
Download
Author(s): Y.N. Srikant, Priti Shankar
ISBN(s): 9781420040579, 142004057X
Edition: 1
File Details: PDF, 5.73 MB
Year: 2002
Language: english
The compiler design handbook optimizations and machine code generation 1st Edition Y.N. Srikant
1240 Half Title pg 7/11/02 12:03 PM Page 1
The
Compiler Design
Handbook
Optimizations and
Machine Code Generation
The compiler design handbook optimizations and machine code generation 1st Edition Y.N. Srikant
1240 Title pg 7/11/02 12:03 PM Page 1
CRC PR ESS
Boca Raton London New York Washington, D.C.
The
Compiler Design
Handbook
Optimizations and
Machine Code Generation
Edited by
Y.N. Srikant
P. Shankar
This book contains information obtained from authentic and highly regarded sources. Reprinted material is quoted with
permission, and sources are indicated. A wide variety of references are listed. Reasonable efforts have been made to publish
reliable data and information, but the authors and the publisher cannot assume responsibility for the validity of all materials
or for the consequences of their use.
Neither this book nor any part may be reproduced or transmitted in any form or by any means, electronic or mechanical,
including photocopying, microfilming, and recording, or by any information storage or retrieval system, without prior
permission in writing from the publisher.
All rights reserved. Authorization to photocopy items for internal or personal use, or the personal or internal use of specific
clients, may be granted by CRC Press LLC, provided that $1.50 per page photocopied is paid directly to Copyright Clearance
Center, 222 Rosewood Drive, Danvers, MA 01923 USA The fee code for users of the Transactional Reporting Service is
ISBN 0-8493-1240-X/03/$0.00+$1.50. The fee is subject to change without notice. For organizations that have been granted
a photocopy license by the CCC, a separate system of payment has been arranged.
The consent of CRC Press LLC does not extend to copying for general distribution, for promotion, for creating new works,
or for resale. Specific permission must be obtained in writing from CRC Press LLC for such copying.
Direct all inquiries to CRC Press LLC, 2000 N.W. Corporate Blvd., Boca Raton, Florida 33431.
Trademark Notice: Product or corporate names may be trademarks or registered trademarks, and are used only for
identification and explanation, without intent to infringe.
Visit the CRC Press Web site at www.crcpress.com
© 2003 by CRC Press LLC
No claim to original U.S. Government works
International Standard Book Number 0-8493-1240-X
Library of Congress Card Number 2002067413
Printed in the United States of America 1 2 3 4 5 6 7 8 9 0
Printed on acid-free paper
Library of Congress Cataloging-in-Publication Data
Srikant, Y.N.
The compiler design handbook : optimizations and machine code generation / Y.N.
Srikant, Priti Shankar
p. cm.
Includes bibliographical references and index.
ISBN 0-8493-1240-X (alk. paper)
1. Compilers (Computer programs). 2. Code generators. I. Shankar, Priti. II. Title.
QA76.76C65 S65 2002
005.4′53—dc21 2002067413
1240-discl. Page 1 Friday, August 10, 2007 12:48 PM
Preface
In the last few years, changes have had a profound influence on the problems addressed by compiler
designers. First, theproliferationinmachinearchitectureshasnecessitatedthefine-tuningofcompiler
back ends to exploit features such as multiple memory banks, pipelines and clustered architectures.
These features provide potential for compilers to play a vital role in the drive for improved perfor-
mance. Areas in which such possibilities can be exploited are, for example, speculative execution,
software pipelining, instruction scheduling and dynamic compilation. Another trend that is con-
tinuously explored is the generation of parts of the compiler from specifications. Such techniques
are well established for the front end, but still in the experimental stages for the problems of code
optimization and code generation. Optimizers in compilers are relying on newer intermediate forms
like static single assignment (SSA) form. The growing use of object-oriented languages has brought
into focus the need for optimizations that are special to such languages. Algorithms for program
slicing and shape analysis have made it possible to gather detailed information about a program that
can be used in tasks such as debugging, testing, scheduling and parallelization.
The Compiler Design Handbook: Optimizations and Machine Code Generation addresses some
of these issues listed that are of central concern to compiler designers. However, it does not attempt
to be an encyclopedia of optimization and code generation. Several topics could not be included
mainly because of space limitations. Notable among omissions are just-in-time (JIT) compilation,
implementation of parallel languages, interpreters, intermediate languages, compilation of hardware
description languages, optimization for memory hierarchies, constraint programming languages
and their compilation, functional programming languages and their compilation, code generation
using rewriting systems, peephole optimizers and runtime organizations. The topics included are of
relevance mainly to the compilation of imperative languages.
The material presented in this volume is addressed to readers having a sound background in
traditional compiler design. In particular, we assume that the reader is familiar with parsing, semantic
analysis, intermediate code generation, elements of data flow analysis, code improvement techniques
and principles of machine code generation. We hope that the material presented here can be useful
to graduate students, compiler designers in industry and researchers in the area.
v
The compiler design handbook optimizations and machine code generation 1st Edition Y.N. Srikant
Acknowledgments
The patience and efforts of the contributors are the major factors that have made this handbook
possible. We thank each one of them for their contribution and for sparing their time to write a chapter.
All of them have responded promptly to our requests and have readily cooperated in reviewing
other contributors’ chapters. We thank Ramesh Subrahmanyam, Uday Khedker, Vineeth Kumar,
Wei Qin, S. Rajagopalan, Sanjay Rajopadhye, Mahmut Kandemir, Evelyn Duesterwald, Rajiv
Gupta, Rajib Mall, R. Venugopal, Ravindra B. Keskar, Eduard Mehofer, Sanjeev Kumar Aggarwal,
Reinhard Wilhelm, Thomas Reps, Andreas Krall, Nigel Horspool, Vicki H. Allan, Matthew T. Jacob,
D.V. Ravindra and S.R. Prakash for reviewing the chapters. The assistance and continuous coop-
eration of the editors and other staff of CRC Press have proved to be invaluable in producing
this text.
vii
The compiler design handbook optimizations and machine code generation 1st Edition Y.N. Srikant
Editors
Y.N. Srikant is a Professor at the Indian Institute of Science (IIS), Bangalore, India, and is currently
the chairman of the department of computer science and automation. He received his Ph.D. in
computer science from the Indian Institute of Science, and is the recipient of young scientist medal
of the Indian National Science Academy. He joined IIS in 1987 as a faculty member. Since then, he
has guided a number of doctoral and master degree students and has consulted for a large number of
industries. His areas of interest are compiler design, and application of compiler technology to the
development of software tools used in software architecture design and software testing.
He started the compiler laboratory in the department of computer science and automation of IIS,
where several major research projects in the following areas have been carried out in the last few
years: automatic machine code generation, specification and generation of compiler optimizations,
parallelization and HPF compilation, incremental compilation and just-in-time (JIT) compilation of
Java. Some of the research projects currently in progress are implementation of .NET CLR on Linux,
implementation of UDDI on Linux, code generation for embedded processors and optimizations for
the Itanium processor.
Priti Shankar is at the department of computer science and automation at the Indian Institute of
Science (IIS) where she is currently professor. She received a BE in Electrical Engineering at the
Indian Institute of Technology (IIT), Delhi in 1968, and the M.S. and Ph.D. degrees at the University
ofMarylandatCollegeParkin1971and1972, respectively. ShejoinedtheIISin1973. Shehasguided
a large number of research students in the areas of formal languages, tools for automatic compiler
generation and code optimization, and algorithms for pattern matching and image processing. Several
tools for automatic code generation have been designed and implemented under her supervision. Her
principal interests are in the applications of formal techniques in the design of software tools and in
algebraic coding theory. She is a member of the American Mathematical Society and the Association
for Computing Machinery.
ix
The compiler design handbook optimizations and machine code generation 1st Edition Y.N. Srikant
Contents
1 Data Flow Analysis
Uday P. Khedker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Automatic Generation of Code Optimizers from Formal Specifications
Vineeth Kumar Paleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3 Scalar Compiler Optimizations on the Static Single Assignment
Form and the Flow Graph
Y.N. Srikant. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4 Profile-Guided Compiler Optimizations
Rajiv Gupta, Eduard Mehofer and Youtao Zhang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
5 Shape Analysis and Applications
Reinhard Wilhelm, Thomas Reps and Mooly Sagiv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
6 Optimizations for Object-Oriented Languages
Andreas Krall and Nigel Horspool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
7 Data Flow Testing
Rajiv Gupta and Neelam Gupta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
8 Program Slicing
G.B. Mund, D. Goswami and Rajib Mall. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
9 Debuggers for Programming Languages
Sanjeev Kumar Aggarwal and M. Sarath Kumar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
10 Dependence Analysis and Parallelizing Transformations
Sanjay Rajopadhye . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
11 Compilation for Distributed Memory Architectures
Alok Choudhary and Mahmut Kandemir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
12 Automatic Data Distribution
J. Ramanujam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
13 Register Allocation
K. Gopinath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
14 Architecture Description Languages for Retargetable Compilation
Wei Qin and Sharad Malik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
xi
15 Instruction Selection Using Tree Parsing
Priti Shankar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
16 Retargetable Very Long Instruction Word Compiler Framework
for Digital Signal Processors
Subramanian Rajagopalan and Sharad Malik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
17 Instruction Scheduling
R. Govindarajan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
18 Software Pipelining
Vicki H. Allan and Stephen J. Allan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
19 Dynamic Compilation
Evelyn Duesterwald . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739
20 Compiling Safe Mobile Code
R. Venugopal and Ravindra B. Keskar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
21 Type Systems in Programming Languages
Ramesh Subrahmanyam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801
22 Introduction to Operational Semantics
Sanjiva Prasad and S. Arun-Kumar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
xii
1
Data Flow Analysis
Uday P. Khedker
Indian Institute of Technology
(IIT) Bombay
1.1 How to Read This Chapter ......................... 1
1.2 Program Analysis: The Larger Perspective......... 2
Characteristics of Semantic Analysis • Characteristics of
Data Flow Analysis
1.3 Basic Concepts of Data Flow Analysis............. 5
Program Representation for Data Flow Analysis • Defining
the Semantic Information to Be Captured • Modeling Data
Flow Analysis: Defining Constraints • Solutions of Data
Flow Analysis • Soundness of Data Flow Analysis • Some
Theoretical Properties of Data Flow Analysis • Perform-
ing Data Flow Analysis: Solving Constraints • Generic
Abstractions in Data Flow Analysis
1.4 Advances in Data Flow Analysis................... 24
Background • Enriching the Classical Abstractions in Data
Flow Analysis
1.5 Theoretical Foundations of Data Flow Analysis ... 27
Algebra of Data Flow Information • World of Flow Func-
tions • Data Flow Frameworks • Instance of a Data
Flow Framework • Information Flow Paths and the Path
Flow Function • Solutions of an Instance of a Data Flow
Framework
1.6 Solution Methods of Data Flow Analysis .......... 40
Iterative Methods of Data Flow Analysis • Elimination
Methods of Data Flow Analysis • Complexity of Data Flow
Analysis • Comparison of Solution Methods and Some
Practical Issues
1.7 Bibliographic Notes................................ 52
Acknowledgments ....................................... 53
References ............................................... 53
1.A Appendix: Some Examples of Advanced Analyses 55
Data Flow Equations and Brief Descriptions • Taxonomies
of Data Flow Analysis
1.1 How to Read This Chapter
This chapter provides a thorough treatment of data flow analysis for imperative languages. Because
our focus is analysis instead of applications, we describe optimizations very briefly. Besides, we
do not cover high level data flow analyses of declarative languages, static single assignment (SSA)
based data flow analyses and intermediate representations; the latter two are covered in separate
chapters.
0-8493-1240-7/03/$0.00+$1.50
c
 2003 by CRC Press LLC 1
2 The Compiler Design Handbook: Optimizations and Machine Code Generation
We distinguish between what data flow analysis is and how data flow analysis is performed by
delaying the latter as much as possible; we believe that this provides a much cleaner exposition of
ideas. We begin from the first principles and evolve all basic concepts intuitively. In the early part
of the chapter, rigor follows intuition until the peak is reached in Section 1.5 where the situation is
completely reversed. We also provide the larger perspective of program analysis to highlight that
data flow analysis may look very different from other program analyses but it is only a special case
of a more general theme. This is achieved through a highly abstract summary in Section 1.2, which
may be read cursorily in the first reading. Revisiting it after reading the rest of the chapter may
bring out the relevance of this section better. Section 1.3 evolves the basic concepts of data flow
analysis and it must be understood thoroughly before reading the rest of the chapter. Section 1.4
describes the expanding horizons of data flow analysis; the believers may skip it but the skeptics
will do well to dissect it to appreciate the significance of the concept of information flow paths in
Section 1.5.5. Sections 1.5.1, 1.5.2, and Figures 1.16 and 1.17 are very important and should not
be skipped. Solution methods of data flow analysis are discussed in Section 1.6. Finally, the most
important section of this chapter is Section 1.7; we urge the reader to make the most of it.
1.2 Program Analysis: The Larger Perspective
Language processors analyze programs to derive useful information about them. Syntactic analyses
derive information about the structure of a program (which is typically static) whereas semantic
analyses derive information about the properties of dynamic computations of a program. The
semantic information can capture properties of both operations and data (together as well as
independently).
1.2.1 Characteristics of Semantic Analysis
Semantic analyses cover a large spectrum of motivations, basic principles and methods. On the
face of it, the existence of very many diverse analyses lead to the impression that there are more
variances than similarities. Though this is true of practical implementations, at a conceptual level
almost all semantic analyses are characterized by some common aspects. These characteristics are
highly abstract, largely orthogonal and far from exhaustive. Although very elementary, they provide
a good frame of reference; finding the coordinates of a given analysis on this frame of reference
yields valuable insights about the analysis. However, a deeper understanding of the analysis would
require exploring many more analysis-specific details.
1.2.1.1 Applications of Analysis
Typical uses of the information derived by semantic analyses can be broadly classified as:
• Determining the validity of a program. An analysis may be used to validate programs with
regard to some desired properties (e.g., type correctness).
• Understandingthebehaviorofaprogram. Ananalysismayverify(ordiscover)usefulproperties
of programs required for debugging, maintenance, verification, testing, etc.
• Transforming a program. Most analyses enable useful transformations to be performed on
programs. These transformations include constructing one program representation from another
as well as modifying a given program representation.
• Enabling program execution. Semantic analysis can also be used for determining the operations
implied by a program so that the program can be executed (e.g., dynamic-type inferencing).
Data Flow Analysis 3
1.2.1.2 Theoretical Foundations of Analysis
Specification and computation of semantic properties can be based on any of the following:
• Inference systems. These systems consist of a set of axioms and inductive and compositional
definitions constituting rules of inference. In such systems, the properties are inferred by
repeatedly discovering the premises that are satisfied and by invoking appropriate rules of
inference.
• Constraint resolution systems. These consist of a constraint store and a logic for solving con-
straints. In such systems, a program component constrains the semantic properties. These con-
straints are expressed in form of inequalities and the semantics properties are derived by finding
a solution that satisfies all the constraints. The solution may have to satisfy some other desirable
properties (namely, largest or smallest) too. 1 The constraints could be of the following types:
◦ Structured constraints. These take advantage of the temporal or spatial structures of data
and operations by grouping the related constraints together. Traditionally they have been
unconditional, and are called flow-based constraints because they have been solved by
traversals over trees or general graphs. Grouping of structured constraints often leads to
replacing groups of related inequalities by equations. Structured constraints often lead to
more efficient analyses, both in terms of time and space.
◦ Unstructured constraints. These are not restricted by the structure and can capture more
powerful semantics because they can be conditional. They often lead to comparatively less
efficient analyses because the related constraints may not be grouped together.
• Abstract interpretations. These use abstraction functions to map the concrete domains of values
to abstract domains, perform the computations on the abstract domains and use concretization
functions to map the abstract values back to the concrete domains.
• Other approaches. These include formal semantics-based approaches (typically using denota-
tional semantics), or model checking-based approaches, which are relatively less common.
These foundations are neither exclusive nor exhaustive. Though some foundations are preferred
for some semantic analyses, in general, an analysis can be expressed in any of the preceding models.
1.2.1.3 Time of Performing Analysis
An analysis performed before the execution of a program is termed static analysis, whereas
an analysis performed during the execution of a program (in an interleaved fashion) is termed
dynamic analysis. Thus, an interpreter can perform static analysis (by analyzing a program just before
execution) as well as dynamic analysis (by analyzing the program during execution). A compiler,
however, can perform static analysis only.
In principle, the choice between static and dynamics analysis is governed by the availability of
information on which the analysis depends, the amount of precision required (or the imprecision that
can be tolerated), and the permissible runtime overheads.
An analysis that depends on runtime information is inherently dynamic. For example, if type
annotations can be omitted in a language and type associations could change at runtime, types
can be discovered only at runtime. This requires dynamic-type inferencing. If some amount of
imprecision can be tolerated (e.g., if precise-type information is not expected but only sets of possible
types are expected), it may be possible to perform an approximate static analysis for an otherwise
inherently dynamic analysis. This obviates dynamic analysis only if a compromise on the precision
1
The terms largest and smallest depend on the particular semantics derived and need to be defined
appropriately.
4 The Compiler Design Handbook: Optimizations and Machine Code Generation
of information is acceptable; otherwise it requires a subsequent dynamic analysis. In any case, it
reduces the amount of dynamic analysis and hence runtime overheads.
If runtime overheads are a matter of concern, dynamic analyses should either be avoided or
preceded by corresponding (approximate) static analyses. In practice, a majority of analyses
performed by language processors are indeed static. In addition, many dynamic analyses have a
static counterpart. For instance, many languages require array bounds to be checked at runtime;
optimizing compilers can minimize these checks by a static array bound checking optimization.
1.2.1.4 Scope of Analysis
Semantic analyses try to discover summary information about some program unit by correlating the
summary information discovered for smaller constituent units. As such, an analysis may be confined
to a small unit of a program such as an expression or a statement, to larger units such as a group
of statements or function and procedure blocks or to still larger units such as modules or entire
programs. Program units with the same level of scope are analyzed independently. Analysis of units
with differing levels of scope may be interleaved or may be nonoverlapped (and cascaded); in either
case, the larger units can be analyzed only after their constituent units.
1.2.1.5 Granularity of Analysis
An exhaustive analysis derives information starting from scratch whereas an incremental analysis
updates the previously derived semantic information to incorporate the effect of some changes in the
programs. These changes may be caused by transformations (typically for optimization) or by user
edits (typically in programming environments). In general, an incremental analysis must be preceded
by at least one instance of the corresponding exhaustive analysis.
1.2.1.6 Program Representations Used for Analysis
An analysis is typically performed on an intermediate representation of the program. Though
the theoretical discussions of many analyses are in terms of the source code, e.g., in the case of
parallelization, in practice these analyses are performed on a suitable internal representation.
1.2.2 Characteristics of Data Flow Analysis
Data flow analysis discovers useful information about the flow of data (i.e., uses and definitions of
data) in a program. We list the following characteristics of data flow analysis as a special case of
semantic analysis:
• Applications. Data flow analysis can be used for:
◦ Determining the semantic validity of a program, e.g., type correctness based on inferencing,
prohibiting the use of uninitialized variables, etc.
◦ Understanding the behavior of a program for debugging, maintenance, verification or testing
◦ Transforming a program. This is the classical application of data flow analysis and data flow
analysis was originally conceived in this context.
• Foundations. Data flow analysis uses constraint resolution systems based on structured con-
straints. These constraints are unconditional and traditionally related constraints are grouped
together into data flow equations.
• Time. Data flow analysis is mostly static analysis.2
• Scope. Data flow analysis may be performed at almost all levels of scope in a program.
Traditionally the following terms have been associated with data flow analysis for different
scopes in the domain of imperative languages:
2
Some form of dynamic data flow analysis for dynamic slicing, etc. is an active area of current research.
Data Flow Analysis 5
• Local data flow analysis. Analysis across statements but confined to a maximal sequence of
statements with no control transfer other than fall through (i.e., within a basic block).
• Global (intraprocedural) data flow analysis. Analysis across basic blocks but confined to a
function or procedure.
• Interprocedural data flow analysis. Analysis across functions and procedures.
It is also common to use the term local data flow analysis for analysis of a single statement and
global data flow analysis for analysis across statements in a function and procedure. Effectively,
the basic blocks for such analyses consist of a single statement.
• Granularity. Data flow analysis can have exhaustive as well as incremental versions. Incre-
mental versions of data flow analysis are conceptually more difficult compared with exhaustive
data flow analysis.
• Program representations. The possible internal representations for data flow analysis are
abstract syntax trees (ASTs), directed acyclic graphs (DAGs), control flow graphs (CFGs),
program flow graphs (PFGs), call graphs (CGs), program dependence graphs (PDGs), static
single assignment (SSA) forms, etc. The most common representations for global data flow
analysis are CFGs, PFGs, SSA and PDGs whereas interprocedural data flow analyses use a
combination of CGs (and CFGs or PFGs). Though ASTs can and have been used for data flow
analysis, they are not common because they do not exhibit control flow explicitly.
In this chapter, we restrict ourselves to CFGs.
1.3 Basic Concepts of Data Flow Analysis
This section is a gentle introduction to data flow analysis. We evolve the concepts through a running
example contained in Figure 1.1(a), which is a stripped down version of a typical function in signal
processing applications. The function RunningTotal calculates the running sum of energy at
every instant in an interval From to To from the amplitude of the signal.3
1.3.1 Program Representation for Data Flow Analysis
Figure 1.1(b) contains the corresponding program in a typical linear intermediate representation
generated by a compiler front end after scanning, parsing, declaration processing and type checking.
We observe that the instructions in the intermediate representation correspond to the actual imperative
statements of the C code; the declarative statements would populate the symbol table. The compiler
has performed array address calculation using Int Size to identify the position of an element from the
start of the arrays. The instructions to access the location of an element in the memory (by adding
the array base address) can be inserted by the code generator later. This is a matter of design choice.
Finally, the most important observation is as follows:
Expression i ∗ Int Size is computed on lines 5 and 16. Int Size is a constant so it does not change;
however, if we can ascertain that the value of i would not change during the time between execution
of the instructions on line 5 and 16, then the computation of i ∗ Int Size on line 16 is redundant
because it would compute the same value that would have been computed during the execution of
the instruction on line 5.
3
A digital signal processor (DSP) programmer may probably write some other kind of code but that is beside
the point.
6 The Compiler Design Handbook: Optimizations and Machine Code Generation
# define INSTANTS 10000 1. i = From
# define SFACTOR 0.8 /* Scaling Factor */ 2. Sum = 0
float Amplitude [INSTANTS], Energy [INSTANTS]; 3. t0 = (From ≤ To)
4. if not t0 goto L0
float RunningTotal (int From, int To) 5. L1: t1 = i × Int−Size
{ float Sum; 6. Amp = Amplitude[t1]
int i; 7. t2 = Amp  0
i = From; Sum = 0; 8. if t2 goto L2
if (From  = To) 9. t3 = Amp × 0.8
{ do 10. t4 = Sum + t3
{ Amp = Amplitude[i]; 11. Sum = t4
if (Amp  0) 12. goto L3
Sum = Sum − Amp * SFACTOR; 13. L2: t5 = Amp × 0.8
14. t6 = Sum−t5
else 15. Sum = t6
Sum = Sum + Amp * SFACTOR; 16. L3: t7 = i × Int−Size
Energy[i++] = Sum; 17. Energy[t7] = Sum
} 18. t8 = i + 1
while (i = To); 19. i = t8
} 20. t9 = (i ≤ To)
return Sum; 21. if t9 goto L1
} 22. L0: return Sum
(a) The C code fragment (b) An intermediate representation
FIGURE 1.1 Calculating sum of energies of some signal at distinct instants.
The optimization that eliminates such redundant computations is called common subexpression
elimination and it uses a data flow analysis called available expressions analysis.
Though it appears that the value of i is not modified at any time between the execution of lines 5
and 16, there are gotos and we need to ensure that we have covered all execution paths. Toward this
end, we convert the program into a more convenient representation as shown in Figure 1.2.
We make the following observations about this representation:
• This representation is a directed graph with two well-defined relations pred and succ:
pred(i) = {p | ∃ edge p → i}
succ(i) = {s | ∃ edge i → s}
Note that succ includes only the immediate successors and not all descendants. Similarly, pred
includes only the immediate predecessors and not all ancestors.
• This representation makes the control transfer explicit in form of (directed) edges between
nodes; the nodes themselves represent maximal group of instructions that are executed sequen-
tially without any control transfer into or out of them. Such a group of statements is called a
basic block.
• We have made a distinction between uses and modifications of program variables by separating
expression computations and assignments; the assignments to variables are called definitions
of variables.
1.3.2 Defining the Semantic Information to Be Captured
In this section we look at some standard data flow problems that have been widely used in theory
and practice of data flow analysis; our goal is to see how they define the information to be captured
by analysis. We provide a motivation for each analysis and the criterion to be satisfied by the data
flow information.
Data Flow Analysis 7
1
2
3 4
5
6
a1 : i = ...
a2 : Sum = ...
e1 : From ≤ To
e8 : i ≤ To
e2 : i * Int_Size
a3 : Amp = ...
e3 : Amp  0
e2 : i * Int_Size
e7 : i + 1
a1 : i = ...
e4 : Amp * 0.8
e5 : Sum − t5
a2 : Sum = ...
e4 : Amp * 0.8
e6 : Sum + t3
a2 : Sum = ...
Definitions : {a1, a2, a3}
Expressions : {e1, e2, e3, e4, e5, e6, e7, e8}
Array references have been ommitted and
the “uses” and “modifications” of program
variables have been highlighted by
separating the computations of expressions
from the assignments to program variables;
the assignments to variables are called
“definitions” of variables.
FIGURE 1.2 Program flow graph for the intermediate representation in Figure 1.1(b).
We talk about the information associated with a program point. Two important categories of
program points are the entry and exit points of a basic block, denoted entryi and exiti for block
i. The entryi is the point just before the execution of the first statement in the block, whereas the
exiti is the point just after the execution of the last statement in the block.
1.3.2.1 Available Expressions Analysis
By generalizing our observation about the expression i ∗ Int Size in our example program, we can
identify the set of expressions whose previously computed values can be reused at a given program
point to eliminate redundant recomputations of the expressions.
An expression e is available at a program point p if, along every path from the start node to p, a
computation of e exists that is not followed by a definition of any of its operands.
1.3.2.2 Reaching Definitions Analysis
Consider a situation where a variable x has been assigned some value at a program point (say p). If
x is used at some other program point (say q), we may want to know whether the definition of x at
p can influence the use of x at q. In particular, this is used for copy propagation optimization that
replaces the use of a variable by the right-hand side variable of its preceding definition. This is in
the hope that the preceding definition would become dead code (i.e., a definition whose value is not
used), which can be eliminated. For example, if the definition in node 2 of Figure 1.2 is Amp = c,
the expression e3 in node 2 can be replaced by c  . . . and the expression e4 in nodes 3 and 4 can
be replaced by c ∗ 0.8. Then variable Amp has no use and its definition can be safely eliminated.
Other documents randomly have
different content
That is not all either, she said in a broken voice, sitting on the sofa
again and brushing her handkerchief over her eyes. Perhaps that girl is not
the only one who is suffering. I wanted to think so well of you, to be so
proud of you. You were to be the defender of women, fighting their battle
for them when they were wronged and helpless. And when you became a
Judge .... Oh, I cannot bear to think of it. You have disappointed and
deceived me. You are not the man I took you to be.
Outside the sun was setting. A dull ray from it was falling on his haggard
face and brushing her bronze-brown hair.
I thought you loved me too. It was so sweet to think you loved me—me
only—never having loved anybody else. Every woman has felt like that,
hasn't she? I have anyway. Other men might be faithless, but not you, not
Victor Stowell. And yet, for the sake of your poor fancy for this country
girl....
Fenella!
Oh, what a fool I've been, she cried, leaping up again and dashing the
tears from her eyes. Forgive you? Never while that girl lies in prison as the
consequence of your sin.
Stowell could bear no more. Stepping forward, he laid hold of Fenella by
the shoulders, and approaching his face to her face he said,
Listen to me, Fenella. I have done wrong—I know that. I am not here to
excuse or defend myself, and if your heart does not plead for me I have
nothing to say. But I swear before God that I have loved you with all my
soul and strength, and if it hadn't been for that....
Loved me! cried Fenella, between a laugh and a sob. And then in the
wild delirium of the sheer woman, she said,
What proof of your love have you given to me compared to the proof
you have given to that girl? Oh, when I think of it I could almost find it in
my heart to envy her. I do envy her. Yes, degraded and shamed and
condemned and in prison as she is, I envy her, and could change places with
her this very minute. I would have given you anything in the world rather
than this should be—anything, my honour, myself....
Fenella!
Let me go! You are driving me mad. Leave me. I hate you. I despise
you. You have broken my heart. I thought you were brave and true, but
what are you but a common....
Fenella!
Coward! Hypocrite! Let me go!
But she had no need to wrench herself away from him. His hands fell
from her shoulders like lead, and at the next moment she was gone from the
room.
He stood for a while where she had left him with the echo of her stinging
words ringing in his ears. Bitter, unjust and cruel as they had been, he was
struggling to excuse her. She did not understand. Bessie had not told her all.
Presently she would come back and ask his pardon.
But she did not come, and after a while (it seemed like an eternity),
feeling crushed, degraded, trampled upon, dragged in the dust and wounded
in his tenderest affections, he left the room and the house.
Outside, where his automobile was standing, he still lingered, expecting
to be called back. It was impossible that Fenella would let him part from her
like this. He knew where she was—in the Governor's smoking-room which
overlooked the drive. At the last moment she would knock at the window
and cry, Stay!
Slowly he moved around his car, opening the bonnet, touching the
engine, starting it, pulling on his long driving gloves. But still she gave no
sign, and at length he prepared to step into his seat. Was this to be the end—
the end of everything?
Meantime, Fenella, alone in her father's room and recovering from the
storm of her anger, was beginning to be afraid. She wanted to go back to
Stowell and say, I was mad. I didn't know what I was saying. I love you so
much.
But her pride would not permit her to do that, and she waited for Stowell
to do something. Why didn't he burst through the door, throw his arms
about her, and compel her to forgive him?
She listened intently for a long time, but there came no sound from the
adjoining room. What was he doing? Presently she heard him coming out of
the library, walking with a firm step down the corridor to the porch, opening
the front door and closing it behind him.
Was he leaving her? Like this? Then he would never come back. She
heard his footstep on the gravel and looking through the window she saw
him, with his white face, raising his soft hat to wipe his perspiring forehead,
and then climbing into the car. Could it be possible that he was going away
without another word?
In spite of her jealousy and rage, she felt an immense admiration for the
man who, loving her as she was sure he did, was yet so strong that he could
leave her after she had insulted and humiliated him. She wanted to throw up
the window and cry, Wait! I am coming out to you.
But no, her pride would not permit her to do that either, and at the next
instant the car was moving away.
She watched it until it had disappeared behind the trees. Then she turned
to go back to her bedroom. At the foot of the stairs she met Miss Green
who, shocked at the sight of her disordered face, said,
My goodness, Fenella! What has happened?
In the plaintive voice of a crying child, Fenella answered,
He has gone. I have driven him away.
Then she stumbled upstairs, locked the door of her room on the inside,
threw herself face down on the bed, burst into a flood of tempestuous tears,
and cried aloud to Stowell, now that he could no longer hear her—
Victor! Victor! My Victor!
CHAPTER THIRTY-TWO
THE VOICE OF THE SEA
Forgive you? Never while that girl lies in prison as the consequence of
your sin.
The words beat on Stowell's brain with the paralysing effect of a muffled
drum. He was driving up the mountain road. Char-à-bancs, full of English
visitors (who were laughing and singing in chorus), were coming down.
The drivers shouted at him from time to time. This irritated him until he
realised that his motor-car was oscillating from side to side of the road.
When he reached the top, where the road turns towards the glen, all the
heart was gone out of him. The great scene no longer brought the old
joyousness. With love lost and hope quenched the soul of the world was
dead, and the heavens were dark above him.
At the bottom of the glen, where it dips into the Curragh, he came upon a
group of bare-headed women, with their arms under their aprons,
surrounding a little person with watery eyes, in a poke bonnet and a satin
mantle. Mrs. Collister had returned from Castletown, and her neighbours
were taking her home.
Never mind, woman! It will be all set right at the judgment. And then
the man will be found out and punished, too!
At the corner of the cross roads Dan Baldromma threw himself in front
of the car, to draw it up, and in his raucous voice he fell on Stowell with a
torrent of abuse.
You've been locking up a respectable man, Dempster, but you can't lock
up his tongue, and the island is going to know what justice in the Isle of
Man can be.
Stowell made no answer. Any poor creature could insult him now.
Janet was waiting for him at Ballamoar, with a fire in the library, and the
tea-tray ready. But the sweet home atmosphere only made him think of the
happiness that had been so nearly within his reach.
Seeing that something was amiss, Janet assumed her cheeriest tone,
brought out two patterns of damask, laid them over chairs, and asked which
Fenella would like best for her boudoir.
I don't know. I can't say. But .... it doesn't matter now.
Janet gathered up her patterns and went out of the room without a word.
Forgive you? Never while that girl lies in prison. The stinging words
followed him to his bedroom. They broke up his sleep. They rang like the
screech of an owl through the darkness of the night.
Next day, not trusting himself to drive his car, he returned to Castletown
by train. There were only two first-class compartments and both were full.
He was about to step into a third-class carriage when a voice cried,
This way, Deemster. Always room enough for you.
There was to be a sitting of the Keys that day and the compartment was
full of northside members. The talk was about yesterday's trial, and Stowell
realised that his management of the case had created a favourable
impression. Merciful to the prisoner? Yes, until her guilt was established,
but then just, even at the expense of friendship.
This led to talk about Gell as the girl's fellow-sinner.
Shocking! But it's not the first time he has been mixed up with a
woman.
Stowell felt an intolerable shame at Gell's undeserved obloquy and his
own unmerited glory, but he could say nothing.
It will kill the old man, said one of the Keys. The train had drawn up at
a side station and his voice was loud in the vacant air.
Hush!
The Speaker was in the next compartment.
When the train started again a little man with the face of a ferret began to
make facetious references to Fanny. Stowell's hands were itching to take
the ribald creature by the throat and fling him out of the window, but
something whispered, Who are you to be the champion of virtue?
At Court that day, and the day following, he found it hard to concentrate.
At one moment an advocate said,
Perhaps your Honour is not well this morning?
Oh no! I heard you. You were saying....
The rapidity of his mind enabled him to make up for his lapses in
attention, and when his time came to sum up he was always ready.
He was indulgent to the accused. All the other prisoners were acquitted
—the fat woman for the reason that, bad as her character might be, the
characters of her drunken sailors were yet worse (therefore no credit could
be attached to their evidence), and the boy who had embezzled on the
ground that his superiors at the bank had been guilty of almost criminal
negligence, and the four months he had been in prison already were
sufficient to satisfy the claims of justice.
The boy's mother, who was standing at the back, threw her arms about
him and kissed him when he stepped out of the dock, and then, turning her
streaming face up to the bench, she cried,
God bless you, Deemster! May you live long and every day of your life
be a happy one.
Back at home, Stowell plunged into the task of drawing up the report for
the English authorities which was to accompany the recommendation to
mercy. In two days (having his father's library to fall back upon) he knew
more about the grounds upon which the prerogative of the Crown could
properly be exercised than anybody in the island had ever before been
required to learn, and when he had finished his task he had no misgivings.
Bessie's sentence would be commuted to imprisonment. And then (life
for the poor soul being at an end in the Puritanical old island) he must find
some secret means of sending her away.
Never while that girl.... But wait! Only wait!
Being legislator as well as Judge, he attended the first meeting of
Tynwald Court after his appointment. The Governor administered the oath
to him in a private room, and then, taking his arm, led the way to the
legislative chamber.
Do you know it's six days since you were at Government House, my
boy? What is Fenella to think of you?
Has she .... has she been asking for me, Sir?
Well, no, not to say asking, but still .... six days, you know.
Stowell sat on a raised daïs between the Attorney-General and Deemster
Taubman, who was sufficiently recovered to hobble in on two sticks. The
proceedings were of the kind that is usual in such assemblies, the Manx
people being the children of their mothers, loving to talk much and about
many things.
He found it difficult to fix his attention, and was watching for an
opportunity to slip away, when the vain repetitions which are called debate
suddenly ceased and the Governor called on an Inspector by Police to carry
round a Bill which had to be signed by all.
In the interval of general conversation that followed, Deemster
Taubman, a gruff and grizzly person, leaned back in his seat, put his thumbs
in the armholes of his soiled white waistcoat and talked to Stowell.
You did quite right in that case of the girl Collister, Sir. In fact you were
only too indulgent. I have no pity for the huzzies who run away from the
consequences of their misconduct. Murder is murder, and there is no proper
punishment for it but death.
But the Jury recommended the girl to mercy, and her sentence will be
commuted, said Stowell.
Eh? Eh? Then you haven't heard what has happened?
What?
The Governor has reported against the recommendation.
Reported against it?
Certainly. And as the authorities in London are not likely to read the
report and are sure to act on the Governor's advice, the girl will go to the
gallows.
Stowell felt as if he had been struck over the eyes by an unseen hand. As
soon as he had signed the Bill (in a trembling scrawl) he whispered to the
Attorney-General that he was unwell and fled from the chamber.
Humph! said Taubman, looking after him. That young man is going
to break down, and no wonder. His appointment as Deemster was the
maddest thing I ever knew.
II
No, Mr. Stowell, no! You must stay in bed for the next two days at least.
I must really insist this time. No work, no excitement, no heart-strain.
Remember your father, and take my advice, Sir.
It was Doctor Clucas, who, sent for by Janet, had arrived at Ballamoar
before Stowell got out of bed in the morning.
With closed eyes Stowell reviewed the situation. It was shocking,
horrible, intolerable. Not for fifty years had a woman suffered the full
penalty of such a crime. He must find some way to prevent it.
But after a while a terrible temptation came to him. Why can't I leave
things alone? he asked himself.
He had done all he could be expected to do. If the Crown, acting on the
advice of the Governor, refused to exercise its prerogative of mercy, what
right had he to interfere?
It might be best for himself, too, that the law should take its course—
best in the long run. If Bessie's sentence were commuted to imprisonment
what assurance had he that on coming out of prison she would allow him to
send her away from the island? On the contrary she might refuse to be
banished, and if she found that the blame of her misfortune had fallen on
Gell she might tell the truth to free him.
What then? He would be a dishonoured man. His position as a Judge
would be imperilled; his marriage with Fenella would be impossible, and
his whole life would crash down to a welter of disgrace and ruin. But if
Bessie were gone there would be no further danger. And after all, it would
not be he but the law that had taken her life.
Then why can't I leave things alone? he thought.
He decided to do so, but his decision brought him no comfort. Towards
evening he got up and went out to walk in the farmyard. There he met
Robbie Creer, who was just home from the mill with his head full of a
pitiful story.
It was about Mrs. Collister. Since her daughter's trial the old woman had
fallen into the habit of walking barefoot in the glen, chiefly at midnight, and
generally in the neighbourhood of the Clagh-ny-Dooiney. At first she had
seen a light. Then she had heard a pitiful cry. She was certain it was the cry
of a child, a spirit-child, unbaptised and therefore unnamed, and for that
reason doomed to wander the world, because unable to enter Paradise. At
length she had taken heart of God and going out in her nightdress she had
called through the darkness of the trees, If thou art a boy I call thee John. If
thou art a girl I call thee Joney. After that she had heard the cry no more,
and now she knew it had been Bessie's child, and the bogh-millish was at
rest.
This story of the old mother's developing insanity rested heavily on
Stowell's heart and went far to shake his resolution.
After a day or two he began to find his own house and grounds haunted.
He could not go into the library without the kind eyes in his mother's
picture following him about the room with a pleading look. He could not sit
in the dining-room after dinner without remembering his week-ends as a
student-at-law, when his father and he would draw up at opposite cheeks of
the hearth, and the great Deemster would talk of the great crimes, the great
trials and the great Judges.
But his worst ordeal was with Janet. Not a word of explanation had
passed between them, yet he was sure she knew everything. One evening,
going into her sitting-room, he found her with her knitting on her lap, and a
copy of the insular newspaper on the floor, looking out on the lawn with a
far-off expression. That brought memories of another evening when he had
told her that no girl on the island had ever fallen into trouble through him,
or ever should do.
Ah! Is that you, Victor? she cried, recovering herself and making her
needles click, but he had gone, and her voice followed him from the room.
Still wrestling with his temptation to stand aside and let the law take its
course, Ballamoar became intolerable to him. On the lame excuse of his
fortnightly court in the northside town he decided to go to Ramsey, and
wrote to Mrs. Quayle to get his old rooms ready.
But going from Ballamoar to his chambers was like leaping out of the
fire into the furnace. When he opened a disordered drawer up came the
Castletown portrait of Bessie Collister like a ghost out of the gloom. When
he went for a walk to tire himself for the night his steps involuntarily turned
towards the pier where the lighthouse had been shattered by lightning.
When he returned and was putting the key in the lock of his outer door he
had the tingling sense of a woman's warm presence behind him. When he
pulled down his bedroom blind the broken cord brought a stabbing memory.
And when he awoke in the morning he felt that he had only to open his eyes
to see a girl's raven black hair on the pillow beside him.
But Mrs. Quayle's presence was the keenest torment of all. The good old
Methodist moved about him at breakfast without speaking, but one
morning, fumbling with her bonnet strings before going, she said,
Deemster, have you remembered this case of Bessie Collister in your
prayers?
He removed to Douglas—the Fort Anne Hotel, a breezy place, which sits
on the ledge of the headland and just over the harbour. At first the babble
and movement of the hotel distracted him, but after a day or two he was
drawn back into the maelstrom of his own thoughts.
Having a private sitting-room he borrowed law books from the Law
Library and sat far into the night to read them. He selected the treatises on
Infanticide—those bitter records of the age-long strife between the laws of
man and of God. Particularly he read the charges of the British Judges
(Scottish too frequently), the bewigged ruffians who, in the abomination of
their Puritanical tyranny, and the brutal lust of their judicial vengeance, had
hounded poor women to the gallows in the very nakedness of shame.
Damn them! Damn them! he would cry, leaping up with a desire to
trample on the dead Judges' graves. But then the same persistent voice
within would say, Wait awhile! Who are you to stand up for justice and
mercy?
Crushed and ashamed he would creep up to bed through the silent house,
and thinking of the girl whose dark eyes had intoxicated him in the glen
(the girl he had afterwards held in his arms) he would say,
Is it possible that I can stand by and see her given over to the
hangman?
That terrified him. In the darkness he pictured to himself the scene of
Bessie's death and burial, and thought of his after-life as a Judge, when he
would have to go to Court to try other such cases—and Bessie lying out
there in the prison-yard.
After Ballamoar, with its pastoral tranquillity, the twittering of birds and
the sleepy singing of the streams, Fort Anne was sometimes a tempestuous
place, with the wash of the waves in the harbour, the monotonous moan of
the sea outside and the melancholy wail of the gulls. He thought he heard
Bessie's cry in the voice of the sea—her piercing cry when she was being
carried out of Court after he had sentenced her.
One night he thought Bessie was dead. He was dead too. They were
standing side by side in an awful tribunal and she was accusing him before
God.
He let me die! He killed me! He is my assassin!
The sound of his own voice awakened him. A dream! It was the grey of
dawn; a storm had risen in the night; the white sea was rolling over the
breakwater and the sea-fowl were screaming through the mist and roar.
No, by God! If it was a question of Bessie witnessing against him in this
world or in the next, he had no longer any doubt which it should be. No
more temptations! No more hypocrisy and self-doubt! No more wandering
about like a lost soul!
He would go up to the Governor. He would call upon him to withdraw
his objection to the Jury's recommendation. And if he refused .... he should
see what he should see.
At eight o'clock in the morning he was walking down the quay in the
calm sunshine, looking at the activities of the harbour, and nodding
cheerfully to the fishermen as he passed. He was on his way to Government
House, and his conscience, with which he had wrestled so long, was
triumphant and erect.
Then came a shock.
He was crossing the stone bridge that leads up to the town when he saw
the Governor's blue landau coming down in the direction of the railway
station. It was open. Fenella was sitting in it.
Stowell was certain she saw him. But she only coloured up to the eyes
and dropped her head. At the next instant her carriage had crossed in front
of him and swept into the station-yard.
Something surged in his throat; something blinded his eyes. But after a
moment he threw up his head and walked firmly forward.
Wait! Only wait! We'll see!
CHAPTER THIRTY-THREE
THE HEART OF A WOMAN
Meanwhile Fenella had been going through her own temptation. On the
night after the trial, having bathed her swollen eyes, she went down to
dinner. Her father looked searchingly at her for a moment, and, as soon as
they were alone, he said,
Was it Stowell I saw driving towards the mountain road as I came up?
Perhaps it was, said Fenella.
Then why didn't he stay to dinner?
Because .... I told him to go.
Why?
Fenella gulped down the lump that was rising in her throat and said,
I have been deceived in him. He is not the man I supposed him to be.
Don't be a fool, my dear. I understand what you mean. It is his conduct
as a man, not as a Judge you are thinking of. But if every woman in the
world thought she had a right to make a scrutiny into her husband's life
before she married him there would be a fine lot of marriages, wouldn't
there?
Crude and even coarse as Fenella thought her father's moral philosophy,
she found her self-righteousness shaken by it. Perhaps she had been unfair
to Stowell. But why didn't he come and plead his own cause? She couldn't
talk to her father, but if Victor came and told his own story....
Victor did not come. For two days her pride fought with her love and she
thought herself the unhappiest woman in the world. Then to escape from the
pains of self-reproach she conceived the idea of a fierce revenge upon
Stowell. She would devote herself to his victim! Yes, she would make it her
duty to lighten the lot of the poor creature he had ruined and deserted.
After a struggle, and many shameful tears, she went back to Castle
Rushen, little knowing what a scorching flame she was to pass through.
By this time Bessie was feeling no bitterness against Stowell. The jailer
had told her that the Deemster could not have acted otherwise. The law
compelled him to condemn her. But he had told the Jury to recommend her
to mercy, and now he would be writing to the King to ask him to let her off.
Aw, he's good, miss—he's real good for all.
Do you say that, Bessie? After he has betrayed you? said Fenella,
Betrayed? I wouldn't say that, miss.
But he .... he took you to his rooms?
What else could he do, miss? All the inns were shut and it was raining,
and I had nothing in my pocket.
But .... having taken advantage of your homelessness and poverty, he
afterwards cast you off?
A mysterious wave of injured vanity struggled with Bessie's shame and
she said,
'Deed he didn't, then. He wanted to marry me.
Marry you .... did you say marry....
Yes, he did, and that was why he sent me to school.
But afterwards .... afterwards he changed his mind and turned you off
.... I mean turned you over to somebody else?
'Deed no, said Bessie, with her chin raised. It was me that gave him
up after I found I was fonder of Alick.
Breathing hard, scarcely able to speak, with the hot blood rushing to her
cheeks, Fenella compelled herself to go on.
Did he know then that you....
No, miss, and neither did I, nor Alick, nor anybody.
And when .... when was it that you went....
To his rooms in Ramsey? The first Saturday in August, miss.
Fenella went home, happy, miserable, tingling with shame and yet
thrilling with love also. Stowell's victim had brought her heart back to him.
It was just because he had loved her more than he had loved that girl in
prison that the worst had happened. It was just because she herself had
persuaded, constrained and almost compelled him that he had sat on the
case, not fully knowing what was to be revealed by it.
This lasted her half-way home in the train, and then her wounded pride
rose again. After all Victor had been faithless to the love with which she had
inspired him. If a man loved a woman it was his duty to keep himself pure
for her. Victor had not done so, therefore she would never forgive him—
never!
The Governor's carriage met her at the Douglas station, and when
(wiping the scorching tears from her eyes) she reached Government House,
she found another carriage standing by the porch.
Miss Janet Curphey is here to see you, miss, said the maid.
II
From the day of the trial, when Victor had returned home with a white
face and said, It doesn't matter now, Janet had known what had occurred.
That Collister girl had corrupted Victor. She had always feared it would
be so since Auntie Kitty had whispered over her counter that that
forward thing of Liza Corteen's was boasting that Mr. Stowell had been
sooreying with her in the glen. And now she had brought him under the
very shadow of shame itself, just when life looked so bright and joyful.
Then came the insular newspaper with an account of Fenella's outburst at
the trial. That was the cruellest blow of all. She had loved Fenella, and had
always thought there would be nothing so sweet as to spread her wedding-
bed for her, but now that she had taken sides against Victor and publicly
denounced him, Janet's blood boiled. She would go up to Government
House and give Fenella a piece of her mind. Why shouldn't she?
It was a dull afternoon when she set off for Douglas, and as she drove
along the coast road she rehearsed to herself the sharp things she was going
to say.
But when Fenella came into the drawing-room, looking so pale as to be
scarcely recognisable as the radiant girl she used to be, and kissed her and
sat by her side, Janet could scarcely say anything.
At length (Miss Green, who had been sitting at tea with her, having
gone) Janet braced herself, and said, not without a tremor,
I've come about Victor.
Then he has told you? said Fenella.
'Deed he hasn't, and you needn't either, because I know.
Fenella drew her hand away and dropped her head.
I don't say he hasn't done wrong, said Janet, but you seem to think
he's the only one who is to blame.
Oh no! I see now that the girl in Castle Rushen....
The girl? I'm not thinking about the girl. Of course she is to blame. But
is there nobody else to blame also?
Who else?
Yourself.
Janet!
Oh, I'm telling you the truth, dear. That's what I've come for.
But it all happened before I returned to the Island.
That's why. If you hadn't stayed away so long it wouldn't have
happened at all.
Then up from the sweet and sorrowful places of Janet's memory came
the story of Stowell's love for Fenella—how he had worked for her and
waited for her through all his long years as a student-at-law.
It's me to know, my dear. He used to come home every week-end, and
his poor father thought it was to see him, but I knew better. 'Any fresh
news?' he would say, and I knew what news he wanted. When your photo
came he held it under the lamp and said, 'Don't you think she's like my
mother, Janet—just a little like?' And I told him yes, and that was to say you
were like the loveliest woman that ever walked the world—in this island
anyway.
Fenella was struggling to control herself.
Poor boy, how he worked and worked for you! Jacob never worked
harder or waited longer for Rachel. And what was his reward? You signed
on at your ridiculous Settlement for seven years and sent word you would
never marry. I had it from Catharine Green and it was a sorrowful woman I
was to break the news to him. He looked at me with his mother's eyes, and
it was fit enough to break my heart to see how he cried with his face on the
pillow. But it was with his father's eyes he rose and said, 'It shall never
happen again, mother.' He called me mother too, God bless him!
Fenella was smothering her mouth in her handkerchief.
If he went wrong after that, was it any wonder? Young men are young
men, and the Lord won't be too hard on them for being what He has made
them. Some people seem to think when trouble comes between a young
man and a young woman that the young woman is the only one to be pitied.
Well, I'm a woman and I don't. And when a young man has been cut off
from the love that would have kept him right and the heavens have gone
dark on him....
But I loved him all the time, Janet.
Then why didn't you come back, instead of leaving him to the mercy of
these good-looking young vixens who will run any risks with a young man
if they can only get him to marry them?
Fenella's eyes were down again.
But that's not all. Not content with deserting him for so many years, you
must try to disgrace him also.
Janet!
Oh, I saw what you said at the trial.
But nobody knows whom I....
Don't they indeed! The men may not—most of them are so stupid. They
may even think you meant somebody else. But you can't deceive the women
like that. And then he knew that you intended it for him. Just when you
were about to become his wife, too, and you were the only woman in the
world to him!
I was so shocked. I thought he wasn't the man I had taken him for.
Perhaps he wasn't, perhaps he was, but thousands of women have lost
faith in their men and clung to them for all that, and they're the salt of the
earth, I say. I'm only an old maid myself, but to stand up for your husband,
right or wrong, that's what I call being a wife, if you ask me.
Fenella could bear up no longer. She flung her arms about Janet's neck
and buried her face in her breast.
The darkness was gathering before they broke from their embrace and
then it was time for Janet to smooth out her silvery hair and go. Fenella saw
her to the carriage and whispered as she kissed her,
Tell him to come back to me.
And then Janet went home with shining eyes.
III
Day after day Fenella waited at home for Victor, denying herself to
everybody else. Every afternoon she dressed herself in some gown he had
said he liked her in. She dressed her hair, too, in the way he liked best. But
still he did not come.
At length she determined to write to him. Writing was a terrible ordeal.
Her pride fought with her love and she could never satisfy herself with her
letters. First it was—
DEAR VICTOR,—Don't you really think you've stayed away
long enough? Remember your 'Manx ones'—especially your lovely
and beloved Manx women—won't they be talking?
But no, that was too much like threatening him, so she began again—
DARLING,—Did you really think I meant all I said that day?
Don't you know a woman better than that? I suppose you think I am
very hard-hearted and can never forgive, but....
No, that was wrong, too.
VICTOR,—Don't you think I have been punished enough? It
has been very hard for me, yet I love you still....
But the trembling of her handwriting betrayed the emotion she wished to
conceal. At last, after a long day of solitude and abandonment, two little
lines—
Vic,—I am so lonely. Come to me. Your broken-hearted—
FENELLA.
But all her letters, with their cries and supplications, were torn up and
thrown into the fire.
Why did he stay away? Did he expect her to bridge all the gulf between
them? At length she thought he must be ill. The idea that he could be
suffering (for her sake perhaps) swept down all her pride, and she
determined to go to him.
But just as she was setting out for Ballamoar somebody brought word
that Stowell was staying at Fort Anne. That quenched her humility. So near,
yet never coming to see her! Oh, very well! Very well!
For two days she felt crushed and abased. Then she heard that Stowell
was constantly to be seen at the Law Library, and that brought a memory
and an explanation. She remembered that she had said (in that wild moment
when she didn't know what she was saying) that she would never forgive
him while the girl Bessie lay in prison.
That was it! He was finding a solid legal ground on which the prisoner
could be liberated, and when he had convinced the law officers of the
Crown that this was a proper case for the exercise of mercy, he would come
up to her and say, Bessie Collister is free!—the barrier between us is
broken down.
For a full day after that her heart was at ease. Nay more, she was almost
happy, for hidden away in some secret place of semi-consciousness was the
thought that the measure of Stowell's efforts for Bessie Collister was the
meter of his love for herself.
At length her impatience got the better of her tranquillity and she
became eager to know what was going on. There was only one person who
could tell her that—her father.
Coming down to breakfast on the sunny morning after the storm, she
saw, among the letters by the Governor's plate, a large envelope
superscribed, HOME SECRETARY. When her father had opened it she
said, as if casually,
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!
ebookultra.com

More Related Content

PDF
The compiler design handbook optimizations and machine code generation 1st Ed...
PDF
Software Essentials Design and Construction 1st Edition Adair Dingle
PDF
Data Plane Development Kit A Guide To The User Spacebased Fast Network Applic...
PDF
Mastering ASP NET with Visual C 1st Edition A. Russell Jones
PDF
Networking Concepts And Technology Deepak Kakadia Francesco Dimambro
PDF
Software-Defined Networking for Future Internet Technology: Concepts and Appl...
PDF
API Design for C 1st Edition Martin Reddy
PDF
Assembly Language For X86 Processors 8th Edition Kip R Irvine
The compiler design handbook optimizations and machine code generation 1st Ed...
Software Essentials Design and Construction 1st Edition Adair Dingle
Data Plane Development Kit A Guide To The User Spacebased Fast Network Applic...
Mastering ASP NET with Visual C 1st Edition A. Russell Jones
Networking Concepts And Technology Deepak Kakadia Francesco Dimambro
Software-Defined Networking for Future Internet Technology: Concepts and Appl...
API Design for C 1st Edition Martin Reddy
Assembly Language For X86 Processors 8th Edition Kip R Irvine

Similar to The compiler design handbook optimizations and machine code generation 1st Edition Y.N. Srikant (20)

PDF
Transactions On Aspectoriented Software Development Xi 1st Edition Shigeru Chiba
PDF
Advanced Software Engineering Milton Cash
PDF
API Design for C 1st Edition Martin Reddy
PDF
Datacenter as computer
PDF
Mastering ASP NET with Visual C 1st Edition A. Russell Jones
PDF
Introduction to Software Engineering 2nd Edition Ronald J. Leach
PDF
Embedded Systems Design Programming And Applications 1st Edition Ak Ganguly
PDF
Assembly Language for X86 Processors 8th Edition Kip R. Irvine
PDF
ChipDesignEssentials_6weeks_MOSartLabs.pdf
PDF
Annotated Bibliography On Unreliable Software
PDF
Engineering a Compiler 2nd Edition Keith Cooper
PDF
Deliver excellence
PPT
02 Why Software Engineering?
PDF
Introduction to software engineering Second Edition Leach
PDF
Frontend Development The Ultimate Guide Sufyan Bin Uzayr
PDF
Introduction to Software Engineering 2nd Edition Ronald J. Leach
PDF
S00193ed1v01y200905cac006
DOCX
CIS 524 Enhance teaching / snaptutorial.com
PDF
Web Engineering Principles And Techniques Woojong Suh
PDF
The Practical Handbook of Internet Computing 1st Edition Munindar P. Singh
Transactions On Aspectoriented Software Development Xi 1st Edition Shigeru Chiba
Advanced Software Engineering Milton Cash
API Design for C 1st Edition Martin Reddy
Datacenter as computer
Mastering ASP NET with Visual C 1st Edition A. Russell Jones
Introduction to Software Engineering 2nd Edition Ronald J. Leach
Embedded Systems Design Programming And Applications 1st Edition Ak Ganguly
Assembly Language for X86 Processors 8th Edition Kip R. Irvine
ChipDesignEssentials_6weeks_MOSartLabs.pdf
Annotated Bibliography On Unreliable Software
Engineering a Compiler 2nd Edition Keith Cooper
Deliver excellence
02 Why Software Engineering?
Introduction to software engineering Second Edition Leach
Frontend Development The Ultimate Guide Sufyan Bin Uzayr
Introduction to Software Engineering 2nd Edition Ronald J. Leach
S00193ed1v01y200905cac006
CIS 524 Enhance teaching / snaptutorial.com
Web Engineering Principles And Techniques Woojong Suh
The Practical Handbook of Internet Computing 1st Edition Munindar P. Singh
Ad

Recently uploaded (20)

PDF
RMMM.pdf make it easy to upload and study
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PPTX
Pharma ospi slides which help in ospi learning
PDF
Pre independence Education in Inndia.pdf
PPTX
Institutional Correction lecture only . . .
PDF
Supply Chain Operations Speaking Notes -ICLT Program
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PDF
VCE English Exam - Section C Student Revision Booklet
PDF
Sports Quiz easy sports quiz sports quiz
PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PPTX
Cell Types and Its function , kingdom of life
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PDF
Computing-Curriculum for Schools in Ghana
PDF
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PDF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
PPTX
Microbial diseases, their pathogenesis and prophylaxis
PPTX
Cell Structure & Organelles in detailed.
PPTX
master seminar digital applications in india
RMMM.pdf make it easy to upload and study
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
Pharma ospi slides which help in ospi learning
Pre independence Education in Inndia.pdf
Institutional Correction lecture only . . .
Supply Chain Operations Speaking Notes -ICLT Program
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
2.FourierTransform-ShortQuestionswithAnswers.pdf
VCE English Exam - Section C Student Revision Booklet
Sports Quiz easy sports quiz sports quiz
Module 4: Burden of Disease Tutorial Slides S2 2025
Cell Types and Its function , kingdom of life
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
Computing-Curriculum for Schools in Ghana
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
Pharmacology of Heart Failure /Pharmacotherapy of CHF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
Microbial diseases, their pathogenesis and prophylaxis
Cell Structure & Organelles in detailed.
master seminar digital applications in india
Ad

The compiler design handbook optimizations and machine code generation 1st Edition Y.N. Srikant

  • 1. The compiler design handbook optimizations and machine code generation 1st Edition Y.N. Srikant - PDF Download (2025) https://ebookultra.com/download/the-compiler-design-handbook- optimizations-and-machine-code-generation-1st-edition-y-n- srikant/ Visit ebookultra.com today to download the complete set of ebooks or textbooks
  • 2. Here are some recommended products for you. Click the link to download, or explore more at ebookultra.com Foundation Engineering Handbook Design and Construction with the 2006 International Building Code 1st Edition Robert Day https://ebookultra.com/download/foundation-engineering-handbook- design-and-construction-with-the-2006-international-building-code-1st- edition-robert-day/ Code Generation in Action 1 / Revised Edition Jack Herrington https://ebookultra.com/download/code-generation-in-action-1-revised- edition-jack-herrington/ Machine Tools Design Reliability and Safety Design Reliability and Safety 1st Edition Scott P. Anderson https://ebookultra.com/download/machine-tools-design-reliability-and- safety-design-reliability-and-safety-1st-edition-scott-p-anderson/ Machine Elements Analysis and Design 2nd Revised edition Edition Peder Klit https://ebookultra.com/download/machine-elements-analysis-and- design-2nd-revised-edition-edition-peder-klit/
  • 3. Design of Machine Tools 5th Edition S.K. Basu And D.K. Pal https://ebookultra.com/download/design-of-machine-tools-5th-edition-s- k-basu-and-d-k-pal/ Engineering a Compiler 2nd Edition Keith Cooper https://ebookultra.com/download/engineering-a-compiler-2nd-edition- keith-cooper/ Code Design for Dependable Systems Theory and Practical Applications 1st Edition Eiji Fujiwara https://ebookultra.com/download/code-design-for-dependable-systems- theory-and-practical-applications-1st-edition-eiji-fujiwara/ Machine Elements in Mechanical Design 4th Edition Robert L. Mott https://ebookultra.com/download/machine-elements-in-mechanical- design-4th-edition-robert-l-mott/ Power Generation Handbook 2 E 2nd Edition Philip Kiameh https://ebookultra.com/download/power-generation-handbook-2-e-2nd- edition-philip-kiameh/
  • 5. The compiler design handbook optimizations and machine code generation 1st Edition Y.N. Srikant Digital Instant Download Author(s): Y.N. Srikant, Priti Shankar ISBN(s): 9781420040579, 142004057X Edition: 1 File Details: PDF, 5.73 MB Year: 2002 Language: english
  • 7. 1240 Half Title pg 7/11/02 12:03 PM Page 1 The Compiler Design Handbook Optimizations and Machine Code Generation
  • 9. 1240 Title pg 7/11/02 12:03 PM Page 1 CRC PR ESS Boca Raton London New York Washington, D.C. The Compiler Design Handbook Optimizations and Machine Code Generation Edited by Y.N. Srikant P. Shankar
  • 10. This book contains information obtained from authentic and highly regarded sources. Reprinted material is quoted with permission, and sources are indicated. A wide variety of references are listed. Reasonable efforts have been made to publish reliable data and information, but the authors and the publisher cannot assume responsibility for the validity of all materials or for the consequences of their use. Neither this book nor any part may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, microfilming, and recording, or by any information storage or retrieval system, without prior permission in writing from the publisher. All rights reserved. Authorization to photocopy items for internal or personal use, or the personal or internal use of specific clients, may be granted by CRC Press LLC, provided that $1.50 per page photocopied is paid directly to Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923 USA The fee code for users of the Transactional Reporting Service is ISBN 0-8493-1240-X/03/$0.00+$1.50. The fee is subject to change without notice. For organizations that have been granted a photocopy license by the CCC, a separate system of payment has been arranged. The consent of CRC Press LLC does not extend to copying for general distribution, for promotion, for creating new works, or for resale. Specific permission must be obtained in writing from CRC Press LLC for such copying. Direct all inquiries to CRC Press LLC, 2000 N.W. Corporate Blvd., Boca Raton, Florida 33431. Trademark Notice: Product or corporate names may be trademarks or registered trademarks, and are used only for identification and explanation, without intent to infringe. Visit the CRC Press Web site at www.crcpress.com © 2003 by CRC Press LLC No claim to original U.S. Government works International Standard Book Number 0-8493-1240-X Library of Congress Card Number 2002067413 Printed in the United States of America 1 2 3 4 5 6 7 8 9 0 Printed on acid-free paper Library of Congress Cataloging-in-Publication Data Srikant, Y.N. The compiler design handbook : optimizations and machine code generation / Y.N. Srikant, Priti Shankar p. cm. Includes bibliographical references and index. ISBN 0-8493-1240-X (alk. paper) 1. Compilers (Computer programs). 2. Code generators. I. Shankar, Priti. II. Title. QA76.76C65 S65 2002 005.4′53—dc21 2002067413 1240-discl. Page 1 Friday, August 10, 2007 12:48 PM
  • 11. Preface In the last few years, changes have had a profound influence on the problems addressed by compiler designers. First, theproliferationinmachinearchitectureshasnecessitatedthefine-tuningofcompiler back ends to exploit features such as multiple memory banks, pipelines and clustered architectures. These features provide potential for compilers to play a vital role in the drive for improved perfor- mance. Areas in which such possibilities can be exploited are, for example, speculative execution, software pipelining, instruction scheduling and dynamic compilation. Another trend that is con- tinuously explored is the generation of parts of the compiler from specifications. Such techniques are well established for the front end, but still in the experimental stages for the problems of code optimization and code generation. Optimizers in compilers are relying on newer intermediate forms like static single assignment (SSA) form. The growing use of object-oriented languages has brought into focus the need for optimizations that are special to such languages. Algorithms for program slicing and shape analysis have made it possible to gather detailed information about a program that can be used in tasks such as debugging, testing, scheduling and parallelization. The Compiler Design Handbook: Optimizations and Machine Code Generation addresses some of these issues listed that are of central concern to compiler designers. However, it does not attempt to be an encyclopedia of optimization and code generation. Several topics could not be included mainly because of space limitations. Notable among omissions are just-in-time (JIT) compilation, implementation of parallel languages, interpreters, intermediate languages, compilation of hardware description languages, optimization for memory hierarchies, constraint programming languages and their compilation, functional programming languages and their compilation, code generation using rewriting systems, peephole optimizers and runtime organizations. The topics included are of relevance mainly to the compilation of imperative languages. The material presented in this volume is addressed to readers having a sound background in traditional compiler design. In particular, we assume that the reader is familiar with parsing, semantic analysis, intermediate code generation, elements of data flow analysis, code improvement techniques and principles of machine code generation. We hope that the material presented here can be useful to graduate students, compiler designers in industry and researchers in the area. v
  • 13. Acknowledgments The patience and efforts of the contributors are the major factors that have made this handbook possible. We thank each one of them for their contribution and for sparing their time to write a chapter. All of them have responded promptly to our requests and have readily cooperated in reviewing other contributors’ chapters. We thank Ramesh Subrahmanyam, Uday Khedker, Vineeth Kumar, Wei Qin, S. Rajagopalan, Sanjay Rajopadhye, Mahmut Kandemir, Evelyn Duesterwald, Rajiv Gupta, Rajib Mall, R. Venugopal, Ravindra B. Keskar, Eduard Mehofer, Sanjeev Kumar Aggarwal, Reinhard Wilhelm, Thomas Reps, Andreas Krall, Nigel Horspool, Vicki H. Allan, Matthew T. Jacob, D.V. Ravindra and S.R. Prakash for reviewing the chapters. The assistance and continuous coop- eration of the editors and other staff of CRC Press have proved to be invaluable in producing this text. vii
  • 15. Editors Y.N. Srikant is a Professor at the Indian Institute of Science (IIS), Bangalore, India, and is currently the chairman of the department of computer science and automation. He received his Ph.D. in computer science from the Indian Institute of Science, and is the recipient of young scientist medal of the Indian National Science Academy. He joined IIS in 1987 as a faculty member. Since then, he has guided a number of doctoral and master degree students and has consulted for a large number of industries. His areas of interest are compiler design, and application of compiler technology to the development of software tools used in software architecture design and software testing. He started the compiler laboratory in the department of computer science and automation of IIS, where several major research projects in the following areas have been carried out in the last few years: automatic machine code generation, specification and generation of compiler optimizations, parallelization and HPF compilation, incremental compilation and just-in-time (JIT) compilation of Java. Some of the research projects currently in progress are implementation of .NET CLR on Linux, implementation of UDDI on Linux, code generation for embedded processors and optimizations for the Itanium processor. Priti Shankar is at the department of computer science and automation at the Indian Institute of Science (IIS) where she is currently professor. She received a BE in Electrical Engineering at the Indian Institute of Technology (IIT), Delhi in 1968, and the M.S. and Ph.D. degrees at the University ofMarylandatCollegeParkin1971and1972, respectively. ShejoinedtheIISin1973. Shehasguided a large number of research students in the areas of formal languages, tools for automatic compiler generation and code optimization, and algorithms for pattern matching and image processing. Several tools for automatic code generation have been designed and implemented under her supervision. Her principal interests are in the applications of formal techniques in the design of software tools and in algebraic coding theory. She is a member of the American Mathematical Society and the Association for Computing Machinery. ix
  • 17. Contents 1 Data Flow Analysis Uday P. Khedker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 Automatic Generation of Code Optimizers from Formal Specifications Vineeth Kumar Paleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3 Scalar Compiler Optimizations on the Static Single Assignment Form and the Flow Graph Y.N. Srikant. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4 Profile-Guided Compiler Optimizations Rajiv Gupta, Eduard Mehofer and Youtao Zhang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 5 Shape Analysis and Applications Reinhard Wilhelm, Thomas Reps and Mooly Sagiv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 6 Optimizations for Object-Oriented Languages Andreas Krall and Nigel Horspool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 7 Data Flow Testing Rajiv Gupta and Neelam Gupta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 8 Program Slicing G.B. Mund, D. Goswami and Rajib Mall. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 9 Debuggers for Programming Languages Sanjeev Kumar Aggarwal and M. Sarath Kumar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 10 Dependence Analysis and Parallelizing Transformations Sanjay Rajopadhye . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 11 Compilation for Distributed Memory Architectures Alok Choudhary and Mahmut Kandemir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 12 Automatic Data Distribution J. Ramanujam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 13 Register Allocation K. Gopinath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 14 Architecture Description Languages for Retargetable Compilation Wei Qin and Sharad Malik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535 xi
  • 18. 15 Instruction Selection Using Tree Parsing Priti Shankar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 16 Retargetable Very Long Instruction Word Compiler Framework for Digital Signal Processors Subramanian Rajagopalan and Sharad Malik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 17 Instruction Scheduling R. Govindarajan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 18 Software Pipelining Vicki H. Allan and Stephen J. Allan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689 19 Dynamic Compilation Evelyn Duesterwald . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 20 Compiling Safe Mobile Code R. Venugopal and Ravindra B. Keskar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 21 Type Systems in Programming Languages Ramesh Subrahmanyam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801 22 Introduction to Operational Semantics Sanjiva Prasad and S. Arun-Kumar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891 xii
  • 19. 1 Data Flow Analysis Uday P. Khedker Indian Institute of Technology (IIT) Bombay 1.1 How to Read This Chapter ......................... 1 1.2 Program Analysis: The Larger Perspective......... 2 Characteristics of Semantic Analysis • Characteristics of Data Flow Analysis 1.3 Basic Concepts of Data Flow Analysis............. 5 Program Representation for Data Flow Analysis • Defining the Semantic Information to Be Captured • Modeling Data Flow Analysis: Defining Constraints • Solutions of Data Flow Analysis • Soundness of Data Flow Analysis • Some Theoretical Properties of Data Flow Analysis • Perform- ing Data Flow Analysis: Solving Constraints • Generic Abstractions in Data Flow Analysis 1.4 Advances in Data Flow Analysis................... 24 Background • Enriching the Classical Abstractions in Data Flow Analysis 1.5 Theoretical Foundations of Data Flow Analysis ... 27 Algebra of Data Flow Information • World of Flow Func- tions • Data Flow Frameworks • Instance of a Data Flow Framework • Information Flow Paths and the Path Flow Function • Solutions of an Instance of a Data Flow Framework 1.6 Solution Methods of Data Flow Analysis .......... 40 Iterative Methods of Data Flow Analysis • Elimination Methods of Data Flow Analysis • Complexity of Data Flow Analysis • Comparison of Solution Methods and Some Practical Issues 1.7 Bibliographic Notes................................ 52 Acknowledgments ....................................... 53 References ............................................... 53 1.A Appendix: Some Examples of Advanced Analyses 55 Data Flow Equations and Brief Descriptions • Taxonomies of Data Flow Analysis 1.1 How to Read This Chapter This chapter provides a thorough treatment of data flow analysis for imperative languages. Because our focus is analysis instead of applications, we describe optimizations very briefly. Besides, we do not cover high level data flow analyses of declarative languages, static single assignment (SSA) based data flow analyses and intermediate representations; the latter two are covered in separate chapters. 0-8493-1240-7/03/$0.00+$1.50 c 2003 by CRC Press LLC 1
  • 20. 2 The Compiler Design Handbook: Optimizations and Machine Code Generation We distinguish between what data flow analysis is and how data flow analysis is performed by delaying the latter as much as possible; we believe that this provides a much cleaner exposition of ideas. We begin from the first principles and evolve all basic concepts intuitively. In the early part of the chapter, rigor follows intuition until the peak is reached in Section 1.5 where the situation is completely reversed. We also provide the larger perspective of program analysis to highlight that data flow analysis may look very different from other program analyses but it is only a special case of a more general theme. This is achieved through a highly abstract summary in Section 1.2, which may be read cursorily in the first reading. Revisiting it after reading the rest of the chapter may bring out the relevance of this section better. Section 1.3 evolves the basic concepts of data flow analysis and it must be understood thoroughly before reading the rest of the chapter. Section 1.4 describes the expanding horizons of data flow analysis; the believers may skip it but the skeptics will do well to dissect it to appreciate the significance of the concept of information flow paths in Section 1.5.5. Sections 1.5.1, 1.5.2, and Figures 1.16 and 1.17 are very important and should not be skipped. Solution methods of data flow analysis are discussed in Section 1.6. Finally, the most important section of this chapter is Section 1.7; we urge the reader to make the most of it. 1.2 Program Analysis: The Larger Perspective Language processors analyze programs to derive useful information about them. Syntactic analyses derive information about the structure of a program (which is typically static) whereas semantic analyses derive information about the properties of dynamic computations of a program. The semantic information can capture properties of both operations and data (together as well as independently). 1.2.1 Characteristics of Semantic Analysis Semantic analyses cover a large spectrum of motivations, basic principles and methods. On the face of it, the existence of very many diverse analyses lead to the impression that there are more variances than similarities. Though this is true of practical implementations, at a conceptual level almost all semantic analyses are characterized by some common aspects. These characteristics are highly abstract, largely orthogonal and far from exhaustive. Although very elementary, they provide a good frame of reference; finding the coordinates of a given analysis on this frame of reference yields valuable insights about the analysis. However, a deeper understanding of the analysis would require exploring many more analysis-specific details. 1.2.1.1 Applications of Analysis Typical uses of the information derived by semantic analyses can be broadly classified as: • Determining the validity of a program. An analysis may be used to validate programs with regard to some desired properties (e.g., type correctness). • Understandingthebehaviorofaprogram. Ananalysismayverify(ordiscover)usefulproperties of programs required for debugging, maintenance, verification, testing, etc. • Transforming a program. Most analyses enable useful transformations to be performed on programs. These transformations include constructing one program representation from another as well as modifying a given program representation. • Enabling program execution. Semantic analysis can also be used for determining the operations implied by a program so that the program can be executed (e.g., dynamic-type inferencing).
  • 21. Data Flow Analysis 3 1.2.1.2 Theoretical Foundations of Analysis Specification and computation of semantic properties can be based on any of the following: • Inference systems. These systems consist of a set of axioms and inductive and compositional definitions constituting rules of inference. In such systems, the properties are inferred by repeatedly discovering the premises that are satisfied and by invoking appropriate rules of inference. • Constraint resolution systems. These consist of a constraint store and a logic for solving con- straints. In such systems, a program component constrains the semantic properties. These con- straints are expressed in form of inequalities and the semantics properties are derived by finding a solution that satisfies all the constraints. The solution may have to satisfy some other desirable properties (namely, largest or smallest) too. 1 The constraints could be of the following types: ◦ Structured constraints. These take advantage of the temporal or spatial structures of data and operations by grouping the related constraints together. Traditionally they have been unconditional, and are called flow-based constraints because they have been solved by traversals over trees or general graphs. Grouping of structured constraints often leads to replacing groups of related inequalities by equations. Structured constraints often lead to more efficient analyses, both in terms of time and space. ◦ Unstructured constraints. These are not restricted by the structure and can capture more powerful semantics because they can be conditional. They often lead to comparatively less efficient analyses because the related constraints may not be grouped together. • Abstract interpretations. These use abstraction functions to map the concrete domains of values to abstract domains, perform the computations on the abstract domains and use concretization functions to map the abstract values back to the concrete domains. • Other approaches. These include formal semantics-based approaches (typically using denota- tional semantics), or model checking-based approaches, which are relatively less common. These foundations are neither exclusive nor exhaustive. Though some foundations are preferred for some semantic analyses, in general, an analysis can be expressed in any of the preceding models. 1.2.1.3 Time of Performing Analysis An analysis performed before the execution of a program is termed static analysis, whereas an analysis performed during the execution of a program (in an interleaved fashion) is termed dynamic analysis. Thus, an interpreter can perform static analysis (by analyzing a program just before execution) as well as dynamic analysis (by analyzing the program during execution). A compiler, however, can perform static analysis only. In principle, the choice between static and dynamics analysis is governed by the availability of information on which the analysis depends, the amount of precision required (or the imprecision that can be tolerated), and the permissible runtime overheads. An analysis that depends on runtime information is inherently dynamic. For example, if type annotations can be omitted in a language and type associations could change at runtime, types can be discovered only at runtime. This requires dynamic-type inferencing. If some amount of imprecision can be tolerated (e.g., if precise-type information is not expected but only sets of possible types are expected), it may be possible to perform an approximate static analysis for an otherwise inherently dynamic analysis. This obviates dynamic analysis only if a compromise on the precision 1 The terms largest and smallest depend on the particular semantics derived and need to be defined appropriately.
  • 22. 4 The Compiler Design Handbook: Optimizations and Machine Code Generation of information is acceptable; otherwise it requires a subsequent dynamic analysis. In any case, it reduces the amount of dynamic analysis and hence runtime overheads. If runtime overheads are a matter of concern, dynamic analyses should either be avoided or preceded by corresponding (approximate) static analyses. In practice, a majority of analyses performed by language processors are indeed static. In addition, many dynamic analyses have a static counterpart. For instance, many languages require array bounds to be checked at runtime; optimizing compilers can minimize these checks by a static array bound checking optimization. 1.2.1.4 Scope of Analysis Semantic analyses try to discover summary information about some program unit by correlating the summary information discovered for smaller constituent units. As such, an analysis may be confined to a small unit of a program such as an expression or a statement, to larger units such as a group of statements or function and procedure blocks or to still larger units such as modules or entire programs. Program units with the same level of scope are analyzed independently. Analysis of units with differing levels of scope may be interleaved or may be nonoverlapped (and cascaded); in either case, the larger units can be analyzed only after their constituent units. 1.2.1.5 Granularity of Analysis An exhaustive analysis derives information starting from scratch whereas an incremental analysis updates the previously derived semantic information to incorporate the effect of some changes in the programs. These changes may be caused by transformations (typically for optimization) or by user edits (typically in programming environments). In general, an incremental analysis must be preceded by at least one instance of the corresponding exhaustive analysis. 1.2.1.6 Program Representations Used for Analysis An analysis is typically performed on an intermediate representation of the program. Though the theoretical discussions of many analyses are in terms of the source code, e.g., in the case of parallelization, in practice these analyses are performed on a suitable internal representation. 1.2.2 Characteristics of Data Flow Analysis Data flow analysis discovers useful information about the flow of data (i.e., uses and definitions of data) in a program. We list the following characteristics of data flow analysis as a special case of semantic analysis: • Applications. Data flow analysis can be used for: ◦ Determining the semantic validity of a program, e.g., type correctness based on inferencing, prohibiting the use of uninitialized variables, etc. ◦ Understanding the behavior of a program for debugging, maintenance, verification or testing ◦ Transforming a program. This is the classical application of data flow analysis and data flow analysis was originally conceived in this context. • Foundations. Data flow analysis uses constraint resolution systems based on structured con- straints. These constraints are unconditional and traditionally related constraints are grouped together into data flow equations. • Time. Data flow analysis is mostly static analysis.2 • Scope. Data flow analysis may be performed at almost all levels of scope in a program. Traditionally the following terms have been associated with data flow analysis for different scopes in the domain of imperative languages: 2 Some form of dynamic data flow analysis for dynamic slicing, etc. is an active area of current research.
  • 23. Data Flow Analysis 5 • Local data flow analysis. Analysis across statements but confined to a maximal sequence of statements with no control transfer other than fall through (i.e., within a basic block). • Global (intraprocedural) data flow analysis. Analysis across basic blocks but confined to a function or procedure. • Interprocedural data flow analysis. Analysis across functions and procedures. It is also common to use the term local data flow analysis for analysis of a single statement and global data flow analysis for analysis across statements in a function and procedure. Effectively, the basic blocks for such analyses consist of a single statement. • Granularity. Data flow analysis can have exhaustive as well as incremental versions. Incre- mental versions of data flow analysis are conceptually more difficult compared with exhaustive data flow analysis. • Program representations. The possible internal representations for data flow analysis are abstract syntax trees (ASTs), directed acyclic graphs (DAGs), control flow graphs (CFGs), program flow graphs (PFGs), call graphs (CGs), program dependence graphs (PDGs), static single assignment (SSA) forms, etc. The most common representations for global data flow analysis are CFGs, PFGs, SSA and PDGs whereas interprocedural data flow analyses use a combination of CGs (and CFGs or PFGs). Though ASTs can and have been used for data flow analysis, they are not common because they do not exhibit control flow explicitly. In this chapter, we restrict ourselves to CFGs. 1.3 Basic Concepts of Data Flow Analysis This section is a gentle introduction to data flow analysis. We evolve the concepts through a running example contained in Figure 1.1(a), which is a stripped down version of a typical function in signal processing applications. The function RunningTotal calculates the running sum of energy at every instant in an interval From to To from the amplitude of the signal.3 1.3.1 Program Representation for Data Flow Analysis Figure 1.1(b) contains the corresponding program in a typical linear intermediate representation generated by a compiler front end after scanning, parsing, declaration processing and type checking. We observe that the instructions in the intermediate representation correspond to the actual imperative statements of the C code; the declarative statements would populate the symbol table. The compiler has performed array address calculation using Int Size to identify the position of an element from the start of the arrays. The instructions to access the location of an element in the memory (by adding the array base address) can be inserted by the code generator later. This is a matter of design choice. Finally, the most important observation is as follows: Expression i ∗ Int Size is computed on lines 5 and 16. Int Size is a constant so it does not change; however, if we can ascertain that the value of i would not change during the time between execution of the instructions on line 5 and 16, then the computation of i ∗ Int Size on line 16 is redundant because it would compute the same value that would have been computed during the execution of the instruction on line 5. 3 A digital signal processor (DSP) programmer may probably write some other kind of code but that is beside the point.
  • 24. 6 The Compiler Design Handbook: Optimizations and Machine Code Generation # define INSTANTS 10000 1. i = From # define SFACTOR 0.8 /* Scaling Factor */ 2. Sum = 0 float Amplitude [INSTANTS], Energy [INSTANTS]; 3. t0 = (From ≤ To) 4. if not t0 goto L0 float RunningTotal (int From, int To) 5. L1: t1 = i × Int−Size { float Sum; 6. Amp = Amplitude[t1] int i; 7. t2 = Amp 0 i = From; Sum = 0; 8. if t2 goto L2 if (From = To) 9. t3 = Amp × 0.8 { do 10. t4 = Sum + t3 { Amp = Amplitude[i]; 11. Sum = t4 if (Amp 0) 12. goto L3 Sum = Sum − Amp * SFACTOR; 13. L2: t5 = Amp × 0.8 14. t6 = Sum−t5 else 15. Sum = t6 Sum = Sum + Amp * SFACTOR; 16. L3: t7 = i × Int−Size Energy[i++] = Sum; 17. Energy[t7] = Sum } 18. t8 = i + 1 while (i = To); 19. i = t8 } 20. t9 = (i ≤ To) return Sum; 21. if t9 goto L1 } 22. L0: return Sum (a) The C code fragment (b) An intermediate representation FIGURE 1.1 Calculating sum of energies of some signal at distinct instants. The optimization that eliminates such redundant computations is called common subexpression elimination and it uses a data flow analysis called available expressions analysis. Though it appears that the value of i is not modified at any time between the execution of lines 5 and 16, there are gotos and we need to ensure that we have covered all execution paths. Toward this end, we convert the program into a more convenient representation as shown in Figure 1.2. We make the following observations about this representation: • This representation is a directed graph with two well-defined relations pred and succ: pred(i) = {p | ∃ edge p → i} succ(i) = {s | ∃ edge i → s} Note that succ includes only the immediate successors and not all descendants. Similarly, pred includes only the immediate predecessors and not all ancestors. • This representation makes the control transfer explicit in form of (directed) edges between nodes; the nodes themselves represent maximal group of instructions that are executed sequen- tially without any control transfer into or out of them. Such a group of statements is called a basic block. • We have made a distinction between uses and modifications of program variables by separating expression computations and assignments; the assignments to variables are called definitions of variables. 1.3.2 Defining the Semantic Information to Be Captured In this section we look at some standard data flow problems that have been widely used in theory and practice of data flow analysis; our goal is to see how they define the information to be captured by analysis. We provide a motivation for each analysis and the criterion to be satisfied by the data flow information.
  • 25. Data Flow Analysis 7 1 2 3 4 5 6 a1 : i = ... a2 : Sum = ... e1 : From ≤ To e8 : i ≤ To e2 : i * Int_Size a3 : Amp = ... e3 : Amp 0 e2 : i * Int_Size e7 : i + 1 a1 : i = ... e4 : Amp * 0.8 e5 : Sum − t5 a2 : Sum = ... e4 : Amp * 0.8 e6 : Sum + t3 a2 : Sum = ... Definitions : {a1, a2, a3} Expressions : {e1, e2, e3, e4, e5, e6, e7, e8} Array references have been ommitted and the “uses” and “modifications” of program variables have been highlighted by separating the computations of expressions from the assignments to program variables; the assignments to variables are called “definitions” of variables. FIGURE 1.2 Program flow graph for the intermediate representation in Figure 1.1(b). We talk about the information associated with a program point. Two important categories of program points are the entry and exit points of a basic block, denoted entryi and exiti for block i. The entryi is the point just before the execution of the first statement in the block, whereas the exiti is the point just after the execution of the last statement in the block. 1.3.2.1 Available Expressions Analysis By generalizing our observation about the expression i ∗ Int Size in our example program, we can identify the set of expressions whose previously computed values can be reused at a given program point to eliminate redundant recomputations of the expressions. An expression e is available at a program point p if, along every path from the start node to p, a computation of e exists that is not followed by a definition of any of its operands. 1.3.2.2 Reaching Definitions Analysis Consider a situation where a variable x has been assigned some value at a program point (say p). If x is used at some other program point (say q), we may want to know whether the definition of x at p can influence the use of x at q. In particular, this is used for copy propagation optimization that replaces the use of a variable by the right-hand side variable of its preceding definition. This is in the hope that the preceding definition would become dead code (i.e., a definition whose value is not used), which can be eliminated. For example, if the definition in node 2 of Figure 1.2 is Amp = c, the expression e3 in node 2 can be replaced by c . . . and the expression e4 in nodes 3 and 4 can be replaced by c ∗ 0.8. Then variable Amp has no use and its definition can be safely eliminated.
  • 26. Other documents randomly have different content
  • 27. That is not all either, she said in a broken voice, sitting on the sofa again and brushing her handkerchief over her eyes. Perhaps that girl is not the only one who is suffering. I wanted to think so well of you, to be so proud of you. You were to be the defender of women, fighting their battle for them when they were wronged and helpless. And when you became a Judge .... Oh, I cannot bear to think of it. You have disappointed and deceived me. You are not the man I took you to be. Outside the sun was setting. A dull ray from it was falling on his haggard face and brushing her bronze-brown hair. I thought you loved me too. It was so sweet to think you loved me—me only—never having loved anybody else. Every woman has felt like that, hasn't she? I have anyway. Other men might be faithless, but not you, not Victor Stowell. And yet, for the sake of your poor fancy for this country girl.... Fenella! Oh, what a fool I've been, she cried, leaping up again and dashing the tears from her eyes. Forgive you? Never while that girl lies in prison as the consequence of your sin. Stowell could bear no more. Stepping forward, he laid hold of Fenella by the shoulders, and approaching his face to her face he said, Listen to me, Fenella. I have done wrong—I know that. I am not here to excuse or defend myself, and if your heart does not plead for me I have nothing to say. But I swear before God that I have loved you with all my soul and strength, and if it hadn't been for that.... Loved me! cried Fenella, between a laugh and a sob. And then in the wild delirium of the sheer woman, she said, What proof of your love have you given to me compared to the proof you have given to that girl? Oh, when I think of it I could almost find it in my heart to envy her. I do envy her. Yes, degraded and shamed and condemned and in prison as she is, I envy her, and could change places with
  • 28. her this very minute. I would have given you anything in the world rather than this should be—anything, my honour, myself.... Fenella! Let me go! You are driving me mad. Leave me. I hate you. I despise you. You have broken my heart. I thought you were brave and true, but what are you but a common.... Fenella! Coward! Hypocrite! Let me go! But she had no need to wrench herself away from him. His hands fell from her shoulders like lead, and at the next moment she was gone from the room. He stood for a while where she had left him with the echo of her stinging words ringing in his ears. Bitter, unjust and cruel as they had been, he was struggling to excuse her. She did not understand. Bessie had not told her all. Presently she would come back and ask his pardon. But she did not come, and after a while (it seemed like an eternity), feeling crushed, degraded, trampled upon, dragged in the dust and wounded in his tenderest affections, he left the room and the house. Outside, where his automobile was standing, he still lingered, expecting to be called back. It was impossible that Fenella would let him part from her like this. He knew where she was—in the Governor's smoking-room which overlooked the drive. At the last moment she would knock at the window and cry, Stay! Slowly he moved around his car, opening the bonnet, touching the engine, starting it, pulling on his long driving gloves. But still she gave no sign, and at length he prepared to step into his seat. Was this to be the end— the end of everything?
  • 29. Meantime, Fenella, alone in her father's room and recovering from the storm of her anger, was beginning to be afraid. She wanted to go back to Stowell and say, I was mad. I didn't know what I was saying. I love you so much. But her pride would not permit her to do that, and she waited for Stowell to do something. Why didn't he burst through the door, throw his arms about her, and compel her to forgive him? She listened intently for a long time, but there came no sound from the adjoining room. What was he doing? Presently she heard him coming out of the library, walking with a firm step down the corridor to the porch, opening the front door and closing it behind him. Was he leaving her? Like this? Then he would never come back. She heard his footstep on the gravel and looking through the window she saw him, with his white face, raising his soft hat to wipe his perspiring forehead, and then climbing into the car. Could it be possible that he was going away without another word? In spite of her jealousy and rage, she felt an immense admiration for the man who, loving her as she was sure he did, was yet so strong that he could leave her after she had insulted and humiliated him. She wanted to throw up the window and cry, Wait! I am coming out to you. But no, her pride would not permit her to do that either, and at the next instant the car was moving away. She watched it until it had disappeared behind the trees. Then she turned to go back to her bedroom. At the foot of the stairs she met Miss Green who, shocked at the sight of her disordered face, said, My goodness, Fenella! What has happened? In the plaintive voice of a crying child, Fenella answered, He has gone. I have driven him away.
  • 30. Then she stumbled upstairs, locked the door of her room on the inside, threw herself face down on the bed, burst into a flood of tempestuous tears, and cried aloud to Stowell, now that he could no longer hear her— Victor! Victor! My Victor! CHAPTER THIRTY-TWO THE VOICE OF THE SEA Forgive you? Never while that girl lies in prison as the consequence of your sin. The words beat on Stowell's brain with the paralysing effect of a muffled drum. He was driving up the mountain road. Char-à-bancs, full of English visitors (who were laughing and singing in chorus), were coming down. The drivers shouted at him from time to time. This irritated him until he realised that his motor-car was oscillating from side to side of the road. When he reached the top, where the road turns towards the glen, all the heart was gone out of him. The great scene no longer brought the old joyousness. With love lost and hope quenched the soul of the world was dead, and the heavens were dark above him. At the bottom of the glen, where it dips into the Curragh, he came upon a group of bare-headed women, with their arms under their aprons, surrounding a little person with watery eyes, in a poke bonnet and a satin mantle. Mrs. Collister had returned from Castletown, and her neighbours were taking her home. Never mind, woman! It will be all set right at the judgment. And then the man will be found out and punished, too!
  • 31. At the corner of the cross roads Dan Baldromma threw himself in front of the car, to draw it up, and in his raucous voice he fell on Stowell with a torrent of abuse. You've been locking up a respectable man, Dempster, but you can't lock up his tongue, and the island is going to know what justice in the Isle of Man can be. Stowell made no answer. Any poor creature could insult him now. Janet was waiting for him at Ballamoar, with a fire in the library, and the tea-tray ready. But the sweet home atmosphere only made him think of the happiness that had been so nearly within his reach. Seeing that something was amiss, Janet assumed her cheeriest tone, brought out two patterns of damask, laid them over chairs, and asked which Fenella would like best for her boudoir. I don't know. I can't say. But .... it doesn't matter now. Janet gathered up her patterns and went out of the room without a word. Forgive you? Never while that girl lies in prison. The stinging words followed him to his bedroom. They broke up his sleep. They rang like the screech of an owl through the darkness of the night. Next day, not trusting himself to drive his car, he returned to Castletown by train. There were only two first-class compartments and both were full. He was about to step into a third-class carriage when a voice cried, This way, Deemster. Always room enough for you. There was to be a sitting of the Keys that day and the compartment was full of northside members. The talk was about yesterday's trial, and Stowell realised that his management of the case had created a favourable impression. Merciful to the prisoner? Yes, until her guilt was established, but then just, even at the expense of friendship. This led to talk about Gell as the girl's fellow-sinner.
  • 32. Shocking! But it's not the first time he has been mixed up with a woman. Stowell felt an intolerable shame at Gell's undeserved obloquy and his own unmerited glory, but he could say nothing. It will kill the old man, said one of the Keys. The train had drawn up at a side station and his voice was loud in the vacant air. Hush! The Speaker was in the next compartment. When the train started again a little man with the face of a ferret began to make facetious references to Fanny. Stowell's hands were itching to take the ribald creature by the throat and fling him out of the window, but something whispered, Who are you to be the champion of virtue? At Court that day, and the day following, he found it hard to concentrate. At one moment an advocate said, Perhaps your Honour is not well this morning? Oh no! I heard you. You were saying.... The rapidity of his mind enabled him to make up for his lapses in attention, and when his time came to sum up he was always ready. He was indulgent to the accused. All the other prisoners were acquitted —the fat woman for the reason that, bad as her character might be, the characters of her drunken sailors were yet worse (therefore no credit could be attached to their evidence), and the boy who had embezzled on the ground that his superiors at the bank had been guilty of almost criminal negligence, and the four months he had been in prison already were sufficient to satisfy the claims of justice. The boy's mother, who was standing at the back, threw her arms about him and kissed him when he stepped out of the dock, and then, turning her streaming face up to the bench, she cried,
  • 33. God bless you, Deemster! May you live long and every day of your life be a happy one. Back at home, Stowell plunged into the task of drawing up the report for the English authorities which was to accompany the recommendation to mercy. In two days (having his father's library to fall back upon) he knew more about the grounds upon which the prerogative of the Crown could properly be exercised than anybody in the island had ever before been required to learn, and when he had finished his task he had no misgivings. Bessie's sentence would be commuted to imprisonment. And then (life for the poor soul being at an end in the Puritanical old island) he must find some secret means of sending her away. Never while that girl.... But wait! Only wait! Being legislator as well as Judge, he attended the first meeting of Tynwald Court after his appointment. The Governor administered the oath to him in a private room, and then, taking his arm, led the way to the legislative chamber. Do you know it's six days since you were at Government House, my boy? What is Fenella to think of you? Has she .... has she been asking for me, Sir? Well, no, not to say asking, but still .... six days, you know. Stowell sat on a raised daïs between the Attorney-General and Deemster Taubman, who was sufficiently recovered to hobble in on two sticks. The proceedings were of the kind that is usual in such assemblies, the Manx people being the children of their mothers, loving to talk much and about many things. He found it difficult to fix his attention, and was watching for an opportunity to slip away, when the vain repetitions which are called debate suddenly ceased and the Governor called on an Inspector by Police to carry round a Bill which had to be signed by all.
  • 34. In the interval of general conversation that followed, Deemster Taubman, a gruff and grizzly person, leaned back in his seat, put his thumbs in the armholes of his soiled white waistcoat and talked to Stowell. You did quite right in that case of the girl Collister, Sir. In fact you were only too indulgent. I have no pity for the huzzies who run away from the consequences of their misconduct. Murder is murder, and there is no proper punishment for it but death. But the Jury recommended the girl to mercy, and her sentence will be commuted, said Stowell. Eh? Eh? Then you haven't heard what has happened? What? The Governor has reported against the recommendation. Reported against it? Certainly. And as the authorities in London are not likely to read the report and are sure to act on the Governor's advice, the girl will go to the gallows. Stowell felt as if he had been struck over the eyes by an unseen hand. As soon as he had signed the Bill (in a trembling scrawl) he whispered to the Attorney-General that he was unwell and fled from the chamber. Humph! said Taubman, looking after him. That young man is going to break down, and no wonder. His appointment as Deemster was the maddest thing I ever knew. II No, Mr. Stowell, no! You must stay in bed for the next two days at least. I must really insist this time. No work, no excitement, no heart-strain.
  • 35. Remember your father, and take my advice, Sir. It was Doctor Clucas, who, sent for by Janet, had arrived at Ballamoar before Stowell got out of bed in the morning. With closed eyes Stowell reviewed the situation. It was shocking, horrible, intolerable. Not for fifty years had a woman suffered the full penalty of such a crime. He must find some way to prevent it. But after a while a terrible temptation came to him. Why can't I leave things alone? he asked himself. He had done all he could be expected to do. If the Crown, acting on the advice of the Governor, refused to exercise its prerogative of mercy, what right had he to interfere? It might be best for himself, too, that the law should take its course— best in the long run. If Bessie's sentence were commuted to imprisonment what assurance had he that on coming out of prison she would allow him to send her away from the island? On the contrary she might refuse to be banished, and if she found that the blame of her misfortune had fallen on Gell she might tell the truth to free him. What then? He would be a dishonoured man. His position as a Judge would be imperilled; his marriage with Fenella would be impossible, and his whole life would crash down to a welter of disgrace and ruin. But if Bessie were gone there would be no further danger. And after all, it would not be he but the law that had taken her life. Then why can't I leave things alone? he thought. He decided to do so, but his decision brought him no comfort. Towards evening he got up and went out to walk in the farmyard. There he met Robbie Creer, who was just home from the mill with his head full of a pitiful story. It was about Mrs. Collister. Since her daughter's trial the old woman had fallen into the habit of walking barefoot in the glen, chiefly at midnight, and
  • 36. generally in the neighbourhood of the Clagh-ny-Dooiney. At first she had seen a light. Then she had heard a pitiful cry. She was certain it was the cry of a child, a spirit-child, unbaptised and therefore unnamed, and for that reason doomed to wander the world, because unable to enter Paradise. At length she had taken heart of God and going out in her nightdress she had called through the darkness of the trees, If thou art a boy I call thee John. If thou art a girl I call thee Joney. After that she had heard the cry no more, and now she knew it had been Bessie's child, and the bogh-millish was at rest. This story of the old mother's developing insanity rested heavily on Stowell's heart and went far to shake his resolution. After a day or two he began to find his own house and grounds haunted. He could not go into the library without the kind eyes in his mother's picture following him about the room with a pleading look. He could not sit in the dining-room after dinner without remembering his week-ends as a student-at-law, when his father and he would draw up at opposite cheeks of the hearth, and the great Deemster would talk of the great crimes, the great trials and the great Judges. But his worst ordeal was with Janet. Not a word of explanation had passed between them, yet he was sure she knew everything. One evening, going into her sitting-room, he found her with her knitting on her lap, and a copy of the insular newspaper on the floor, looking out on the lawn with a far-off expression. That brought memories of another evening when he had told her that no girl on the island had ever fallen into trouble through him, or ever should do. Ah! Is that you, Victor? she cried, recovering herself and making her needles click, but he had gone, and her voice followed him from the room. Still wrestling with his temptation to stand aside and let the law take its course, Ballamoar became intolerable to him. On the lame excuse of his fortnightly court in the northside town he decided to go to Ramsey, and wrote to Mrs. Quayle to get his old rooms ready.
  • 37. But going from Ballamoar to his chambers was like leaping out of the fire into the furnace. When he opened a disordered drawer up came the Castletown portrait of Bessie Collister like a ghost out of the gloom. When he went for a walk to tire himself for the night his steps involuntarily turned towards the pier where the lighthouse had been shattered by lightning. When he returned and was putting the key in the lock of his outer door he had the tingling sense of a woman's warm presence behind him. When he pulled down his bedroom blind the broken cord brought a stabbing memory. And when he awoke in the morning he felt that he had only to open his eyes to see a girl's raven black hair on the pillow beside him. But Mrs. Quayle's presence was the keenest torment of all. The good old Methodist moved about him at breakfast without speaking, but one morning, fumbling with her bonnet strings before going, she said, Deemster, have you remembered this case of Bessie Collister in your prayers? He removed to Douglas—the Fort Anne Hotel, a breezy place, which sits on the ledge of the headland and just over the harbour. At first the babble and movement of the hotel distracted him, but after a day or two he was drawn back into the maelstrom of his own thoughts. Having a private sitting-room he borrowed law books from the Law Library and sat far into the night to read them. He selected the treatises on Infanticide—those bitter records of the age-long strife between the laws of man and of God. Particularly he read the charges of the British Judges (Scottish too frequently), the bewigged ruffians who, in the abomination of their Puritanical tyranny, and the brutal lust of their judicial vengeance, had hounded poor women to the gallows in the very nakedness of shame. Damn them! Damn them! he would cry, leaping up with a desire to trample on the dead Judges' graves. But then the same persistent voice within would say, Wait awhile! Who are you to stand up for justice and mercy? Crushed and ashamed he would creep up to bed through the silent house, and thinking of the girl whose dark eyes had intoxicated him in the glen
  • 38. (the girl he had afterwards held in his arms) he would say, Is it possible that I can stand by and see her given over to the hangman? That terrified him. In the darkness he pictured to himself the scene of Bessie's death and burial, and thought of his after-life as a Judge, when he would have to go to Court to try other such cases—and Bessie lying out there in the prison-yard. After Ballamoar, with its pastoral tranquillity, the twittering of birds and the sleepy singing of the streams, Fort Anne was sometimes a tempestuous place, with the wash of the waves in the harbour, the monotonous moan of the sea outside and the melancholy wail of the gulls. He thought he heard Bessie's cry in the voice of the sea—her piercing cry when she was being carried out of Court after he had sentenced her. One night he thought Bessie was dead. He was dead too. They were standing side by side in an awful tribunal and she was accusing him before God. He let me die! He killed me! He is my assassin! The sound of his own voice awakened him. A dream! It was the grey of dawn; a storm had risen in the night; the white sea was rolling over the breakwater and the sea-fowl were screaming through the mist and roar. No, by God! If it was a question of Bessie witnessing against him in this world or in the next, he had no longer any doubt which it should be. No more temptations! No more hypocrisy and self-doubt! No more wandering about like a lost soul! He would go up to the Governor. He would call upon him to withdraw his objection to the Jury's recommendation. And if he refused .... he should see what he should see. At eight o'clock in the morning he was walking down the quay in the calm sunshine, looking at the activities of the harbour, and nodding
  • 39. cheerfully to the fishermen as he passed. He was on his way to Government House, and his conscience, with which he had wrestled so long, was triumphant and erect. Then came a shock. He was crossing the stone bridge that leads up to the town when he saw the Governor's blue landau coming down in the direction of the railway station. It was open. Fenella was sitting in it. Stowell was certain she saw him. But she only coloured up to the eyes and dropped her head. At the next instant her carriage had crossed in front of him and swept into the station-yard. Something surged in his throat; something blinded his eyes. But after a moment he threw up his head and walked firmly forward. Wait! Only wait! We'll see! CHAPTER THIRTY-THREE THE HEART OF A WOMAN Meanwhile Fenella had been going through her own temptation. On the night after the trial, having bathed her swollen eyes, she went down to dinner. Her father looked searchingly at her for a moment, and, as soon as they were alone, he said, Was it Stowell I saw driving towards the mountain road as I came up? Perhaps it was, said Fenella. Then why didn't he stay to dinner?
  • 40. Because .... I told him to go. Why? Fenella gulped down the lump that was rising in her throat and said, I have been deceived in him. He is not the man I supposed him to be. Don't be a fool, my dear. I understand what you mean. It is his conduct as a man, not as a Judge you are thinking of. But if every woman in the world thought she had a right to make a scrutiny into her husband's life before she married him there would be a fine lot of marriages, wouldn't there? Crude and even coarse as Fenella thought her father's moral philosophy, she found her self-righteousness shaken by it. Perhaps she had been unfair to Stowell. But why didn't he come and plead his own cause? She couldn't talk to her father, but if Victor came and told his own story.... Victor did not come. For two days her pride fought with her love and she thought herself the unhappiest woman in the world. Then to escape from the pains of self-reproach she conceived the idea of a fierce revenge upon Stowell. She would devote herself to his victim! Yes, she would make it her duty to lighten the lot of the poor creature he had ruined and deserted. After a struggle, and many shameful tears, she went back to Castle Rushen, little knowing what a scorching flame she was to pass through. By this time Bessie was feeling no bitterness against Stowell. The jailer had told her that the Deemster could not have acted otherwise. The law compelled him to condemn her. But he had told the Jury to recommend her to mercy, and now he would be writing to the King to ask him to let her off. Aw, he's good, miss—he's real good for all. Do you say that, Bessie? After he has betrayed you? said Fenella, Betrayed? I wouldn't say that, miss.
  • 41. But he .... he took you to his rooms? What else could he do, miss? All the inns were shut and it was raining, and I had nothing in my pocket. But .... having taken advantage of your homelessness and poverty, he afterwards cast you off? A mysterious wave of injured vanity struggled with Bessie's shame and she said, 'Deed he didn't, then. He wanted to marry me. Marry you .... did you say marry.... Yes, he did, and that was why he sent me to school. But afterwards .... afterwards he changed his mind and turned you off .... I mean turned you over to somebody else? 'Deed no, said Bessie, with her chin raised. It was me that gave him up after I found I was fonder of Alick. Breathing hard, scarcely able to speak, with the hot blood rushing to her cheeks, Fenella compelled herself to go on. Did he know then that you.... No, miss, and neither did I, nor Alick, nor anybody. And when .... when was it that you went.... To his rooms in Ramsey? The first Saturday in August, miss. Fenella went home, happy, miserable, tingling with shame and yet thrilling with love also. Stowell's victim had brought her heart back to him. It was just because he had loved her more than he had loved that girl in prison that the worst had happened. It was just because she herself had
  • 42. persuaded, constrained and almost compelled him that he had sat on the case, not fully knowing what was to be revealed by it. This lasted her half-way home in the train, and then her wounded pride rose again. After all Victor had been faithless to the love with which she had inspired him. If a man loved a woman it was his duty to keep himself pure for her. Victor had not done so, therefore she would never forgive him— never! The Governor's carriage met her at the Douglas station, and when (wiping the scorching tears from her eyes) she reached Government House, she found another carriage standing by the porch. Miss Janet Curphey is here to see you, miss, said the maid. II From the day of the trial, when Victor had returned home with a white face and said, It doesn't matter now, Janet had known what had occurred. That Collister girl had corrupted Victor. She had always feared it would be so since Auntie Kitty had whispered over her counter that that forward thing of Liza Corteen's was boasting that Mr. Stowell had been sooreying with her in the glen. And now she had brought him under the very shadow of shame itself, just when life looked so bright and joyful. Then came the insular newspaper with an account of Fenella's outburst at the trial. That was the cruellest blow of all. She had loved Fenella, and had always thought there would be nothing so sweet as to spread her wedding- bed for her, but now that she had taken sides against Victor and publicly denounced him, Janet's blood boiled. She would go up to Government House and give Fenella a piece of her mind. Why shouldn't she? It was a dull afternoon when she set off for Douglas, and as she drove along the coast road she rehearsed to herself the sharp things she was going
  • 43. to say. But when Fenella came into the drawing-room, looking so pale as to be scarcely recognisable as the radiant girl she used to be, and kissed her and sat by her side, Janet could scarcely say anything. At length (Miss Green, who had been sitting at tea with her, having gone) Janet braced herself, and said, not without a tremor, I've come about Victor. Then he has told you? said Fenella. 'Deed he hasn't, and you needn't either, because I know. Fenella drew her hand away and dropped her head. I don't say he hasn't done wrong, said Janet, but you seem to think he's the only one who is to blame. Oh no! I see now that the girl in Castle Rushen.... The girl? I'm not thinking about the girl. Of course she is to blame. But is there nobody else to blame also? Who else? Yourself. Janet! Oh, I'm telling you the truth, dear. That's what I've come for. But it all happened before I returned to the Island. That's why. If you hadn't stayed away so long it wouldn't have happened at all.
  • 44. Then up from the sweet and sorrowful places of Janet's memory came the story of Stowell's love for Fenella—how he had worked for her and waited for her through all his long years as a student-at-law. It's me to know, my dear. He used to come home every week-end, and his poor father thought it was to see him, but I knew better. 'Any fresh news?' he would say, and I knew what news he wanted. When your photo came he held it under the lamp and said, 'Don't you think she's like my mother, Janet—just a little like?' And I told him yes, and that was to say you were like the loveliest woman that ever walked the world—in this island anyway. Fenella was struggling to control herself. Poor boy, how he worked and worked for you! Jacob never worked harder or waited longer for Rachel. And what was his reward? You signed on at your ridiculous Settlement for seven years and sent word you would never marry. I had it from Catharine Green and it was a sorrowful woman I was to break the news to him. He looked at me with his mother's eyes, and it was fit enough to break my heart to see how he cried with his face on the pillow. But it was with his father's eyes he rose and said, 'It shall never happen again, mother.' He called me mother too, God bless him! Fenella was smothering her mouth in her handkerchief. If he went wrong after that, was it any wonder? Young men are young men, and the Lord won't be too hard on them for being what He has made them. Some people seem to think when trouble comes between a young man and a young woman that the young woman is the only one to be pitied. Well, I'm a woman and I don't. And when a young man has been cut off from the love that would have kept him right and the heavens have gone dark on him.... But I loved him all the time, Janet. Then why didn't you come back, instead of leaving him to the mercy of these good-looking young vixens who will run any risks with a young man if they can only get him to marry them?
  • 45. Fenella's eyes were down again. But that's not all. Not content with deserting him for so many years, you must try to disgrace him also. Janet! Oh, I saw what you said at the trial. But nobody knows whom I.... Don't they indeed! The men may not—most of them are so stupid. They may even think you meant somebody else. But you can't deceive the women like that. And then he knew that you intended it for him. Just when you were about to become his wife, too, and you were the only woman in the world to him! I was so shocked. I thought he wasn't the man I had taken him for. Perhaps he wasn't, perhaps he was, but thousands of women have lost faith in their men and clung to them for all that, and they're the salt of the earth, I say. I'm only an old maid myself, but to stand up for your husband, right or wrong, that's what I call being a wife, if you ask me. Fenella could bear up no longer. She flung her arms about Janet's neck and buried her face in her breast. The darkness was gathering before they broke from their embrace and then it was time for Janet to smooth out her silvery hair and go. Fenella saw her to the carriage and whispered as she kissed her, Tell him to come back to me. And then Janet went home with shining eyes. III
  • 46. Day after day Fenella waited at home for Victor, denying herself to everybody else. Every afternoon she dressed herself in some gown he had said he liked her in. She dressed her hair, too, in the way he liked best. But still he did not come. At length she determined to write to him. Writing was a terrible ordeal. Her pride fought with her love and she could never satisfy herself with her letters. First it was— DEAR VICTOR,—Don't you really think you've stayed away long enough? Remember your 'Manx ones'—especially your lovely and beloved Manx women—won't they be talking? But no, that was too much like threatening him, so she began again— DARLING,—Did you really think I meant all I said that day? Don't you know a woman better than that? I suppose you think I am very hard-hearted and can never forgive, but.... No, that was wrong, too. VICTOR,—Don't you think I have been punished enough? It has been very hard for me, yet I love you still.... But the trembling of her handwriting betrayed the emotion she wished to conceal. At last, after a long day of solitude and abandonment, two little lines— Vic,—I am so lonely. Come to me. Your broken-hearted— FENELLA.
  • 47. But all her letters, with their cries and supplications, were torn up and thrown into the fire. Why did he stay away? Did he expect her to bridge all the gulf between them? At length she thought he must be ill. The idea that he could be suffering (for her sake perhaps) swept down all her pride, and she determined to go to him. But just as she was setting out for Ballamoar somebody brought word that Stowell was staying at Fort Anne. That quenched her humility. So near, yet never coming to see her! Oh, very well! Very well! For two days she felt crushed and abased. Then she heard that Stowell was constantly to be seen at the Law Library, and that brought a memory and an explanation. She remembered that she had said (in that wild moment when she didn't know what she was saying) that she would never forgive him while the girl Bessie lay in prison. That was it! He was finding a solid legal ground on which the prisoner could be liberated, and when he had convinced the law officers of the Crown that this was a proper case for the exercise of mercy, he would come up to her and say, Bessie Collister is free!—the barrier between us is broken down. For a full day after that her heart was at ease. Nay more, she was almost happy, for hidden away in some secret place of semi-consciousness was the thought that the measure of Stowell's efforts for Bessie Collister was the meter of his love for herself. At length her impatience got the better of her tranquillity and she became eager to know what was going on. There was only one person who could tell her that—her father. Coming down to breakfast on the sunny morning after the storm, she saw, among the letters by the Governor's plate, a large envelope superscribed, HOME SECRETARY. When her father had opened it she said, as if casually,
  • 48. Welcome to our website – the ideal destination for book lovers and knowledge seekers. With a mission to inspire endlessly, we offer a vast collection of books, ranging from classic literary works to specialized publications, self-development books, and children's literature. Each book is a new journey of discovery, expanding knowledge and enriching the soul of the reade Our website is not just a platform for buying books, but a bridge connecting readers to the timeless values of culture and wisdom. With an elegant, user-friendly interface and an intelligent search system, we are committed to providing a quick and convenient shopping experience. Additionally, our special promotions and home delivery services ensure that you save time and fully enjoy the joy of reading. Let us accompany you on the journey of exploring knowledge and personal growth! ebookultra.com