[pkg-d-commits] [ldc] 39/74: Dcompute target fix (#2129)

Matthias Klumpp mak at moszumanska.debian.org
Thu Jul 13 20:54:17 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 ebfdc25323130c779046d3b70a11c30119000f03
Author: Nicholas Wilson <thewilsonator at users.noreply.github.com>
Date:   Mon May 22 15:26:27 2017 +0800

    Dcompute target fix (#2129)
    
    * Fix placement of version guards
    
    * use std::array
---
 gen/dcompute/target.h      | 13 ++++++-------
 gen/dcompute/targetOCL.cpp | 34 +++++++++++++++++-----------------
 2 files changed, 23 insertions(+), 24 deletions(-)

diff --git a/gen/dcompute/target.h b/gen/dcompute/target.h
index cc3a197..60bfb8d 100644
--- a/gen/dcompute/target.h
+++ b/gen/dcompute/target.h
@@ -23,24 +23,23 @@ class FuncDeclaration;
 
 class DComputeTarget {
 public:
+  llvm::LLVMContext &ctx;
+  int tversion; // OpenCL or CUDA CC version:major*100 + minor*10
   enum ID { Host = 0, OpenCL = 1, CUDA = 2 };
   ID target;    // ID for codegen time conditional compilation.
-  int tversion; // OpenCL or CUDA CC version:major*100 + minor*10
-
+  const char *short_name;
+  const char *binSuffix;
+  TargetABI *abi;
   // The nominal address spaces in DCompute are Private = 0, Global = 1,
   // Shared = 2, Constant = 3, Generic = 4
   std::array<int, 5> mapping;
 
   IRState *_ir;
-  llvm::LLVMContext &ctx;
-  TargetABI *abi;
-  const char *binSuffix;
-  const char *short_name;
 
   DComputeTarget(llvm::LLVMContext &c, int v, ID id, const char *_short_name,
                  const char *suffix, TargetABI *a, std::array<int, 5> map)
     : ctx(c), tversion(v), target(id), short_name(_short_name),
-      binSuffix(suffix), abi(a), mapping(map) { }
+      binSuffix(suffix), abi(a), mapping(map), _ir(nullptr) { }
 
   void emit(Module *m);
   void doCodeGen(Module *m);
diff --git a/gen/dcompute/targetOCL.cpp b/gen/dcompute/targetOCL.cpp
index 3b65934..1a45cb0 100644
--- a/gen/dcompute/targetOCL.cpp
+++ b/gen/dcompute/targetOCL.cpp
@@ -91,7 +91,9 @@ public:
       KernArgMD_type,
       KernArgMD_base_type,
       KernArgMD_type_qual,
-      KernArgMD_name
+      KernArgMD_name,
+      count_KernArgMD
+      
   };
   void addKernelMetadata(FuncDeclaration *fd, llvm::Function *llf) override {
     // By the time we get here the ABI should have rewritten the function
@@ -100,13 +102,13 @@ public:
 
     // Fix 3.5.2 build failures. Remove when dropping 3.5 support.
 #if LDC_LLVM_VER >= 306
-
+    unsigned i = 0;
     // TODO: Handle Function attibutes
     llvm::SmallVector<llvm::Metadata *, 8> kernelMDArgs;
     kernelMDArgs.push_back(llvm::ConstantAsMetadata::get(llf));
     // MDNode for the kernel argument address space qualifiers.
-    llvm::SmallVector<llvm::SmallVector<llvm::Metadata *, 8>,6> paramArgs;
-    llvm::SmallVector<const char*,6> args = {
+    std::array<llvm::SmallVector<llvm::Metadata *, 8>,count_KernArgMD> paramArgs;
+    std::array<const char*,count_KernArgMD> args = {
       "kernel_arg_addr_space",
       "kernel_arg_access_qual",
       "kernel_arg_type",
@@ -115,19 +117,18 @@ public:
       "kernel_arg_name"
     };
       
-    for (auto &str : args) {
-      llvm::SmallVector<llvm::Metadata *, 8> tmp;
-      tmp.push_back(llvm::MDString::get(ctx, str));
-      paramArgs.push_back(tmp);
+    for (auto md : args) {
+      paramArgs[i].push_back(llvm::MDString::get(ctx, md));
+      i++;
     }
 
     VarDeclarations *vs = fd->parameters;
-    for (unsigned i = 0; i < vs->dim; i++) {
+    for (i = 0; i < vs->dim; i++) {
       VarDeclaration *v = (*vs)[i];
       decodeTypes(paramArgs,v);
     }
   
-    for(auto& md : paramArgs)
+    for (auto& md : paramArgs)
       kernelMDArgs.push_back(llvm::MDNode::get(ctx, md));
     ///-------------------------------
     /// TODO: Handle Function attibutes
@@ -161,10 +162,8 @@ public:
         ss << t->toChars();
     return ss.str();
   }
-
-  void decodeTypes(llvm::SmallVector<
-                        llvm::SmallVector<llvm::Metadata *, 8>,
-                    6>& attrs,
+#if LDC_LLVM_VER >= 306
+  void decodeTypes(std::array<llvm::SmallVector<llvm::Metadata *, 8>,count_KernArgMD> attrs,
                    VarDeclaration *v)
   {
     llvm::Optional<DcomputePointer> ptr;
@@ -173,7 +172,8 @@ public:
     std::string tyName;
     std::string accessQual = "none";
     int addrspace = 0;
-    if (v->type->ty == Tstruct && (ptr = toDcomputePointer(static_cast<TypeStruct*>(v->type)->sym)))
+    if (v->type->ty == Tstruct &&
+        (ptr = toDcomputePointer(static_cast<TypeStruct*>(v->type)->sym)))
     {
       addrspace = ptr->addrspace;
       tyName = basicTypeToString(ptr->type) + "*";
@@ -188,7 +188,7 @@ public:
       baseTyName = tyName;
       typeQuals = mod2str(v->type->mod);
     }
-#if LDC_LLVM_VER >= 306
+
     attrs[KernArgMD_addr_space].push_back( // i32 addrspace
         llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(
             llvm::IntegerType::get(ctx, 32), addrspace)));
@@ -197,8 +197,8 @@ public:
     attrs[KernArgMD_base_type].push_back(llvm::MDString::get(ctx, baseTyName));
     attrs[KernArgMD_type_qual].push_back(llvm::MDString::get(ctx, typeQuals));
     attrs[KernArgMD_name].push_back(llvm::MDString::get(ctx, v->ident->toChars()));
-#endif
   }
+#endif
 };
 } // anonymous namespace.
 

-- 
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