diff options
Diffstat (limited to 'polly/lib/CodeGen')
-rw-r--r-- | polly/lib/CodeGen/IslExprBuilder.cpp | 7 | ||||
-rw-r--r-- | polly/lib/CodeGen/PPCGCodeGeneration.cpp | 14 |
2 files changed, 11 insertions, 10 deletions
diff --git a/polly/lib/CodeGen/IslExprBuilder.cpp b/polly/lib/CodeGen/IslExprBuilder.cpp index 75e35076dde..30f4b0b4b29 100644 --- a/polly/lib/CodeGen/IslExprBuilder.cpp +++ b/polly/lib/CodeGen/IslExprBuilder.cpp @@ -212,7 +212,7 @@ Value *IslExprBuilder::createAccessAddress(isl_ast_expr *Expr) { "isl ast expression not of type isl_ast_op"); assert(isl_ast_expr_get_op_type(Expr) == isl_ast_op_access && "not an access isl ast expression"); - assert(isl_ast_expr_get_op_n_arg(Expr) >= 2 && + assert(isl_ast_expr_get_op_n_arg(Expr) >= 1 && "We need at least two operands to create a member access."); Value *Base, *IndexOp, *Access; @@ -250,6 +250,11 @@ Value *IslExprBuilder::createAccessAddress(isl_ast_expr *Expr) { Builder.CreateBitCast(Base, PointerTy, "polly.access.cast." + BaseName); } + if (isl_ast_expr_get_op_n_arg(Expr) == 1) { + isl_ast_expr_free(Expr); + return Base; + } + IndexOp = nullptr; for (unsigned u = 1, e = isl_ast_expr_get_op_n_arg(Expr); u < e; u++) { Value *NextIndex = create(isl_ast_expr_get_op_arg(Expr, u)); diff --git a/polly/lib/CodeGen/PPCGCodeGeneration.cpp b/polly/lib/CodeGen/PPCGCodeGeneration.cpp index 8b6679b1abf..481e20b54b7 100644 --- a/polly/lib/CodeGen/PPCGCodeGeneration.cpp +++ b/polly/lib/CodeGen/PPCGCodeGeneration.cpp @@ -1252,16 +1252,12 @@ void GPUNodeBuilder::createKernelVariables(ppcg_kernel *Kernel, Function *FN) { isl_id *Id = isl_space_get_tuple_id(Var.array->space, isl_dim_set); Type *EleTy = ScopArrayInfo::getFromId(Id)->getElementType(); + Type *ArrayTy = EleTy; SmallVector<const SCEV *, 4> Sizes; - isl_val *V0 = isl_vec_get_element_val(Var.size, 0); - long Bound = isl_val_get_num_si(V0); - isl_val_free(V0); - Sizes.push_back(S.getSE()->getConstant(Builder.getInt64Ty(), Bound)); - ArrayType *ArrayTy = ArrayType::get(EleTy, Bound); - for (unsigned int j = 1; j < Var.array->n_index; ++j) { + for (unsigned int j = 0; j < Var.array->n_index; ++j) { isl_val *Val = isl_vec_get_element_val(Var.size, j); - Bound = isl_val_get_num_si(Val); + long Bound = isl_val_get_num_si(Val); isl_val_free(Val); Sizes.push_back(S.getSE()->getConstant(Builder.getInt64Ty(), Bound)); ArrayTy = ArrayType::get(ArrayTy, Bound); @@ -1274,8 +1270,8 @@ void GPUNodeBuilder::createKernelVariables(ppcg_kernel *Kernel, Function *FN) { *M, ArrayTy, false, GlobalValue::InternalLinkage, 0, Var.name, nullptr, GlobalValue::ThreadLocalMode::NotThreadLocal, 3); GlobalVar->setAlignment(EleTy->getPrimitiveSizeInBits() / 8); - ConstantAggregateZero *Zero = ConstantAggregateZero::get(ArrayTy); - GlobalVar->setInitializer(Zero); + GlobalVar->setInitializer(Constant::getNullValue(ArrayTy)); + Allocation = GlobalVar; } else if (Var.type == ppcg_access_private) { Allocation = Builder.CreateAlloca(ArrayTy, 0, "private_array"); |