forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			405 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			405 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| (*
 | |
| 
 | |
| polygen grammar for LLVM assembly language.
 | |
| 
 | |
| This file defines an LLVM assembly language grammar for polygen,
 | |
| which is a tool for generating random text based on a grammar.
 | |
| It is strictly syntax-based, and makes no attempt to generate
 | |
| IR that is semantically valid. Most of the IR produced doesn't
 | |
| pass the Verifier.
 | |
| 
 | |
| *)
 | |
| 
 | |
| I ::=   "title:    LLVM assembly language\n"
 | |
|       ^ "status:   experimental\n"
 | |
|       ^ "audience: LLVM developers\n"
 | |
| ;
 | |
| 
 | |
| S ::= Module ;
 | |
| 
 | |
| (*
 | |
| Define rules for non-keyword tokens. This is currently just a bunch
 | |
| of hacks. They don't cover many valid forms of tokens, and they also
 | |
| generate some invalid forms of tokens. The LLVM parser has custom
 | |
| C++ code to lex these; custom C++ code for emitting them would be
 | |
| convenient, but polygen doesn't support that.
 | |
| *)
 | |
| NonZeroDecimalDigit ::=     1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ;
 | |
| DecimalDigit        ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ;
 | |
| DecimalDigitSeq     ::= DecimalDigit [^ DecimalDigitSeq ];
 | |
| HexDigit            ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
 | |
|                       | a | b | c | d | e | f ;
 | |
| HexDigitSeq         ::= HexDigit [^ HexDigitSeq ];
 | |
| StringChar          ::= a | b | c | d | e | f | g | h | i | j | k | l | m
 | |
|                       | n | o | p | q | r | s | t | u | v | w | x | y | z ;
 | |
| StringConstantSeq   ::= StringChar [^ StringConstantSeq ];
 | |
| StringConstant      ::= StringChar [^ StringConstantSeq ];
 | |
| EUINT64VAL          ::= NonZeroDecimalDigit [^ DecimalDigitSeq ];
 | |
| ESINT64VAL          ::= [ "-" ] ^ EUINT64VAL ;
 | |
| EUAPINTVAL          ::= EUINT64VAL ;
 | |
| ESAPINTVAL          ::= ESINT64VAL ;
 | |
| LOCALVALID          ::= "%" ^ DecimalDigitSeq ;
 | |
| GLOBALVALID         ::= "@" ^ DecimalDigitSeq ;
 | |
| INTTYPE             ::= "i" ^ EUINT64VAL ;
 | |
| GLOBALVAR           ::= "@" ^ StringConstant ;
 | |
| LOCALVAR            ::= "%" ^ StringConstant ;
 | |
| STRINGCONSTANT      ::= "\"" ^ StringConstant ^ "\"" ;
 | |
| ATSTRINGCONSTANT    ::= "@" ^ STRINGCONSTANT ;
 | |
| PCTSTRINGCONSTANT   ::= "%" ^ STRINGCONSTANT ;
 | |
| LABELSTR            ::= StringConstant ;
 | |
| FPVAL               ::= ESAPINTVAL ^ "." ^ EUAPINTVAL | "0x" ^ HexDigitSeq ;
 | |
| 
 | |
| (*
 | |
| The rest of this file is derived directly from llvmAsmParser.y.
 | |
| *)
 | |
| 
 | |
| ArithmeticOps ::= add | sub | mul | udiv | sdiv | fdiv | urem | srem | frem ;
 | |
| LogicalOps    ::= shl | lshr | ashr | and | or | xor;
 | |
| CastOps       ::= trunc | zext | sext | fptrunc | fpext | bitcast |
 | |
|                   uitofp | sitofp | fptoui | fptosi | inttoptr | ptrtoint ;
 | |
| 
 | |
| IPredicates ::= eq | ne | slt | sgt | sle | sge | ult | ugt | ule | uge ;
 | |
| 
 | |
| FPredicates ::= oeq | one | olt | ogt | ole | oge | ord | uno | ueq | une
 | |
|               | ult | ugt | ule | uge | true | false ;
 | |
| 
 | |
| IntType ::= INTTYPE;
 | |
| FPType  ::= float | double | "ppc_fp128" | fp128 | "x86_fp80";
 | |
| 
 | |
| LocalName ::= LOCALVAR | STRINGCONSTANT | PCTSTRINGCONSTANT ;
 | |
