[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