Lines Matching defs:builder

30                                    fir::FirOpBuilder &builder) {
44 mlir::Type indexTy = builder.getIndexType();
51 auto op = builder.create<hlfir::GetExtentOp>(shape.getLoc(), shape, i);
55 builder.createIntegerConstant(shape.getLoc(), indexTy, extent);
66 fir::FirOpBuilder &builder) {
68 return hlfir::getExplicitExtentsFromShape(var.getShape(), builder);
99 genLboundsAndExtentsFromBox(mlir::Location loc, fir::FirOpBuilder &builder,
104 mlir::Type idxTy = builder.getIndexType();
107 mlir::Value dim = builder.createIntegerConstant(loc, idxTy, i);
108 auto dimInfo = builder.create<fir::BoxDimsOp>(loc, idxTy, idxTy, idxTy,
117 getNonDefaultLowerBounds(mlir::Location loc, fir::FirOpBuilder &builder,
129 entity = hlfir::derefPointersAndAllocatables(loc, builder, entity);
131 genLboundsAndExtentsFromBox(loc, builder, entity, lowerBounds,
156 fir::FirOpBuilder &builder,
162 return builder.createIntegerConstant(loc, builder.getIndexType(),
165 var = hlfir::Entity{builder.create<fir::LoadOp>(loc, var)};
166 mlir::Value len = fir::factory::CharacterExprHelper{builder, loc}.getLength(
173 fir::FirOpBuilder &builder,
179 auto unboxed = builder.create<fir::UnboxCharOp>(
180 loc, refType, builder.getIndexType(), boxChar);
225 hlfir::genDeclare(mlir::Location loc, fir::FirOpBuilder &builder,
240 shapeOrShift = builder.createShape(loc, exv);
243 shapeOrShift = builder.createShape(loc, exv);
248 shapeOrShift = builder.createShape(loc, exv);
257 auto declareOp = builder.create<hlfir::DeclareOp>(
263 hlfir::genAssociateExpr(mlir::Location loc, fir::FirOpBuilder &builder,
270 shape = genShape(loc, builder, value);
284 source = builder.createConvert(loc, fir::unwrapPassByRefType(variableType),
288 genLengthParameters(loc, builder, value, lenParams);
291 return builder.create<hlfir::AssociateOp>(loc, source, shape, lenParams,
295 return builder.create<hlfir::AssociateOp>(loc, source, name, shape, lenParams,
300 fir::FirOpBuilder &builder,
305 baseAddr = builder.create<fir::LoadOp>(loc, baseAddr);
308 baseAddr = genUnboxChar(loc, builder, var.getBase()).getAddr();
310 baseAddr = builder.create<fir::BoxAddrOp>(loc, baseAddr);
315 fir::FirOpBuilder &builder,
320 mlir::Value addr = genVariableRawAddress(loc, builder, var);
322 genLengthParameters(loc, builder, var, lengths);
326 fir::BoxCharType::get(builder.getContext(), charType.getFKind());
328 builder.createConvert(loc, fir::ReferenceType::get(charType), addr);
329 return builder.create<fir::EmboxCharOp>(loc, boxCharType, scalarAddr,
334 fir::FirOpBuilder &builder,
337 var = hlfir::derefPointersAndAllocatables(loc, builder, var);
343 var.isArray() ? hlfir::genShape(loc, builder, var) : mlir::Value{};
348 hlfir::genLengthParameters(loc, builder, var, typeParams);
351 addr = genVariableRawAddress(loc, builder, var);
354 builder.create<fir::EmboxOp>(loc, boxType, addr, shape,
360 fir::FirOpBuilder &builder,
362 entity = derefPointersAndAllocatables(loc, builder, entity);
365 return Entity{builder.create<fir::LoadOp>(loc, entity)};
371 fir::FirOpBuilder &builder, Entity entity,
376 genLengthParameters(loc, builder, entity, lenParams);
378 return hlfir::Entity{builder.create<hlfir::ApplyOp>(
386 getNonDefaultLowerBounds(loc, builder, entity);
389 mlir::Type idxTy = builder.getIndexType();
390 mlir::Value one = builder.createIntegerConstant(loc, idxTy, 1);
392 auto lbIdx = builder.createConvert(loc, idxTy, lb);
393 auto oneBasedIdx = builder.createConvert(loc, idxTy, oneBased);
394 auto shift = builder.create<mlir::arith::SubIOp>(loc, lbIdx, one);
396 builder.create<mlir::arith::AddIOp>(loc, oneBasedIdx, shift);
399 designate = builder.create<hlfir::DesignateOp>(loc, resultType, entity,
402 designate = builder.create<hlfir::DesignateOp>(loc, resultType, entity,
408 static mlir::Value genUBound(mlir::Location loc, fir::FirOpBuilder &builder,
414 extent = builder.createConvert(loc, one.getType(), extent);
415 lb = builder.createConvert(loc, one.getType(), lb);
416 auto add = builder.create<mlir::arith::AddIOp>(loc, lb, extent);
417 return builder.create<mlir::arith::SubIOp>(loc, add, one);
421 hlfir::genBounds(mlir::Location loc, fir::FirOpBuilder &builder,
425 auto [exv, cleanup] = translateToExtendedValue(loc, builder, entity);
428 exv = fir::factory::genMutableBoxRead(builder, loc, *mutableBox);
429 mlir::Type idxTy = builder.getIndexType();
430 mlir::Value one = builder.createIntegerConstant(loc, idxTy, 1);
433 mlir::Value extent = fir::factory::readExtent(builder, loc, exv, dim);
434 mlir::Value lb = fir::factory::readLowerBound(builder, loc, exv, dim, one);
435 mlir::Value ub = genUBound(loc, builder, lb, extent, one);
442 hlfir::genBounds(mlir::Location loc, fir::FirOpBuilder &builder,
447 auto extents = hlfir::getExplicitExtentsFromShape(shape, builder);
450 mlir::Type idxTy = builder.getIndexType();
451 mlir::Value one = builder.createIntegerConstant(loc, idxTy, 1);
457 : genUBound(loc, builder, lb, extent.value(), one);
464 fir::FirOpBuilder &builder,
473 builder.createIntegerConstant(loc, builder.getIndexType(), 1);
493 fir::FirOpBuilder &builder,
497 mlir::Type idxTy = builder.getIndexType();
501 return builder.createIntegerConstant(loc, idxTy, typeExtent);
505 mlir::Value dimVal = builder.createIntegerConstant(loc, idxTy, dim);
506 auto dimInfo = builder.create<fir::BoxDimsOp>(loc, idxTy, idxTy, idxTy,
511 fir::FirOpBuilder &builder,
516 extents = getExplicitExtents(varIface, builder);
522 variable = hlfir::derefPointersAndAllocatables(loc, builder, variable);
530 computeVariableExtent(loc, builder, variable, seqTy, dim));
547 mlir::Value hlfir::genShape(mlir::Location loc, fir::FirOpBuilder &builder,
557 return builder.create<fir::ShapeOp>(loc, s.getExtents());
560 return builder.create<hlfir::ShapeOfOp>(loc, entity.getBase());
563 return builder.create<fir::ShapeOp>(loc,
564 getVariableExtents(loc, builder, entity));
568 hlfir::getIndexExtents(mlir::Location loc, fir::FirOpBuilder &builder,
571 hlfir::getExplicitExtentsFromShape(shape, builder);
572 mlir::Type indexType = builder.getIndexType();
574 extent = builder.createConvert(loc, indexType, extent);
578 mlir::Value hlfir::genExtent(mlir::Location loc, fir::FirOpBuilder &builder,
582 auto extents = hlfir::getExplicitExtentsFromShape(shape, builder);
590 entity = hlfir::derefPointersAndAllocatables(loc, builder, entity);
595 return computeVariableExtent(loc, builder, entity, seqTy, dim);
600 mlir::Value hlfir::genLBound(mlir::Location loc, fir::FirOpBuilder &builder,
603 return builder.createIntegerConstant(loc, builder.getIndexType(), 1);
612 entity = hlfir::derefPointersAndAllocatables(loc, builder, entity);
614 mlir::Type idxTy = builder.getIndexType();
615 mlir::Value dimVal = builder.createIntegerConstant(loc, idxTy, dim);
617 builder.create<fir::BoxDimsOp>(loc, idxTy, idxTy, idxTy, entity, dimVal);
621 void hlfir::genLengthParameters(mlir::Location loc, fir::FirOpBuilder &builder,
640 hlfir::genLengthParameters(loc, builder, hlfir::Entity{asExpr.getVar()},
657 result.push_back(builder.create<hlfir::GetLengthOp>(loc, expr));
664 result.push_back(genCharacterVariableLength(loc, builder, entity));
670 mlir::Value hlfir::genCharLength(mlir::Location loc, fir::FirOpBuilder &builder,
673 genLengthParameters(loc, builder, entity, lenParams);
678 mlir::Value hlfir::genRank(mlir::Location loc, fir::FirOpBuilder &builder,
681 return builder.createIntegerConstant(loc, resultType, entity.getRank());
684 return builder.create<fir::BoxRankOp>(loc, resultType, entity);
688 static mlir::Value asEmboxShape(mlir::Location loc, fir::FirOpBuilder &builder,
699 return builder.createShape(loc, exv);
704 mlir::Location loc, fir::FirOpBuilder &builder, Entity entity,
706 auto [exv, cleanup] = translateToExtendedValue(loc, builder, entity);
716 asEmboxShape(loc, builder, exv, variableInterface.getShape())};
717 return {fir::getBase(exv), builder.createShape(loc, exv)};
721 fir::FirOpBuilder &builder,
724 hlfir::Entity boxLoad{builder.create<fir::LoadOp>(loc, entity)};
727 return hlfir::Entity{builder.create<fir::BoxAddrOp>(loc, boxLoad)};
730 mlir::Value base = builder.create<fir::BoxAddrOp>(loc, boxLoad);
733 mlir::Value len = genCharacterVariableLength(loc, builder, entity);
735 fir::BoxCharType::get(builder.getContext(), charType.getFKind());
737 builder.create<fir::EmboxCharOp>(loc, boxCharType, base, len)
747 return hlfir::Entity{builder.create<fir::LoadOp>(loc, entity)};
791 mlir::Location loc, fir::FirOpBuilder &builder, mlir::Type elementType,
797 auto elementalOp = builder.create<hlfir::ElementalOp>(
799 auto insertPt = builder.saveInsertionPoint();
800 builder.setInsertionPointToStart(elementalOp.getBody());
801 mlir::Value elementResult = genKernel(loc, builder, elementalOp.getIndices());
807 elementResult = builder.createConvert(loc, elementType, elementResult);
808 builder.create<hlfir::YieldElementOp>(loc, elementResult);
809 builder.restoreInsertionPoint(insertPt);
817 hlfir::inlineElementalOp(mlir::Location loc, fir::FirOpBuilder &builder,
827 newOp = builder.clone(op, mapper);
834 mlir::Location loc, fir::FirOpBuilder &builder,
853 mlir::Value inlined = inlineElementalOp(loc, builder, elementalIface,
859 (void)builder.clone(op, mapper);
865 fir::FirOpBuilder &builder,
871 mlir::OpBuilder::InsertionGuard guard(builder);
874 auto one = builder.create<mlir::arith::ConstantIndexOp>(loc, 1);
875 mlir::Type indexType = builder.getIndexType();
877 auto wslw = builder.create<mlir::omp::WorkshareLoopWrapperOp>(loc);
879 builder.createBlock(&wslw.getRegion());
881 lnops.loopInclusive = builder.getUnitAttr();
887 auto lnOp = builder.create<mlir::omp::LoopNestOp>(loc, lnops);
888 mlir::Block *block = builder.createBlock(&lnOp.getRegion());
892 builder.create<mlir::omp::YieldOp>(loc);
899 auto ub = builder.createConvert(loc, indexType, extent);
901 builder.create<fir::DoLoopOp>(loc, one, ub, one, isUnordered);
903 builder.setInsertionPointToStart(loopNest.body);
914 mlir::Location loc, fir::FirOpBuilder &builder, mlir::ValueRange extents,
919 auto one = builder.create<mlir::arith::ConstantIndexOp>(loc, 1);
920 mlir::Type indexType = builder.getIndexType();
927 auto ub = builder.createConvert(loc, indexType, extent);
935 doLoop = builder.create<fir::DoLoopOp>(loc, one, ub, one, isUnordered,
939 doLoop = builder.create<fir::DoLoopOp>(loc, one, ub, one, isUnordered,
944 builder.create<fir::ResultOp>(loc, doLoop.getResults());
948 builder.setInsertionPointToStart(doLoop.getBody());
958 genBody(loc, builder, oneBasedIndices, parentLoop.getRegionIterArgs());
959 builder.setInsertionPointToEnd(parentLoop.getBody());
961 builder.create<fir::ResultOp>(loc, reductionValues);
962 builder.setInsertionPointAfter(outerLoop);
967 mlir::Location loc, fir::FirOpBuilder &builder, hlfir::Entity variable,
991 nonDefaultLbounds = getNonDefaultLowerBounds(loc, builder, variable);
997 base = genVariableRawAddress(loc, builder, variable);
1003 return genUnboxChar(loc, builder, base);
1004 mlir::Value len = genCharacterVariableLength(loc, builder, variable);
1016 genLboundsAndExtentsFromBox(loc, builder, variable, nonDefaultLbounds,
1019 extents = getVariableExtents(loc, builder, variable);
1020 nonDefaultLbounds = getNonDefaultLowerBounds(loc, builder, variable);
1024 base, genCharacterVariableLength(loc, builder, variable), extents,
1030 hlfir::translateToExtendedValue(mlir::Location loc, fir::FirOpBuilder &builder,
1033 return translateVariableToExtendedValue(loc, builder, var, forceHlfirBase);
1037 hlfir::translateToExtendedValue(mlir::Location loc, fir::FirOpBuilder &builder,
1040 return {translateVariableToExtendedValue(loc, builder, entity, false,
1047 builder, loc, entity, /*openBoxProc=*/false);
1054 mlir::NamedAttribute byRefAttr = fir::getAdaptToByRefAttr(builder);
1056 loc, builder, entity, entity.getType(), "", byRefAttr);
1057 auto *bldr = &builder;
1062 return {translateToExtendedValue(loc, builder, temp).first, cleanup};
1068 hlfir::convertToValue(mlir::Location loc, fir::FirOpBuilder &builder,
1073 auto derefedAndLoadedEntity = loadTrivialScalar(loc, builder, entity);
1074 return translateToExtendedValue(loc, builder, derefedAndLoadedEntity);
1078 fir::FirOpBuilder &builder,
1081 auto temp = builder.createTemporary(loc, targetType);
1083 builder.createStoreWithConvert(loc, val, temp);
1085 builder.create<fir::StoreOp>(loc, val, temp);
1090 hlfir::convertToBox(mlir::Location loc, fir::FirOpBuilder &builder,
1095 entity = hlfir::derefPointersAndAllocatables(loc, builder, entity);
1097 auto [exv, cleanup] = translateToExtendedValue(loc, builder, entity);
1104 exv = placeTrivialInMemory(loc, builder, base, targetType);
1105 fir::BoxValue box = fir::factory::createBoxValue(builder, loc, exv);
1110 hlfir::convertToAddress(mlir::Location loc, fir::FirOpBuilder &builder,
1113 hlfir::derefPointersAndAllocatables(loc, builder, entity);
1115 hlfir::translateToExtendedValue(loc, builder, derefedEntity);
1118 exv = placeTrivialInMemory(loc, builder, base, targetType);
1142 hlfir::cloneToElementalOp(mlir::Location loc, fir::FirOpBuilder &builder,
1149 hlfir::genLengthParameters(loc, builder, scalarAddress, typeParams);
1151 builder.setInsertionPointAfter(elementalAddrOp);
1167 loc, builder, elementType, elementalAddrOp.getShape(), typeParams,
1181 hlfir::createTempFromMold(mlir::Location loc, fir::FirOpBuilder &builder,
1184 hlfir::genLengthParameters(loc, builder, mold, lenParams);
1198 hlfir::genShape(loc, builder, mold);
1205 alloc = fir::factory::genNullBoxStorage(builder, loc,
1211 isHeapAlloc = builder.createBool(loc, true);
1213 builder.getContext(), fir::FortranVariableFlagsEnum::allocatable);
1217 shape = hlfir::genShape(loc, builder, mold);
1218 auto extents = hlfir::getIndexExtents(loc, builder, shape);
1219 alloc = builder.createHeapTemporary(loc, sequenceType, tmpName, extents,
1221 isHeapAlloc = builder.createBool(loc, true);
1223 alloc = builder.createTemporary(loc, mold.getFortranElementType(), tmpName,
1225 isHeapAlloc = builder.createBool(loc, false);
1228 builder.create<hlfir::DeclareOp>(loc, alloc, tmpName, shape, lenParams,
1235 fir::runtime::genAllocatableApplyMold(builder, loc, alloc,
1243 fir::FirOpBuilder &builder,
1246 hlfir::genLengthParameters(loc, builder, mold, lenParams);
1258 shape = hlfir::genShape(loc, builder, mold);
1259 auto extents = hlfir::getIndexExtents(loc, builder, shape);
1261 builder.createTemporary(loc, sequenceType, tmpName, extents, lenParams);
1263 alloc = builder.createTemporary(loc, mold.getFortranElementType(), tmpName,
1267 builder.create<hlfir::DeclareOp>(loc, alloc, tmpName, shape, lenParams,
1273 hlfir::convertCharacterKind(mlir::Location loc, fir::FirOpBuilder &builder,
1275 auto src = hlfir::convertToAddress(loc, builder, scalarChar,
1279 builder, loc, *src.first.getCharBox(), toKind);
1283 return hlfir::EntityWithAttributes{builder.create<hlfir::DeclareOp>(
1290 hlfir::genTypeAndKindConvert(mlir::Location loc, fir::FirOpBuilder &builder,
1318 loc, builder, source, *toKindCharConvert)}
1319 : builder.convertWithSemantics(loc, toType, source);
1323 mlir::Value shape = hlfir::genShape(loc, builder, source);
1325 mlir::Location loc, fir::FirOpBuilder &builder,
1328 hlfir::getElementAt(loc, builder, source, oneBasedIndices);
1329 auto val = hlfir::loadTrivialScalar(loc, builder, elementPtr);
1331 return hlfir::convertCharacterKind(loc, builder, val, *toKindCharConvert);
1333 builder.convertWithSemantics(loc, toType, val)};
1336 hlfir::genLengthParameters(loc, builder, source, lenParams);
1338 hlfir::genElementalOp(loc, builder, toType, shape, lenParams, genKernel,
1343 genAssociateExpr(loc, builder, hlfir::Entity{convertedRhs},
1350 lbAndExtents.push_back(hlfir::genLBound(loc, builder, source, dim));
1353 auto shapeShiftType = fir::ShapeShiftType::get(builder.getContext(), rank);
1355 builder.create<fir::ShapeShiftOp>(loc, shapeShiftType, lbAndExtents);
1356 auto declareOp = builder.create<hlfir::DeclareOp>(
1362 fir::FirOpBuilder *bldr = &builder;
1370 fir::FirOpBuilder *bldr = &builder;
1378 mlir::Location loc, fir::FirOpBuilder &builder,
1383 hlfir::getIndexExtents(loc, builder, shape);
1391 ? builder.createHeapTemporary(loc, baseType, tmpName,
1393 : builder.createTemporary(loc, baseType, tmpName,
1396 temp = builder.createConvert(loc, innerMemory.getType(), temp);
1397 auto declareOp = builder.create<hlfir::DeclareOp>(
1400 computeEvaluateOpIn(loc, builder, evalInMem, declareOp.getOriginalBase());
1404 void hlfir::computeEvaluateOpIn(mlir::Location loc, fir::FirOpBuilder &builder,
1409 builder.createConvert(loc, innerMemory.getType(), storage);
1413 builder.clone(op, mapper);
1418 fir::FirOpBuilder &builder,
1421 return loadTrivialScalar(loc, builder,
1422 getElementAt(loc, builder, entity, oneBasedIndices));
1426 hlfir::genExtentsVector(mlir::Location loc, fir::FirOpBuilder &builder,
1428 entity = hlfir::derefPointersAndAllocatables(loc, builder, entity);
1429 mlir::Value shape = hlfir::genShape(loc, builder, entity);
1431 hlfir::getExplicitExtentsFromShape(shape, builder);