| OptLocalName ::= LocalName | _ ;
 | |
| 
 | |
| OptAddrSpace ::= - addrspace "(" ^ EUINT64VAL ^ ")" | _ ;
 | |
| 
 | |
| OptLocalAssign ::= LocalName "=" | _ ;
 | |
| 
 | |
| GlobalName ::= GLOBALVAR | ATSTRINGCONSTANT ;
 | |
| 
 | |
| OptGlobalAssign ::= GlobalAssign | _ ;
 | |
| 
 | |
| GlobalAssign ::= GlobalName "=" ;
 | |
| 
 | |
| GVInternalLinkage
 | |
|   ::= + internal
 | |
|  | weak
 | |
|  | linkonce
 | |
|  | appending
 | |
|  | dllexport
 | |
|  | common
 | |
|  ;
 | |
| 
 | |
| GVExternalLinkage
 | |
|   ::= dllimport
 | |
|  | "extern_weak"
 | |
|  | + external
 | |
|  ;
 | |
| 
 | |
| GVVisibilityStyle
 | |
|   ::= + _
 | |
|  | default
 | |
|  | hidden
 | |
|  | protected
 | |
|  ;
 | |
| 
 | |
| FunctionDeclareLinkage
 | |
|   ::= + _
 | |
|  | dllimport
 | |
|  | "extern_weak"
 | |
|  ;
 | |
| 
 | |
| FunctionDefineLinkage
 | |
|   ::= + _
 | |
|  | internal
 | |
|  | linkonce
 | |
|  | weak
 | |
|  | dllexport
 | |
|  ;
 | |
| 
 | |
| AliasLinkage ::= + _ | weak | internal ;
 | |
| 
 | |
| OptCallingConv ::= + _ |
 | |
|                  ccc |
 | |
|                  fastcc |
 | |
|                  coldcc |
 | |
|                  "x86_stdcallcc" |
 | |
|                  "x86_fastcallcc" |
 | |
|                  "x86_ssecallcc" |
 | |
|                  cc EUINT64VAL ;
 | |
| 
 | |
| ParamAttr ::= zeroext
 | |
|  | zext
 | |
|  | signext
 | |
|  | sext
 | |
|  | inreg
 | |
|  | sret
 | |
|  | noalias
 | |
|  | byval
 | |
|  | nest
 | |
|  | align EUINT64VAL
 | |
|  ;
 | |
| 
 | |
| OptParamAttrs ::= + _ | OptParamAttrs ParamAttr ;
 | |
| 
 | |
| FuncAttr      ::= noreturn
 | |
|  | nounwind
 | |
|  | zeroext
 | |
|  | signext
 | |
|  | readnone
 | |
|  | readonly
 | |
|  ;
 | |
| 
 | |
| OptFuncAttrs  ::= + _ | OptFuncAttrs FuncAttr ;
 | |
| 
 | |
| FuncNoteList  ::= FuncNote
 | |
|               | FuncNoteList ^ "," FuncNote
 | |
|               ;
 | |
| 
 | |
| FuncNote      ::= inline ^ "=" ^ never
 | |
|               | inline ^ "=" ^ always
 | |
|               | "opt_size"
 | |
|               ;
 | |
| 
 | |
| OptFuncNotes  ::= _
 | |
|               | notes ^ "(" ^ FuncNoteList ^ ")"
 | |
|               ;
 | |
| 
 | |
| OptGC         ::= + _ | gc STRINGCONSTANT ;
 | |
| 
 | |
| OptAlign      ::= + _ | align EUINT64VAL ;
 | |
| OptCAlign     ::= + _ | ^ "," align EUINT64VAL ;
 | |
| 
 | |
| SectionString ::= section STRINGCONSTANT ;
 | |
| 
 | |
| OptSection    ::= + _ | SectionString ;
 | |
| 
 | |
| GlobalVarAttributes ::= + _ | ^ "," GlobalVarAttribute GlobalVarAttributes ;
 | |
| GlobalVarAttribute  ::= SectionString | align EUINT64VAL ;
 | |
| 
 | |
| PrimType ::= INTTYPE | float | double | "ppc_fp128" | fp128 | "x86_fp80"
 | |
|           | - label ;
 | |
| 
 | |
| Types
 | |
|   ::= opaque
 | |
|  | PrimType
 | |
|  | Types OptAddrSpace ^ "*"
 | |
