[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