File: BugpointRedesign.html

package info (click to toggle)
llvm-toolchain-13 1%3A13.0.1-6~deb10u4
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 1,418,792 kB
  • sloc: cpp: 5,290,827; ansic: 996,570; asm: 544,593; python: 188,212; objc: 72,027; lisp: 30,291; f90: 25,395; sh: 24,900; javascript: 9,780; pascal: 9,398; perl: 7,484; ml: 5,432; awk: 3,523; makefile: 2,892; xml: 953; cs: 573; fortran: 539
file content (229 lines) | stat: -rw-r--r-- 11,406 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229


<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Bugpoint Redesign &#8212; LLVM 13 documentation</title>
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    <link rel="stylesheet" href="_static/llvm-theme.css" type="text/css" />
    <script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
    <script src="_static/jquery.js"></script>
    <script src="_static/underscore.js"></script>
    <script src="_static/doctools.js"></script>
    <link rel="index" title="Index" href="genindex.html" />
    <link rel="search" title="Search" href="search.html" />
    <link rel="next" title="“llvm-libc” C Standard Library" href="Proposals/LLVMLibC.html" />
    <link rel="prev" title="Moving LLVM Projects to GitHub" href="Proposals/GitHubMove.html" />
<style type="text/css">
  table.right { float: right; margin-left: 20px; }
  table.right td { border: 1px solid #ccc; }
</style>

  </head><body>
<div class="logo">
  <a href="index.html">
    <img src="_static/logo.png"
         alt="LLVM Logo" width="250" height="88"/></a>
</div>

    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="Proposals/LLVMLibC.html" title="“llvm-libc” C Standard Library"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="Proposals/GitHubMove.html" title="Moving LLVM Projects to GitHub"
             accesskey="P">previous</a> |</li>
  <li><a href="https://llvm.org/">LLVM Home</a>&nbsp;|&nbsp;</li>
  <li><a href="index.html">Documentation</a>&raquo;</li>

          <li class="nav-item nav-item-1"><a href="GettingInvolved.html" accesskey="U">Getting Involved</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">Bugpoint Redesign</a></li> 
      </ul>
    </div>

      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
        <div class="sphinxsidebarwrapper">

<h3>Documentation</h3>

<ul class="want-points">
    <li><a href="https://llvm.org/docs/GettingStartedTutorials.html">Getting Started/Tutorials</a></li>
    <li><a href="https://llvm.org/docs/UserGuides.html">User Guides</a></li>
    <li><a href="https://llvm.org/docs/Reference.html">Reference</a></li>
</ul>

<h3>Getting Involved</h3>

<ul class="want-points">
    <li><a href="https://llvm.org/docs/Contributing.html">Contributing to LLVM</a></li>
    <li><a href="https://llvm.org/docs/HowToSubmitABug.html">Submitting Bug Reports</a></li>
    <li><a href="https://llvm.org/docs/GettingInvolved.html#mailing-lists">Mailing Lists</a></li>
    <li><a href="https://llvm.org/docs/GettingInvolved.html#irc">IRC</a></li>
    <li><a href="https://llvm.org/docs/GettingInvolved.html#meetups-and-social-events">Meetups and Social Events</a></li>
</ul>

<h3>Additional Links</h3>

<ul class="want-points">
    <li><a href="https://llvm.org/docs/FAQ.html">FAQ</a></li>
    <li><a href="https://llvm.org/docs/Lexicon.html">Glossary</a></li>
    <li><a href="https://llvm.org/pubs">Publications</a></li>
    <li><a href="https://github.com/llvm/llvm-project//">Github Repository</a></li>
</ul>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="_sources/BugpointRedesign.md.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
<div id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" />
      <input type="submit" value="Go" />
    </form>
    </div>
</div>
<script>$('#searchbox').show(0);</script>
        </div>
      </div>

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <div class="section" id="bugpoint-redesign">
<h1>Bugpoint Redesign<a class="headerlink" href="#bugpoint-redesign" title="Permalink to this headline">¶</a></h1>
<p>Author: Diego Treviño (diegotf&#64;google.com)</p>
<p>Date: 2019-06-05</p>
<p>Status: Draft</p>
<div class="section" id="introduction">
<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
<p>As use of bugpoint has grown several areas of improvement have been identified
through years of use: confusing to use, slow, it doesn’t always produce high
quality test cases, etc. This document proposes a new approach with a narrower
focus: minimization of IR test cases.</p>
</div>
<div class="section" id="proposed-new-design">
<h2>Proposed New Design<a class="headerlink" href="#proposed-new-design" title="Permalink to this headline">¶</a></h2>
<div class="section" id="narrow-focus-test-case-reduction">
<h3>Narrow focus: test-case reduction<a class="headerlink" href="#narrow-focus-test-case-reduction" title="Permalink to this headline">¶</a></h3>
<p>The main focus will be a code reduction strategy to obtain much smaller test
cases that still have the same property as the original one. This will be done
via classic delta debugging and by adding some IR-specific reductions (e.g.
replacing globals, removing unused instructions, etc), similar to what
already exists, but with more in-depth minimization.</p>
<p>Granted, if the community differs on this proposal, the legacy code could still
be present in the tool, but with the caveat of still being documented and
designed towards delta reduction.</p>
</div>
<div class="section" id="command-line-options">
<h3>Command-Line Options<a class="headerlink" href="#command-line-options" title="Permalink to this headline">¶</a></h3>
<p>We are proposing to reduce the plethora of bugpoint’s options to just two: an
interesting-ness test and the arguments for said test, similar to other delta
reduction tools such as CReduce, Delta, and Lithium; the tool should feel less
cluttered, and there should also be no uncertainty about how to operate it.</p>
<p>The interesting-ness test that’s going to be run to reduce the code is given
by name:
<code class="docutils literal notranslate"><span class="pre">--test=&lt;test_name&gt;</span></code>
If a <code class="docutils literal notranslate"><span class="pre">--test</span></code>  option is not given, the program exits; this option is similar
to bugpoint’s current <code class="docutils literal notranslate"><span class="pre">-compile-custom</span></code> option, which lets the user run a
custom script.</p>
<p>The interesting-ness test would be defined as a script that returns 0 when the
IR achieves a user-defined behaviour (e.g. failure to compile on clang) and a
nonzero value when otherwise. Leaving the user the freedom to determine what is
and isn’t interesting to the tool, and thus, streamlining the process of
reducing a test-case.</p>
<p>If the test accepts any arguments (excluding the input ll/bc file), they are
given via the following flag:
<code class="docutils literal notranslate"><span class="pre">--test_args=&lt;test_arguments&gt;</span></code>
If unspecified, the test is run as given. It’s worth noting that the input file
would be passed as a parameter to the test, similar how <code class="docutils literal notranslate"><span class="pre">-compile-custom</span></code>
currently operates.</p>
</div>
<div class="section" id="implementation">
<h3>Implementation<a class="headerlink" href="#implementation" title="Permalink to this headline">¶</a></h3>
<p>The tool would behave similar to CReduce’s functionality in that it would have a
list of passes that try to minimize the given test-case. We should be able to
modularize the tool’s behavior, as well as making it easier to maintain and
expand.</p>
<p>The first version of this redesign would try to:</p>
<ul class="simple">
<li><p>Discard functions, instructions and metadata that don’t influence the
interesting-ness test</p></li>
<li><p>Remove unused parameters from functions</p></li>
<li><p>Eliminate unvisited conditional paths</p></li>
<li><p>Rename variables to more regular ones (such as “a”, “b”, “c”, etc.)</p></li>
</ul>
<p>Once these passes are implemented, more meaningful reductions (such as type
reduction) would be added to the tool, to even further reduce IR.</p>
</div>
</div>
<div class="section" id="background-on-historical-bugpoint-issues">
<h2>Background on historical bugpoint issues<a class="headerlink" href="#background-on-historical-bugpoint-issues" title="Permalink to this headline">¶</a></h2>
<div class="section" id="root-cause-analysis">
<h3>Root Cause Analysis<a class="headerlink" href="#root-cause-analysis" title="Permalink to this headline">¶</a></h3>
<p>Presently, bugpoint takes a long time to find the source problem in a given IR
file, mainly due to the fact that it tries to debug the input by running
various strategies to classify the bug, which in turn run multiple optimizer
and compilation passes over the input, taking up a lot of time. Furthermore,
when the IR crashes, it tries to reduce it by performing some sub-optimal
passes (e.g. a lot of unreachable blocks), and sometimes even fails to minimize
at all.</p>
</div>
<div class="section" id="quirky-interface">
<h3>“Quirky” Interface<a class="headerlink" href="#quirky-interface" title="Permalink to this headline">¶</a></h3>
<p>Bugpoint’s current interface overwhelms and confuses the user, the help screen
alone ends up confusing rather providing guidance. And, not only are there
numerous features and options, but some of them also work in unexpected ways
and most of the time the user ends up using a custom script. Pruning and
simplifying the interface will be worth considering in order to make the tool
more useful in the general case and easier to maintain.</p>
</div>
</div>
</div>


            <div class="clearer"></div>
          </div>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="Proposals/LLVMLibC.html" title="“llvm-libc” C Standard Library"
             >next</a> |</li>
        <li class="right" >
          <a href="Proposals/GitHubMove.html" title="Moving LLVM Projects to GitHub"
             >previous</a> |</li>
  <li><a href="https://llvm.org/">LLVM Home</a>&nbsp;|&nbsp;</li>
  <li><a href="index.html">Documentation</a>&raquo;</li>

          <li class="nav-item nav-item-1"><a href="GettingInvolved.html" >Getting Involved</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">Bugpoint Redesign</a></li> 
      </ul>
    </div>
    <div class="footer" role="contentinfo">
        &#169; Copyright 2003-2021, LLVM Project.
      Last updated on 2021-09-18.
      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.5.4.
    </div>
  </body>
</html>