|  | SymbolicValueRef
 | |
|  | "\\" ^ EUINT64VAL
 | |
|  | Types "(" ^ ArgTypeListI ^ ")" OptFuncAttrs
 | |
|  | void "(" ^ ArgTypeListI ^ ")" OptFuncAttrs
 | |
|  | "[" ^ EUINT64VAL "x" Types ^ "]"
 | |
|  | "<" ^ EUINT64VAL "x" Types ^ ">"
 | |
|  | "{" TypeListI "}"
 | |
|  | "{" ^ "}"
 | |
|  | "<" ^ "{" TypeListI "}" ^ ">"
 | |
|  | "<" ^ "{" ^ "}" ^ ">"
 | |
|  ;
 | |
| 
 | |
| ArgType ::= Types OptParamAttrs ;
 | |
| 
 | |
| ResultTypes ::= Types | void ;
 | |
| 
 | |
| ArgTypeList ::= ArgType | ArgTypeList ^ "," ArgType ;
 | |
| 
 | |
| ArgTypeListI ::= ArgTypeList | ArgTypeList ^ "," "..." | "..." | _ ;
 | |
| 
 | |
| TypeListI ::= Types | TypeListI ^ "," Types ;
 | |
| 
 | |
| ConstVal::= Types "[" ^ ConstVector ^ "]"
 | |
|  | Types "[" ^ "]"
 | |
|  | Types "c" ^ STRINGCONSTANT
 | |
|  | Types "<" ^ ConstVector ^ ">"
 | |
|  | Types "{" ConstVector "}"
 | |
|  | Types "{" ^ "}"
 | |
|  | Types "<" ^ "{" ConstVector "}" ^ ">"
 | |
|  | Types "<" ^ "{" ^ "}" ^ ">"
 | |
|  | Types null
 | |
|  | Types undef
 | |
|  | Types SymbolicValueRef
 | |
|  | Types ConstExpr
 | |
|  | Types zeroinitializer
 | |
|  | IntType ESINT64VAL
 | |
|  | IntType ESAPINTVAL
 | |
|  | IntType EUINT64VAL
 | |
|  | IntType EUAPINTVAL
 | |
|  | INTTYPE true
 | |
|  | INTTYPE false
 | |
|  | FPType FPVAL ;
 | |
| 
 | |
| ConstExpr::= CastOps "(" ^ ConstVal to Types ^ ")"
 | |
|  | getelementptr "(" ^ ConstVal IndexList ^ ")"
 | |
|  | select "(" ^ ConstVal ^ "," ConstVal ^ "," ConstVal ^ ")"
 | |
|  | ArithmeticOps "(" ^ ConstVal ^ "," ConstVal ^ ")"
 | |
|  | LogicalOps "(" ^ ConstVal ^ "," ConstVal ^ ")"
 | |
|  | icmp IPredicates "(" ^ ConstVal ^ "," ConstVal ^ ")"
 | |
|  | fcmp FPredicates "(" ^ ConstVal ^ "," ConstVal ^ ")"
 | |
|  | vicmp IPredicates "(" ^ ConstVal ^ "," ConstVal ^ ")"
 | |
|  | vfcmp FPredicates "(" ^ ConstVal ^ "," ConstVal ^ ")"
 | |
|  | extractelement "(" ^ ConstVal ^ "," ConstVal ^ ")"
 | |
|  | insertelement "(" ^ ConstVal ^ "," ConstVal ^ "," ConstVal ^ ")"
 | |
|  | shufflevector "(" ^ ConstVal ^ "," ConstVal ^ "," ConstVal ^ ")"
 | |
|  | extractvalue "(" ^ ConstVal ^ ConstantIndexList ^ ")"
 | |
|  | insertvalue "(" ^ ConstVal ^ "," ConstVal ^ ConstantIndexList ^ ")" ;
 | |
| 
 | |
| ConstVector ::= ConstVector ^ "," ConstVal | ConstVal ;
 | |
| 
 | |
| GlobalType ::= global | constant ;
 | |
| 
 | |
| ThreadLocal ::= - "thread_local" | _ ;
 | |
| 
 | |
| AliaseeRef ::= ResultTypes SymbolicValueRef
 | |
|  | bitcast "(" ^ AliaseeRef to Types ^ ")" ;
 | |
| 
 | |
| Module ::= +++ DefinitionList | --- _ ;
 | |
