Lines Matching defs:fir

28 #define DEBUG_TYPE "fir-alias-analysis"
35 /// TODO: Generalize support of fir.load
41 .Case<fir::ConvertOp>([&](fir::ConvertOp op) { v = op.getValue(); })
42 .Case<fir::DeclareOp, hlfir::DeclareOp>(
49 namespace fir {
67 auto eleTy = fir::dyn_cast_ptrEleTy(ty);
71 return mlir::isa<fir::RecordType>(eleTy);
75 auto eleTy = fir::dyn_cast_ptrEleTy(ty);
79 return fir::isPointerType(eleTy) || mlir::isa<fir::PointerType>(eleTy);
89 return fir::isDummyArgument(v);
103 return mlir::isa<fir::BaseBoxType>(fir::unwrapRefType(valueType)) &&
111 .template Case<fir::DeclareOp, hlfir::DeclareOp>([&](auto declOp) {
112 return fir::NameUniquer::deconstruct(declOp.getUniqName()).first ==
113 fir::NameUniquer::NameKind::VARIABLE;
351 static bool isSavedLocal(const fir::AliasAnalysis::Source &src) {
354 fir::NameUniquer::deconstruct(symRef.getLeafReference().getValue());
355 return nameKind == fir::NameUniquer::NameKind::VARIABLE &&
361 static bool isCallToFortranUserProcedure(fir::CallOp call) {
364 if (fir::hasBindcAttr(call))
367 return fir::NameUniquer::deconstruct(callee->getLeafReference().getValue())
368 .first == fir::NameUniquer::NameKind::PROCEDURE;
372 static ModRefResult getCallModRef(fir::CallOp call, mlir::Value var) {
375 fir::AliasAnalysis aliasAnalysis;
376 fir::AliasAnalysis::Source varSrc = aliasAnalysis.getSource(var);
400 if (varSrc.kind == fir::AliasAnalysis::SourceKind::HostAssoc ||
405 if (varSrc.kind != fir::AliasAnalysis::SourceKind::Allocate &&
407 if (varSrc.kind != fir::AliasAnalysis::SourceKind::Global ||
413 if (fir::conformsWithPassByRef(arg.getType()) &&
433 if (auto call = llvm::dyn_cast<fir::CallOp>(op))
495 getAttrsFromVariable(fir::FortranVariableOpInterface var) {
529 bool followBoxData{mlir::isa<fir::BaseBoxType>(v.getType())};
530 bool isBoxRef{fir::isa_ref_type(v.getType()) &&
531 mlir::isa<fir::BaseBoxType>(fir::unwrapRefType(v.getType()))};
543 .Case<fir::AllocaOp, fir::AllocMemOp>([&](auto op) {
548 .Case<fir::ConvertOp>([&](auto op) {
553 .Case<fir::BoxAddrOp>([&](auto op) {
556 if (mlir::isa<fir::BaseBoxType>(v.getType()))
559 .Case<fir::ArrayCoorOp, fir::CoordinateOp>([&](auto op) {
564 if (mlir::isa<fir::BaseBoxType>(v.getType()))
568 .Case<fir::EmboxOp, fir::ReboxOp>([&](auto op) {
575 .Case<fir::LoadOp>([&](auto op) {
578 // TODO: Add support to fir.alloca and fir.allocmem
581 def.template getDefiningOp<fir::AddrOfOp>()) {
590 llvm::isa_and_present<fir::DeclareOp>(loadMemrefOp) ||
602 .Case<fir::AddrOfOp>([&](auto op) {
608 fir::GlobalOp::getOperationName(), defOp->getContext());
609 if (fir::valueHasFirAttribute(
610 v, fir::GlobalOp::getTargetAttrName(globalOpName)))
617 global = llvm::cast<fir::AddrOfOp>(op).getSymbol();
620 .Case<hlfir::DeclareOp, fir::DeclareOp>([&](auto op) {
654 auto varIf = llvm::cast<fir::FortranVariableOpInterface>(defOp);
707 auto varIf = llvm::cast<fir::FortranVariableOpInterface>(defOp);
720 if (mlir::isa<fir::BaseBoxType>(v.getType()))
733 if (fir::valueHasFirAttribute(v, fir::getTargetAttrName()))
761 } // namespace fir