[ARM] In ARMAsmParser, MatchCoprocessorOperandName() permitted p10 and p11 as operand...
[oota-llvm.git] / utils / llvm.grm
index aec57f5df7017dbd3e0b66d690f5570f56e149b1..d65f075076cf8ef8eb4c064a8cece328c5d40acf 100644 (file)
@@ -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.
 
 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"
 *)
 
 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.
 *)
 
 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 ;
 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 | _ ;
 
 LocalName ::= LOCALVAR | STRINGCONSTANT | PCTSTRINGCONSTANT ;
 OptLocalName ::= LocalName | _ ;
 
-OptAddrSpace ::= - addrspace "(" ^ EUINT64VAL ^ ")" | _ ;
+OptAddrSpace ::= - addrspace "(" ^ EUINT64VAL ^ ")" | _ ;
 
 OptLocalAssign ::= LocalName "=" | _ ;
 
 
 OptLocalAssign ::= LocalName "=" | _ ;
 
@@ -82,10 +85,15 @@ GlobalAssign ::= GlobalName "=" ;
 GVInternalLinkage
   ::= + internal
  | weak
 GVInternalLinkage
   ::= + internal
  | weak
+ | "weak_odr"
  | linkonce
  | linkonce
+ | "linkonce_odr"
  | appending
  | dllexport
  | common
  | appending
  | dllexport
  | common
+ | private
+ | "linker_private"
+ | "linker_private_weak"
  ;
 
 GVExternalLinkage
  ;
 
 GVExternalLinkage
@@ -111,11 +119,13 @@ FunctionDefineLinkage
   ::= + _
  | internal
  | linkonce
   ::= + _
  | internal
  | linkonce
+ | "linkonce_odr"
  | weak
  | weak
+ | "weak_odr"
  | dllexport
  ;
 
  | dllexport
  ;
 
-AliasLinkage ::= + _ | weak | internal ;
+AliasLinkage ::= + _ | weak | "weak_odr" | internal ;
 
 OptCallingConv ::= + _ |
                  ccc |
 
 OptCallingConv ::= + _ |
                  ccc |
@@ -126,12 +136,11 @@ OptCallingConv ::= + _ |
                  cc EUINT64VAL ;
 
 ParamAttr ::= zeroext
                  cc EUINT64VAL ;
 
 ParamAttr ::= zeroext
- | zext
  | signext
  | signext
- | sext
  | inreg
  | sret
  | noalias
  | inreg
  | sret
  | noalias
+ | nocapture
  | byval
  | nest
  | align EUINT64VAL
  | byval
  | nest
  | align EUINT64VAL
@@ -139,12 +148,35 @@ ParamAttr ::= zeroext
 
 OptParamAttrs ::= + _ | OptParamAttrs ParamAttr ;
 
 
 OptParamAttrs ::= + _ | OptParamAttrs ParamAttr ;
 
+RetAttr       ::= inreg
+              | zeroext
+              | signext
+              | noalias
+              ;
+
+OptRetAttrs  ::= _
+             | OptRetAttrs RetAttr
+             ;
+
 FuncAttr      ::= noreturn
  | nounwind
 FuncAttr      ::= noreturn
  | nounwind
+ | inreg
  | zeroext
  | signext
  | readnone
  | readonly
  | zeroext
  | signext
  | readnone
  | readonly
+ | inlinehint
+ | alignstack
+ | noinline
+ | alwaysinline
+ | optsize
+ | ssp
+ | sspreq
+ | returns_twice
+ | nonlazybind
+ | sanitize_address
+ | sanitize_thread
+ | sanitize_memory
  ;
 
 OptFuncAttrs  ::= + _ | OptFuncAttrs FuncAttr ;
  ;
 
 OptFuncAttrs  ::= + _ | OptFuncAttrs FuncAttr ;
@@ -175,9 +207,9 @@ Types
  | "[" ^ EUINT64VAL "x" Types ^ "]"
  | "<" ^ EUINT64VAL "x" Types ^ ">"
  | "{" TypeListI "}"
  | "[" ^ EUINT64VAL "x" Types ^ "]"
  | "<" ^ EUINT64VAL "x" Types ^ ">"
  | "{" TypeListI "}"
- | "{" "}"
+ | "{" "}"
  | "<" ^ "{" TypeListI "}" ^ ">"
  | "<" ^ "{" TypeListI "}" ^ ">"
- | "<" ^ "{" "}" ^ ">"
+ | "<" ^ "{" "}" ^ ">"
  ;
 
 ArgType ::= Types OptParamAttrs ;
  ;
 
 ArgType ::= Types OptParamAttrs ;
@@ -191,40 +223,38 @@ ArgTypeListI ::= ArgTypeList | ArgTypeList ^ "," "..." | "..." | _ ;
 TypeListI ::= Types | TypeListI ^ "," Types ;
 
 ConstVal::= Types "[" ^ ConstVector ^ "]"
 TypeListI ::= Types | TypeListI ^ "," Types ;
 
 ConstVal::= Types "[" ^ ConstVector ^ "]"
- | Types "[" "]"
+ | Types "[" "]"
  | Types "c" ^ STRINGCONSTANT
  | Types "<" ^ ConstVector ^ ">"
  | Types "{" ConstVector "}"
  | Types "c" ^ STRINGCONSTANT
  | Types "<" ^ ConstVector ^ ">"
  | Types "{" ConstVector "}"
- | Types "{" "}"
+ | Types "{" "}"
  | Types "<" ^ "{" ConstVector "}" ^ ">"
  | Types "<" ^ "{" ConstVector "}" ^ ">"
