Lines Matching +full:actions +full:- +full:builder

1 //===-- HostAssociations.cpp ----------------------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
10 #include "flang/Evaluate/check-expression.h"
20 #include "flang/Optimizer/Builder/Character.h"
21 #include "flang/Optimizer/Builder/FIRBuilder.h"
22 #include "flang/Optimizer/Builder/Todo.h"
29 #define DEBUG_TYPE "flang-host-assoc"
41 // CapturedXXX classes define each of these three actions for a specific
59 // If a new kind of variable requires ad-hoc handling, a new CapturedXXX class
66 if (const auto *derived = declTy->AsDerived()) in isDerivedWithLenParameters()
163 fir::FirOpBuilder &builder = converter.getFirOpBuilder(); in instantiateHostTuple() local
166 mlir::Value castBox = builder.createConvert(args.loc, typeInTuple, in instantiateHostTuple()
168 builder.create<fir::StoreOp>(args.loc, castBox, args.addrInTuple); in instantiateHostTuple()
194 fir::FirOpBuilder &builder = converter.getFirOpBuilder(); in instantiateHostTuple() local
197 mlir::Value castBox = builder.createConvert(args.loc, typeInTuple, in instantiateHostTuple()
199 builder.create<fir::StoreOp>(args.loc, castBox, args.addrInTuple); in instantiateHostTuple()
231 fir::FirOpBuilder &builder = converter.getFirOpBuilder(); in instantiateHostTuple() local
232 mlir::Value boxchar = fir::factory::CharacterExprHelper(builder, args.loc) in instantiateHostTuple()
234 builder.create<fir::StoreOp>(args.loc, boxchar, args.addrInTuple); in instantiateHostTuple()
264 fir::FirOpBuilder &builder = converter.getFirOpBuilder(); in instantiateHostTuple() local
268 mlir::Value castBox = builder.createConvert(args.loc, typeInTuple, in instantiateHostTuple()
272 builder.create<fir::IsPresentOp>(loc, builder.getI1Type(), castBox); in instantiateHostTuple()
273 builder.genIfThenElse(loc, isPresent) in instantiateHostTuple()
275 builder.create<fir::StoreOp>(loc, castBox, args.addrInTuple); in instantiateHostTuple()
279 builder, loc, typeInTuple, in instantiateHostTuple()
281 builder.create<fir::StoreOp>(loc, null, args.addrInTuple); in instantiateHostTuple()
285 builder.create<fir::StoreOp>(loc, castBox, args.addrInTuple); in instantiateHostTuple()
292 fir::FirOpBuilder &builder = converter.getFirOpBuilder(); in getFromTuple() local
299 eleTy = builder.getRefType(eleTy); in getFromTuple()
300 auto addr = builder.create<fir::BoxAddrOp>(loc, eleTy, box); in getFromTuple()
301 mlir::Value isPresent = builder.genIsNotNullAddr(loc, addr); in getFromTuple()
302 auto absentBox = builder.create<fir::AbsentOp>(loc, boxTy); in getFromTuple()
304 builder.create<mlir::arith::SelectOp>(loc, isPresent, box, absentBox); in getFromTuple()
329 fir::FirOpBuilder &builder = converter.getFirOpBuilder(); in instantiateHostTuple() local
332 mlir::Value castBox = builder.createConvert(args.loc, typeInTuple, in instantiateHostTuple()
334 builder.create<fir::StoreOp>(args.loc, castBox, args.addrInTuple); in instantiateHostTuple()
340 fir::FirOpBuilder &builder = converter.getFirOpBuilder(); in getFromTuple() local
349 mlir::IndexType idxTy = builder.getIndexType(); in getFromTuple()
352 builder.createIntegerConstant(loc, idxTy, *len)); in getFromTuple()
357 builder, loc, sym, args.valueInTuple)); in getFromTuple()
369 /// Class defining how arrays, including assumed-ranks, are captured inside
396 fir::FirOpBuilder &builder = converter.getFirOpBuilder(); in instantiateHostTuple() local
407 auto isPresent = builder.create<fir::IsPresentOp>( in instantiateHostTuple()
408 loc, builder.getI1Type(), fir::getBase(args.hostValue)); in instantiateHostTuple()
409 builder.genIfThenElse(loc, isPresent) in instantiateHostTuple()
411 fir::factory::associateMutableBox(builder, loc, boxInTuple, in instantiateHostTuple()
416 fir::factory::disassociateMutableBox(builder, loc, boxInTuple); in instantiateHostTuple()
421 builder, loc, boxInTuple, args.hostValue, /*lbounds=*/std::nullopt); in instantiateHostTuple()
429 fir::FirOpBuilder &builder = converter.getFirOpBuilder(); in getFromTuple() local
432 mlir::IndexType idxTy = builder.getIndexType(); in getFromTuple()
437 lbounds.emplace_back(builder.createIntegerConstant(loc, idxTy, lb)); in getFromTuple()
439 // Cannot re-evaluate specification expressions here. in getFromTuple()
443 mlir::Value dimVal = builder.createIntegerConstant(loc, idxTy, dim); in getFromTuple()
444 auto dims = builder.create<fir::BoxDimsOp>(loc, idxTy, idxTy, idxTy, in getFromTuple()
454 fir::factory::readBoxValue(builder, loc, boxValue), in getFromTuple()
466 eleTy = builder.getRefType(eleTy); in getFromTuple()
467 auto addr = builder.create<fir::BoxAddrOp>(loc, eleTy, box); in getFromTuple()
468 mlir::Value isPresent = builder.genIsNotNullAddr(loc, addr); in getFromTuple()
469 auto absentBox = builder.create<fir::AbsentOp>(loc, boxTy); in getFromTuple()
470 box = builder.create<mlir::arith::SelectOp>(loc, isPresent, box, in getFromTuple()
490 bool isPolymorphic = type && type->IsPolymorphic(); in canReadCapturedBoxValue()
519 if (ba.isArray()) // include assumed-ranks. in walkCaptureCategories()
535 static mlir::Value genTupleCoor(fir::FirOpBuilder &builder, mlir::Location loc, in genTupleCoor() argument
542 : mlir::Type(builder.getRefType(varTy)); in genTupleCoor()
543 return builder.create<fir::CoordinateOp>(loc, ty, tupleArg, offset); in genTupleCoor()
551 this->hostScope = &hostScope; in addSymbolsToBind()
553 // GlobalOp are created for non-global threadprivate variable, in addSymbolsToBind()
559 globalSymbols.insert(&s->GetUltimate()); in addSymbolsToBind()
573 fir::FirOpBuilder &builder = converter.getFirOpBuilder(); in hostProcedureBindings() local
575 auto hostTuple = builder.create<fir::AllocaOp>(loc, tupTy); in hostProcedureBindings()
576 mlir::IntegerType offTy = builder.getIntegerType(32); in hostProcedureBindings()
581 mlir::Value off = builder.createIntegerConstant(loc, offTy, indexInTuple); in hostProcedureBindings()
583 mlir::Value eleOff = genTupleCoor(builder, loc, varTy, hostTuple, off); in hostProcedureBindings()
618 fir::FirOpBuilder &builder = converter.getFirOpBuilder(); in internalProcedureBindings() local
622 mlir::func::FuncOp func = builder.getFunction(); in internalProcedureBindings()
635 mlir::IntegerType offTy = builder.getIntegerType(32); in internalProcedureBindings()
639 mlir::Value off = builder.createIntegerConstant(loc, offTy, s.index()); in internalProcedureBindings()
641 mlir::Value eleOff = genTupleCoor(builder, loc, varTy, tupleArg, off); in internalProcedureBindings()
642 mlir::Value valueInTuple = builder.create<fir::LoadOp>(loc, eleOff); in internalProcedureBindings()