Lines Matching defs:Stmt

64 Value *BlockGenerator::trySynthesizeNewValue(ScopStmt &Stmt, Value *Old,
82 Scop &S = *Stmt.getParent();
96 Value *BlockGenerator::getNewValue(ScopStmt &Stmt, Value *Old, ValueMapT &BBMap,
126 auto VUse = VirtualUse::create(&Stmt, L, Old, true);
191 New = trySynthesizeNewValue(Stmt, Old, BBMap, LTS, L);
213 void BlockGenerator::copyInstScalar(ScopStmt &Stmt, Instruction *Inst,
226 getNewValue(Stmt, OldOperand, BBMap, LTS, getLoopForStmt(Stmt));
251 BlockGenerator::generateLocationAccessed(ScopStmt &Stmt, MemAccInst Inst,
254 const MemoryAccess &MA = Stmt.getArrayAccessFor(Inst);
256 Stmt, getLoopForStmt(Stmt),
262 ScopStmt &Stmt, Loop *L, Value *Pointer, ValueMapT &BBMap,
274 return getNewValue(Stmt, Pointer, BBMap, LTS, L);
289 Loop *BlockGenerator::getLoopForStmt(const ScopStmt &Stmt) const {
290 auto *StmtBB = Stmt.getEntryBlock();
294 Value *BlockGenerator::generateArrayLoad(ScopStmt &Stmt, LoadInst *Load,
301 generateLocationAccessed(Stmt, Load, BBMap, LTS, NewAccesses);
313 void BlockGenerator::generateArrayStore(ScopStmt &Stmt, StoreInst *Store,
316 MemoryAccess &MA = Stmt.getArrayAccessFor(Store);
320 generateConditionalExecution(Stmt, AccDom, Subject.c_str(), [&, this]() {
322 generateLocationAccessed(Stmt, Store, BBMap, LTS, NewAccesses);
323 Value *ValueOperand = getNewValue(Stmt, Store->getValueOperand(), BBMap,
324 LTS, getLoopForStmt(Stmt));
334 bool BlockGenerator::canSyntheziseInStmt(ScopStmt &Stmt, Instruction *Inst) {
335 Loop *L = getLoopForStmt(Stmt);
336 return (Stmt.isBlockStmt() || !Stmt.getRegion()->contains(L)) &&
337 canSynthesize(Inst, *Stmt.getParent(), &SE, L);
340 void BlockGenerator::copyInstruction(ScopStmt &Stmt, Instruction *Inst,
349 if (canSyntheziseInStmt(Stmt, Inst))
353 Value *NewLoad = generateArrayLoad(Stmt, Load, BBMap, LTS, NewAccesses);
362 if (!Stmt.getArrayAccessOrNULLFor(Store))
365 generateArrayStore(Stmt, Store, BBMap, LTS, NewAccesses);
370 copyPHIInstruction(Stmt, PHI, BBMap, LTS);
379 copyInstScalar(Stmt, Inst, BBMap, LTS);
400 void BlockGenerator::copyStmt(ScopStmt &Stmt, LoopToScevMapT &LTS,
402 assert(Stmt.isBlockStmt() &&
407 BasicBlock *BB = Stmt.getBasicBlock();
408 copyBB(Stmt, BB, BBMap, LTS, NewAccesses);
419 BasicBlock *BlockGenerator::copyBB(ScopStmt &Stmt, BasicBlock *BB,
424 generateScalarLoads(Stmt, LTS, BBMap, NewAccesses);
425 generateBeginStmtTrace(Stmt, LTS, BBMap);
427 copyBB(Stmt, BB, CopyBB, BBMap, LTS, NewAccesses);
431 generateScalarStores(Stmt, LTS, BBMap, NewAccesses);
446 void BlockGenerator::copyBB(ScopStmt &Stmt, BasicBlock *BB, BasicBlock *CopyBB,
454 if (Stmt.isBlockStmt() || (Stmt.isRegionStmt() && Stmt.getEntryBlock() == BB))
455 for (Instruction *Inst : Stmt.getInstructions())
456 copyInstruction(Stmt, Inst, BBMap, LTS, NewAccesses);
459 copyInstruction(Stmt, &Inst, BBMap, LTS, NewAccesses);
551 ScopStmt &Stmt, LoopToScevMapT &LTS, ValueMapT &BBMap,
553 for (MemoryAccess *MA : Stmt) {
559 Stmt.getDomain().intersect_params(Stmt.getParent()->getContext());
566 getImplicitAddress(*MA, getLoopForStmt(Stmt), LTS, BBMap, NewAccesses);
572 Value *BlockGenerator::buildContainsCondition(ScopStmt &Stmt,
574 isl::ast_build AstBuild = Stmt.getAstBuild();
575 isl::set Domain = Stmt.getDomain();
597 ScopStmt &Stmt, const isl::set &Subdomain, StringRef Subject,
599 isl::set StmtDom = Stmt.getDomain();
604 !StmtDom.intersect_params(Stmt.getParent()->getContext())
612 Value *Cond = buildContainsCondition(Stmt, Subdomain);
651 void BlockGenerator::generateBeginStmtTrace(ScopStmt &Stmt, LoopToScevMapT &LTS,
656 Scop *S = Stmt.getParent();
657 const char *BaseName = Stmt.getBaseName();
659 isl::ast_build AstBuild = Stmt.getAstBuild();
660 isl::set Domain = Stmt.getDomain();
695 for (Instruction *Inst : Stmt.insts()) {
704 Values.push_back(getNewValue(Stmt, Inst, BBMap, LTS,
727 Values.push_back(getNewValue(Stmt, OpInst, BBMap, LTS,
745 ScopStmt &Stmt, LoopToScevMapT &LTS, ValueMapT &BBMap,
747 Loop *L = LI.getLoopFor(Stmt.getBasicBlock());
749 assert(Stmt.isBlockStmt() &&
753 for (MemoryAccess *MA : Stmt) {
761 Stmt, AccDom, Subject.c_str(), [&, this, MA]() {
771 return p.first == Stmt.getBasicBlock();
776 auto Address = getImplicitAddress(*MA, getLoopForStmt(Stmt), LTS,
779 Val = getNewValue(Stmt, Val, BBMap, LTS, L);
962 for (auto &Stmt : S)
963 if (Stmt.isCopyStmt())
965 else if (Stmt.isBlockStmt())
966 for (auto &Inst : *Stmt.getBasicBlock())
968 else if (Stmt.isRegionStmt())
969 for (auto *BB : Stmt.getRegion()->blocks())
1052 void RegionGenerator::copyStmt(ScopStmt &Stmt, LoopToScevMapT &LTS,
1054 assert(Stmt.isRegionStmt() &&
1067 Region *R = Stmt.getRegion();
1078 generateScalarLoads(Stmt, LTS, EntryBBMap, IdToAstExp);
1079 generateBeginStmtTrace(Stmt, LTS, EntryBBMap);
1116 copyBB(Stmt, BB, BBCopy, RegionMap, LTS, IdToAstExp);
1124 addOperandToPHI(Stmt, PHINodePair.first, PHINodePair.second, BB, LTS);
1170 copyInstScalar(Stmt, TI, RegionMap, LTS);
1210 generateScalarStores(Stmt, LTS, ValueMap, IdToAstExp);
1219 ScopStmt *Stmt = MA->getStatement();
1220 Region *SubR = Stmt->getRegion();
1251 getNewValue(*Stmt, OrigIncomingValue, *LocalBBMap, LTS, L);
1260 ScopStmt *Stmt = MA->getStatement();
1263 Loop *L = LI.getLoopFor(Stmt->getRegion()->getExit());
1273 return getNewValue(*Stmt, OldVal, BBMap, LTS, L);
1282 return getNewValue(*Stmt, OldVal, BBMap, LTS, L);
1286 ScopStmt &Stmt, LoopToScevMapT &LTS, ValueMapT &BBMap,
1288 assert(Stmt.getRegion() &&
1300 for (MemoryAccess *MA : Stmt) {
1308 for (MemoryAccess *MA : Stmt) {
1315 Stmt, AccDom, Subject.c_str(), [&, this, MA]() {
1318 Value *Address = getImplicitAddress(*MA, getLoopForStmt(Stmt), LTS,
1333 void RegionGenerator::addOperandToPHI(ScopStmt &Stmt, PHINode *PHI,
1342 assert(Stmt.represents(IncomingBB) &&
1354 if (Stmt.represents(IncomingBB)) {
1362 OpCopy = getNewValue(Stmt, Op, BBCopyMap, LTS, getLoopForStmt(Stmt));
1374 OpCopy = getNewValue(Stmt, PHI, BBCopyMap, LTS, getLoopForStmt(Stmt));
1381 void RegionGenerator::copyPHIInstruction(ScopStmt &Stmt, PHINode *PHI,
1391 addOperandToPHI(Stmt, PHI, PHICopy, IncomingBB, LTS);