diff --git a/gen/arrays.cpp b/gen/arrays.cpp index 1b319e20fb..716026331a 100644 --- a/gen/arrays.cpp +++ b/gen/arrays.cpp @@ -453,7 +453,7 @@ LLConstant *DtoConstArrayInitializer(ArrayInitializer *arrinit, return gvar; } - return DtoConstSlice(DtoConstSize_t(arrlen), gvar, arrty); + return DtoConstSlice(DtoConstSize_t(arrlen), gvar); } //////////////////////////////////////////////////////////////////////////////// @@ -618,11 +618,10 @@ void initializeArrayLiteral(IRState *p, ArrayLiteralExp *ale, } //////////////////////////////////////////////////////////////////////////////// -LLConstant *DtoConstSlice(LLConstant *dim, LLConstant *ptr, Type *type) { +LLConstant *DtoConstSlice(LLConstant *dim, LLConstant *ptr) { LLConstant *values[2] = {dim, ptr}; LLStructType *lltype = - type ? isaStruct(DtoType(type)) - : LLConstantStruct::getTypeForElements(gIR->context(), values); + LLConstantStruct::getTypeForElements(gIR->context(), values); return LLConstantStruct::get(lltype, values); } diff --git a/gen/arrays.h b/gen/arrays.h index 866b6203f9..9e38cb7fa4 100644 --- a/gen/arrays.h +++ b/gen/arrays.h @@ -35,8 +35,7 @@ llvm::ArrayType *DtoStaticArrayType(Type *sarrayTy); LLConstant *DtoConstArrayInitializer(ArrayInitializer *si, Type *targetType, const bool isCfile); -LLConstant *DtoConstSlice(LLConstant *dim, LLConstant *ptr, - Type *type = nullptr); +LLConstant *DtoConstSlice(LLConstant *dim, LLConstant *ptr); /// Returns the element at position idx of the literal (assumed to be in range). Expression *indexArrayLiteral(ArrayLiteralExp *ale, unsigned idx); diff --git a/gen/modules.cpp b/gen/modules.cpp index 8b20e21844..cf7d6cbe7b 100644 --- a/gen/modules.cpp +++ b/gen/modules.cpp @@ -234,11 +234,8 @@ void addCoverageAnalysis(Module *m) { m->d_cover_valid = new llvm::GlobalVariable( gIR->module, type, /*isConstant=*/true, LLGlobalValue::InternalLinkage, zeroinitializer, "_d_cover_valid"); - LLConstant *idxs[] = {DtoConstUint(0), DtoConstUint(0)}; - d_cover_valid_slice = - DtoConstSlice(DtoConstSize_t(type->getArrayNumElements()), - llvm::ConstantExpr::getGetElementPtr( - type, m->d_cover_valid, idxs, true)); + d_cover_valid_slice = DtoConstSlice( + DtoConstSize_t(type->getArrayNumElements()), m->d_cover_valid); // Assert that initializer array elements have enough bits assert(sizeof(m->d_cover_valid_init[0]) * 8 >= @@ -269,9 +266,8 @@ void addCoverageAnalysis(Module *m) { LLGlobalValue::InternalLinkage, init, "_d_cover_data"); - d_cover_data_slice = DtoConstSlice(DtoConstSize_t(m->numlines), - DtoGEP(m->d_cover_data->getValueType(), - m->d_cover_data, 0, 0)); + d_cover_data_slice = + DtoConstSlice(DtoConstSize_t(m->numlines), m->d_cover_data); } // Create "static constructor" that calls _d_cover_register2(string filename, diff --git a/gen/tocall.cpp b/gen/tocall.cpp index cb03da576c..320ea40696 100644 --- a/gen/tocall.cpp +++ b/gen/tocall.cpp @@ -16,6 +16,7 @@ #include "dmd/target.h" #include "dmd/template.h" #include "gen/abi/abi.h" +#include "gen/arrays.h" #include "gen/classes.h" #include "gen/dvalue.h" #include "gen/funcgenstate.h" @@ -237,18 +238,7 @@ static LLValue *getTypeinfoArrayArgumentForDVarArg(Expressions *argexps, LLConstant *tiinits = LLConstantArray::get(typeinfoarraytype, vtypeinfos); typeinfomem->setInitializer(tiinits); - // put data in d-array - LLConstant *pinits[] = { - DtoConstSize_t(numVariadicArgs), - llvm::ConstantExpr::getBitCast(typeinfomem, getPtrToType(typeinfotype))}; - LLType *tiarrty = DtoType(arrayOf(getTypeInfoType())); - tiinits = LLConstantStruct::get(isaStruct(tiarrty), - llvm::ArrayRef(pinits)); - LLValue *typeinfoarrayparam = new llvm::GlobalVariable( - gIR->module, tiarrty, true, llvm::GlobalValue::InternalLinkage, tiinits, - "._arguments.array"); - - return DtoLoad(tiarrty, typeinfoarrayparam); + return DtoConstSlice(DtoConstSize_t(numVariadicArgs), typeinfomem); } //////////////////////////////////////////////////////////////////////////////// diff --git a/gen/toconstelem.cpp b/gen/toconstelem.cpp index 58a63a66f2..20bf699a6f 100644 --- a/gen/toconstelem.cpp +++ b/gen/toconstelem.cpp @@ -180,8 +180,7 @@ public: if (t->ty == TY::Tpointer) { result = arrptr; } else if (t->ty == TY::Tarray) { - LLConstant *clen = LLConstantInt::get(DtoSize_t(), e->len, false); - result = DtoConstSlice(clen, arrptr, e->type); + result = DtoConstSlice(DtoConstSize_t(e->len), arrptr); } else { llvm_unreachable("Unknown type for StringExp."); } diff --git a/gen/toir.cpp b/gen/toir.cpp index d059ec3ebb..212c26d1ca 100644 --- a/gen/toir.cpp +++ b/gen/toir.cpp @@ -442,8 +442,8 @@ public: LLConstant *arrptr = DtoGEP(gvar->getValueType(), gvar, 0u, 0u); if (dtype->ty == TY::Tarray) { - LLConstant *clen = LLConstantInt::get(DtoSize_t(), stringLength, false); - result = new DSliceValue(e->type, DtoConstSlice(clen, arrptr, dtype)); + result = new DSliceValue( + e->type, DtoConstSlice(DtoConstSize_t(stringLength), arrptr)); } else if (dtype->ty == TY::Tsarray) { // array length matches string length with or without null terminator result = new DLValue(e->type, gvar); diff --git a/gen/tollvm.cpp b/gen/tollvm.cpp index 79eb1f07a1..0d88976b6f 100644 --- a/gen/tollvm.cpp +++ b/gen/tollvm.cpp @@ -509,7 +509,7 @@ LLConstant *DtoConstCString(const char *str) { LLConstant *DtoConstString(const char *str) { LLConstant *cString = DtoConstCString(str); LLConstant *length = DtoConstSize_t(str ? strlen(str) : 0); - return DtoConstSlice(length, cString, arrayOf(Type::tchar)); + return DtoConstSlice(length, cString); } ////////////////////////////////////////////////////////////////////////////////