Lines Matching defs:reduce

40 ///     scf.reduce.return %0
72 /// scf.reduce.return %1
185 /// over from `reduce`.
188 scf::ReduceOp reduce, int64_t reductionIndex, Attribute initValue) {
190 Type type = reduce.getOperands()[reductionIndex].getType();
191 auto decl = builder.create<omp::DeclareReductionOp>(reduce.getLoc(),
197 {reduce.getOperands()[reductionIndex].getLoc()});
200 builder.create<LLVM::ConstantOp>(reduce.getLoc(), type, initValue);
201 builder.create<omp::YieldOp>(reduce.getLoc(), init);
204 &reduce.getReductions()[reductionIndex].front().back();
206 "expected reduce op to be terminated by redure return");
210 builder.inlineRegionBefore(reduce.getReductions()[reductionIndex],
221 scf::ReduceOp reduce,
225 Location reduceOperandLoc = reduce.getOperands()[reductionIndex].getLoc();
231 Value loaded = builder.create<LLVM::LoadOp>(reduce.getLoc(), decl.getType(),
233 builder.create<LLVM::AtomicRMWOp>(reduce.getLoc(), atomicKind,
236 builder.create<omp::YieldOp>(reduce.getLoc(), ArrayRef<Value>());
245 scf::ReduceOp reduce,
247 Operation *container = SymbolTable::getNearestSymbolTable(reduce);
252 Operation *insertionPoint = reduce;
258 assert(llvm::hasSingleElement(reduce.getReductions()[reductionIndex]) &&
262 Type type = reduce.getOperands()[reductionIndex].getType();
263 Block &reduction = reduce.getReductions()[reductionIndex].front();
266 createDecl(builder, symbolTable, reduce, reductionIndex,
268 return addAtomicRMW(builder, LLVM::AtomicBinOp::fadd, decl, reduce,
273 createDecl(builder, symbolTable, reduce, reductionIndex,
275 return addAtomicRMW(builder, LLVM::AtomicBinOp::add, decl, reduce,
280 createDecl(builder, symbolTable, reduce, reductionIndex,
282 return addAtomicRMW(builder, LLVM::AtomicBinOp::_or, decl, reduce,
287 createDecl(builder, symbolTable, reduce, reductionIndex,
289 return addAtomicRMW(builder, LLVM::AtomicBinOp::_xor, decl, reduce,
294 builder, symbolTable, reduce, reductionIndex,
297 return addAtomicRMW(builder, LLVM::AtomicBinOp::_and, decl, reduce,
305 return createDecl(builder, symbolTable, reduce, reductionIndex,
309 return createDecl(builder, symbolTable, reduce, reductionIndex,
321 return createDecl(builder, symbolTable, reduce, reductionIndex,
331 createDecl(builder, symbolTable, reduce, reductionIndex,
335 decl, reduce, reductionIndex);
344 createDecl(builder, symbolTable, reduce, reductionIndex,
348 decl, reduce, reductionIndex);
371 auto reduce = cast<scf::ReduceOp>(parallelOp.getBody()->getTerminator());
373 omp::DeclareReductionOp decl = declareReduction(rewriter, reduce, i);
404 reductionVariables, reduce.getOperands(), ompReductionDecls)) {
406 rewriter.setInsertionPoint(reduce);
415 Value pvtRedVal = rewriter.create<LLVM::LoadOp>(reduce.getLoc(),
419 builder.setInsertionPoint(reduce);
437 rewriter.eraseOp(reduce);
473 // false because these reductions always reduce scalars and so do