<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>SamaTulyataII: Translation Validation of Loop involving Code Optimizing Transformations using Petri Net based Models of Program</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Rakshit Mittal</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Rochishnu Banerjee</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Santonu Sarkar</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Soumyadip Bandyopadhyay</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>ABB Corporate Research INCRC</institution>
          ,
          <addr-line>Bangalore</addr-line>
          ,
          <country country="IN">India</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>BITS Pilani, K K Birla Goa Campus</institution>
          ,
          <addr-line>Goa</addr-line>
          ,
          <country country="IN">India</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Hasso Plattner Institute</institution>
          ,
          <addr-line>Potsdam</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <fpage>138</fpage>
      <lpage>146</lpage>
      <abstract>
        <p>Translation validation is the process of proving semantic equivalence between source and source-translation, i.e., checking the semantic equivalence between the target code (which is a translation of the source program being compiled) and the source code. In this paper, we propose a translation validation technique for Petri net based models of programs which verify several code optimizing transformations involving loop. These types of transformation have been used in several application domains such as scheduling phase of High level synthesis, high performance computations etc. Our Petri net based equivalence checker checks the computational equivalence between two one-safe colour Petri nets. In this work, we have taken two versions of CPNs one corresponds to the source program and the other, the target programs. Using path based analysis technique, we have developed a sound method for proving several code optimizing transformations involving loop. We have also compared our results with other Petri net based equivalence checkers.The experimental result shows the e cacy of the method.</p>
      </abstract>
      <kwd-group>
        <kwd>Equivalence checking</kwd>
        <kwd>CPN</kwd>
        <kwd>Path based analysis</kwd>
        <kwd>Translation validation</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>General applications when executed on parallel and embedded systems often go
through a series of semantic preserving transformations. This is done so that the
resulting translated program can optimally utilize the underlying computing
architecture like multi-core and vector registers. There are various methods of code
transformations like code motions, common sub-expression eliminations, dead code
elimination, etc and several loop based transformation techniques such as loop
distribution, loop parallelization, etc. These transformations are either carried out
automatically by some compilers, or done semi-automatically/manually be design
experts. Validation of a compiler, to ensure correctness of code-translation, by the
construction property is a di cult task. Using, behavioral and semantic veri cation
techniques, it is possible to verify whether the translated (optimized) program has
the same functionality as that of the original code.</p>
      <p>Hence, there is a need for proving behavioral equivalence between the original
and the translated programs. This process of proving semantic equivalence between
? Copyright c 2020 for this paper by its authors. Use permitted under Creative Commons
License Attribution 4.0 International (CC BY 4.0).
source and source-translation, i.e., checking the semantic equivalence between the
target code (which is a translation of the source program being compiled) and the
source code is called translation validation. Conventionally, the basic method for
validation is to check the equality in input and output pairs between the source and
the translated program. However, this is not a sound proof that strictly establishes
equivalence between the programs.</p>
      <p>
        Petri Nets have been a popular paradigm for modelling instruction-level parallel
behaviours [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. The un-timed one safe CPN (Colour Petri Net) model enhances
the classical Petri net to capture natural concurrency present in programs; they
have well de ned semantics of computations over integers, reals and general data
structures. A CPN model involves permitting places in a Petri net, to hold tokens
with data values, and the transitions to have associated conditions of executions
and the data transformation is associated with out going edges (transition to place).
Being value based with a natural capability of capturing parallelism, CPN models
depict data dependencies vividly; so they are more convenient as an Immediate
Representation of both, the source and translated programs.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], the researchers have proposed an Eclipse plugin based veri cation tool
called SamaTulyata, that veri es the semantic equivalence of two programs using
Petri net-based model. However, it cannot handle the loop involving code optimizing
transformations.
      </p>
      <p>In this paper, we propose a translation validation technique based on a
