Lines Matching defs:entity

118                          hlfir::Entity entity) {
119 assert(!entity.isAssumedRank() &&
121 if (!entity.mayHaveNonDefaultLowerBounds())
123 if (auto varIface = entity.getIfVariableInterface()) {
128 if (entity.isMutableBox())
129 entity = hlfir::derefPointersAndAllocatables(loc, builder, entity);
131 genLboundsAndExtentsFromBox(loc, builder, entity, lowerBounds,
232 "entity being declared must be in memory");
361 Entity entity) {
362 entity = derefPointersAndAllocatables(loc, builder, entity);
363 if (entity.isVariable() && entity.isScalar() &&
364 fir::isa_trivial(entity.getFortranElementType())) {
365 return Entity{builder.create<fir::LoadOp>(loc, entity)};
367 return entity;
371 fir::FirOpBuilder &builder, Entity entity,
373 if (entity.isScalar())
374 return entity;
376 genLengthParameters(loc, builder, entity, lenParams);
377 if (mlir::isa<hlfir::ExprType>(entity.getType()))
379 loc, entity, oneBasedIndices, lenParams)};
383 mlir::Type resultType = hlfir::getVariableElementType(entity);
386 getNonDefaultLowerBounds(loc, builder, entity);
399 designate = builder.create<hlfir::DesignateOp>(loc, resultType, entity,
402 designate = builder.create<hlfir::DesignateOp>(loc, resultType, entity,
422 Entity entity) {
423 if (mlir::isa<hlfir::ExprType>(entity.getType()))
425 auto [exv, cleanup] = translateToExtendedValue(loc, builder, entity);
426 assert(!cleanup && "translation of entity should not yield cleanup");
477 static hlfir::Entity followShapeInducingSource(hlfir::Entity entity) {
479 if (auto reassoc = entity.getDefiningOp<hlfir::NoReassocOp>()) {
480 entity = hlfir::Entity{reassoc.getVal()};
483 if (auto asExpr = entity.getDefiningOp<hlfir::AsExprOp>()) {
484 entity = hlfir::Entity{asExpr.getVar()};
489 return entity;
534 static mlir::Value tryRetrievingShapeOrShift(hlfir::Entity entity) {
535 if (mlir::isa<hlfir::ExprType>(entity.getType())) {
536 if (auto elemental = entity.getDefiningOp<hlfir::ElementalOp>())
538 if (auto evalInMem = entity.getDefiningOp<hlfir::EvaluateInMemoryOp>())
542 if (auto varIface = entity.getIfVariableInterface())
548 hlfir::Entity entity) {
549 assert(entity.isArray() && "entity must be an array");
550 entity = followShapeInducingSource(entity);
551 assert(entity && "what?");
552 if (auto shape = tryRetrievingShapeOrShift(entity)) {
559 if (mlir::isa<hlfir::ExprType>(entity.getType()))
560 return builder.create<hlfir::ShapeOfOp>(loc, entity.getBase());
561 // There is no shape lying around for this entity. Retrieve the extents and
564 getVariableExtents(loc, builder, entity));
579 hlfir::Entity entity, unsigned dim) {
580 entity = followShapeInducingSource(entity);
581 if (auto shape = tryRetrievingShapeOrShift(entity)) {
588 if (entity.isVariable()) {
589 if (entity.isMutableBox())
590 entity = hlfir::derefPointersAndAllocatables(loc, builder, entity);
594 hlfir::getFortranElementOrSequenceType(entity.getType()));
595 return computeVariableExtent(loc, builder, entity, seqTy, dim);
601 hlfir::Entity entity, unsigned dim) {
602 if (!entity.mayHaveNonDefaultLowerBounds())
604 if (auto shape = tryRetrievingShapeOrShift(entity)) {
611 if (entity.isMutableBox())
612 entity = hlfir::derefPointersAndAllocatables(loc, builder, entity);
613 assert(mlir::isa<fir::BaseBoxType>(entity.getType()) && "must be a box");
617 builder.create<fir::BoxDimsOp>(loc, idxTy, idxTy, idxTy, entity, dimVal);
622 Entity entity,
624 if (!entity.hasLengthParameters())
626 if (mlir::isa<hlfir::ExprType>(entity.getType())) {
627 mlir::Value expr = entity;
656 if (entity.isCharacter()) {
663 if (entity.isCharacter()) {
664 result.push_back(genCharacterVariableLength(loc, builder, entity));
671 hlfir::Entity entity) {
673 genLengthParameters(loc, builder, entity, lenParams);
679 hlfir::Entity entity, mlir::Type resultType) {
680 if (!entity.isAssumedRank())
681 return builder.createIntegerConstant(loc, resultType, entity.getRank());
682 assert(entity.isBoxAddressOrValue() &&
684 return builder.create<fir::BoxRankOp>(loc, resultType, entity);
704 mlir::Location loc, fir::FirOpBuilder &builder, Entity entity,
706 auto [exv, cleanup] = translateToExtendedValue(loc, builder, entity);
708 if (entity.hasLengthParameters()) {
712 if (entity.isScalar())
714 if (auto variableInterface = entity.getIfVariableInterface())
722 Entity entity) {
723 if (entity.isMutableBox()) {
724 hlfir::Entity boxLoad{builder.create<fir::LoadOp>(loc, entity)};
725 if (entity.isScalar()) {
726 if (!entity.isPolymorphic() && !entity.hasLengthParameters())
733 mlir::Value len = genCharacterVariableLength(loc, builder, entity);
741 // Otherwise, the entity is either an array, a polymorphic entity, or a
746 } else if (entity.isProcedurePointer()) {
747 return hlfir::Entity{builder.create<fir::LoadOp>(loc, entity)};
749 return entity;
753 assert(variable.isVariable() && "entity must be a variable");
768 mlir::Type hlfir::getEntityElementType(hlfir::Entity entity) {
769 if (entity.isVariable())
770 return getVariableElementType(entity);
771 if (entity.isScalar())
772 return entity.getType();
773 auto exprType = mlir::dyn_cast<hlfir::ExprType>(entity.getType());
1038 hlfir::Entity entity, bool contiguousHint) {
1039 if (entity.isVariable())
1040 return {translateVariableToExtendedValue(loc, builder, entity, false,
1044 if (entity.isProcedure()) {
1045 if (fir::isCharacterProcedureTuple(entity.getType())) {
1047 builder, loc, entity, /*openBoxProc=*/false);
1050 return {static_cast<mlir::Value>(entity), std::nullopt};
1053 if (mlir::isa<hlfir::ExprType>(entity.getType())) {
1056 loc, builder, entity, entity.getType(), "", byRefAttr);
1064 return {{static_cast<mlir::Value>(entity)}, {}};
1069 hlfir::Entity entity) {
1073 auto derefedAndLoadedEntity = loadTrivialScalar(loc, builder, entity);
1091 hlfir::Entity entity, mlir::Type targetType) {
1094 if (entity.isProcedurePointer())
1095 entity = hlfir::derefPointersAndAllocatables(loc, builder, entity);
1097 auto [exv, cleanup] = translateToExtendedValue(loc, builder, entity);
1100 if (entity.isProcedure())
1111 hlfir::Entity entity, mlir::Type targetType) {
1113 hlfir::derefPointersAndAllocatables(loc, builder, entity);
1419 hlfir::Entity entity,
1422 getElementAt(loc, builder, entity, oneBasedIndices));
1427 hlfir::Entity entity) {
1428 entity = hlfir::derefPointersAndAllocatables(loc, builder, entity);
1429 mlir::Value shape = hlfir::genShape(loc, builder, entity);