Mercurial > hg > CbC > CbC_llvm
comparison utils/llvm.grm @ 3:9ad51c7bc036
1st commit. remove git dir and add all files.
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 15 May 2013 06:43:32 +0900 |
parents | |
children | 54457678186b |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 3:9ad51c7bc036 |
---|---|
1 (* | |
2 | |
3 polygen grammar for LLVM assembly language. | |
4 | |
5 This file defines an LLVM assembly language grammar for polygen, | |
6 which is a tool for generating random text based on a grammar. | |
7 It is strictly syntax-based, and makes no attempt to generate | |
8 IR that is semantically valid. Most of the IR produced doesn't | |
9 pass the Verifier. | |
10 | |
11 TODO: Metadata, in all its forms | |
12 | |
13 *) | |
14 | |
15 I ::= "title: LLVM assembly language\n" | |
16 ^ "status: experimental\n" | |
17 ^ "audience: LLVM developers\n" | |
18 ; | |
19 | |
20 S ::= Module ; | |
21 | |
22 (* | |
23 Define rules for non-keyword tokens. This is currently just a bunch | |
24 of hacks. They don't cover many valid forms of tokens, and they also | |
25 generate some invalid forms of tokens. The LLVM parser has custom | |
26 C++ code to lex these; custom C++ code for emitting them would be | |
27 convenient, but polygen doesn't support that. | |
28 *) | |
29 NonZeroDecimalDigit ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ; | |
30 DecimalDigit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ; | |
31 DecimalDigitSeq ::= DecimalDigit [^ DecimalDigitSeq ]; | |
32 HexDigit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
33 | a | b | c | d | e | f ; | |
34 HexDigitSeq ::= HexDigit [^ HexDigitSeq ]; | |
35 StringChar ::= a | b | c | d | e | f | g | h | i | j | k | l | m | |
36 | n | o | p | q | r | s | t | u | v | w | x | y | z ; | |
37 StringConstantSeq ::= StringChar [^ StringConstantSeq ]; | |
38 StringConstant ::= StringChar [^ StringConstantSeq ]; | |
39 EUINT64VAL ::= NonZeroDecimalDigit [^ DecimalDigitSeq ]; | |
40 ESINT64VAL ::= [ "-" ] ^ EUINT64VAL ; | |
41 EUAPINTVAL ::= EUINT64VAL ; | |
42 ESAPINTVAL ::= ESINT64VAL ; | |
43 LOCALVALID ::= "%" ^ DecimalDigitSeq ; | |
44 GLOBALVALID ::= "@" ^ DecimalDigitSeq ; | |
45 INTTYPE ::= "i" ^ EUINT64VAL ; | |
46 GLOBALVAR ::= "@" ^ StringConstant ; | |
47 LOCALVAR ::= "%" ^ StringConstant ; | |
48 STRINGCONSTANT ::= "\"" ^ StringConstant ^ "\"" ; | |
49 ATSTRINGCONSTANT ::= "@" ^ STRINGCONSTANT ; | |
50 PCTSTRINGCONSTANT ::= "%" ^ STRINGCONSTANT ; | |
51 LABELSTR ::= StringConstant ; | |
52 FPVAL ::= ESAPINTVAL ^ "." ^ EUAPINTVAL | "0x" ^ HexDigitSeq ; | |
53 | |
54 (* | |
55 The rest of this file is derived directly from llvmAsmParser.y. | |
56 *) | |
57 | |
58 ArithmeticOps ::= + OptNW add | fadd | OptNW sub | fsub | OptNW mul | fmul | | |
59 udiv | OptExact sdiv | fdiv | urem | srem | frem ; | |
60 LogicalOps ::= shl | lshr | ashr | and | or | xor; | |
61 CastOps ::= trunc | zext | sext | fptrunc | fpext | bitcast | | |
62 uitofp | sitofp | fptoui | fptosi | inttoptr | ptrtoint ; | |
63 | |
64 IPredicates ::= eq | ne | slt | sgt | sle | sge | ult | ugt | ule | uge ; | |
65 | |
66 FPredicates ::= oeq | one | olt | ogt | ole | oge | ord | uno | ueq | une | |
67 | ult | ugt | ule | uge | true | false ; | |
68 | |
69 IntType ::= INTTYPE; | |
70 FPType ::= float | double | "ppc_fp128" | fp128 | "x86_fp80"; | |
71 | |
72 LocalName ::= LOCALVAR | STRINGCONSTANT | PCTSTRINGCONSTANT ; | |
73 OptLocalName ::= LocalName | _ ; | |
74 | |
75 OptAddrSpace ::= - addrspace ^ "(" ^ EUINT64VAL ^ ")" | _ ; | |
76 | |
77 OptLocalAssign ::= LocalName "=" | _ ; | |
78 | |
79 GlobalName ::= GLOBALVAR | ATSTRINGCONSTANT ; | |
80 | |
81 OptGlobalAssign ::= GlobalAssign | _ ; | |
82 | |
83 GlobalAssign ::= GlobalName "=" ; | |
84 | |
85 GVInternalLinkage | |
86 ::= + internal | |
87 | weak | |
88 | "weak_odr" | |
89 | linkonce | |
90 | "linkonce_odr" | |
91 | appending | |
92 | dllexport | |
93 | common | |
94 | private | |
95 | "linker_private" | |
96 | "linker_private_weak" | |
97 ; | |
98 | |
99 GVExternalLinkage | |
100 ::= dllimport | |
101 | "extern_weak" | |
102 | + external | |
103 ; | |
104 | |
105 GVVisibilityStyle | |
106 ::= + _ | |
107 | default | |
108 | hidden | |
109 | protected | |
110 ; | |
111 | |
112 FunctionDeclareLinkage | |
113 ::= + _ | |
114 | dllimport | |
115 | "extern_weak" | |
116 ; | |
117 | |
118 FunctionDefineLinkage | |
119 ::= + _ | |
120 | internal | |
121 | linkonce | |
122 | "linkonce_odr" | |
123 | weak | |
124 | "weak_odr" | |
125 | dllexport | |
126 ; | |
127 | |
128 AliasLinkage ::= + _ | weak | "weak_odr" | internal ; | |
129 | |
130 OptCallingConv ::= + _ | | |
131 ccc | | |
132 fastcc | | |
133 coldcc | | |
134 "x86_stdcallcc" | | |
135 "x86_fastcallcc" | | |
136 cc EUINT64VAL ; | |
137 | |
138 ParamAttr ::= zeroext | |
139 | signext | |
140 | inreg | |
141 | sret | |
142 | noalias | |
143 | nocapture | |
144 | byval | |
145 | nest | |
146 | align EUINT64VAL | |
147 ; | |
148 | |
149 OptParamAttrs ::= + _ | OptParamAttrs ParamAttr ; | |
150 | |
151 RetAttr ::= inreg | |
152 | zeroext | |
153 | signext | |
154 | noalias | |
155 ; | |
156 | |
157 OptRetAttrs ::= _ | |
158 | OptRetAttrs RetAttr | |
159 ; | |
160 | |
161 FuncAttr ::= noreturn | |
162 | nounwind | |
163 | inreg | |
164 | zeroext | |
165 | signext | |
166 | readnone | |
167 | readonly | |
168 | inlinehint | |
169 | alignstack | |
170 | noinline | |
171 | alwaysinline | |
172 | optsize | |
173 | ssp | |
174 | sspreq | |
175 | returns_twice | |
176 | nonlazybind | |
177 | sanitize_address | |
178 | sanitize_thread | |
179 | sanitize_memory | |
180 ; | |
181 | |
182 OptFuncAttrs ::= + _ | OptFuncAttrs FuncAttr ; | |
183 | |
184 OptGC ::= + _ | gc STRINGCONSTANT ; | |
185 | |
186 OptAlign ::= + _ | align EUINT64VAL ; | |
187 OptCAlign ::= + _ | ^ "," align EUINT64VAL ; | |
188 | |
189 SectionString ::= section STRINGCONSTANT ; | |
190 | |
191 OptSection ::= + _ | SectionString ; | |
192 | |
193 GlobalVarAttributes ::= + _ | ^ "," GlobalVarAttribute GlobalVarAttributes ; | |
194 GlobalVarAttribute ::= SectionString | align EUINT64VAL ; | |
195 | |
196 PrimType ::= INTTYPE | float | double | "ppc_fp128" | fp128 | "x86_fp80" | |
197 | - label ; | |
198 | |
199 Types | |
200 ::= opaque | |
201 | PrimType | |
202 | Types OptAddrSpace ^ "*" | |
203 | SymbolicValueRef | |
204 | "\\" ^ EUINT64VAL | |
205 | Types "(" ^ ArgTypeListI ^ ")" OptFuncAttrs | |
206 | void "(" ^ ArgTypeListI ^ ")" OptFuncAttrs | |
207 | "[" ^ EUINT64VAL "x" Types ^ "]" | |
208 | "<" ^ EUINT64VAL "x" Types ^ ">" | |
209 | "{" TypeListI "}" | |
210 | "{" ^ "}" | |
211 | "<" ^ "{" TypeListI "}" ^ ">" | |
212 | "<" ^ "{" ^ "}" ^ ">" | |
213 ; | |
214 | |
215 ArgType ::= Types OptParamAttrs ; | |
216 | |
217 ResultTypes ::= Types | void ; | |
218 | |
219 ArgTypeList ::= ArgType | ArgTypeList ^ "," ArgType ; | |
220 | |
221 ArgTypeListI ::= ArgTypeList | ArgTypeList ^ "," "..." | "..." | _ ; | |
222 | |
223 TypeListI ::= Types | TypeListI ^ "," Types ; | |
224 | |
225 ConstVal::= Types "[" ^ ConstVector ^ "]" | |
226 | Types "[" ^ "]" | |
227 | Types "c" ^ STRINGCONSTANT | |
228 | Types "<" ^ ConstVector ^ ">" | |
229 | Types "{" ConstVector "}" | |
230 | Types "{" ^ "}" | |
231 | Types "<" ^ "{" ConstVector "}" ^ ">" | |
232 | Types "<" ^ "{" ^ "}" ^ ">" | |
233 | Types null | |
234 | Types undef | |
235 | Types SymbolicValueRef | |
236 | Types ConstExpr | |
237 | Types zeroinitializer | |
238 | Types ESINT64VAL | |
239 | Types ESAPINTVAL | |
240 | Types EUINT64VAL | |
241 | Types EUAPINTVAL | |
242 | Types true | |
243 | Types false | |
244 | Types FPVAL ; | |
245 | |
246 ConstExpr::= CastOps "(" ^ ConstVal to Types ^ ")" | |
247 | getelementptr OptInBounds "(" ^ ConstVal IndexList ^ ")" | |
248 | select "(" ^ ConstVal ^ "," ConstVal ^ "," ConstVal ^ ")" | |
249 | ArithmeticOps "(" ^ ConstVal ^ "," ConstVal ^ ")" | |
250 | LogicalOps "(" ^ ConstVal ^ "," ConstVal ^ ")" | |
251 | icmp IPredicates "(" ^ ConstVal ^ "," ConstVal ^ ")" | |
252 | fcmp FPredicates "(" ^ ConstVal ^ "," ConstVal ^ ")" | |
253 | extractelement "(" ^ ConstVal ^ "," ConstVal ^ ")" | |
254 | insertelement "(" ^ ConstVal ^ "," ConstVal ^ "," ConstVal ^ ")" | |
255 | shufflevector "(" ^ ConstVal ^ "," ConstVal ^ "," ConstVal ^ ")" | |
256 | extractvalue "(" ^ ConstVal ^ ConstantIndexList ^ ")" | |
257 | insertvalue "(" ^ ConstVal ^ "," ConstVal ^ ConstantIndexList ^ ")" ; | |
258 | |
259 ConstVector ::= ConstVector ^ "," ConstVal | ConstVal ; | |
260 | |
261 GlobalType ::= global | constant ; | |
262 | |
263 ThreadLocal ::= - "thread_local" | _ ; | |
264 | |
265 AliaseeRef ::= ResultTypes SymbolicValueRef | |
266 | bitcast "(" ^ AliaseeRef to Types ^ ")" ; | |
267 | |
268 Module ::= +++ DefinitionList | --- _ ; | |
269 | |
270 DefinitionList ::= - Definition | + DefinitionList Definition ; | |
271 | |
272 Definition | |
273 ::= ^ ( +++++ define Function | |
274 | declare FunctionProto | |
275 | - module asm AsmBlock | |
276 | OptLocalAssign type Types | |
277 | OptGlobalAssign GVVisibilityStyle ThreadLocal OptAddrSpace GlobalType | |
278 ConstVal GlobalVarAttributes | |
279 | OptGlobalAssign GVInternalLinkage GVVisibilityStyle ThreadLocal OptAddrSpace | |
280 GlobalType ConstVal GlobalVarAttributes | |
281 | OptGlobalAssign GVExternalLinkage GVVisibilityStyle ThreadLocal OptAddrSpace | |
282 GlobalType Types GlobalVarAttributes | |
283 | OptGlobalAssign GVVisibilityStyle alias AliasLinkage AliaseeRef | |
284 | target TargetDefinition | |
285 | deplibs "=" LibrariesDefinition | |
286 ) ^ "\n"; | |
287 | |
288 AsmBlock ::= STRINGCONSTANT ; | |
289 | |
290 TargetDefinition ::= triple "=" STRINGCONSTANT | |
291 | datalayout "=" STRINGCONSTANT ; | |
292 | |
293 LibrariesDefinition ::= "[" ( LibList | _ ) "]"; | |
294 | |
295 LibList ::= LibList ^ "," STRINGCONSTANT | STRINGCONSTANT ; | |
296 | |
297 ArgListH ::= ArgListH ^ "," Types OptParamAttrs OptLocalName | |
298 | Types OptParamAttrs OptLocalName ; | |
299 | |
300 ArgList ::= ArgListH | ArgListH ^ "," "..." | "..." | _ ; | |
301 | |
302 FunctionHeaderH ::= OptCallingConv OptRetAttrs ResultTypes | |
303 GlobalName ^ "(" ^ ArgList ^ ")" | |
304 OptFuncAttrs OptSection OptAlign OptGC ; | |
305 | |
306 BEGIN ::= ( begin | "{" ) ^ "\n"; | |
307 | |
308 FunctionHeader ::= | |
309 FunctionDefineLinkage GVVisibilityStyle FunctionHeaderH BEGIN ; | |
310 | |
311 END ::= ^ ( end | "}" ) ^ "\n"; | |
312 | |
313 Function ::= BasicBlockList END ; | |
314 | |
315 FunctionProto ::= FunctionDeclareLinkage GVVisibilityStyle FunctionHeaderH ; | |
316 | |
317 OptSideEffect ::= _ | sideeffect ; | |
318 | |
319 ConstValueRef ::= ESINT64VAL | |
320 | EUINT64VAL | |
321 | FPVAL | |
322 | true | |
323 | false | |
324 | null | |
325 | undef | |
326 | zeroinitializer | |
327 | "<" ConstVector ">" | |
328 | "[" ConstVector "]" | |
329 | "[" ^ "]" | |
330 | "c" ^ STRINGCONSTANT | |
331 | "{" ConstVector "}" | |
332 | "{" ^ "}" | |
333 | "<" ^ "{" ConstVector "}" ^ ">" | |
334 | "<" ^ "{" ^ "}" ^ ">" | |
335 | ConstExpr | |
336 | asm OptSideEffect STRINGCONSTANT ^ "," STRINGCONSTANT ; | |
337 | |
338 SymbolicValueRef ::= LOCALVALID | |
339 | GLOBALVALID | |
340 | LocalName | |
341 | GlobalName ; | |
342 | |
343 ValueRef ::= SymbolicValueRef | ConstValueRef; | |
344 | |
345 ResolvedVal ::= Types ValueRef ; | |
346 | |
347 ReturnedVal ::= ResolvedVal | ReturnedVal ^ "," ResolvedVal ; | |
348 | |
349 BasicBlockList ::= BasicBlockList BasicBlock | FunctionHeader BasicBlock ; | |
350 | |
351 BasicBlock ::= InstructionList OptLocalAssign BBTerminatorInst ; | |
352 | |
353 InstructionList ::= +++ InstructionList Inst | |
354 | - _ | |
355 | ^ LABELSTR ^ ":\n" ; | |
356 | |
357 BBTerminatorInst ::= ^ " " ^ | |
358 ( ret ReturnedVal | |
359 | ret void | |
360 | br label ValueRef | |
361 | br INTTYPE ValueRef ^ "," label ValueRef ^ "," label ValueRef | |
362 | switch IntType ValueRef ^ "," label ValueRef "[" JumpTable "]" | |
363 | switch IntType ValueRef ^ "," label ValueRef "[" ^ "]" | |
364 | invoke OptCallingConv ResultTypes ValueRef ^ "(" ^ ParamList ^ ")" | |
365 OptFuncAttrs | |
366 to label ValueRef unwind label ValueRef | |
367 | unwind | |
368 | unreachable ) ^ "\n"; | |
369 | |
370 JumpTable ::= JumpTable IntType ConstValueRef ^ "," label ValueRef | |
371 | IntType ConstValueRef ^ "," label ValueRef ; | |
372 | |
373 Inst ::= ^ " " ^ OptLocalAssign InstVal ^ "\n"; | |
374 | |
375 PHIList ::= Types "[" ValueRef ^ "," ValueRef "]" | |
376 | PHIList ^ "," "[" ValueRef ^ "," ValueRef "]" ; | |
377 | |
378 ParamList ::= Types OptParamAttrs ValueRef OptParamAttrs | |
379 | label OptParamAttrs ValueRef OptParamAttrs | |
380 | ParamList ^ "," Types OptParamAttrs ValueRef OptParamAttrs | |
381 | ParamList ^ "," label OptParamAttrs ValueRef OptParamAttrs | |
382 | - _ ; | |
383 | |
384 IndexList ::= _ | IndexList ^ "," ResolvedVal ; | |
385 | |
386 ConstantIndexList ::= "," EUINT64VAL | ConstantIndexList ^ "," EUINT64VAL ; | |
387 | |
388 OptTailCall ::= tail call | call ; | |
389 | |
390 InstVal ::= | |
391 ArithmeticOps Types ValueRef ^ "," ValueRef | |
392 | LogicalOps Types ValueRef ^ "," ValueRef | |
393 | icmp IPredicates Types ValueRef ^ "," ValueRef | |
394 | fcmp FPredicates Types ValueRef ^ "," ValueRef | |
395 | CastOps ResolvedVal to Types | |
396 | select ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal | |
397 | "va_arg" ResolvedVal ^ "," Types | |
398 | extractelement ResolvedVal ^ "," ResolvedVal | |
399 | insertelement ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal | |
400 | shufflevector ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal | |
401 | phi PHIList | |
402 | OptTailCall OptCallingConv ResultTypes ValueRef ^ "(" ^ ParamList ^ ")" | |
403 OptFuncAttrs | |
404 | MemoryInst ; | |
405 | |
406 OptVolatile ::= - volatile | _ ; | |
407 OptExact ::= - exact | _ ; | |
408 OptNSW ::= - nsw | _ ; | |
409 OptNUW ::= - nuw | _ ; | |
410 OptNW ::= OptNUW OptNSW | OptNSW OptNUW ; | |
411 OptInBounds ::= - inbounds | _ ; | |
412 | |
413 MemoryInst ::= malloc Types OptCAlign | |
414 | malloc Types ^ "," INTTYPE ValueRef OptCAlign | |
415 | alloca Types OptCAlign | |
416 | alloca Types ^ "," INTTYPE ValueRef OptCAlign | |
417 | free ResolvedVal | |
418 | OptVolatile load Types ValueRef OptCAlign | |
419 | OptVolatile store ResolvedVal ^ "," Types ValueRef OptCAlign | |
420 | getresult Types ValueRef ^ "," EUINT64VAL | |
421 | getelementptr OptInBounds Types ValueRef IndexList | |
422 | extractvalue Types ValueRef ^ ConstantIndexList | |
423 | insertvalue Types ValueRef ^ "," Types ValueRef ^ ConstantIndexList ; |