[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