bool preloadInvariantEquivClass(InvariantEquivClassTy &IAClass);
void createForVector(__isl_take isl_ast_node *For, int VectorWidth);
- void createForSequential(__isl_take isl_ast_node *For, bool KnownParallel);
+ void createForSequential(__isl_take isl_ast_node *For, bool MarkParallel);
/// Create LLVM-IR that executes a for node thread parallel.
///
}
void IslNodeBuilder::createForSequential(__isl_take isl_ast_node *For,
- bool KnownParallel) {
+ bool MarkParallel) {
isl_ast_node *Body;
isl_ast_expr *Init, *Inc, *Iterator, *UB;
isl_id *IteratorID;
BasicBlock *ExitBlock;
Value *IV;
CmpInst::Predicate Predicate;
- bool Parallel;
-
- Parallel = KnownParallel || (IslAstInfo::isParallel(For) &&
- !IslAstInfo::isReductionParallel(For));
bool LoopVectorizerDisabled =
IsLoopVectorizerDisabled(isl::manage(isl_ast_node_copy(For)));
bool UseGuardBB =
!SE.isKnownPredicate(Predicate, SE.getSCEV(ValueLB), SE.getSCEV(ValueUB));
IV = createLoop(ValueLB, ValueUB, ValueInc, Builder, LI, DT, ExitBlock,
- Predicate, &Annotator, Parallel, UseGuardBB,
+ Predicate, &Annotator, MarkParallel, UseGuardBB,
LoopVectorizerDisabled);
IDToValue[IteratorID] = IV;
create(Body);
- Annotator.popLoop(Parallel);
+ Annotator.popLoop(MarkParallel);
IDToValue.erase(IDToValue.find(IteratorID));
createForParallel(For);
return;
}
- createForSequential(For, false);
+ bool Parallel =
+ (IslAstInfo::isParallel(For) && !IslAstInfo::isReductionParallel(For));
+ createForSequential(For, Parallel);
}
void IslNodeBuilder::createIf(__isl_take isl_ast_node *If) {
/// @param UserStmt The ast node to generate code for.
virtual void createUser(__isl_take isl_ast_node *UserStmt);
+ virtual void createFor(__isl_take isl_ast_node *Node);
+
enum DataDirection { HOST_TO_DEVICE, DEVICE_TO_HOST };
/// Create code for a data transfer statement
isl_ast_node_free(UserStmt);
return;
}
+
+void GPUNodeBuilder::createFor(__isl_take isl_ast_node *Node) {
+ createForSequential(Node, false);
+}
+
void GPUNodeBuilder::createKernelCopy(ppcg_kernel_stmt *KernelStmt) {
isl_ast_expr *LocalIndex = isl_ast_expr_copy(KernelStmt->u.c.local_index);
LocalIndex = isl_ast_expr_address_of(LocalIndex);