(*

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.

TODO: Metadata, in all its forms

*)

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 ::= + OptNW add | fadd | OptNW sub | fsub | OptNW mul | fmul |
                  udiv | OptExact 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  ::= half | bfloat | 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
 | "weak_odr"
 | linkonce
 | "linkonce_odr"
 | appending
 | dllexport
 | common
 | private
 ;

GVExternalLinkage
  ::= dllimport
 | "extern_weak"
 | + external
 ;

GVVisibilityStyle
  ::= + _
 | default
 | hidden
 | protected
 ;

FunctionDeclareLinkage
  ::= + _
 | dllimport
 | "extern_weak"
 ;

FunctionDefineLinkage
  ::= + _
 | internal
 | linkonce
 | "linkonce_odr"
 | weak
 | "weak_odr"
 | dllexport
 ;

AliasLinkage ::= + _ | weak | "weak_odr" | internal ;

OptCallingConv ::= + _ |
                 ccc |
                 fastcc |
                 coldcc |
                 "x86_stdcallcc" |
                 "x86_fastcallcc" |
                 cc EUINT64VAL ;

ParamAttr ::= zeroext
 | signext
 | inreg
 | sret
 | noalias
 | nocapture
 | byval
 | nest
 | align EUINT64VAL
 ;

OptParamAttrs ::= + _ | OptParamAttrs ParamAttr ;

RetAttr       ::= inreg
              | zeroext
              | signext
              | noalias
              ;

OptRetAttrs  ::= _
             | OptRetAttrs RetAttr
             ;

FuncAttr      ::= noreturn
 | nounwind
 | inreg
 | zeroext
 | signext
 | readnone
 | readonly
 | inlinehint
 | alignstack
 | noinline
 | alwaysinline
 | optsize
 | ssp
 | sspreq
 | returns_twice
 | nonlazybind
 | sanitize_address
 | sanitize_thread
 | sanitize_memory
 | mustprogress
 ;

OptFuncAttrs  ::= + _ | OptFuncAttrs FuncAttr ;

OptGC         ::= + _ | gc STRINGCONSTANT ;

OptAlign      ::= + _ | align EUINT64VAL ;
OptCAlign     ::= + _ | ^ "," align EUINT64VAL ;

SectionString ::= section STRINGCONSTANT ;

OptSection    ::= + _ | SectionString ;

GlobalVarAttributes ::= + _ | ^ "," GlobalVarAttribute GlobalVarAttributes ;
GlobalVarAttribute  ::= SectionString | align EUINT64VAL ;

PrimType ::= INTTYPE | half | bfloat | float | double | "ppc_fp128" | fp128
          | "x86_fp80" | "x86_mmx" | "x86_amx" | - 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
 | Types ESINT64VAL
 | Types ESAPINTVAL
 | Types EUINT64VAL
 | Types EUAPINTVAL
 | Types true
 | Types false
 | Types FPVAL ;

ConstExpr::= CastOps "(" ^ ConstVal to Types ^ ")"
 | getelementptr OptInBounds "(" ^ ConstVal IndexList ^ ")"
 | select "(" ^ ConstVal ^ "," ConstVal ^ "," ConstVal ^ ")"
 | ArithmeticOps "(" ^ ConstVal ^ "," ConstVal ^ ")"
 | LogicalOps "(" ^ ConstVal ^ "," ConstVal ^ ")"
 | icmp IPredicates "(" ^ ConstVal ^ "," ConstVal ^ ")"
 | fcmp 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
 | OptGlobalAssign GVVisibilityStyle ThreadLocal OptAddrSpace GlobalType
   ConstVal GlobalVarAttributes
 | OptGlobalAssign GVInternalLinkage GVVisibilityStyle ThreadLocal OptAddrSpace
   GlobalType ConstVal GlobalVarAttributes
 | OptGlobalAssign GVExternalLinkage GVVisibilityStyle ThreadLocal OptAddrSpace
   GlobalType Types 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 OptRetAttrs ResultTypes
                  GlobalName ^ "(" ^ ArgList ^ ")"
                  OptFuncAttrs OptSection OptAlign OptGC ;

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
 | 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 | _ ;
OptExact ::= - exact | _ ;
OptNSW ::= - nsw | _ ;
OptNUW ::= - nuw | _ ;
OptNW  ::= OptNUW OptNSW | OptNSW OptNUW ;
OptInBounds  ::= - inbounds | _ ;

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 OptInBounds Types ValueRef IndexList
 | extractvalue Types ValueRef ^ ConstantIndexList 
 | insertvalue Types ValueRef ^ "," Types ValueRef ^ ConstantIndexList ;