- | Types "<" ^ "{" "}" ^ ">"
+ | Types "<" ^ "{" "}" ^ ">"
  | Types null
  | Types undef
  | Types SymbolicValueRef
  | Types ConstExpr
  | Types zeroinitializer
  | 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 ^ ")"
 
 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 ^ ")"
  | 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 ^ ")"
  | extractelement "(" ^ ConstVal ^ "," ConstVal ^ ")"
  | insertelement "(" ^ ConstVal ^ "," ConstVal ^ "," ConstVal ^ ")"
  | shufflevector "(" ^ ConstVal ^ "," ConstVal ^ "," ConstVal ^ ")"
- | extractvalue "(" ^ ConstVal IndexList ^ ")"
- | insertvalue "(" ^ ConstVal ^ "," ConstVal IndexList ^ ")" ;
+ | extractvalue "(" ^ ConstVal ^ ConstantIndexList ^ ")"
+ | insertvalue "(" ^ ConstVal ^ "," ConstVal ^ ConstantIndexList ^ ")" ;
 
 ConstVector ::= ConstVector ^ "," ConstVal | ConstVal ;
 
 
 ConstVector ::= ConstVector ^ "," ConstVal | ConstVal ;
 
@@ -244,13 +274,12 @@ Definition
  | declare FunctionProto
  | - module asm AsmBlock
  | OptLocalAssign type Types
  | 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
  | OptGlobalAssign GVVisibilityStyle alias AliasLinkage AliaseeRef
  | target TargetDefinition
  | deplibs "=" LibrariesDefinition
@@ -261,16 +290,17 @@ AsmBlock ::= STRINGCONSTANT ;
 TargetDefinition ::= triple "=" STRINGCONSTANT
  | datalayout "=" 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 ^ "," "..." | "..." | _ ;
 
 
 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";
                   OptFuncAttrs OptSection OptAlign OptGC ;
 
 BEGIN ::= ( begin | "{" ) ^ "\n";
@@ -295,6 +325,13 @@ ConstValueRef ::= ESINT64VAL
  | undef
  | zeroinitializer
  | "<" ConstVector ">"
  | undef
  | zeroinitializer
  | "<" ConstVector ">"
+ | "[" ConstVector "]"
+ | "[" ^ "]"
+ | "c" ^ STRINGCONSTANT
+ | "{" ConstVector "}"
+ | "{" ^ "}"
+ | "<" ^ "{" ConstVector "}" ^ ">"
+ | "<" ^ "{" ^ "}" ^ ">"
  | ConstExpr
  | asm OptSideEffect STRINGCONSTANT ^ "," STRINGCONSTANT ;
 
  | ConstExpr
  | asm OptSideEffect STRINGCONSTANT ^ "," STRINGCONSTANT ;
 
@@ -323,8 +360,9 @@ BBTerminatorInst ::= ^ "  " ^
  | br label ValueRef
  | br INTTYPE ValueRef ^ "," label ValueRef ^ "," label ValueRef
  | switch IntType ValueRef ^ "," label ValueRef "[" JumpTable "]"
  | 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";
    to label ValueRef unwind label ValueRef
  | unwind
  | unreachable ) ^ "\n";
@@ -345,6 +383,8 @@ ParamList ::= Types OptParamAttrs ValueRef OptParamAttrs
 
 IndexList ::= _ | IndexList ^ "," ResolvedVal ;
 
 
 IndexList ::= _ | IndexList ^ "," ResolvedVal ;
 
+ConstantIndexList ::= "," EUINT64VAL | ConstantIndexList ^ "," EUINT64VAL ;
+
 OptTailCall ::= tail call | call ;
 
 InstVal ::=
 OptTailCall ::= tail call | call ;
 
 InstVal ::=
@@ -352,8 +392,6 @@ InstVal ::=
  | LogicalOps Types ValueRef ^ "," ValueRef
  | icmp IPredicates Types ValueRef ^ "," ValueRef
  | fcmp FPredicates 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
  | CastOps ResolvedVal to Types
  | select ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal
  | "va_arg" ResolvedVal ^ "," Types
@@ -361,11 +399,16 @@ InstVal ::=
  | insertelement ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal
  | shufflevector ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal
  | phi PHIList
  | insertelement ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal
  | shufflevector ResolvedVal ^ "," ResolvedVal ^ "," ResolvedVal
  | phi PHIList
- | OptTailCall OptCallingConv ResultTypes ValueRef "(" ^ ParamList ^ ")"
+ | OptTailCall OptCallingConv ResultTypes ValueRef "(" ^ ParamList ^ ")"
    OptFuncAttrs
  | MemoryInst ;
 
 OptVolatile ::= - volatile | _ ;
    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
 
 MemoryInst ::= malloc Types OptCAlign
  | malloc Types ^ "," INTTYPE ValueRef OptCAlign
@@ -375,6 +418,6 @@ MemoryInst ::= malloc Types OptCAlign
  | OptVolatile load Types ValueRef OptCAlign
  | OptVolatile store ResolvedVal ^ "," Types ValueRef OptCAlign
  | getresult Types ValueRef ^ "," EUINT64VAL
  | OptVolatile load Types ValueRef OptCAlign
  | OptVolatile store ResolvedVal ^ "," Types ValueRef OptCAlign
  | getresult Types ValueRef ^ "," EUINT64VAL
- | getelementptr Types ValueRef IndexList
- | extractvalue Types ValueRef IndexList 
- | insertvalue Types ValueRef ^ "," Types ValueRef IndexList ;
+ | getelementptr OptInBounds Types ValueRef IndexList
+ | extractvalue Types ValueRef ^ ConstantIndexList 
+ | insertvalue Types ValueRef ^ "," Types ValueRef ^ ConstantIndexList ;