restricted CPN model of programs which veri es several code optimizing
transformations involving loop. Through a small set of experimentations, we have compared
our method with both SamaTulyata and CDFG based equivalence checkers. The
major contributions of our work are as follows:
{ Development of e cient Petri net based models for programs.
{ Development of e cient equivalence checking algorithm which can handle
various loop involving code-optimizing transformations.</p>
      <p>This paper is organised as follows: Section 2 presents an overview of the general
work ow of our method. Through a motivating example, we have illustrated our
equivalence checking mechanism in Section 3. Section 4 provides the experimental
results, comparing our tool with SamaTulyata and two other CDFG-based
equivalence checking tools. Section 5 describes the related work. Finally, we conclude our
paper by summarizing our results in Section 6.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Work ow</title>
      <p>into a nite number of paths. This is facilitated by the Path Constructor module
that gives us the set of paths, Qs for Ms, and Qt for Mt. A path is characterized by
its corresponding data transformation functions and related conditions of execution.</p>
      <p>The notion of equivalence checking used is as follows: \8 paths 2 Ms 9 an
equivalent path in Mt". The Path-based Equivalence Checker module takes the sets
of paths for both the CPN models, and using the concept of extension of paths that
we have developed, checks for equivalence between the paths and returns a Yes/No
answer for the semantic equivalence between source and translated programs. The
module never gives a false positive result.
3</p>
    </sec>
    <sec id="sec-3">
      <title>Methodology</title>
      <p>The motivating example for this paper is depicted in Fig. 2. The source program
depicted in Fig. 2.(a) computes the statement out = x + i + d;. In this program, the
statement d + + increments d repeatedly with the loop variable i, until its value
reaches 5. Consequently, the loop variable i reaches its maximum speci ed value,
10, and the program nally computes the value of the variable out. In the translated
version, which is depicted in Fig. 2.(c), the variable d is directly initialised with the
value 5. It is to be noted that the two programs are semantically equivalent. This
translation is commonly known as loop-independent code-optimizing
transformation. To prove the semantic equivalence we have derived the following steps.
3.1</p>
      <sec id="sec-3-1">
        <title>Formalism of Restricted CPN Model</title>
        <p>A restricted CPN Model is an eight tuple N = hP; V; fpv; T; I; O; inP; outP i,
{ The set P = fp1; p2; :::; pmg is a nite non-empty set of places.
{ The set V is the set of variables of the program which N seeks to model.
{ The item fpv : P ! V [ f g depicts an association of the places of N to the
program variables V ; the role of is explained shortly. fpv(p) assumes values
from a domain Dp. Depending on the type of variable fpv(p), the token value
at the place p may be of type Boolean, integer, structure, etc.
{ The set T = ft1; t2; :::; tng is a nite non-empty set of transitions.</p>
        <p>Each transition t 2 T is associated with a guard condition gt : Dp1 Dp2
::: Dpn ! f&gt;; ?g j p1; p2; :::; pn are pre-places of transition t.
{ I P T is a nite non-empty set of input arcs which de ne the ow relation
between places and transitions.
{ O T P is a nite non-empty set of output arcs which de ne the ow relation
between transitions and places.</p>
        <p>Each outgoing edge o = (t; p) is associated with a function fo : Dp1 Dp2
::: Dpn ! Dp j p1; p2; :::; pn are pre-places of transition t
{ The set inP P, is the set of input places of the program. These are the places
which are initially marked before the program is formally executed.
{ The set outP P, is the set of output places of the program. These are the
places whose token value represents the output of the program.</p>
        <p>De nition 1. A marking is a function M : P ! f0; 1g that denotes the absence or
presence of a token in the places of the net. The restricted CPN model is one-safe.
De nition 2. The ring of an enabled transition t, changes the marking M into
a new marking M +. Let the input-set t = fp1; p2; :::; pag and output set t =
fq1; q2; :::; qbg, these events occur simultaneously:
{ Tokens from the input-set t are removed. M +(pi) = 0 8 pi 2 t.
{ One token is added to each place in its output-set t . M +(qi) = 1 8 qi 2 t .
{ Each new token in t has a token value which is calculated evaluating the
respective output function.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Model Constructor</title>
        <p>Fig. 2.(b) depicts the Petri net model corresponding to the source program in Fig.
2.(a). The model is derived from the rudimentary automated model constructor as
reported in [SamaTulyata]. When the program starts, the token is initially in the
inP ort place p1 and the transition t1 is executed. The token is removed from p1 and
tokens go parallel, albeit with di erent values that are dependent on the function
associated with the respective outgoing edge, to p2, p3, and p4 Transitions t2, t3 and
t4 have their associated guard conditions. A particular transition is only executed
when its respective guard condition is true. In this scenario, the current value of
the token in p3 is 0. Transition t2 res because it's guard condition is true, the
value of the tokens in p3 and p4 is incremented by 1. This loop executes repeatedly,
incrementing p3 and p4, till the guard condition of t3 is satis ed. Then t3 res to
increment the value of the token in p3 till the guard condition of t4 is satisi ed.
Finally, the guard condition of t4 is true and the token with value x + i + d is sent
to outP ort p5.</p>
        <p>In Fig. 2.(d), places p02, p03, and p04 are associated with the values of the variables,
i, x, and d respectively. Transition t01 assigns the values 0, 0, and 5 to their respective
tokens. t02 is now enabled since p02 is it's pre-place and the associated guard condition
for ring t02, i &lt; 10 is true. t02 res to increment the value of the token in p02. This
cycle executes another 9 times until the value of the token in p2, indicating the
value of the variable i, equals 10. Once the token value equals 10, t03 is enabled and
red, since its guard condition corresponding to p02, i 10 is satis ed. t03 sums the
values of the tokens in p0 , p03, and p04 and transfers this value as a token to place
2
p05, which indicates the value of the variable out.</p>
        <p>
          The abstraction begins with de ning the function which is associated with
each outgoing edge of the Petri net. It is a mapping from the edge e, such that
e 2 (t; p); 8t 2 T; p 2 P , to the particular function concerning token value
transformation, associated with the edge. This is in contrast to the previous model used in
[
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] where each data transformation function is associated to a particular transition
instead.
3.3
        </p>
      </sec>
      <sec id="sec-3-3">
        <title>Validity of Path-based Equivalence Checker</title>
        <p>In a general program with loops, we do not know how many times the loop will be
executed. To prove semantic equivalence and represent the computation in the terms
of nite number of paths, we cut the loops and construct the paths in the graph
from cut-point to cut-point without any intermediate cut-point. In our equivalence
checking mechanism, the notion of cut-points is as follows:
{ inP orts are cut-points.
{ outP orts are cut-points.
{ The places with back-edges are cut-points.</p>
        <p>Using backward traversal and cone of in uence method, we nd the sequence
of parallelizable functional paths, from cut-point to cut-point. If a function has
been covered in one path, it need not be considered as part of another path. The
corresponding paths in Fig. 2.(b) have been marked in Fig. 3.(a). They are:
1 = hf 1g; f 8gi, 2 = hf 2gi, 3 = hf 3gi, 4 = hf 4gi, 5 = hf 5gi, 6 = hf 6gi,
7 = hf 7gi
Similarly, the paths in Fig. 2.(c) have been marked in Fig. 3.(b). They are:
1 = hf 2; 3g; f 5gi, 2 = hf 1gi, 3 = hf 4gi</p>
        <p>Now we show the validity of the path-based equivalence checker i.e., any
computation can be captured as a concatenation of parallel paths. The computation from
the Petri net model of the source code in Fig. 3.(a) is p5 = hfp1; fp2; p3; p4gn+m; p5i.
Similarly, the computation for the Petri net model of the translated code in Fig.
2(b) is p05 = hfp01; fp02; p03; p04gn; p05i.</p>
        <p>The same computations can be written in terms of the sequence of transitions
red. The method to do the same is as follows: The ith element of the computation in
terms of the transitions is the transition/s that res when moving from marking i to
i+1 in the previous version of the computation. So p5 = hft1g; ft2gn; ft3gm; ft4gi.
Similarly, p05 = hft01g; ft02gn+m; ft03gi.</p>
        <p>The same computation can the be expressed in terms of the delta functions
we de ned earlier. To do so, we iterate once over the computation in terms of the
transitions. For the new computation, we, append the deltas associated with each
transition in the iteration, to the new computation.</p>
        <p>So, p5 = hf 1; 2; 3g; f 4; 5gn; f 6; 7gm; 8i.</p>
        <p>Similarly, p05 = hf 1; 2; 3g; f 4gn+m; 5i.</p>
        <p>The steps to capture the same in terms of paths is as follows: 8 is the last
member of the computation sequence p5 and is also the last member of the path
1. So 1 is appended to the computation sequence rp5 and all the -function
members of 1 will be deleted from p5 . The method terminates when p5 = ;.
For this computation, rp5 = hf 2 k 3g; f 4 k 5gn; f 6 k 7gm; 1i. Similarly,
p05 = hf 2g; f 3gn+m; 1i.</p>
        <p>r
3.4</p>
      </sec>
      <sec id="sec-3-4">
        <title>Equivalence Checking Mechanism</title>
        <p>The intuitive idea of the the equivalence checking mechanism is described in the
following algorithmic steps:</p>
        <p>step 1) The set of paths in the rst program and the second program are
respectively: 0 = f 1; 2; 3; 4; 5; 6; 7g, 1 = f 1; 2; 3g</p>
        <p>step 2) For the path 1, we have to nd the corresponding candidate path. There
is no candidate path path for 1 because the set of pre-places of 1, has no direct
correspondence with any path in 1. So, we have to extend 1.</p>
        <p>step 3) Extension: The parallel paths set of 1 is f 2; 3g. For the path 2, the
pre-place of 2 has direct correspondence with the pre-place of 2 and their data
transformation and condition of execution are equivalent. Hence, 2 = 2. So, 2
is removed from the parallel list set of 1. Therefore, p3 corresponds with p0 .
2</p>
        <p>Now, the pre-places of 4 correspond with pre-place of 3, but their data
transformation and condition of execution do not match. So we have to extend 4. The
parallel list set of 4 is the singleton f 6g. 6 also does not directly correspond
to any path from 1. Hence we have to extend the path 4. The pre-places and
post-places of 4 and 6 match. The concatenated path is of the form 0 = 4 k 6.
This 0 = 3, since the data transformation and condition of execution of the paths
match.</p>
        <p>We are left with f 1; 3; 5; 7g and f 1g For 3, the post-path of 3 is f 5; 7g
and f 5; 7g are the pre-path of 1. Now, the concatenated path is of the form
00 = ( 1 k ( 3 ( 5 k 7))). The pre-places of 00 correspond with the pre-places 1
and data-transformation is matched and the condition of execution is of the form
(R 1 _ (R 3^(R 5_R 7))). Hence, 00 = 1</p>
        <p>2 = 2; ( 4 k 6) = 3; ( 1 k ( 3 ( 5 k 7))) = 1
4
4.1</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Experimental results</title>
      <sec id="sec-4-1">
        <title>Preparation of Benchmarks</title>
        <p>
          We have taken ve benchmark programs from HLS benchmark suite provided in
[
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]. The programs are: LCM - Calculates the least common multiple of two input
numbers, GCD - Calculates the greatest common divisor of two input numbers,
MODN - Calculates (a*b) modulo n, where a; b &lt; n, PERFECT - Checks whether
the input number is perfect or not, SOD - Carries out repetitive summation of the
digits of the input number and of the number obtained in each iteration until the
sum becomes a single digit MINMAX - Returns the maximum of three numbers
and minimum of the next three numbers.
4.2
        </p>
      </sec>
      <sec id="sec-4-2">
        <title>Observation</title>
        <p>
          We have tested the prototype of our tool, SamaTulyataII 4, on a 2.5GHz Intel(R)
Core(TM)-i5-7200U processor. We feed the programs into [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] and our proposed tool.
A comparison of the results is given in Table 1. We have compared the model size
in terms of places and transitions, and the capability for handling code
optimizing transformations. In our experimentation, we have taken four transformations:
duplicating up, duplicating down, boosting up, and loop involving code
optimizing transformation. SamaTulyata [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] cannot handle loop involving code optimizing
transformation. In our experimentation we have taken two data intensive
benchmarks GCD and LCM, and the loop involving code optimization transformation
has been applied on them. From Table 1, it is to be noted that the size of the
model (in terms of places and transitions) is lesser than the model constructed
in SamaTulyata[
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]. We have compared our equivalence checking tool with
SamaTulyata and two other CDFG-based equivalence checking tools, 1) FSMDEQX-VP:
Finite-State Machine with Datapath based Equivalence Checking tool with Value
Propogation based network as described in [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] and 2) FSMDEQX-EVP an extended
version of FSMDEQX-VP as given in [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ].
4 https://github.com/soumyadipcsis/SamaTulyata/blob/patch-3/SamaTulyataII.zip
        </p>
        <p>Our proposed tool, SamaTulyataII, is able to validate several code-optimzing
transformations involving loop. The CDFG-based methods fail to validate
loopswapping transformation since the control structure is changed. Both SamaTulyata
and FSMDEQX-VP cannot validate code-optimizing transformation involving loop,
but the extended version of FSMDEQX-VP ie. FSMDEQX-EVP is able to validate.</p>
        <p>In case the control structure of the program is altered, our tool is able to handle
such cases. This is because our method captures instruction level parallelism vividly.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Related Works</title>
      <p>
        Translation validation was rst introduced by Pnueli et al. in [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] and was
demonstrated by Necula et al. [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] and Rinard et al. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. The approach was then further
enhanced by Kundu et al. [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] where they veri ed a high-level synthesis tool named
SPARK. All the techniques mentioned above are basically bisimulation-based
methods. The basic idea of a bisimulation-based method is to nd a one-one
correspondence between the loops and iterations of a program. The number of iterations of the
corresponding loops in the source and translated programs must be the same. The
major limitation of this method is that it can only validate structural preserving
transformations, i.e., if code moves beyond the basic block level boundaries it fails
to validate. Inductive inference based equivalence method only handle structural
preserving transformations [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>
        Tvoc is a translation validation tool developed by Goldberg, et al. for optimizing
compilers that utilize structure preserving and structure modifying transformations
[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Tvoc uses several proof rules to check equivalence depending on the type of
transformation such as interchange, tiling, skewing, etc. However, Tvoc is unable to
validate combinations of structure preserving and structure modifying
transformations.
      </p>
      <p>
        Path based validation methods handle both structure preserving transformations
and some non-structure preserving code optimizing transformations. One class of
the non structure preserving code optimizing transformation is loop involving code
optimization which is commonly used in scheduling phase of high level synthesis.
A path based equivalence checking mechanism using CDFG-based technique is
reported in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] which can handle the code motion across loop, but it cannot handle
loop optimizing transformations because the control structure is altered. To
overcome this, Petri net based equivalence checking methods was proposed in [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. But
the major drawbacks of this method are the blow-up in the model size, and its
inability to handle the code optimizing transformations involving loops.
      </p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>We have developed an e cient method for checking equivalence between two scalar
handling programs using Petri net based model. This method can handle several
loop involved code optimizing transformations, code motion across loop, duplicating
up, duplicating down, boosting up, boosting down, and loop swapping
transformations. In this work we have considered those programs which works only for integer
type variables with no function calls, arrays, or pointers. The major limitations of
this method are that it cannot handle loop shifting, loop reversal, software pipe
lining based transformations. Further work is aimed at overcoming these limitations
and extension of our method to capture array handling programs.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Bandyopadhyay</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sarkar</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sarkar</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mandal</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <string-name>
            <surname>Samatulyata</surname>
          </string-name>
          :
          <article-title>An e cient path based equivalence checking tool</article-title>
          .
          <source>In: International Symposium on Automated Technology for Veri cation and Analysis</source>
          . pp.
          <volume>109</volume>
          {
          <issue>116</issue>
          (09
          <year>2017</year>
          ). https://doi.org/10.1007/978- 3-
          <fpage>319</fpage>
          -68167-28
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Banerjee</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Karfa</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sarkar</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mandal</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Veri cation of code motion techniques using value propagation</article-title>
          .
          <source>IEEE TCAD 33(8)</source>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Banerjee</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sarkar</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mandal</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Extending the fsmd framework for validating code motions of array-handling programs</article-title>
          .
          <source>IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems</source>
          <volume>33</volume>
          (
          <issue>12</issue>
          ),
          <year>2015</year>
          {
          <year>2019</year>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Barrett</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fang</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Goldberg</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hu</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pnueli</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zuck</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Tvoc: A translation validator for optimizing compilers</article-title>
          . In: International Conference on Computer Aided Veri cation. vol.
          <volume>3576</volume>
          , pp.
          <volume>291</volume>
          {
          <issue>295</issue>
          (07
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Felsing</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grebing</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Klebanov</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          , Rummer,
          <string-name>
            <given-names>P.</given-names>
            ,
            <surname>Ulbrich</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.</surname>
          </string-name>
          :
          <article-title>Automating regression veri cation</article-title>
          .
          <source>In: ACM/IEEE International Conference on Automated Software Engineering, ASE '14</source>
          ,
          <string-name>
            <surname>Vasteras</surname>
          </string-name>
          ,
          <source>Sweden - September 15 - 19</source>
          ,
          <year>2014</year>
          . pp.
          <volume>349</volume>
          {
          <issue>360</issue>
          (
          <year>2014</year>
          ), https://doi.org/10.1145/2642937.2642987
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Gupta</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dutt</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gupta</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nicolau</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Spark: a high-level synthesis framework for applying parallelizing compiler transformations</article-title>
          .
          <source>In: Proc. of Int. Conf. on VLSI Design</source>
          . pp.
          <volume>461</volume>
          {
          <fpage>466</fpage>
          . IEEE Computer Society, Washington, DC, USA (Jan
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Kundu</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lerner</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gupta</surname>
            ,
            <given-names>R.K.</given-names>
          </string-name>
          :
          <article-title>Translation validation of high-level synthesis</article-title>
          .
          <source>IEEE Trans. on CAD of Integrated Circuits and Systems</source>
          <volume>29</volume>
          (
          <issue>4</issue>
          ),
          <volume>566</volume>
          {
          <fpage>579</fpage>
          (
          <year>2010</year>
          ). https://doi.org/10.1109/TCAD.
          <year>2010</year>
          .
          <volume>2042889</volume>
          , http://dx.doi.org/10.1109/ TCAD.
          <year>2010</year>
          .2042889
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Necula</surname>
            ,
            <given-names>G.C.</given-names>
          </string-name>
          :
          <article-title>Translation validation for an optimizing compiler</article-title>
          .
          <source>In: PLDI</source>
          . pp.
          <volume>83</volume>
          {
          <issue>94</issue>
          (
          <year>2000</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Rinard</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Diniz</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Credible compilation</article-title>
          .
          <source>Tech. Rep</source>
          . MIT-LCS-TR-
          <volume>776</volume>
          , MIT (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Zuck</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pnueli</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Goldberg</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Barrett</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fang</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hu</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          :
          <article-title>Translation and runtime validation of loop transformations</article-title>
          .
          <source>Form. Methods Syst. Des</source>
          .
          <volume>27</volume>
          (
          <issue>3</issue>
          ),
          <volume>335</volume>
          {
          <fpage>360</fpage>
          (
          <year>2005</year>
          ). https://doi.org/http://dx.doi.org/10.1007/s10703-005-3402-z
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>