Lines Matching refs:Fortran
31 const Fortran::semantics::Symbol &symbol) { in getMangledName()
35 if (bindName && Fortran::semantics::ClassifyProcedure(symbol) == in getMangledName()
36 Fortran::semantics::ProcedureDefinitionClass::Internal) in getMangledName()
38 return bindName ? *bindName : Fortran::lower::mangle::mangleName(symbol); in getMangledName()
44 const Fortran::evaluate::characteristics::Procedure *, in getProcedureDesignatorType()
45 Fortran::lower::AbstractConverter &converter) { in getProcedureDesignatorType()
65 bool Fortran::lower::CallerInterface::hasAlternateReturns() const { in hasAlternateReturns()
69 std::string Fortran::lower::CallerInterface::getMangledName() const { in getMangledName()
70 const Fortran::evaluate::ProcedureDesignator &proc = procRef.proc(); in getMangledName()
71 if (const Fortran::semantics::Symbol *symbol = proc.GetSymbol()) in getMangledName()
79 const Fortran::semantics::Symbol *
80 Fortran::lower::CallerInterface::getProcedureSymbol() const { in getProcedureSymbol()
84 bool Fortran::lower::CallerInterface::isIndirectCall() const { in isIndirectCall()
85 if (const Fortran::semantics::Symbol *symbol = procRef.proc().GetSymbol()) in isIndirectCall()
86 return Fortran::semantics::IsPointer(*symbol) || in isIndirectCall()
87 Fortran::semantics::IsDummy(*symbol); in isIndirectCall()
91 const Fortran::semantics::Symbol *
92 Fortran::lower::CallerInterface::getIfIndirectCallSymbol() const { in getIfIndirectCallSymbol()
93 if (const Fortran::semantics::Symbol *symbol = procRef.proc().GetSymbol()) in getIfIndirectCallSymbol()
94 if (Fortran::semantics::IsPointer(*symbol) || in getIfIndirectCallSymbol()
95 Fortran::semantics::IsDummy(*symbol)) in getIfIndirectCallSymbol()
100 mlir::Location Fortran::lower::CallerInterface::getCalleeLocation() const { in getCalleeLocation()
101 const Fortran::evaluate::ProcedureDesignator &proc = procRef.proc(); in getCalleeLocation()
105 if (const Fortran::semantics::Symbol *symbol = proc.GetSymbol()) in getCalleeLocation()
115 static Fortran::evaluate::characteristics::DummyDataObject
116 asImplicitArg(Fortran::evaluate::characteristics::DummyDataObject &&dummy) { in asImplicitArg()
117 Fortran::evaluate::Shape shape = in asImplicitArg()
119 : Fortran::evaluate::Shape(dummy.type.Rank()); in asImplicitArg()
120 return Fortran::evaluate::characteristics::DummyDataObject( in asImplicitArg()
121 Fortran::evaluate::characteristics::TypeAndShape(dummy.type.type(), in asImplicitArg()
125 static Fortran::evaluate::characteristics::DummyArgument
126 asImplicitArg(Fortran::evaluate::characteristics::DummyArgument &&dummy) { in asImplicitArg()
128 Fortran::common::visitors{ in asImplicitArg()
129 [&](Fortran::evaluate::characteristics::DummyDataObject &obj) { in asImplicitArg()
130 return Fortran::evaluate::characteristics::DummyArgument( in asImplicitArg()
133 [&](Fortran::evaluate::characteristics::DummyProcedure &proc) { in asImplicitArg()
134 return Fortran::evaluate::characteristics::DummyArgument( in asImplicitArg()
137 [](Fortran::evaluate::characteristics::AlternateReturn &x) { in asImplicitArg()
138 return Fortran::evaluate::characteristics::DummyArgument( in asImplicitArg()
144 Fortran::evaluate::characteristics::Procedure
145 Fortran::lower::CallerInterface::characterize() const { in characterize()
146 Fortran::evaluate::FoldingContext &foldingContext = in characterize()
148 std::optional<Fortran::evaluate::characteristics::Procedure> characteristic = in characterize()
149 Fortran::evaluate::characteristics::Procedure::Characterize( in characterize()
155 for (const std::optional<Fortran::evaluate::ActualArgument> &arg : in characterize()
159 Fortran::evaluate::characteristics::AlternateReturn{}); in characterize()
162 const Fortran::lower::SomeExpr *expr = arg.value().UnwrapExpr(); in characterize()
166 std::optional<Fortran::evaluate::characteristics::DummyArgument> in characterize()
168 Fortran::evaluate::characteristics::DummyArgument::FromActual( in characterize()
180 void Fortran::lower::CallerInterface::placeInput( in placeInput()
189 void Fortran::lower::CallerInterface::placeAddressAndLengthInput( in placeAddressAndLengthInput()
200 bool Fortran::lower::CallerInterface::verifyActualInputs() const { in verifyActualInputs()
210 void Fortran::lower::CallerInterface::walkResultLengths( in walkResultLengths()
213 const Fortran::evaluate::characteristics::FunctionResult &result = in walkResultLengths()
215 const Fortran::evaluate::characteristics::TypeAndShape *typeAndShape = in walkResultLengths()
218 Fortran::evaluate::DynamicType dynamicType = typeAndShape->type(); in walkResultLengths()
220 if (dynamicType.category() == Fortran::common::TypeCategory::Character) { in walkResultLengths()
221 if (std::optional<Fortran::evaluate::ExtentExpr> length = in walkResultLengths()
225 const Fortran::semantics::DerivedTypeSpec &derivedTypeSpec = in walkResultLengths()
227 if (Fortran::semantics::CountLenParameters(derivedTypeSpec) > 0) in walkResultLengths()
236 static Fortran::evaluate::ExtentExpr
237 getExtentExpr(const Fortran::semantics::ShapeSpec &shapeSpec) { in getExtentExpr()
241 return Fortran::common::Clone(*ubound) - Fortran::common::Clone(*lbound) + in getExtentExpr()
242 Fortran::evaluate::ExtentExpr{1}; in getExtentExpr()
245 void Fortran::lower::CallerInterface::walkResultExtents( in walkResultExtents()
249 const Fortran::semantics::SubprogramDetails *interfaceDetails = in walkResultExtents()
252 const Fortran::semantics::Symbol &result = interfaceDetails->result(); in walkResultExtents()
254 result.detailsIf<Fortran::semantics::ObjectEntityDetails>()) in walkResultExtents()
256 for (const Fortran::semantics::ShapeSpec &shapeSpec : in walkResultExtents()
258 visitor(Fortran::evaluate::AsGenericExpr(getExtentExpr(shapeSpec))); in walkResultExtents()
267 bool Fortran::lower::CallerInterface::mustMapInterfaceSymbols() const { in mustMapInterfaceSymbols()
269 const std::optional<Fortran::evaluate::characteristics::FunctionResult> in mustMapInterfaceSymbols()
275 auto visitor = [&](const Fortran::lower::SomeExpr &e) { in mustMapInterfaceSymbols()
276 allResultSpecExprConstant &= Fortran::evaluate::IsConstantExpr(e); in mustMapInterfaceSymbols()
283 mlir::Value Fortran::lower::CallerInterface::getArgumentValue( in getArgumentValue()
286 const Fortran::semantics::SubprogramDetails *ifaceDetails = in getArgumentValue()
291 const std::vector<Fortran::semantics::Symbol *> &dummies = in getArgumentValue()
300 mlir::Type Fortran::lower::CallerInterface::getResultStorageType() const { in getResultStorageType()
307 const Fortran::semantics::Symbol &
308 Fortran::lower::CallerInterface::getResultSymbol() const { in getResultSymbol()
310 const Fortran::semantics::SubprogramDetails *ifaceDetails = in getResultSymbol()
318 const Fortran::semantics::SubprogramDetails *
319 Fortran::lower::CallerInterface::getInterfaceDetails() const { in getInterfaceDetails()
320 if (const Fortran::semantics::Symbol *iface = in getInterfaceDetails()
323 .detailsIf<Fortran::semantics::SubprogramDetails>(); in getInterfaceDetails()
331 bool Fortran::lower::CalleeInterface::hasAlternateReturns() const { in hasAlternateReturns()
333 Fortran::semantics::HasAlternateReturns(funit.getSubprogramSymbol()); in hasAlternateReturns()
336 std::string Fortran::lower::CalleeInterface::getMangledName() const { in getMangledName()
343 const Fortran::semantics::Symbol *
344 Fortran::lower::CalleeInterface::getProcedureSymbol() const { in getProcedureSymbol()
350 mlir::Location Fortran::lower::CalleeInterface::getCalleeLocation() const { in getCalleeLocation()
356 Fortran::evaluate::characteristics::Procedure
357 Fortran::lower::CalleeInterface::characterize() const { in characterize()
358 Fortran::evaluate::FoldingContext &foldingContext = in characterize()
360 std::optional<Fortran::evaluate::characteristics::Procedure> characteristic = in characterize()
361 Fortran::evaluate::characteristics::Procedure::Characterize( in characterize()
367 bool Fortran::lower::CalleeInterface::isMainProgram() const { in isMainProgram()
372 Fortran::lower::CalleeInterface::addEntryBlockAndMapArguments() { in addEntryBlockAndMapArguments()
386 bool Fortran::lower::CalleeInterface::hasHostAssociated() const { in hasHostAssociated()
390 mlir::Type Fortran::lower::CalleeInterface::getHostAssociatedTy() const { in getHostAssociatedTy()
395 mlir::Value Fortran::lower::CalleeInterface::getHostAssociatedTuple() const { in getHostAssociatedTuple()
406 const Fortran::semantics::Symbol &sym, in addSymbolAttribute()
410 if (!Fortran::semantics::IsBindCProcedure(sym)) in addSymbolAttribute()
413 Fortran::lower::mangle::mangleName(sym, /*keepExternalInScope=*/true); in addSymbolAttribute()
421 void Fortran::lower::CallInterface<T>::declare() { in declare()
440 if (const Fortran::semantics::Symbol *sym = side().getProcedureSymbol()) in declare()
453 void Fortran::lower::CallInterface<T>::mapPassedEntities() { in mapPassedEntities()
455 if constexpr (std::is_same_v<T, Fortran::lower::CalleeInterface>) { in mapPassedEntities()
470 void Fortran::lower::CallInterface<T>::mapBackInputToPassedEntity( in mapBackInputToPassedEntity()
483 static const Fortran::evaluate::ActualArguments &
484 getEntityContainer(const Fortran::evaluate::ProcedureRef &proc) { in getEntityContainer()
488 static const std::vector<Fortran::semantics::Symbol *> &
489 getEntityContainer(Fortran::lower::pft::FunctionLikeUnit &funit) { in getEntityContainer()
491 .get<Fortran::semantics::SubprogramDetails>() in getEntityContainer()
495 static const Fortran::evaluate::ActualArgument *getDataObjectEntity( in getDataObjectEntity()
496 const std::optional<Fortran::evaluate::ActualArgument> &arg) { in getDataObjectEntity()
502 static const Fortran::semantics::Symbol &
503 getDataObjectEntity(const Fortran::semantics::Symbol *arg) { in getDataObjectEntity()
508 static const Fortran::evaluate::ActualArgument *
509 getResultEntity(const Fortran::evaluate::ProcedureRef &) { in getResultEntity()
513 static const Fortran::semantics::Symbol &
514 getResultEntity(Fortran::lower::pft::FunctionLikeUnit &funit) { in getResultEntity()
516 .get<Fortran::semantics::SubprogramDetails>() in getResultEntity()
525 getEntityContainer(const Fortran::evaluate::characteristics::Procedure &proc) { in getEntityContainer()
531 getResultEntity(const Fortran::evaluate::characteristics::Procedure &proc) { in getResultEntity()
538 class Fortran::lower::CallInterfaceImpl {
539 using CallInterface = Fortran::lower::CallInterface<T>;
546 using TypeAndShape = Fortran::evaluate::characteristics::TypeAndShape;
548 Fortran::evaluate::characteristics::DummyArgument;
555 const Fortran::evaluate::characteristics::Procedure &procedure) { in buildImplicitInterface()
557 if (const std::optional<Fortran::evaluate::characteristics::FunctionResult> in buildImplicitInterface()
567 const Fortran::evaluate::characteristics::DummyArgument in buildImplicitInterface()
570 Fortran::common::visitors{ in buildImplicitInterface()
575 [&](const Fortran::evaluate::characteristics::AlternateReturn &) { in buildImplicitInterface()
584 const Fortran::evaluate::characteristics::Procedure &procedure) { in buildExplicitInterface()
586 if (const std::optional<Fortran::evaluate::characteristics::FunctionResult> in buildExplicitInterface()
601 const Fortran::evaluate::characteristics::DummyArgument in buildExplicitInterface()
604 Fortran::common::visitors{ in buildExplicitInterface()
605 [&](const Fortran::evaluate::characteristics::DummyDataObject in buildExplicitInterface()
614 [&](const Fortran::evaluate::characteristics::DummyProcedure in buildExplicitInterface()
619 [&](const Fortran::evaluate::characteristics::AlternateReturn &) { in buildExplicitInterface()
638 static llvm::Optional<Fortran::evaluate::DynamicType> getResultDynamicType( in getResultDynamicType()
639 const Fortran::evaluate::characteristics::Procedure &procedure) { in getResultDynamicType()
640 if (const std::optional<Fortran::evaluate::characteristics::FunctionResult> in getResultDynamicType()
648 const Fortran::evaluate::characteristics::Procedure &procedure) { in mustPassLengthWithDummyProcedure()
666 if (llvm::Optional<Fortran::evaluate::DynamicType> type = in mustPassLengthWithDummyProcedure()
668 return type->category() == Fortran::common::TypeCategory::Character; in mustPassLengthWithDummyProcedure()
674 const Fortran::evaluate::characteristics::FunctionResult &result) { in handleImplicitResult()
678 const Fortran::evaluate::characteristics::TypeAndShape *typeAndShape = in handleImplicitResult()
681 Fortran::evaluate::DynamicType dynamicType = typeAndShape->type(); in handleImplicitResult()
683 if (dynamicType.category() == Fortran::common::TypeCategory::Character) { in handleImplicitResult()
686 Fortran::common::TypeCategory::Derived) { in handleImplicitResult()
704 handleImplicitCharacterResult(const Fortran::evaluate::DynamicType &type) { in handleImplicitCharacterResult()
727 std::optional<Fortran::common::Reference< in dummyNameAttr()
728 const Fortran::semantics::Symbol>>>) { in dummyNameAttr()
730 const Fortran::semantics::Symbol *argument = &*entity.value(); in dummyNameAttr()
744 const Fortran::evaluate::characteristics::DummyDataObject &obj, in handleImplicitDummy()
746 Fortran::evaluate::DynamicType dynamicType = obj.type.type(); in handleImplicitDummy()
747 if (dynamicType.category() == Fortran::common::TypeCategory::Character) { in handleImplicitDummy()
768 const Fortran::evaluate::characteristics::DummyDataObject &obj) { in dummyRequiresBox()
769 using ShapeAttr = Fortran::evaluate::characteristics::TypeAndShape::Attr; in dummyRequiresBox()
770 using ShapeAttrs = Fortran::evaluate::characteristics::TypeAndShape::Attrs; in dummyRequiresBox()
780 if (const Fortran::semantics::DerivedTypeSpec *derived = in dummyRequiresBox()
781 Fortran::evaluate::GetDerivedTypeSpec(obj.type.type())) in dummyRequiresBox()
782 if (const Fortran::semantics::Scope *scope = derived->scope()) in dummyRequiresBox()
789 translateDynamicType(const Fortran::evaluate::DynamicType &dynamicType) { in translateDynamicType()
790 Fortran::common::TypeCategory cat = dynamicType.category(); in translateDynamicType()
792 if (cat == Fortran::common::TypeCategory::Derived) { in translateDynamicType()
799 if (cat == Fortran::common::TypeCategory::Character) in translateDynamicType()
809 const Fortran::evaluate::characteristics::DummyDataObject &obj, in handleExplicitDummy()
811 using Attrs = Fortran::evaluate::characteristics::DummyDataObject::Attr; in handleExplicitDummy()
836 using ShapeAttr = Fortran::evaluate::characteristics::TypeAndShape::Attr; in handleExplicitDummy()
837 const Fortran::evaluate::characteristics::TypeAndShape::Attrs &shapeAttrs = in handleExplicitDummy()
847 Fortran::evaluate::DynamicType dynamicType = obj.type.type(); in handleExplicitDummy()
871 Fortran::common::TypeCategory::Character) { in handleExplicitDummy()
901 const Fortran::evaluate::characteristics::DummyProcedure &proc, in handleImplicitDummy()
904 Fortran::evaluate::characteristics::DummyProcedure::Attr::Pointer)) in handleImplicitDummy()
908 const Fortran::evaluate::characteristics::Procedure &procedure = in handleImplicitDummy()
912 llvm::Optional<Fortran::evaluate::DynamicType> resultTy = in handleImplicitDummy()
933 const Fortran::evaluate::characteristics::FunctionResult &result) { in handleExplicitResult()
934 using Attr = Fortran::evaluate::characteristics::FunctionResult::Attr; in handleExplicitResult()
939 const Fortran::evaluate::characteristics::TypeAndShape *typeAndShape = in handleExplicitResult()
968 fir::SequenceType::Shape getBounds(const Fortran::evaluate::Shape &shape) { in getBounds()
970 for (const std::optional<Fortran::evaluate::ExtentExpr> &extent : shape) { in getBounds()
980 Fortran::evaluate::Expr<Fortran::evaluate::SubscriptInteger>> in toInt64()
983 return Fortran::evaluate::ToInt64(Fortran::evaluate::Fold( in toInt64()
1012 if constexpr (std::is_same_v<Fortran::lower::CalleeInterface, T>) { in emptyValue()
1019 Fortran::lower::AbstractConverter &getConverter() { in getConverter()
1027 bool Fortran::lower::CallInterface<T>::PassedEntity::isOptional() const { in isOptional()
1033 bool Fortran::lower::CallInterface<T>::PassedEntity::mayBeModifiedByCall() in mayBeModifiedByCall()
1037 return characteristics->GetIntent() != Fortran::common::Intent::In; in mayBeModifiedByCall()
1040 bool Fortran::lower::CallInterface<T>::PassedEntity::mayBeReadByCall() const { in mayBeReadByCall()
1043 return characteristics->GetIntent() != Fortran::common::Intent::Out; in mayBeReadByCall()
1047 void Fortran::lower::CallInterface<T>::determineInterface( in determineInterface()
1049 const Fortran::evaluate::characteristics::Procedure &procedure) { in determineInterface()
1058 if constexpr (std::is_same_v<T, Fortran::lower::CalleeInterface>) { in determineInterface()
1065 mlir::FunctionType Fortran::lower::CallInterface<T>::genFunctionType() { in genFunctionType()
1078 Fortran::lower::CallInterface<T>::getResultType() const { in getResultType()
1085 template class Fortran::lower::CallInterface<Fortran::lower::CalleeInterface>;
1086 template class Fortran::lower::CallInterface<Fortran::lower::CallerInterface>;
1099 struct Fortran::lower::PassedEntityTypes<SignatureBuilder> {
1108 : public Fortran::lower::CallInterface<SignatureBuilder> {
1110 SignatureBuilder(const Fortran::evaluate::characteristics::Procedure &p, in SignatureBuilder()
1111 Fortran::lower::AbstractConverter &c, bool forceImplicit) in SignatureBuilder()
1119 for (const Fortran::evaluate::characteristics::DummyArgument &dummy : in hasAlternateReturns()
1122 Fortran::evaluate::characteristics::AlternateReturn>(dummy.u)) in hasAlternateReturns()
1138 const Fortran::semantics::Symbol *getProcedureSymbol() const { in getProcedureSymbol()
1142 Fortran::evaluate::characteristics::Procedure characterize() const { in characterize()
1150 const Fortran::evaluate::characteristics::Procedure &
1168 const Fortran::evaluate::characteristics::Procedure &proc;
1171 mlir::FunctionType Fortran::lower::translateSignature( in translateSignature()
1172 const Fortran::evaluate::ProcedureDesignator &proc, in translateSignature()
1173 Fortran::lower::AbstractConverter &converter) { in translateSignature()
1174 std::optional<Fortran::evaluate::characteristics::Procedure> characteristics = in translateSignature()
1175 Fortran::evaluate::characteristics::Procedure::Characterize( in translateSignature()
1185 mlir::func::FuncOp Fortran::lower::getOrDeclareFunction( in getOrDeclareFunction()
1186 llvm::StringRef name, const Fortran::evaluate::ProcedureDesignator &proc, in getOrDeclareFunction()
1187 Fortran::lower::AbstractConverter &converter) { in getOrDeclareFunction()
1193 const Fortran::semantics::Symbol *symbol = proc.GetSymbol(); in getOrDeclareFunction()
1199 std::optional<Fortran::evaluate::characteristics::Procedure> characteristics = in getOrDeclareFunction()
1200 Fortran::evaluate::characteristics::Procedure::Characterize( in getOrDeclareFunction()
1214 const std::optional<Fortran::evaluate::characteristics::Procedure> in mustPassLengthWithDummyProcedure()
1217 Fortran::lower::CallInterfaceImpl<SignatureBuilder>:: in mustPassLengthWithDummyProcedure()
1221 bool Fortran::lower::mustPassLengthWithDummyProcedure( in mustPassLengthWithDummyProcedure()
1222 const Fortran::evaluate::ProcedureDesignator &procedure, in mustPassLengthWithDummyProcedure()
1223 Fortran::lower::AbstractConverter &converter) { in mustPassLengthWithDummyProcedure()
1224 std::optional<Fortran::evaluate::characteristics::Procedure> characteristics = in mustPassLengthWithDummyProcedure()
1225 Fortran::evaluate::characteristics::Procedure::Characterize( in mustPassLengthWithDummyProcedure()
1230 mlir::Type Fortran::lower::getDummyProcedureType( in getDummyProcedureType()
1231 const Fortran::semantics::Symbol &dummyProc, in getDummyProcedureType()
1232 Fortran::lower::AbstractConverter &converter) { in getDummyProcedureType()
1233 std::optional<Fortran::evaluate::characteristics::Procedure> iface = in getDummyProcedureType()
1234 Fortran::evaluate::characteristics::Procedure::Characterize( in getDummyProcedureType()