X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=utils%2Fllvm.grm;h=92a4053173d64f87b08460cc956d83a0e46da449;hp=8a2ce0dfb5364e66add9158d7b5a0ba6f8341306;hb=7ceb9c769fb6df5508d7ad83acd628edc4e2e35b;hpb=890c31cfccaa17c9a99a66831018613834dd34a1 diff --git a/utils/llvm.grm b/utils/llvm.grm index 8a2ce0dfb53..92a4053173d 100644 --- a/utils/llvm.grm +++ b/utils/llvm.grm @@ -8,6 +8,8 @@ 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" @@ -53,7 +55,8 @@ 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 ; +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 ; @@ -69,7 +72,7 @@ FPType ::= float | double | "ppc_fp128" | fp128 | "x86_fp80"; LocalName ::= LOCALVAR | STRINGCONSTANT | PCTSTRINGCONSTANT ; OptLocalName ::= LocalName | _ ; -OptAddrSpace ::= - addrspace "(" ^ EUINT64VAL ^ ")" | _ ; +OptAddrSpace ::= - addrspace ^ "(" ^ EUINT64VAL ^ ")" | _ ; OptLocalAssign ::= LocalName "=" | _ ; @@ -82,10 +85,13 @@ GlobalAssign ::= GlobalName "=" ; GVInternalLinkage ::= + internal | weak + | "weak_odr" | linkonce + | "linkonce_odr" | appending | dllexport | common + | private ; GVExternalLinkage @@ -111,11 +117,13 @@ FunctionDefineLinkage ::= + _ | internal | linkonce + | "linkonce_odr" | weak + | "weak_odr" | dllexport ; -AliasLinkage ::= + _ | weak | internal ; +AliasLinkage ::= + _ | weak | "weak_odr" | internal ; OptCallingConv ::= + _ | ccc | @@ -126,12 +134,11 @@ OptCallingConv ::= + _ | cc EUINT64VAL ; ParamAttr ::= zeroext - | zext | signext - | sext | inreg | sret | noalias + | nocapture | byval | nest | align EUINT64VAL @@ -139,12 +146,35 @@ ParamAttr ::= zeroext 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 ; OptFuncAttrs ::= + _ | OptFuncAttrs FuncAttr ; @@ -175,9 +205,9 @@ Types | "[" ^ EUINT64VAL "x" Types ^ "]" | "<" ^ EUINT64VAL "x" Types ^ ">" | "{" TypeListI "}" - | "{" "}" + | "{" ^ "}" | "<" ^ "{" TypeListI "}" ^ ">" - | "<" ^ "{" "}" ^ ">" + | "<" ^ "{" ^ "}" ^ ">" ; ArgType ::= Types OptParamAttrs ; @@ -191,38 +221,38 @@ ArgTypeListI ::= ArgTypeList | ArgTypeList ^ "," "..." | "..." | _ ; TypeListI ::= Types | TypeListI ^ "," Types ; ConstVal::= Types "[" ^ ConstVector ^ "]" - | Types "[" "]" + | Types "[" ^ "]" | Types "c" ^ STRINGCONSTANT | Types "<" ^ ConstVector ^ ">" | Types "{" ConstVector "}" - | Types "{" "}" + | Types "{" ^ "}" | Types "<" ^ "{" ConstVector "}" ^ ">" - | Types "<" ^ "{" "}" ^ ">" + | 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 ; + | Types ESINT64VAL + | Types ESAPINTVAL + | Types EUINT64VAL + | Types EUAPINTVAL + | Types true + | Types false + | Types FPVAL ; ConstExpr::= CastOps "(" ^ ConstVal to Types ^ ")" - | getelementptr "(" ^ ConstVal IndexList ^ ")" + | getelementptr OptInBounds "(" ^ 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 ^ ")" ; + | shufflevector "(" ^ ConstVal ^ "," ConstVal ^ "," ConstVal ^ ")" + | extractvalue "(" ^ ConstVal ^ ConstantIndexList ^ ")" + | insertvalue "(" ^ ConstVal ^ "," ConstVal ^ ConstantIndexList ^ ")" ; ConstVector ::= ConstVector ^ "," ConstVal | ConstVal ; @@ -242,13 +272,12 @@ Definition | 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 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 @@ -259,16 +288,17 @@ AsmBlock ::= STRINGCONSTANT ; TargetDefinition ::= triple "=" STRINGCONSTANT | datalayout "=" STRINGCONSTANT ; -LibrariesDefinition ::= "[" LibList "]"; +LibrariesDefinition ::= "[" ( LibList | _ ) "]"; -LibList ::= LibList ^ "," STRINGCONSTANT | STRINGCONSTANT | _ ; +LibList ::= LibList ^ "," STRINGCONSTANT | STRINGCONSTANT ; ArgListH ::= ArgListH ^ "," Types OptParamAttrs OptLocalName | Types OptParamAttrs OptLocalName ; ArgList ::= ArgListH | ArgListH ^ "," "..." | "..." | _ ; -FunctionHeaderH ::= OptCallingConv ResultTypes GlobalName "(" ^ ArgList ^ ")" +FunctionHeaderH ::= OptCallingConv OptRetAttrs ResultTypes + GlobalName ^ "(" ^ ArgList ^ ")" OptFuncAttrs OptSection OptAlign OptGC ; BEGIN ::= ( begin | "{" ) ^ "\n"; @@ -293,6 +323,13 @@ ConstValueRef ::= ESINT64VAL | undef | zeroinitializer | "<" ConstVector ">" + | "[" ConstVector "]" + | "[" ^ "]" + | "c" ^ STRINGCONSTANT + | "{" ConstVector "}" + | "{" ^ "}" + | "<" ^ "{" ConstVector "}" ^ ">" + | "<" ^ "{" ^ "}" ^ ">" | ConstExpr | asm OptSideEffect STRINGCONSTANT ^ "," STRINGCONSTANT ; @@ -321,8 +358,9 @@ BBTerminatorInst ::= ^ " " ^ | 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 + | switch IntType ValueRef ^ "," label ValueRef "[" ^ "]" + | invoke OptCallingConv ResultTypes ValueRef ^ "(" ^ ParamList ^ ")" + OptFuncAttrs to label ValueRef unwind label ValueRef | unwind | unreachable ) ^ "\n"; @@ -343,6 +381,8 @@ ParamList ::= Types OptParamAttrs ValueRef OptParamAttrs IndexList ::= _ | IndexList ^ "," ResolvedVal ; +ConstantIndexList ::= "," EUINT64VAL | ConstantIndexList ^ "," EUINT64VAL ; + OptTailCall ::= tail call | call ; InstVal ::= @@ -350,20 +390,23 @@ InstVal ::= | 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 - | vaarg ResolvedVal ^ "," Types + | "va_arg" ResolvedVal ^ "," Types | extractelement ResolvedVal ^ "," ResolvedVal | insertelement ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal | shufflevector ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal | phi PHIList - | OptTailCall OptCallingConv ResultTypes ValueRef "(" ^ ParamList ^ ")" + | 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 @@ -373,4 +416,6 @@ MemoryInst ::= malloc Types OptCAlign | OptVolatile load Types ValueRef OptCAlign | OptVolatile store ResolvedVal ^ "," Types ValueRef OptCAlign | getresult Types ValueRef ^ "," EUINT64VAL - | getelementptr Types ValueRef IndexList ; + | getelementptr OptInBounds Types ValueRef IndexList + | extractvalue Types ValueRef ^ ConstantIndexList + | insertvalue Types ValueRef ^ "," Types ValueRef ^ ConstantIndexList ;