[llvm-commits] [llvm] r50360 - in /llvm/trunk: include/llvm-c/Core.h include/llvm/Argument.h lib/VMCore/Core.cpp lib/VMCore/Function.cpp

Gordon Henriksen gordonhenriksen at mac.com
Mon Apr 28 10:37:06 PDT 2008


Author: gordon
Date: Mon Apr 28 12:37:06 2008
New Revision: 50360

URL: http://llvm.org/viewvc/llvm-project?rev=50360&view=rev
Log:
Expose parameter attributes via C bindings.

Patch by Anders Johnsen!

Modified:
    llvm/trunk/include/llvm-c/Core.h
    llvm/trunk/include/llvm/Argument.h
    llvm/trunk/lib/VMCore/Core.cpp
    llvm/trunk/lib/VMCore/Function.cpp

Modified: llvm/trunk/include/llvm-c/Core.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/Core.h?rev=50360&r1=50359&r2=50360&view=diff

==============================================================================
--- llvm/trunk/include/llvm-c/Core.h (original)
+++ llvm/trunk/include/llvm-c/Core.h Mon Apr 28 12:37:06 2008
@@ -83,6 +83,20 @@
 typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
 
 typedef enum {
+    LLVMZExtParamAttr       = 1<<0,
+    LLVMSExtParamAttr       = 1<<1,
+    LLVMNoReturnParamAttr   = 1<<2,
+    LLVMNoUnwindParamAttr   = 1<<3,
+    LLVMInRegParamAttr      = 1<<4,
+    LLVMNoAliasParamAttr    = 1<<5,
+    LLVMStructRetParamAttr  = 1<<6,
+    LLVMByValParamAttr      = 1<<7,
+    LLVMNestParamAttr       = 1<<8,
+    LLVMReadNoneParamAttr   = 1<<9,
+    LLVMReadOnlyParamAttr   = 1<<10
+} LLVMParamAttr;
+
+typedef enum {
   LLVMVoidTypeKind,        /**< type with no size */
   LLVMFloatTypeKind,       /**< 32 bit floating point type */
   LLVMDoubleTypeKind,      /**< 64 bit floating point type */
@@ -413,6 +427,9 @@
 LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
 LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
 LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
+void LLVMAddParamAttr(LLVMValueRef Arg, LLVMParamAttr PA);
+void LLVMRemoveParamAttr(LLVMValueRef Arg, LLVMParamAttr PA);
+void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
 
 /* Operations on basic blocks */
 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
@@ -441,6 +458,11 @@
 /* Operations on call sites */
 void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
 unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
+void LLVMAddInstrParamAttr(LLVMValueRef Instr, unsigned index, LLVMParamAttr);
+void LLVMRemoveInstrParamAttr(LLVMValueRef Instr, unsigned index, 
+                              LLVMParamAttr);
+void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index, 
+                                unsigned align);
 
 /* Operations on phi nodes */
 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,

Modified: llvm/trunk/include/llvm/Argument.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Argument.h?rev=50360&r1=50359&r2=50360&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Argument.h (original)
+++ llvm/trunk/include/llvm/Argument.h Mon Apr 28 12:37:06 2008
@@ -15,6 +15,7 @@
 #define LLVM_ARGUMENT_H
 
 #include "llvm/Value.h"
+#include "llvm/ParameterAttributes.h"
 
 namespace llvm {
 
@@ -60,7 +61,13 @@
   /// hasSRetAttr - Return true if this argument has the sret attribute on it in
   /// its containing function.
   bool hasStructRetAttr() const;
+
+  /// addAttr - Add a ParamAttr to an argument
+  void addAttr(ParameterAttributes);
   
+  /// removeAttr - Remove a ParamAttr from an argument
+  void removeAttr(ParameterAttributes);
+
   virtual void print(std::ostream &OS) const;
   void print(std::ostream *OS) const {
     if (OS) print(*OS);

Modified: llvm/trunk/lib/VMCore/Core.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Core.cpp?rev=50360&r1=50359&r2=50360&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/Core.cpp (original)
+++ llvm/trunk/lib/VMCore/Core.cpp Mon Apr 28 12:37:06 2008
@@ -20,6 +20,7 @@
 #include "llvm/TypeSymbolTable.h"
 #include "llvm/ModuleProvider.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/CallSite.h"
 #include <cassert>
 #include <cstdlib>
 #include <cstring>
@@ -798,6 +799,19 @@
   return wrap(--I);
 }
 
+void LLVMAddParamAttr(LLVMValueRef Arg, LLVMParamAttr PA) {
+  unwrap<Argument>(Arg)->addAttr(PA);
+}
+
+void LLVMRemoveParamAttr(LLVMValueRef Arg, LLVMParamAttr PA) {
+  unwrap<Argument>(Arg)->removeAttr(PA);
+}
+
+void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align) {
+  unwrap<Argument>(Arg)->addAttr(
+          ParamAttr::constructAlignmentFromInt(align));
+}
+
 /*--.. Operations on basic blocks ..........................................--*/
 
 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB) {
@@ -936,6 +950,28 @@
   assert(0 && "LLVMSetInstructionCallConv applies only to call and invoke!");
 }
 
+void LLVMAddInstrParamAttr(LLVMValueRef Instr, unsigned index, 
+                           LLVMParamAttr PA) {
+  CallSite Call = CallSite(unwrap<Instruction>(Instr));
+  Call.setParamAttrs(
+    Call.getParamAttrs().addAttr(index, PA));
+}
+
+void LLVMRemoveInstrParamAttr(LLVMValueRef Instr, unsigned index, 
+                              LLVMParamAttr PA) {
+  CallSite Call = CallSite(unwrap<Instruction>(Instr));
+  Call.setParamAttrs(
+    Call.getParamAttrs().removeAttr(index, PA));
+}
+
+void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index, 
+                                unsigned align) {
+  CallSite Call = CallSite(unwrap<Instruction>(Instr));
+  Call.setParamAttrs(
+    Call.getParamAttrs().addAttr(index, 
+        ParamAttr::constructAlignmentFromInt(align)));
+}
+
 /*--.. Operations on phi nodes .............................................--*/
 
 void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,

Modified: llvm/trunk/lib/VMCore/Function.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Function.cpp?rev=50360&r1=50359&r2=50360&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/Function.cpp (original)
+++ llvm/trunk/lib/VMCore/Function.cpp Mon Apr 28 12:37:06 2008
@@ -110,6 +110,17 @@
   return getParent()->paramHasAttr(1, ParamAttr::StructRet);
 }
 
+/// addAttr - Add a ParamAttr to an argument
+void Argument::addAttr(ParameterAttributes attr) {
+  getParent()->setParamAttrs(
+    getParent()->getParamAttrs().addAttr(getArgNo() + 1, attr));
+}
+  
+/// removeAttr - Remove a ParamAttr from an argument
+void Argument::removeAttr(ParameterAttributes attr) {
+  getParent()->setParamAttrs(
+    getParent()->getParamAttrs().removeAttr(getArgNo() + 1, attr));
+}
 
 
 





More information about the llvm-commits mailing list