Author: asl Date: Wed Nov 14 03:52:30 2007 New Revision: 44109 URL: http://llvm.org/viewvc/llvm-project?rev=44109&view=rev Log: Add pure/const attributes. Documentation will follow.
Modified: llvm/trunk/include/llvm/ParameterAttributes.h llvm/trunk/lib/AsmParser/Lexer.l llvm/trunk/lib/AsmParser/llvmAsmParser.y llvm/trunk/lib/VMCore/Function.cpp llvm/trunk/lib/VMCore/Verifier.cpp Modified: llvm/trunk/include/llvm/ParameterAttributes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ParameterAttributes.h?rev=44109&r1=44108&r2=44109&view=diff ============================================================================== --- llvm/trunk/include/llvm/ParameterAttributes.h (original) +++ llvm/trunk/include/llvm/ParameterAttributes.h Wed Nov 14 03:52:30 2007 @@ -29,16 +29,18 @@ /// results. /// @brief Function parameter attributes. enum Attributes { - None = 0, ///< No attributes have been set - ZExt = 1 << 0, ///< Zero extended before/after call - SExt = 1 << 1, ///< Sign extended before/after call - NoReturn = 1 << 2, ///< Mark the function as not returning - InReg = 1 << 3, ///< Force argument to be passed in register - StructRet = 1 << 4, ///< Hidden pointer to structure to return - NoUnwind = 1 << 5, ///< Function doesn't unwind stack - NoAlias = 1 << 6, ///< Considered to not alias after call - ByVal = 1 << 7, ///< Pass structure by value - Nest = 1 << 8 ///< Nested function static chain + None = 0, ///< No attributes have been set + ZExt = 1 << 0, ///< Zero extended before/after call + SExt = 1 << 1, ///< Sign extended before/after call + NoReturn = 1 << 2, ///< Mark the function as not returning + InReg = 1 << 3, ///< Force argument to be passed in register + StructRet = 1 << 4, ///< Hidden pointer to structure to return + NoUnwind = 1 << 5, ///< Function doesn't unwind stack + NoAlias = 1 << 6, ///< Considered to not alias after call + ByVal = 1 << 7, ///< Pass structure by value + Nest = 1 << 8, ///< Nested function static chain + Pure = 1 << 9, ///< Function is pure + Const = 1 << 10 ///< Function is const }; } Modified: llvm/trunk/lib/AsmParser/Lexer.l URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/Lexer.l?rev=44109&r1=44108&r2=44109&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/Lexer.l (original) +++ llvm/trunk/lib/AsmParser/Lexer.l Wed Nov 14 03:52:30 2007 @@ -275,6 +275,8 @@ noalias { return NOALIAS; } byval { return BYVAL; } nest { return NEST; } +pure { return PURE; } +const { return CONST; } sext{WSNL} { // For auto-upgrade only, drop in LLVM 3.0 return SIGNEXT; } zext{WSNL} { // For auto-upgrade only, drop in LLVM 3.0 Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y?rev=44109&r1=44108&r2=44109&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/llvmAsmParser.y (original) +++ llvm/trunk/lib/AsmParser/llvmAsmParser.y Wed Nov 14 03:52:30 2007 @@ -1113,6 +1113,7 @@ // Function Attributes %token SIGNEXT ZEROEXT NORETURN INREG SRET NOUNWIND NOALIAS BYVAL NEST +%token CONST PURE // Visibility Styles %token DEFAULT HIDDEN PROTECTED @@ -1256,6 +1257,8 @@ | NOUNWIND { $$ = ParamAttr::NoUnwind; } | ZEROEXT { $$ = ParamAttr::ZExt; } | SIGNEXT { $$ = ParamAttr::SExt; } + | PURE { $$ = ParamAttr::Pure; } + | CONST { $$ = ParamAttr::Const; } ; OptFuncAttrs : /* empty */ { $$ = ParamAttr::None; } Modified: llvm/trunk/lib/VMCore/Function.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Function.cpp?rev=44109&r1=44108&r2=44109&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Function.cpp (original) +++ llvm/trunk/lib/VMCore/Function.cpp Wed Nov 14 03:52:30 2007 @@ -108,6 +108,10 @@ Result += "byval "; if (Attrs & ParamAttr::Nest) Result += "nest "; + if (Attrs & ParamAttr::Pure) + Result += "pure "; + if (Attrs & ParamAttr::Const) + Result += "const "; return Result; } Modified: llvm/trunk/lib/VMCore/Verifier.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Verifier.cpp?rev=44109&r1=44108&r2=44109&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Verifier.cpp (original) +++ llvm/trunk/lib/VMCore/Verifier.cpp Wed Nov 14 03:52:30 2007 @@ -398,7 +398,8 @@ ParamAttr::Nest | ParamAttr::StructRet; const uint16_t ParameterIncompatible = - ParamAttr::NoReturn | ParamAttr::NoUnwind; + ParamAttr::NoReturn | ParamAttr::NoUnwind | + ParamAttr::Const | ParamAttr::Pure; const uint16_t MutuallyIncompatible = ParamAttr::ByVal | ParamAttr::InReg | @@ -407,6 +408,9 @@ const uint16_t MutuallyIncompatible2 = ParamAttr::ZExt | ParamAttr::SExt; + const uint16_t MutuallyIncompatible3 = + ParamAttr::Pure | ParamAttr::Const; + const uint16_t IntegerTypeOnly = ParamAttr::SExt | ParamAttr::ZExt; @@ -423,9 +427,14 @@ uint16_t RetI = Attrs->getParamAttrs(0) & ReturnIncompatible; Assert1(!RetI, "Attribute " + Attrs->getParamAttrsText(RetI) + "should not apply to functions!", &F); - uint16_t MutI = Attrs->getParamAttrs(0) & MutuallyIncompatible2; - Assert1(MutI != MutuallyIncompatible2, "Attributes" + - Attrs->getParamAttrsText(MutI) + "are incompatible!", &F); + + uint16_t MutI2 = Attrs->getParamAttrs(0) & MutuallyIncompatible2; + Assert1(MutI2 != MutuallyIncompatible2, "Attributes" + + Attrs->getParamAttrsText(MutI2) + "are incompatible!", &F); + + uint16_t MutI3 = Attrs->getParamAttrs(0) & MutuallyIncompatible3; + Assert1(MutI3 != MutuallyIncompatible3, "Attributes" + + Attrs->getParamAttrsText(MutI3) + "are incompatible!", &F); for (FunctionType::param_iterator I = FT->param_begin(), E = FT->param_end(); I != E; ++I, ++Idx) { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits