[flang-commits] [flang] 7c65e62 - [flang] Switch attr name to bindc_name
Valentin Clement via flang-commits
flang-commits at lists.llvm.org
Wed Jun 29 05:20:43 PDT 2022
Author: Valentin Clement
Date: 2022-06-29T14:20:35+02:00
New Revision: 7c65e62a519941e7dcce252d6b3e291621800876
URL: https://github.com/llvm/llvm-project/commit/7c65e62a519941e7dcce252d6b3e291621800876
DIFF: https://github.com/llvm/llvm-project/commit/7c65e62a519941e7dcce252d6b3e291621800876.diff
LOG: [flang] Switch attr name to bindc_name
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D128788
Co-authored-by: Eric Schweitz <eschweitz at nvidia.com>
Added:
Modified:
flang/include/flang/Optimizer/Dialect/FIROpsSupport.h
flang/include/flang/Optimizer/Dialect/FIRType.h
flang/include/flang/Optimizer/Dialect/FIRTypes.td
flang/test/Lower/program-units-fir-mangling.f90
Removed:
################################################################################
diff --git a/flang/include/flang/Optimizer/Dialect/FIROpsSupport.h b/flang/include/flang/Optimizer/Dialect/FIROpsSupport.h
index 2d1a4e6b550fa..366cc78383121 100644
--- a/flang/include/flang/Optimizer/Dialect/FIROpsSupport.h
+++ b/flang/include/flang/Optimizer/Dialect/FIROpsSupport.h
@@ -31,18 +31,18 @@ inline bool isaCall(mlir::Operation *op) {
mlir::isa<mlir::func::CallIndirectOp>(op);
}
-/// return true iff the Operation is a fir::CallOp, fir::DispatchOp,
+/// Return true iff the Operation is a fir::CallOp, fir::DispatchOp,
/// mlir::CallOp, or mlir::CallIndirectOp and not pure
-/// NB: this is not the same as `!pureCall(op)`
+/// NB: This is not the same as `!pureCall(op)`.
inline bool impureCall(mlir::Operation *op) {
// Should we also auto-detect that the called function is pure if its
// arguments are not references? For now, rely on a "pure" attribute.
return op && isaCall(op) && !op->getAttr("pure");
}
-/// return true iff the Operation is a fir::CallOp, fir::DispatchOp,
+/// Return true iff the Operation is a fir::CallOp, fir::DispatchOp,
/// mlir::CallOp, or mlir::CallIndirectOp and is also pure.
-/// NB: this is not the same as `!impureCall(op)`
+/// NB: This is not the same as `!impureCall(op)`.
inline bool pureCall(mlir::Operation *op) {
// Should we also auto-detect that the called function is pure if its
// arguments are not references? For now, rely on a "pure" attribute.
@@ -79,7 +79,9 @@ static constexpr llvm::StringRef getCharacterProcedureDummyAttrName() {
}
/// Attribute to keep track of Fortran scoping information for a symbol.
-static constexpr llvm::StringRef getSymbolAttrName() { return "fir.sym_name"; }
+static constexpr llvm::StringRef getSymbolAttrName() {
+ return "fir.bindc_name";
+}
/// Attribute to mark a function that takes a host associations argument.
static constexpr llvm::StringRef getHostAssocAttrName() {
diff --git a/flang/include/flang/Optimizer/Dialect/FIRType.h b/flang/include/flang/Optimizer/Dialect/FIRType.h
index 74df83a89bdd0..3fc25a330df26 100644
--- a/flang/include/flang/Optimizer/Dialect/FIRType.h
+++ b/flang/include/flang/Optimizer/Dialect/FIRType.h
@@ -61,8 +61,8 @@ bool isa_fir_or_std_type(mlir::Type t);
/// Is `t` a FIR dialect type that implies a memory (de)reference?
inline bool isa_ref_type(mlir::Type t) {
- return t.isa<ReferenceType>() || t.isa<PointerType>() || t.isa<HeapType>() ||
- t.isa<fir::LLVMPointerType>();
+ return t.isa<fir::ReferenceType, fir::PointerType, fir::HeapType,
+ fir::LLVMPointerType>();
}
/// Is `t` a boxed type?
@@ -255,11 +255,11 @@ bool isRecordWithAllocatableMember(mlir::Type ty);
/// Return true iff `ty` is a RecordType with type parameters.
inline bool isRecordWithTypeParameters(mlir::Type ty) {
if (auto recTy = ty.dyn_cast_or_null<fir::RecordType>())
- return recTy.getNumLenParams() != 0;
+ return recTy.isDependentType();
return false;
}
-/// Is this tuple type holding a character function and its result length ?
+/// Is this tuple type holding a character function and its result length?
bool isCharacterProcedureTuple(mlir::Type type, bool acceptRawFunc = true);
/// Apply the components specified by `path` to `rootTy` to determine the type
@@ -267,8 +267,8 @@ bool isCharacterProcedureTuple(mlir::Type type, bool acceptRawFunc = true);
/// Returns null on error.
mlir::Type applyPathToType(mlir::Type rootTy, mlir::ValueRange path);
-/// Does this function type have a result that requires binding the result value
-/// with storage in a fir.save_result operation in order to use the result?
+/// Does this function type has a result that requires binding the result value
+/// with a storage in a fir.save_result operation in order to use the result?
bool hasAbstractResult(mlir::FunctionType ty);
/// Convert llvm::Type::TypeID to mlir::Type
diff --git a/flang/include/flang/Optimizer/Dialect/FIRTypes.td b/flang/include/flang/Optimizer/Dialect/FIRTypes.td
index 5a9cc62bcbf00..ac7505b9eb13c 100644
--- a/flang/include/flang/Optimizer/Dialect/FIRTypes.td
+++ b/flang/include/flang/Optimizer/Dialect/FIRTypes.td
@@ -333,6 +333,7 @@ def fir_RecordType : FIR_Type<"Record", "type"> {
}
unsigned getNumFields() { return getTypeList().size(); }
unsigned getNumLenParams() { return getLenParamList().size(); }
+ bool isDependentType() { return getNumLenParams(); }
void finalize(llvm::ArrayRef<TypePair> lenPList,
llvm::ArrayRef<TypePair> typeList);
@@ -451,7 +452,7 @@ def fir_SequenceType : FIR_Type<"Sequence", "array"> {
let extraClassDeclaration = [{
using Extent = int64_t;
- using Shape = llvm::SmallVector<Extent, 8>;
+ using Shape = llvm::SmallVector<Extent>;
using ShapeRef = llvm::ArrayRef<int64_t>;
unsigned getConstantRows() const;
diff --git a/flang/test/Lower/program-units-fir-mangling.f90 b/flang/test/Lower/program-units-fir-mangling.f90
index 9deff0a59429f..b2e15804418e9 100644
--- a/flang/test/Lower/program-units-fir-mangling.f90
+++ b/flang/test/Lower/program-units-fir-mangling.f90
@@ -136,22 +136,22 @@ subroutine should_not_collide()
end subroutine
end program
-! CHECK-LABEL: func @omp_get_num_threads() -> f32 attributes {fir.sym_name = "omp_get_num_threads"} {
+! CHECK-LABEL: func @omp_get_num_threads() -> f32 attributes {fir.bindc_name = "omp_get_num_threads"} {
function omp_get_num_threads() bind(c)
! CHECK: }
end function
-! CHECK-LABEL: func @get_threads() -> f32 attributes {fir.sym_name = "get_threads"} {
+! CHECK-LABEL: func @get_threads() -> f32 attributes {fir.bindc_name = "get_threads"} {
function omp_get_num_threads_1() bind(c, name ="get_threads")
! CHECK: }
end function
-! CHECK-LABEL: func @bEtA() -> f32 attributes {fir.sym_name = "bEtA"} {
+! CHECK-LABEL: func @bEtA() -> f32 attributes {fir.bindc_name = "bEtA"} {
function alpha() bind(c, name =" bEtA ")
! CHECK: }
end function
-! CHECK-LABEL: func @bc1() attributes {fir.sym_name = "bc1"} {
+! CHECK-LABEL: func @bc1() attributes {fir.bindc_name = "bc1"} {
subroutine bind_c_s() Bind(C,Name='bc1')
! CHECK: return
end subroutine bind_c_s
@@ -177,11 +177,11 @@ subroutine bind_c_s() Bind(C, name='bc1')
! Test that BIND(C) label is taken into account for ENTRY symbols.
! CHECK-LABEL: func @_QPsub_with_entries() {
subroutine sub_with_entries
-! CHECK-LABEL: func @bar() attributes {fir.sym_name = "bar"} {
+! CHECK-LABEL: func @bar() attributes {fir.bindc_name = "bar"} {
entry some_entry() bind(c, name="bar")
! CHECK-LABEL: func @_QPnormal_entry() {
entry normal_entry()
-! CHECK-LABEL: func @some_other_entry() attributes {fir.sym_name = "some_other_entry"} {
+! CHECK-LABEL: func @some_other_entry() attributes {fir.bindc_name = "some_other_entry"} {
entry some_other_entry() bind(c)
end subroutine
@@ -198,24 +198,24 @@ subroutine s1() bind(c,name=ok//'2')
end subroutine
end interface
contains
-! CHECK-LABEL: func @ok3() -> f32 attributes {fir.sym_name = "ok3"} {
+! CHECK-LABEL: func @ok3() -> f32 attributes {fir.bindc_name = "ok3"} {
real function f2() bind(c,name=foo//'3')
character*(*), parameter :: foo = ok
! CHECK: fir.call @ok1() : () -> f32
-! CHECK-LABEL: func @ok4() -> f32 attributes {fir.sym_name = "ok4"} {
+! CHECK-LABEL: func @ok4() -> f32 attributes {fir.bindc_name = "ok4"} {
entry f3() bind(c,name=foo//'4')
! CHECK: fir.call @ok1() : () -> f32
f2 = f1()
end function
-! CHECK-LABEL: func @ok5() attributes {fir.sym_name = "ok5"} {
+! CHECK-LABEL: func @ok5() attributes {fir.bindc_name = "ok5"} {
subroutine s2() bind(c,name=foo//'5')
character*(*), parameter :: foo = ok
! CHECK: fir.call @ok2() : () -> ()
-! CHECK-LABEL: func @ok6() attributes {fir.sym_name = "ok6"} {
+! CHECK-LABEL: func @ok6() attributes {fir.bindc_name = "ok6"} {
entry s3() bind(c,name=foo//'6')
! CHECK: fir.call @ok2() : () -> ()
continue ! force end of specification part
-! CHECK-LABEL: func @ok7() attributes {fir.sym_name = "ok7"} {
+! CHECK-LABEL: func @ok7() attributes {fir.bindc_name = "ok7"} {
entry s4() bind(c,name=foo//'7')
! CHECK: fir.call @ok2() : () -> ()
call s1
More information about the flang-commits
mailing list