[llvm-commits] [llvm] r44109 - in /llvm/trunk: include/llvm/ParameterAttributes.h lib/AsmParser/Lexer.l lib/AsmParser/llvmAsmParser.y lib/VMCore/Function.cpp lib/VMCore/Verifier.cpp
Anton Korobeynikov
asl at math.spbu.ru
Wed Nov 14 01:52:33 PST 2007
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) {
More information about the llvm-commits
mailing list