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