[pkg-d-commits] [ldc] 30/74: Remove magic +1 constant for parameter indexing. (#2120)

Matthias Klumpp mak at moszumanska.debian.org
Thu Jul 13 20:54:16 UTC 2017


This is an automated email from the git hooks/post-receive script.

mak pushed a commit to annotated tag v1.3.0-beta2
in repository ldc.

commit ba1ed88b55600bc1b5918e72efd5f524ebb01645
Author: Johan Engelen <jbc.engelen at gmail.com>
Date:   Sat May 20 08:48:48 2017 +0200

    Remove magic +1 constant for parameter indexing. (#2120)
    
    Remove magic +1 constant for parameter indexing.
    
    LLVM may change the indexing offset in the future. See http://llvm.org/viewvc/llvm-project?view=revision&revision=302060
---
 gen/attributes.h | 18 +++++++++++++++++-
 gen/runtime.cpp  | 24 ++++++++++++++++--------
 gen/tocall.cpp   | 13 ++++++-------
 ir/irfuncty.cpp  | 10 ++++++----
 4 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/gen/attributes.h b/gen/attributes.h
index ca75936..787ed84 100644
--- a/gen/attributes.h
+++ b/gen/attributes.h
@@ -44,15 +44,31 @@ public:
 class AttrSet {
   LLAttributeSet set;
 
+  AttrSet &add(unsigned index, const AttrBuilder &builder);
+
 public:
   AttrSet() = default;
   AttrSet(const LLAttributeSet &nativeSet) : set(nativeSet) {}
   AttrSet(const AttrSet &base, unsigned index, LLAttribute attribute);
 
+#if LDC_LLVM_VER >= 500
+  static const unsigned FirstArgIndex = LLAttributeSet::FirstArgIndex;
+#else
+  static const unsigned FirstArgIndex = 1;
+#endif
+
   static AttrSet
   extractFunctionAndReturnAttributes(const llvm::Function *function);
 
-  AttrSet &add(unsigned index, const AttrBuilder &builder);
+  AttrSet &addToParam(unsigned paramIndex, const AttrBuilder &builder) {
+    return add(paramIndex + FirstArgIndex, builder);
+  }
+  AttrSet &addToFunction(const AttrBuilder &builder) {
+    return add(LLAttributeSet::FunctionIndex, builder);
+  }
+  AttrSet &addToReturn(const AttrBuilder &builder) {
+    return add(LLAttributeSet::ReturnIndex, builder);
+  }
   AttrSet &merge(const AttrSet &other);
 
   operator LLAttributeSet &() { return set; }
diff --git a/gen/runtime.cpp b/gen/runtime.cpp
index ec027d9..367efe9 100644
--- a/gen/runtime.cpp
+++ b/gen/runtime.cpp
@@ -317,21 +317,29 @@ static void buildRuntimeModule() {
                          llvm::Attribute::NoReturn),
       Attr_ReadOnly_NoUnwind(Attr_ReadOnly, LLAttributeSet::FunctionIndex,
                              llvm::Attribute::NoUnwind),
-      Attr_ReadOnly_1_NoCapture(Attr_ReadOnly, 1, llvm::Attribute::NoCapture),
-      Attr_ReadOnly_1_3_NoCapture(Attr_ReadOnly_1_NoCapture, 3,
+      Attr_ReadOnly_1_NoCapture(Attr_ReadOnly, AttrSet::FirstArgIndex,
+                                llvm::Attribute::NoCapture),
+      Attr_ReadOnly_1_3_NoCapture(Attr_ReadOnly_1_NoCapture,
+                                  AttrSet::FirstArgIndex + 2,
                                   llvm::Attribute::NoCapture),
       Attr_ReadOnly_NoUnwind_1_NoCapture(Attr_ReadOnly_1_NoCapture,
                                          LLAttributeSet::FunctionIndex,
                                          llvm::Attribute::NoUnwind),
       Attr_ReadOnly_NoUnwind_1_2_NoCapture(Attr_ReadOnly_NoUnwind_1_NoCapture,
-                                           2, llvm::Attribute::NoCapture),
+                                           AttrSet::FirstArgIndex + 1,
+                                           llvm::Attribute::NoCapture),
       Attr_ReadNone(NoAttrs, LLAttributeSet::FunctionIndex,
                     llvm::Attribute::ReadNone),
-      Attr_1_NoCapture(NoAttrs, 1, llvm::Attribute::NoCapture),
-      Attr_NoAlias_1_NoCapture(Attr_1_NoCapture, 0, llvm::Attribute::NoAlias),
-      Attr_1_2_NoCapture(Attr_1_NoCapture, 2, llvm::Attribute::NoCapture),
-      Attr_1_3_NoCapture(Attr_1_NoCapture, 3, llvm::Attribute::NoCapture),
-      Attr_1_4_NoCapture(Attr_1_NoCapture, 4, llvm::Attribute::NoCapture);
+      Attr_1_NoCapture(NoAttrs, AttrSet::FirstArgIndex,
+                       llvm::Attribute::NoCapture),
+      Attr_1_2_NoCapture(Attr_1_NoCapture, AttrSet::FirstArgIndex + 1,
+                         llvm::Attribute::NoCapture),
+      Attr_1_3_NoCapture(Attr_1_NoCapture, AttrSet::FirstArgIndex + 2,
+                         llvm::Attribute::NoCapture),
+      Attr_1_4_NoCapture(Attr_1_NoCapture, AttrSet::FirstArgIndex + 3,
+                         llvm::Attribute::NoCapture),
+      Attr_NoAlias_1_NoCapture(Attr_1_NoCapture, LLAttributeSet::ReturnIndex,
+                               llvm::Attribute::NoAlias);
 
   //////////////////////////////////////////////////////////////////////////////
   //////////////////////////////////////////////////////////////////////////////
diff --git a/gen/tocall.cpp b/gen/tocall.cpp
index 579445b..aebc042 100644
--- a/gen/tocall.cpp
+++ b/gen/tocall.cpp
@@ -197,8 +197,7 @@ static void addExplicitArguments(std::vector<LLValue *> &args, AttrSet &attrs,
     }
 
     args[llArgIdx] = llVal;
-    // +1 as index 0 contains the function attributes.
-    attrs.add(llArgIdx + 1, irArg->attrs);
+    attrs.addToParam(llArgIdx, irArg->attrs);
 
     if (isVararg) {
       delete irArg;
@@ -688,7 +687,7 @@ private:
     }
 
     args.push_back(pointer);
-    attrs.add(index + 1, irFty.arg_sret->attrs);
+    attrs.addToParam(index, irFty.arg_sret->attrs);
 
     // verify that sret and/or inreg attributes are set
     const AttrBuilder &sretAttrs = irFty.arg_sret->attrs;
@@ -759,9 +758,9 @@ private:
 
     // add attributes
     if (irFty.arg_this) {
-      attrs.add(index + 1, irFty.arg_this->attrs);
+      attrs.addToParam(index, irFty.arg_this->attrs);
     } else if (irFty.arg_nest) {
-      attrs.add(index + 1, irFty.arg_nest->attrs);
+      attrs.addToParam(index, irFty.arg_nest->attrs);
     }
 
     if (irFty.arg_objcSelector && dfnval) {
@@ -784,7 +783,7 @@ private:
         getTypeinfoArrayArgumentForDVarArg(argvals, numFormalParams);
 
     args.push_back(argumentsArg);
-    attrs.add(args.size(), irFty.arg_arguments->attrs);
+    attrs.addToParam(args.size() - 1, irFty.arg_arguments->attrs);
   }
 };
 
@@ -826,7 +825,7 @@ DValue *DtoCallFunctionImpl(Loc &loc, Type *resulttype, DValue *fnval,
   AttrSet attrs;
 
   // return attrs
-  attrs.add(LLAttributeSet::ReturnIndex, irFty.ret->attrs);
+  attrs.addToReturn(irFty.ret->attrs);
 
   std::vector<LLValue *> args;
   args.reserve(irFty.args.size());
diff --git a/ir/irfuncty.cpp b/ir/irfuncty.cpp
index ae0dd30..10b6db0 100644
--- a/ir/irfuncty.cpp
+++ b/ir/irfuncty.cpp
@@ -99,17 +99,19 @@ LLValue *IrFuncTy::getParamLVal(Type *dty, size_t idx, LLValue *val) {
 AttrSet IrFuncTy::getParamAttrs(bool passThisBeforeSret) {
   AttrSet newAttrs;
 
+  if (ret) {
+    newAttrs.addToReturn(ret->attrs);
+  }
+
   int idx = 0;
 
 // handle implicit args
 #define ADD_PA(X)                                                              \
   if (X) {                                                                     \
-    newAttrs.add(idx, (X)->attrs);                                             \
+    newAttrs.addToParam(idx, (X)->attrs);                                      \
     idx++;                                                                     \
   }
 
-  ADD_PA(ret)
-
   if (arg_sret && arg_this && passThisBeforeSret) {
     ADD_PA(arg_this)
     ADD_PA(arg_sret)
@@ -127,7 +129,7 @@ AttrSet IrFuncTy::getParamAttrs(bool passThisBeforeSret) {
   const size_t n = args.size();
   for (size_t k = 0; k < n; k++) {
     const size_t i = idx + (reverseParams ? (n - k - 1) : k);
-    newAttrs.add(i, args[k]->attrs);
+    newAttrs.addToParam(i, args[k]->attrs);
   }
 
   return newAttrs;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-d/ldc.git



More information about the pkg-d-commits mailing list