tablegen: Add a simple heuristic to get better names for pressure sets
[oota-llvm.git] / utils / llvm.grm
index c24b9c2d6f59d24b7c4d76ee1a4ab22916ece51c..92a4053173d64f87b08460cc956d83a0e46da449 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,13 @@ GlobalAssign ::= GlobalName "=" ;
 GVInternalLinkage
   ::= + internal
  | weak
 GVInternalLinkage
   ::= + internal
  | weak
+ | "weak_odr"
  | linkonce
  | linkonce
+ | "linkonce_odr"
  | appending
  | dllexport
  | common
  | appending
  | dllexport
  | common
+ | private
  ;
 
 GVExternalLinkage
  ;
 
 GVExternalLinkage
@@ -111,11 +117,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 +134,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 +146,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 +205,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 +221,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 +272,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 +288,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 +323,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 +358,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 +381,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,20 +390,23 @@ 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
  | 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
  | 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 | _ ;
    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 +416,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 ;