| 
 | |
| DefinitionList ::= - Definition | + DefinitionList Definition ;
 | |
| 
 | |
| Definition
 | |
|   ::= ^ ( +++++ define Function
 | |
|  | declare FunctionProto
 | |
|  | - module asm AsmBlock
 | |
|  | OptLocalAssign type Types
 | |
|  | OptLocalAssign type void
 | |
|  | OptGlobalAssign GVVisibilityStyle ThreadLocal GlobalType ConstVal
 | |
|    OptAddrSpace GlobalVarAttributes
 | |
|  | OptGlobalAssign GVInternalLinkage GVVisibilityStyle ThreadLocal GlobalType
 | |
|    ConstVal OptAddrSpace GlobalVarAttributes
 | |
|  | OptGlobalAssign GVExternalLinkage GVVisibilityStyle ThreadLocal GlobalType
 | |
|    Types OptAddrSpace GlobalVarAttributes
 | |
|  | OptGlobalAssign GVVisibilityStyle alias AliasLinkage AliaseeRef
 | |
|  | target TargetDefinition
 | |
|  | deplibs "=" LibrariesDefinition
 | |
|  ) ^ "\n";
 | |
| 
 | |
| AsmBlock ::= STRINGCONSTANT ;
 | |
| 
 | |
| TargetDefinition ::= triple "=" STRINGCONSTANT
 | |
|  | datalayout "=" STRINGCONSTANT ;
 | |
| 
 | |
| LibrariesDefinition ::= "[" LibList "]";
 | |
| 
 | |
| LibList ::= LibList ^ "," STRINGCONSTANT | STRINGCONSTANT | _ ;
 | |
| 
 | |
| ArgListH ::= ArgListH ^ "," Types OptParamAttrs OptLocalName
 | |
|  | Types OptParamAttrs OptLocalName ;
 | |
| 
 | |
| ArgList ::= ArgListH | ArgListH ^ "," "..." | "..." | _ ;
 | |
| 
 | |
| FunctionHeaderH ::= OptCallingConv ResultTypes GlobalName "(" ^ ArgList ^ ")"
 | |
|                   OptFuncAttrs OptSection OptAlign OptGC OptFuncNotes ;
 | |
| 
 | |
| BEGIN ::= ( begin | "{" ) ^ "\n";
 | |
| 
 | |
| FunctionHeader ::=
 | |
|   FunctionDefineLinkage GVVisibilityStyle FunctionHeaderH BEGIN ;
 | |
| 
 | |
| END ::= ^ ( end | "}" ) ^ "\n";
 | |
| 
 | |
| Function ::= BasicBlockList END ;
 | |
| 
 | |
| FunctionProto ::= FunctionDeclareLinkage GVVisibilityStyle FunctionHeaderH ;
 | |
| 
 | |
| OptSideEffect ::= _ | sideeffect ;
 | |
| 
 | |
| ConstValueRef ::= ESINT64VAL
 | |
|  | EUINT64VAL
 | |
|  | FPVAL
 | |
|  | true
 | |
|  | false
 | |
|  | null
 | |
|  | undef
 | |
|  | zeroinitializer
 | |
|  | "<" ConstVector ">"
 | |
|  | "[" ConstVector "]"
 | |
|  | "[" ^ "]"
 | |
|  | "c" ^ STRINGCONSTANT
 | |
|  | "{" ConstVector "}"
 | |
|  | "{" ^ "}"
 | |
|  | "<" ^ "{" ConstVector "}" ^ ">"
 | |
|  | "<" ^ "{" ^ "}" ^ ">"
 | |
|  | ConstExpr
 | |
|  | asm OptSideEffect STRINGCONSTANT ^ "," STRINGCONSTANT ;
 | |
| 
 | |
| SymbolicValueRef ::= LOCALVALID
 | |
|  | GLOBALVALID
 | |
|  | LocalName
 | |
|  | GlobalName ;
 | |
| 
 | |
| ValueRef ::= SymbolicValueRef | ConstValueRef;
 | |
| 
 | |
| ResolvedVal ::= Types ValueRef ;
 | |
| 
 | |
| ReturnedVal ::= ResolvedVal | ReturnedVal ^ "," ResolvedVal ;
 | |
| 
 | |
| BasicBlockList ::= BasicBlockList BasicBlock | FunctionHeader BasicBlock ;
 | |
| 
 | |
