aboutsummaryrefslogtreecommitdiff
path: root/docs/CommandGuide/man/man1/llvm2cpp.1
blob: 1c8a6381bbf3da1f7340acb470e4c6a39e2887e1 (plain)
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
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  | will give a
.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.if \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.\"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "LLVM2CPP 1"
.TH LLVM2CPP 1 "2006-08-10" "CVS" "LLVM Command Guide"
.SH "NAME"
llvm2xpp \- LLVM bytecode to LLVM C++ IR translator
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fBllvm2cpp\fR [\fIoptions\fR] [\fIfilename\fR]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\&\fBllvm2cpp\fR translates from \s-1LLVM\s0 bytecode (.bc files) to a 
corresponding \*(C+ source file that will make calls against the \s-1LLVM\s0 \*(C+ \s-1API\s0 to
build the same module as the input. By default, the \*(C+ output is a complete
program that builds the module, verifies it and then emits the module as
\&\s-1LLVM\s0 assembly. This technique assists with testing because the input to
\&\fBllvm2cpp\fR and the output of the generated \*(C+ program should be identical.
.PP
If \fIfilename\fR is omitted or is \f(CW\*(C`\-\*(C'\fR, then \fBllvm2cpp\fR reads its input from
standard input.
.PP
If an output file is not specified with the \fB\-o\fR option, then
\&\fBllvm2cpp\fR sends its output to a file or standard output by following
these rules:
.IP "\(bu" 4
If the input is standard input, then the output is standard output.
.IP "\(bu" 4
If the input is a file that ends with \f(CW\*(C`.bc\*(C'\fR, then the output file is of
the same name, except that the suffix is changed to \f(CW\*(C`.cpp\*(C'\fR.
.IP "\(bu" 4
If the input is a file that does not end with the \f(CW\*(C`.bc\*(C'\fR suffix, then the
output file has the same name as the input file, except that the \f(CW\*(C`.cpp\*(C'\fR
suffix is appended.
.SH "OPTIONS"
.IX Header "OPTIONS"
.IP "\fB\-f\fR" 4
.IX Item "-f"
Force overwrite.  Normally, \fBllvm2cpp\fR will refuse to overwrite an
output file that already exists.  With this option, \fBllvm2cpp\fR
will overwrite the output file and replace it with new \*(C+ source code.
.IP "\fB\-\-help\fR" 4
.IX Item "--help"
Print a summary of command line options.
.IP "\fB\-f\fR" 4
.IX Item "-f"
Normally, \fBllvm2cpp\fR will not overwrite an existing output file. With this
option, that default behavior is changed and the program will overwrite existing
output files.
.IP "\fB\-o\fR \fIfilename\fR" 4
.IX Item "-o filename"
Specify the output file name.  If \fIfilename\fR is \f(CW\*(C`\-\*(C'\fR, then \fBllvm2cpp\fR
sends its output to standard output.
.IP "\fB\-funcname\fR \fIfunctionName\fR" 4
.IX Item "-funcname functionName"
Specify the name of the function to be generated. The generated code contains a
single function that produces the input module. By default its name is
\&\fImakeLLVMModule\fR. The \fB\-funcname\fR option overrides this default and allows
you to control the name of the generated function. This is handy in conjunction
with the \fB\-fragment\fR option when you only want \fBllvm2cpp\fR to generate a
single function that produces the module. With both options, such generated code
could be \fI#included\fR into another program.
.IP "\fB\-for\fR" 4
.IX Item "-for"
Specify the name of the thing for which \*(C+ code should be generated. By default
the entire input module is re\-generated. However, use of the various \fB\-gen\-*\fR
options can restrict what is produced. This option indicates what that
restriction is.
.IP "\fB\-gen\-program\fR" 4
.IX Item "-gen-program"
Specify that the output should be a complete program. Such program will recreate
\&\fBllvm2cpp\fR's input as an \s-1LLVM\s0 module, verify that module, and then write out
the module in \s-1LLVM\s0 assembly format. This is useful for doing identity tests
where the output of the generated program is identical to the input to
\&\fBllvm2cpp\fR. The \s-1LLVM\s0 DejaGnu test suite can make use of this fact. This is the
default form of generated output.
.Sp
If the \fB\-for\fR option is given with this option, it specifies the module
identifier to use for the module created.
.IP "\fB\-gen\-module\fR" 4
.IX Item "-gen-module"
Specify that the output should be a function that regenerates the module. It is
assumed that this output will be #included into another program that has already
arranged for the correct header files to be #included. The function generated
takes no arguments and returns a \fIModule*\fR. 
.Sp
If the \fB\-for\fR option is given with this option, it specifies the module
identifier to use in creating the module returned by the generated function.
.IP "\fB\-gen\-contents\fR" 4
.IX Item "-gen-contents"
Specify that the output should be a function that adds the contents of the input
module to another module. It is assumed that the output will be #included into
another program that has already arranged for the correct header files to be
#included. The function generated takes a single argument of type \fIModule*\fR and
returns that argument. Note that Module level attributes such as endianess,
pointer size, target triple and inline asm are not passed on from the input
module to the destination module. Only the sub-elements of the module (types,
constants, functions, global variables) will be added to the input module.
.Sp
If the \fB\-for\fR option is given with this option, it specifies the module
identifier to set in the input module by the generated function.
.IP "\fB\-gen\-function\fR" 4
.IX Item "-gen-function"
Specify that the output should be a function that produces the definitions
necessary for a specific function to be added to a module.  It is assumed that 
the output will be #included into another program that has already arranged 
for the correct header files to be #included. The function generated takes a 
single argument of type \fIModule*\fR and returns the \fIFunction*\fR that it added to
the module.  Note that only those things (types, constants, etc.) directly 
needed in the definition of the function will be placed in the generated
function. 
.Sp
The \fB\-for\fR option must be given with this option or an error will be produced.
The value of the option must be the name of a function in the input module for
which code should be generated. If the named function does not exist an error
will be produced.
.IP "\fB\-gen\-inline\fR" 4
.IX Item "-gen-inline"
This option is very analagous to \fB\-gen\-function\fR except that the generated
function will not re-produce the target function's definition. Instead, the body
of the target function is inserted into some other function passed as an
argument to the generated function. Similarly any arguments to the function must
be passed to the generated function. The result of the generated function is the
first basic block of the target function.
.Sp
The \fB\-for\fR option works the same way as it does for \fB\-gen\-function\fR.
.IP "\fB\-gen\-variable\fR" 4
.IX Item "-gen-variable"
Specify that the output should be a function that produces the definitions
necessary for a specific global variable to be added to a module. It is assumed
that the output will be #included into another program that has already arranged
for the correct header files to be #included. The function generated takes a
single argument of type \fIModule*\fR and returns the \fIGlobalVariable*\fR that it 
added to the module. Note that only those things (types, constants, etc.)
directly needed in the definition of the global variable will be placed in the
generated function.
.Sp
The \fB\-for\fR option must be given with this option or an error will be produced.
THe value of the option must be the name of a global variable in the input
module for which code should be generated. If the named global variable does not
exist an error will be produced.
.IP "\fB\-gen\-type\fR" 4
.IX Item "-gen-type"
Specify that the output should be a function that produces the definitions
necessary for specific type to be added to a module. It is assumed that the
otuput will be #included into another program that has already arranged for the
correct header files to be #included. The function generated take a single
argument of type \fIModule*\fR and returns the \fIType*\fR that it added to the
module. Note that the generated function will only add the necessary type
definitions to (possibly recursively) define the requested type.
.Sp
The \fB\-for\fR option must be given with this option or an error will be produced.
The value of the option must be the name of a global type in the input module
for which code should be generated. If the named type does not exist an error
will be produced.
.IP "\fB\-stats\fR" 4
.IX Item "-stats"
Show pass statistics (not interesting in this program).
.IP "\fB\-time\-passes\fR" 4
.IX Item "-time-passes"
Show pass timing statistics (not interesting in this program).
.IP "\fB\-version\fR" 4
.IX Item "-version"
Show the version number of this program.
.SH "EXIT STATUS"
.IX Header "EXIT STATUS"
If \fBllvm2cpp\fR succeeds, it will exit with 0.  Otherwise, if an error
occurs, it will exit with a non-zero value.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
llvm-as tblgen
.SH "AUTHORS"
.IX Header "AUTHORS"
Written by Reid Spencer (<http://hlvm.org>).