| BasicBlock ::= InstructionList OptLocalAssign BBTerminatorInst ;
 | |
| 
 | |
| InstructionList ::= +++ InstructionList Inst
 | |
|  | - _
 | |
|  | ^ LABELSTR ^ ":\n" ;
 | |
| 
 | |
| BBTerminatorInst ::= ^ "  " ^
 | |
|  ( ret ReturnedVal
 | |
|  | ret void
 | |
|  | br label ValueRef
 | |
|  | br INTTYPE ValueRef ^ "," label ValueRef ^ "," label ValueRef
 | |
|  | switch IntType ValueRef ^ "," label ValueRef "[" JumpTable "]"
 | |
|  | switch IntType ValueRef ^ "," label ValueRef "[" ^ "]"
 | |
|  | invoke OptCallingConv ResultTypes ValueRef ^ "(" ^ ParamList ^ ")"
 | |
|    OptFuncAttrs
 | |
|    to label ValueRef unwind label ValueRef
 | |
|  | unwind
 | |
|  | unreachable ) ^ "\n";
 | |
| 
 | |
| JumpTable ::= JumpTable IntType ConstValueRef ^ "," label ValueRef
 | |
|  | IntType ConstValueRef ^ "," label ValueRef ;
 | |
| 
 | |
| Inst ::= ^ "  " ^ OptLocalAssign InstVal ^ "\n";
 | |
| 
 | |
| PHIList ::= Types "[" ValueRef ^ "," ValueRef "]"
 | |
|  | PHIList ^ "," "[" ValueRef ^ "," ValueRef "]" ;
 | |
| 
 | |
| ParamList ::= Types OptParamAttrs ValueRef OptParamAttrs
 | |
|  | label OptParamAttrs ValueRef OptParamAttrs
 | |
|  | ParamList ^ "," Types OptParamAttrs ValueRef OptParamAttrs
 | |
|  | ParamList ^ "," label OptParamAttrs ValueRef OptParamAttrs
 | |
|  | - _ ;
 | |
| 
 | |
| IndexList ::= _ | IndexList ^ "," ResolvedVal ;
 | |
| 
 | |
| ConstantIndexList ::= "," EUINT64VAL | ConstantIndexList ^ "," EUINT64VAL ;
 | |
| 
 | |
| OptTailCall ::= tail call | call ;
 | |
| 
 | |
| InstVal ::=
 | |
|    ArithmeticOps Types ValueRef ^ "," ValueRef
 | |
|  | LogicalOps Types ValueRef ^ "," ValueRef
 | |
|  | icmp IPredicates Types ValueRef ^ "," ValueRef
 | |
|  | fcmp FPredicates Types ValueRef ^ "," ValueRef
 | |
|  | vicmp IPredicates Types ValueRef ^ "," ValueRef
 | |
|  | vfcmp FPredicates Types ValueRef ^ "," ValueRef
 | |
|  | CastOps ResolvedVal to Types
 | |
|  | select ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal
 | |
|  | "va_arg" ResolvedVal ^ "," Types
 | |
|  | extractelement ResolvedVal ^ "," ResolvedVal
 | |
|  | insertelement ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal
 | |
|  | shufflevector ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal
 | |
|  | phi PHIList
 | |
|  | OptTailCall OptCallingConv ResultTypes ValueRef ^ "(" ^ ParamList ^ ")"
 | |
|    OptFuncAttrs
 | |
|  | MemoryInst ;
 | |
| 
 | |
| OptVolatile ::= - volatile | _ ;
 | |
| 
 | |
| MemoryInst ::= malloc Types OptCAlign
 | |
|  | malloc Types ^ "," INTTYPE ValueRef OptCAlign
 | |
|  | alloca Types OptCAlign
 | |
|  | alloca Types ^ "," INTTYPE ValueRef OptCAlign
 | |
|  | free ResolvedVal
 | |
|  | OptVolatile load Types ValueRef OptCAlign
 | |
|  | OptVolatile store ResolvedVal ^ "," Types ValueRef OptCAlign
 | |
|  | getresult Types ValueRef ^ "," EUINT64VAL
 | |
|  | getelementptr Types ValueRef IndexList
 | |
|  | extractvalue Types ValueRef ^ ConstantIndexList 
 | |
|  | insertvalue Types ValueRef ^ "," Types ValueRef ^ ConstantIndexList ;
 |