diff --git a/flang/include/flang/Optimizer/Analysis/TBAAForest.h b/flang/include/flang/Optimizer/Analysis/TBAAForest.h index b4932594114a1..0b70778eba3af 100644 --- a/flang/include/flang/Optimizer/Analysis/TBAAForest.h +++ b/flang/include/flang/Optimizer/Analysis/TBAAForest.h @@ -99,11 +99,25 @@ struct TBAATree { // |- "any data access" // | // |- "dummy arg data" - // |- "target data" - // | - // |- "allocated data" - // |- "direct data" - // |- "global data" + // | + // |- + // |- + // |- "target data" <-- Any POINTER variable or TARGET dummy arg + // | + // |- <--- any TARGET variable which isn't a dummy arg + // |- + // |- "allocated data" + // | + // |- + // |- + // |- "direct data" + // | + // |- + // |- + // |- "global data" + // | + // |- + // |- static TBAATree buildTree(mlir::StringAttr functionName); private: diff --git a/flang/lib/Optimizer/Analysis/TBAAForest.cpp b/flang/lib/Optimizer/Analysis/TBAAForest.cpp index 44a0348da3a6f..7154785c62c75 100644 --- a/flang/lib/Optimizer/Analysis/TBAAForest.cpp +++ b/flang/lib/Optimizer/Analysis/TBAAForest.cpp @@ -66,12 +66,9 @@ fir::TBAATree::TBAATree(mlir::LLVM::TBAATypeDescriptorAttr anyAccess, mlir::LLVM::TBAATypeDescriptorAttr dataRoot, mlir::LLVM::TBAATypeDescriptorAttr boxMemberTypeDesc) : targetDataTree(dataRoot.getContext(), "target data", dataRoot), - globalDataTree(dataRoot.getContext(), "global data", - targetDataTree.getRoot()), - allocatedDataTree(dataRoot.getContext(), "allocated data", - targetDataTree.getRoot()), + globalDataTree(dataRoot.getContext(), "global data", dataRoot), + allocatedDataTree(dataRoot.getContext(), "allocated data", dataRoot), dummyArgDataTree(dataRoot.getContext(), "dummy arg data", dataRoot), - directDataTree(dataRoot.getContext(), "direct data", - targetDataTree.getRoot()), + directDataTree(dataRoot.getContext(), "direct data", dataRoot), anyAccessDesc(anyAccess), boxMemberTypeDesc(boxMemberTypeDesc), anyDataTypeDesc(dataRoot) {} diff --git a/flang/lib/Optimizer/Transforms/AddAliasTags.cpp b/flang/lib/Optimizer/Transforms/AddAliasTags.cpp index 0221c7a8184d7..b592cee794f33 100644 --- a/flang/lib/Optimizer/Transforms/AddAliasTags.cpp +++ b/flang/lib/Optimizer/Transforms/AddAliasTags.cpp @@ -692,8 +692,9 @@ void AddAliasTagsPass::runOnAliasInterface(fir::FirAliasTagOpInterface op, LLVM_DEBUG(llvm::dbgs().indent(2) << "Found reference to dummy argument at " << *op << "\n"); std::string name = getFuncArgName(llvm::cast(source.origin.u)); - // If it is a TARGET or POINTER, then we do not care about the name, - // because the tag points to the root of the subtree currently. + // POINTERS can alias with any POINTER or TARGET. Assume that TARGET dummy + // arguments might alias with each other (because of the "TARGET" hole for + // dummy arguments). See flang/docs/Aliasing.md. if (source.isTargetOrPointer()) { tag = state.getFuncTreeWithScope(func, scopeOp).targetDataTree.getTag(); } else if (!name.empty()) { @@ -716,7 +717,12 @@ void AddAliasTagsPass::runOnAliasInterface(fir::FirAliasTagOpInterface op, << "Found reference to global " << globalName.str() << " at " << *op << "\n"); if (source.isPointer()) { + // Pointers can alias with any pointer or target. tag = state.getFuncTreeWithScope(func, scopeOp).targetDataTree.getTag(); + } else if (source.isTarget()) { + // Targets could alias with any pointer but not with each other. + tag = state.getFuncTreeWithScope(func, scopeOp) + .targetDataTree.getTag(globalName); } else { // In general, place the tags under the "global data" root. fir::TBAATree::SubtreeState *subTree = @@ -776,9 +782,17 @@ void AddAliasTagsPass::runOnAliasInterface(fir::FirAliasTagOpInterface op, const char *name = glbl.getRootReference().data(); LLVM_DEBUG(llvm::dbgs().indent(2) << "Found reference to direct " << name << " at " << *op << "\n"); + // Pointer can alias with any pointer or target so that gets the root. if (source.isPointer()) tag = state.getFuncTreeWithScope(func, scopeOp).targetDataTree.getTag(); + // Targets could alias with any pointer but not with each other so they + // get their own node inside of the target data tree. + else if (source.isTarget()) + tag = state.getFuncTreeWithScope(func, scopeOp) + .targetDataTree.getTag(name); else + // Boxes that are not pointers or targets cannot alias with those that + // are. Put them under global data. tag = state.getFuncTreeWithScope(func, scopeOp) .directDataTree.getTag(name); } else { diff --git a/flang/test/Driver/tco-test-gen.fir b/flang/test/Driver/tco-test-gen.fir index b39295d72918f..438804ce42b76 100644 --- a/flang/test/Driver/tco-test-gen.fir +++ b/flang/test/Driver/tco-test-gen.fir @@ -77,13 +77,13 @@ func.func @_QPtest(%arg0: !fir.ref {fir.bindc_name = "num"}, %arg1: !fir.re // CHECK: llvm.cond_br %[[VAL_17]], ^bb2, ^bb3 // CHECK: ^bb2: -// AA: llvm.store %[[VAL_15]], %[[VAL_1]] {tbaa = [#llvm.tbaa_tag, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, access_type = , 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : i32, !llvm.ptr +// AA: llvm.store %[[VAL_15]], %[[VAL_1]] {tbaa = [#llvm.tbaa_tag, 0>}>, 0>}>, 0>}>, 0>}>, access_type = , 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : i32, !llvm.ptr // NOAA: llvm.store %[[VAL_15]], %{{.*}} : i32, !llvm.ptr // AA: %[[VAL_18:.*]] = llvm.load %[[ARG0]] {tbaa = [#llvm.tbaa_tag, 0>}>, 0>}>, 0>}>, 0>}>, access_type = , 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : !llvm.ptr -> i32 // NOAA: %[[VAL_18:.*]] = llvm.load %[[ARG0]] : !llvm.ptr -> i32 -// AA: %[[VAL_19:.*]] = llvm.load %[[VAL_1]] {tbaa = [#llvm.tbaa_tag, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, access_type = , 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : !llvm.ptr -> i32 +// AA: %[[VAL_19:.*]] = llvm.load %[[VAL_1]] {tbaa = [#llvm.tbaa_tag, 0>}>, 0>}>, 0>}>, 0>}>, access_type = , 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : !llvm.ptr -> i32 // NOAA: %[[VAL_19:.*]] = llvm.load %{{.*}} : !llvm.ptr -> i32 // CHECK: %[[VAL_20:.*]] = llvm.add %[[VAL_18]], %[[VAL_19]] : i32 @@ -92,7 +92,7 @@ func.func @_QPtest(%arg0: !fir.ref {fir.bindc_name = "num"}, %arg1: !fir.re // CHECK: %[[VAL_21:.*]] = llvm.trunc %[[VAL_10]] : i64 to i32 -// AA: %[[VAL_22:.*]] = llvm.load %[[VAL_1]] {tbaa = [#llvm.tbaa_tag, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, access_type = , 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : !llvm.ptr -> i32 +// AA: %[[VAL_22:.*]] = llvm.load %[[VAL_1]] {tbaa = [#llvm.tbaa_tag, 0>}>, 0>}>, 0>}>, 0>}>, access_type = , 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : !llvm.ptr -> i32 // NOAA: %[[VAL_22:.*]] = llvm.load %{{.*}} : !llvm.ptr -> i32 // CHECK: %[[VAL_23:.*]] = llvm.add %[[VAL_22]], %[[VAL_21]] overflow : i32 @@ -100,7 +100,7 @@ func.func @_QPtest(%arg0: !fir.ref {fir.bindc_name = "num"}, %arg1: !fir.re // CHECK: llvm.br ^bb1(%[[VAL_23]], %[[VAL_24]] : i32, i64) // CHECK: ^bb3: -// AA: llvm.store %[[VAL_15]], %[[VAL_1]] {tbaa = [#llvm.tbaa_tag, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, access_type = , 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : i32, !llvm.ptr +// AA: llvm.store %[[VAL_15]], %[[VAL_1]] {tbaa = [#llvm.tbaa_tag, 0>}>, 0>}>, 0>}>, 0>}>, access_type = , 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : i32, !llvm.ptr // NOAA: llvm.store %[[VAL_15]], %{{.*}} : i32, !llvm.ptr // CHECK: llvm.return diff --git a/flang/test/Fir/tbaa-codegen2.fir b/flang/test/Fir/tbaa-codegen2.fir index 4907aa03ec5a5..071d3ec89394c 100644 --- a/flang/test/Fir/tbaa-codegen2.fir +++ b/flang/test/Fir/tbaa-codegen2.fir @@ -114,4 +114,3 @@ module attributes {fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", llvm.targ // CHECK: ![[TMP_DATA_ACCESS_TAG]] = !{![[TMP_DATA_ACCESS_TYPE:.*]], ![[TMP_DATA_ACCESS_TYPE]], i64 0} // CHECK: ![[TMP_DATA_ACCESS_TYPE]] = !{!"allocated data/", ![[TMP_ACCESS_TYPE:.*]], i64 0} // CHECK: ![[TMP_ACCESS_TYPE]] = !{!"allocated data", ![[TARGET_ACCESS_TAG:.*]], i64 0} -// CHECK: ![[TARGET_ACCESS_TAG]] = !{!"target data", ![[DATA_ACCESS_TYPE]], i64 0} diff --git a/flang/test/Transforms/tbaa-for-common-vars.fir b/flang/test/Transforms/tbaa-for-common-vars.fir index a8dd86bff72ed..087e6938f8acb 100644 --- a/flang/test/Transforms/tbaa-for-common-vars.fir +++ b/flang/test/Transforms/tbaa-for-common-vars.fir @@ -28,8 +28,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[$ATTR_0:.+]] = #llvm.tbaa_root // CHECK: #[[$ATTR_1:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_2:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_3:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_4:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_4:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_5:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_6:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_7:.+]] = #llvm.tbaa_type_desc}> @@ -66,8 +65,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[$ATTR_10:.+]] = #llvm.tbaa_root // CHECK: #[[$ATTR_11:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_12:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_13:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_14:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_14:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_15:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_16:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_18:.+]] = #llvm.tbaa_tag @@ -118,14 +116,13 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[ANYACC3INNER:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[ANYDATA3:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[ANYDATA3INNER:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[TARGETDATA3:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[GLOBALDATA3:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[DUMMYARG3INNER:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[GLOBALDATA3:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[GLOBALDATA3COMMON3:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[DUMMYD:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[DUMMYC:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[DUMMYDTAG:.+]] = #llvm.tbaa_tag // CHECK: #[[DUMMYCTAG:.+]] = #llvm.tbaa_tag -// CHECK: #[[GLOBALDATA3COMMON3:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLOBALB:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLOBALA:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLOBALBTAG:.+]] = #llvm.tbaa_tag @@ -180,10 +177,8 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[INNER4ANYACC:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[TEST4ANYDATA:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[INNER4ANYDATA:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[TEST4TARGET:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[INNER4TARGET:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[TEST4GLOBAL:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[INNER4GLOBAL:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[TEST4GLOBAL:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[INNER4GLOBAL:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[TEST4COMMON:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[INNER4COMMON:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[TEST4B:.+]] = #llvm.tbaa_type_desc}> @@ -229,8 +224,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[TEST5ROOT:.+]] = #llvm.tbaa_root // CHECK: #[[TEST5ANYACC:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[TEST5ANYDATA:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[TEST5TARGET:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[TEST5GLOBAL:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[TEST5GLOBAL:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[TEST5COMMON5:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[TEST5COMMON5TAG:.+]] = #llvm.tbaa_tag // CHECK: #[[TEST5A:.+]] = #llvm.tbaa_type_desc}> @@ -288,8 +282,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[$ATTR_0:.+]] = #llvm.tbaa_root // CHECK: #[[$ATTR_1:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_2:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_3:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_4:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_4:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_5:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_6:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_7:.+]] = #llvm.tbaa_tag @@ -354,8 +347,8 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[$ATTR_74:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_75:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_76:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_78:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_77:.+]] = #llvm.tbaa_tag -// CHECK: #[[$ATTR_78:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_79:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_80:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_81:.+]] = #llvm.tbaa_tag @@ -425,10 +418,10 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[$ATTR_82:.+]] = #llvm.tbaa_root // CHECK: #[[$ATTR_83:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_84:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_87:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_85:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_86:.+]] = #llvm.tbaa_tag -// CHECK: #[[$ATTR_87:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_88:.+]] = #llvm.tbaa_tag +// CHECK: #[[$ATTR_86:.+]] = #llvm.tbaa_tag // CHECK-LABEL: func.func @_QPtest8() { // CHECK: fir.load %{{[0-9]+}} : !fir.ref>> // CHECK: fir.load %{{[0-9]+}} {tbaa = [#[[$ATTR_86]]]} : !fir.ptr diff --git a/flang/test/Transforms/tbaa-for-global-equiv-vars.fir b/flang/test/Transforms/tbaa-for-global-equiv-vars.fir index dbefa3f8e3f5f..0d082c7504024 100644 --- a/flang/test/Transforms/tbaa-for-global-equiv-vars.fir +++ b/flang/test/Transforms/tbaa-for-global-equiv-vars.fir @@ -30,8 +30,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[ROOT1:.+]] = #llvm.tbaa_root // CHECK: #[[ANYACC1:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[ANYDATA1:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[TARGETDATA1:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[GLOBALDATA1:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[GLOBALDATA1:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLOB1COMMON:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLOB1:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[TAG:.+]] = #llvm.tbaa_tag @@ -74,8 +73,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[ROOT2:.+]] = #llvm.tbaa_root // CHECK: #[[ANYACC2:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[ANYDATA2:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[TARGETDATA2:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[GLOBALDATA2:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[GLOBALDATA2:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLOB1COMMON:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLOB1GLOB2:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLOB3:.+]] = #llvm.tbaa_type_desc}> diff --git a/flang/test/Transforms/tbaa-for-local-vars.fir b/flang/test/Transforms/tbaa-for-local-vars.fir index 4eb6b2ecf31c4..fde5c400c75ed 100644 --- a/flang/test/Transforms/tbaa-for-local-vars.fir +++ b/flang/test/Transforms/tbaa-for-local-vars.fir @@ -35,18 +35,22 @@ // scope's TBAA tree. // RUN: fir-opt --fir-add-alias-tags %s | FileCheck %s -// CHECK: #[[$ATTR_0:.+]] = #llvm.tbaa_root -// CHECK: #[[$ATTR_1:.+]] = #llvm.tbaa_root -// CHECK: #[[$ATTR_2:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_3:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_4:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_5:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_6:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_7:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_9:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_10:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_12:.+]] = #llvm.tbaa_tag -// CHECK: #[[$ATTR_13:.+]] = #llvm.tbaa_tag +// CHECK: #[[$SCOPE_2:.+]] = #llvm.tbaa_root +// CHECK: #[[$SCOPE_1:.+]] = #llvm.tbaa_root +// CHECK: #[[$ANY_ACCESS2:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ANY_ACCESS1:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ANY_DATA2:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ANY_DATA1:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$DUMMY_ARG2:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ALLOCATED_DATA1:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$DUMMY_ARG1:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ALLOCATED_DATA1_TAG:.+]] = #llvm.tbaa_tag +// CHECK: #[[$BAR_THIS2:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$TEST_VAR1:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$TEST_ARG1:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$BAR_THIS2_TAG:.+]] = #llvm.tbaa_tag +// CHECK: #[[$TEST_VAR1_TAG:.+]] = #llvm.tbaa_tag +// CHECK: #[[$TEST_ARG2_TAG:.+]] = #llvm.tbaa_tag // CHECK-LABEL: func.func @_QMmPtest( // CHECK-SAME: %[[ARG0:.*]]: !fir.ref {fir.bindc_name = "arg"}) { @@ -61,10 +65,10 @@ // CHECK: %[[VAL_10:.*]] = fir.dummy_scope : !fir.dscope // CHECK: %[[VAL_11:.*]] = fir.declare %[[VAL_9]] dummy_scope %[[VAL_10]] {fortran_attrs = #fir.var_attrs, uniq_name = "_QMmFbarEthis"} : (!fir.class>, !fir.dscope) -> !fir.class> // CHECK: %[[VAL_12:.*]] = fir.coordinate_of %[[VAL_11]], x : (!fir.class>) -> !fir.ref -// CHECK: fir.store %[[VAL_0]] to %[[VAL_12]] {tbaa = [#[[$ATTR_12]]]} : !fir.ref +// CHECK: fir.store %[[VAL_0]] to %[[VAL_12]] {tbaa = [#[[$BAR_THIS2_TAG]]]} : !fir.ref // CHECK: %[[VAL_13:.*]] = fir.declare %[[VAL_1]] {uniq_name = ".tmp.func_result"} : (!fir.ref>) -> !fir.ref> // CHECK: %[[VAL_14:.*]] = fir.coordinate_of %[[VAL_13]], x : (!fir.ref>) -> !fir.ref -// CHECK: %[[VAL_16:.*]] = fir.load %[[VAL_14]] {tbaa = [#[[$ATTR_13]]]} : !fir.ref +// CHECK: %[[VAL_16:.*]] = fir.load %[[VAL_14]] {tbaa = [#[[$ALLOCATED_DATA1_TAG]]]} : !fir.ref module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4xi64>, i1 = dense<8> : vector<2xi64>, i8 = dense<8> : vector<2xi64>, i16 = dense<16> : vector<2xi64>, i32 = dense<32> : vector<2xi64>, i64 = dense<[32, 64]> : vector<2xi64>, f16 = dense<16> : vector<2xi64>, f64 = dense<64> : vector<2xi64>, f128 = dense<128> : vector<2xi64>, "dlti.endianness" = "little">, llvm.data_layout = ""} { func.func @_QMmPtest(%arg0: !fir.ref {fir.bindc_name = "arg"}) { %cst = arith.constant 1.000000e+00 : f32 diff --git a/flang/test/Transforms/tbaa-with-dummy-scope.fir b/flang/test/Transforms/tbaa-with-dummy-scope.fir index 4ae2b8efe2581..d7f33776150ae 100644 --- a/flang/test/Transforms/tbaa-with-dummy-scope.fir +++ b/flang/test/Transforms/tbaa-with-dummy-scope.fir @@ -24,7 +24,7 @@ // CHECK: #[[TARGETDATA:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_6:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_7:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[TARGETTAG:.+]] = #llvm.tbaa_tag +// CHECK: #[[TARGETDATA_TAG:.+]] = #llvm.tbaa_tag // CHECK: #[[$ATTR_8:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_9:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_10:.+]] = #llvm.tbaa_type_desc}> @@ -34,8 +34,8 @@ // CHECK: #[[$ATTR_14:.+]] = #llvm.tbaa_tag // CHECK: #[[$ATTR_15:.+]] = #llvm.tbaa_tag // CHECK: func.func @test1( -// CHECK: %[[VAL_5:.*]] = fir.load %{{.*}} {tbaa = [#[[TARGETTAG]]]} : !fir.ref -// CHECK: fir.store %{{.*}} {tbaa = [#[[TARGETTAG]]]} : !fir.ref +// CHECK: %[[VAL_5:.*]] = fir.load %{{.*}} {tbaa = [#[[TARGETDATA_TAG]]]} : !fir.ref +// CHECK: fir.store %{{.*}} {tbaa = [#[[TARGETDATA_TAG]]]} : !fir.ref // CHECK: %[[VAL_6:.*]] = fir.dummy_scope : !fir.dscope // CHECK: %[[VAL_9:.*]] = fir.load %{{.*}} {tbaa = [#[[$ATTR_12]]]} : !fir.ref // CHECK: fir.store %{{.*}} {tbaa = [#[[$ATTR_13]]]} : !fir.ref @@ -83,23 +83,21 @@ func.func @test1(%arg0: !fir.ref {fir.bindc_name = "x", fir.target}, %arg1: // CHECK: #[[$ATTR_33:.+]] = #llvm.tbaa_root // CHECK: #[[$ATTR_34:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_35:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_36:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_37:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[CALLERTARGETDATA:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[CALLEETARGETDATA:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_40:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_38:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_39:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_45:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_50:.+]] = #llvm.tbaa_tag +// CHECK: #[[$CALLERANYDATA:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$CALLEEANYDATA:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_38:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_39:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_40:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_41:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_42:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_43:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_44:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_45:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_46:.+]] = #llvm.tbaa_tag // CHECK: #[[$ATTR_47:.+]] = #llvm.tbaa_tag // CHECK: #[[$ATTR_48:.+]] = #llvm.tbaa_tag // CHECK: #[[$ATTR_49:.+]] = #llvm.tbaa_tag +// CHECK: #[[$ATTR_50:.+]] = #llvm.tbaa_tag // CHECK: func.func @_QMtestPcaller( // CHECK-SAME: %[[VAL_0:.*]]: !fir.ref {fir.bindc_name = "z"}) { // CHECK: %[[VAL_1:.*]] = fir.dummy_scope : !fir.dscope diff --git a/flang/test/Transforms/tbaa-with-dummy-scope2.fir b/flang/test/Transforms/tbaa-with-dummy-scope2.fir index 54902ca7d41e1..6f5ed69fbc9c6 100644 --- a/flang/test/Transforms/tbaa-with-dummy-scope2.fir +++ b/flang/test/Transforms/tbaa-with-dummy-scope2.fir @@ -44,16 +44,15 @@ func.func @_QPtest1() attributes {noinline} { } // CHECK: #[[$ATTR_0:.+]] = #llvm.tbaa_root // CHECK: #[[$ATTR_1:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_2:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$TARGETDATA:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_3:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$LOCAL_ATTR_0:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_5:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_4:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_7:.+]] = #llvm.tbaa_tag +// CHECK: #[[$ANYDATA:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$LOCAL_ATTR_0:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_3:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_4:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$LOCAL_ATTR_1:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_5:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_6:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$LOCAL_ATTR_2:.+]] = #llvm.tbaa_tag +// CHECK: #[[$ATTR_7:.+]] = #llvm.tbaa_tag // CHECK: #[[$ATTR_8:.+]] = #llvm.tbaa_tag // CHECK-LABEL: func.func @_QPtest1() attributes {noinline} { // CHECK: %[[VAL_2:.*]] = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFtest1FinnerEy"} @@ -90,19 +89,18 @@ func.func @_QPtest2() attributes {noinline} { } // CHECK: #[[$ATTR_0:.+]] = #llvm.tbaa_root // CHECK: #[[$ATTR_1:.+]] = #llvm.tbaa_root -// CHECK: #[[$ATTR_2:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_3:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_4:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_5:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$TARGETDATA_0:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_6:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$LOCAL_ATTR_0:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_8:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_7:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[$ATTR_10:.+]] = #llvm.tbaa_tag +// CHECK: #[[$ANY_ACCESS_0:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ANY_ACCESS_1:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ANY_DATA_0:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ANY_DATA_1:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$LOCAL_ATTR_0:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_6:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_7:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$LOCAL_ATTR_1:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[$ATTR_8:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$ATTR_9:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[$LOCAL_ATTR_2:.+]] = #llvm.tbaa_tag +// CHECK: #[[$ATTR_10:.+]] = #llvm.tbaa_tag // CHECK: #[[$ATTR_11:.+]] = #llvm.tbaa_tag // CHECK-LABEL: func.func @_QPtest2() attributes {noinline} { // CHECK: %[[VAL_2:.*]] = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFtest2FinnerEy"} diff --git a/flang/test/Transforms/tbaa2.fir b/flang/test/Transforms/tbaa2.fir index a594e6b32fdac..9b5307ba69d17 100644 --- a/flang/test/Transforms/tbaa2.fir +++ b/flang/test/Transforms/tbaa2.fir @@ -48,18 +48,10 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[ROOT:.+]] = #llvm.tbaa_root // CHECK: #[[ANY_ACCESS:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[ANY_DATA:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[TARGETDATA:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[ANY_GLBL:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[ANY_LOCAL:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[ANY_ARG:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[ANY_GLBL:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[ANY_LOCAL:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[ARG_LOW:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[ANY_DIRECT:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[ARG_Z:.+]] = #llvm.tbaa_type_desc}> -// CHECK: #[[ARG_Y:.+]] = #llvm.tbaa_type_desc}> - -// CHECK: #[[ARG_LOW_TAG:.+]] = #llvm.tbaa_tag -// CHECK: #[[ARG_Z_TAG:.+]] = #llvm.tbaa_tag -// CHECK: #[[ARG_Y_TAG:.+]] = #llvm.tbaa_tag +// CHECK: #[[ANY_DIRECT:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLBL_ZSTART:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLBL_ZSTOP:.+]] = #llvm.tbaa_type_desc}> @@ -69,10 +61,13 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[LOCAL2_ALLOC:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLBL_XSTART:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[LOCAL3_ALLOC:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[ARG_LOW:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[LOCAL4_ALLOC:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[DIRECT_A:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[DIRECT_B:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[ARG_Z:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLBL_DYINV:.+]] = #llvm.tbaa_type_desc}> +// CHECK: #[[ARG_Y:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[LOCAL5_ALLOC:.+]] = #llvm.tbaa_type_desc}> // CHECK: #[[GLBL_ZSTART_TAG:.+]] = #llvm.tbaa_tag @@ -83,10 +78,13 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // CHECK: #[[LOCAL2_ALLOC_TAG:.+]] = #llvm.tbaa_tag // CHECK: #[[GLBL_XSTART_TAG:.+]] = #llvm.tbaa_tag // CHECK: #[[LOCAL3_ALLOC_TAG:.+]] = #llvm.tbaa_tag +// CHECK: #[[ARG_LOW_TAG:.+]] = #llvm.tbaa_tag // CHECK: #[[LOCAL4_ALLOC_TAG:.+]] = #llvm.tbaa_tag // CHECK: #[[DIRECT_A_TAG:.+]] = #llvm.tbaa_tag // CHECK: #[[DIRECT_B_TAG:.+]] = #llvm.tbaa_tag +// CHECK: #[[ARG_Z_TAG:.+]] = #llvm.tbaa_tag // CHECK: #[[GLBL_DYINV_TAG:.+]] = #llvm.tbaa_tag +// CHECK: #[[ARG_Y_TAG:.+]] = #llvm.tbaa_tag // CHECK: #[[LOCAL5_ALLOC_TAG:.+]] = #llvm.tbaa_tag func.func @_QMmodPcallee(%arg0: !fir.box> {fir.bindc_name = "z"}, %arg1: !fir.box> {fir.bindc_name = "y"}, %arg2: !fir.ref>>> {fir.bindc_name = "low"}) { diff --git a/flang/test/Transforms/tbaa3.fir b/flang/test/Transforms/tbaa3.fir index abcb7e000bac1..7a9a819ea102a 100644 --- a/flang/test/Transforms/tbaa3.fir +++ b/flang/test/Transforms/tbaa3.fir @@ -1,5 +1,4 @@ -// RUN: fir-opt --fir-add-alias-tags %s | FileCheck --check-prefixes=ALL,DEFAULT %s -// RUN: fir-opt --fir-add-alias-tags --local-alloc-tbaa %s | FileCheck --check-prefixes=ALL,LOCAL %s +// RUN: fir-opt --fir-add-alias-tags %s | FileCheck --check-prefixes=ALL %s // Test AddAliasTagsPass creating sub-tree for TARGET/POINTER variables. @@ -56,56 +55,57 @@ // | |- "dummy arg data/_QFtest1Edummyas" // | |- "dummy arg data/_QFtest1Edummya" // | -// |- "target data" <- all pointers and taget dummys -// | -// |- "global data" -// | | -// | |- "global data/_QMdataEglob" -// | |- "global data/_QMdataEglobt" -// | -// |- "direct data" -// | | -// | |- "direct data/_QMdataEgloba" -// | |- "direct data/_QMdataEglobat" +// |- "target data" <--- all pointers and target dummy arguments go here +// | |- "target data/_QMdataEglobt" +// | |- "target data/_QMdataEglobat" +// | |- "target data/_QFtest1Elocalt" +// | |- "target data/_QFtest1Elocalat" +// | +// |- "global data" +// | | +// | |- "global data/_QMdataEglob" +// | +// |- "direct data" +// | | +// | |- "direct data/_QMdataEgloba" +// | +// |- "allocated data" // | -// |- "allocated data" -// | -// |- "allocated data/_QFtest1Elocal" -// |- "allocated data/_QFtest1Elocalt" -// |- "allocated data/_QFtest1Elocala" -// |- "allocated data/_QFtest1Elocalat" +// |- "allocated data/_QFtest1Elocal" +// |- "allocated data/_QFtest1Elocala" // ALL: #[[FUNCROOT:.+]] = #llvm.tbaa_root // ALL: #[[ANYACCESS:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[ANYDATA:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[GLOBALDATA:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[TARGETDATA:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[DIRECTDATA:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[DUMMYDATA:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[LOCALDATA:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[TARGETTAG:.+]] = #llvm.tbaa_tag -// ALL: #[[GLOBALDATA:.+]] = #llvm.tbaa_type_desc}> -// ALL: #[[DIRECTDATA:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[GLOBVAR:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[GLOBTVAR:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[GLOBAVAR:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[GLOBATVAR:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[DUMMYFVAR:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[DUMMYASVAR:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[DUMMYAVAR:.+]] = #llvm.tbaa_type_desc}> -// LOCAL: #[[LOCALDATA:.+]] = #llvm.tbaa_type_desc}> -// ALL: #[[DUMMYFTAG:.+]] = #llvm.tbaa_tag -// ALL: #[[DUMMYASTAG:.+]] = #llvm.tbaa_tag -// ALL: #[[DUMMYATAG:.+]] = #llvm.tbaa_tag -// ALL: #[[GLOBVAR:.+]] = #llvm.tbaa_type_desc}> -// ALL: #[[GLOBTVAR:.+]] = #llvm.tbaa_type_desc}> -// ALL: #[[GLOBAVAR:.+]] = #llvm.tbaa_type_desc}> -// ALL: #[[GLOBATVAR:.+]] = #llvm.tbaa_type_desc}> -// LOCAL: #[[LOCALVAR:.+]] = #llvm.tbaa_type_desc}> -// LOCAL: #[[LOCALTVAR:.+]] = #llvm.tbaa_type_desc}> -// LOCAL: #[[LOCALAVAR:.+]] = #llvm.tbaa_type_desc}> -// LOCAL: #[[LOCALATVAR:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[LOCALVAR:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[LOCALTVAR:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[LOCALAVAR:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[LOCALATVAR:.+]] = #llvm.tbaa_type_desc}> + // ALL: #[[GLOBTAG:.+]] = #llvm.tbaa_tag // ALL: #[[GLOBTTAG:.+]] = #llvm.tbaa_tag // ALL: #[[GLOBATAG:.+]] = #llvm.tbaa_tag // ALL: #[[GLOBATTAG:.+]] = #llvm.tbaa_tag -// LOCAL: #[[LOCALTAG:.+]] = #llvm.tbaa_tag -// LOCAL: #[[LOCALTTAG:.+]] = #llvm.tbaa_tag -// LOCAL: #[[LOCALATAG:.+]] = #llvm.tbaa_tag -// LOCAL: #[[LOCALATTAG:.+]] = #llvm.tbaa_tag +// ALL: #[[DUMMYFTAG:.+]] = #llvm.tbaa_tag +// ALL: #[[DUMMYASTAG:.+]] = #llvm.tbaa_tag +// ALL: #[[DUMMYATAG:.+]] = #llvm.tbaa_tag +// ALL: #[[LOCALTAG:.+]] = #llvm.tbaa_tag +// ALL: #[[LOCALTTAG:.+]] = #llvm.tbaa_tag +// ALL: #[[LOCALATAG:.+]] = #llvm.tbaa_tag +// ALL: #[[LOCALATTAG:.+]] = #llvm.tbaa_tag module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4xi64>, i1 = dense<8> : vector<2xi64>, i8 = dense<8> : vector<2xi64>, i16 = dense<16> : vector<2xi64>, i32 = dense<32> : vector<2xi64>, i64 = dense<[32, 64]> : vector<2xi64>, f16 = dense<16> : vector<2xi64>, f64 = dense<64> : vector<2xi64>, f128 = dense<128> : vector<2xi64>, "dlti.endianness" = "little">, llvm.data_layout = ""} { fir.global @_QMdataEglob : !fir.array<10xf32> { @@ -263,13 +263,11 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 fir.store %cst to %67 : !fir.ref %68 = fir.array_coor %20(%5) %c1 : (!fir.ref>, !fir.shape<1>, index) -> !fir.ref // real :: local(10) -// DEFAULT: fir.store{{.*}}tbaa -// LOCAL: fir.store{{.*}}{tbaa = [#[[LOCALTAG]]]} : !fir.ref +// ALL: fir.store{{.*}}{tbaa = [#[[LOCALTAG]]]} : !fir.ref fir.store %cst to %68 : !fir.ref %69 = fir.array_coor %33(%5) %c1 : (!fir.ref>, !fir.shape<1>, index) -> !fir.ref // real, target :: localt(10) -// DEFAULT: fir.store{{.*}}tbaa -// LOCAL: fir.store{{.*}}{tbaa = [#[[LOCALTTAG]]]} : !fir.ref +// ALL: fir.store{{.*}}{tbaa = [#[[LOCALTTAG]]]} : !fir.ref fir.store %cst to %69 : !fir.ref // ALL-NOT: fir.load{{.*}}tbaa %70 = fir.load %25 : !fir.ref>>> @@ -278,8 +276,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 %73 = fir.shape_shift %72#0, %72#1 : (index, index) -> !fir.shapeshift<1> %74 = fir.array_coor %71(%73) %c1 : (!fir.heap>, !fir.shapeshift<1>, index) -> !fir.ref // real, allocatable :: locala(:) -// DEFAULT: fir.store{{.*}}tbaa -// LOCAL: fir.store{{.*}}{tbaa = [#[[LOCALATAG]]]} : !fir.ref +// ALL: fir.store{{.*}}{tbaa = [#[[LOCALATAG]]]} : !fir.ref fir.store %cst to %74 : !fir.ref // ALL-NOT: fir.load{{.*}}tbaa %75 = fir.load %27 : !fir.ref>>> @@ -288,8 +285,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 %78 = fir.shape_shift %77#0, %77#1 : (index, index) -> !fir.shapeshift<1> %79 = fir.array_coor %76(%78) %c1 : (!fir.heap>, !fir.shapeshift<1>, index) -> !fir.ref // real, allocatable, target :: localat(:) -// DEFAULT: fir.store{{.*}}tbaa -// LOCAL: fir.store{{.*}}{tbaa = [#[[LOCALATTAG]]]} : !fir.ref +// ALL: fir.store{{.*}}{tbaa = [#[[LOCALATTAG]]]} : !fir.ref fir.store %cst to %79 : !fir.ref // ALL-NOT: fir.load{{.*}}tbaa %80 = fir.load %31 : !fir.ref>>> @@ -297,8 +293,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 %82 = fir.shift %81#0 : (index) -> !fir.shift<1> %83 = fir.array_coor %80(%82) %c1 : (!fir.box>>, !fir.shift<1>, index) -> !fir.ref // real, pointer :: localp(:) -// DEFAULT: fir.store{{.*}}tbaa -// LOCAL: fir.store{{.*}}{tbaa = [#[[TARGETTAG]]]} : !fir.ref +// ALL: fir.store{{.*}}{tbaa = [#[[TARGETTAG]]]} : !fir.ref fir.store %cst to %83 : !fir.ref // ALL-NOT: fir.load{{.*}}tbaa %84 = fir.load %27 : !fir.ref>>> diff --git a/flang/test/Transforms/tbaa4.fir b/flang/test/Transforms/tbaa4.fir index c368a3d06c2ba..5e29014af8935 100644 --- a/flang/test/Transforms/tbaa4.fir +++ b/flang/test/Transforms/tbaa4.fir @@ -1,12 +1,10 @@ // Test TBAA tags for common and equivalence. -// RUN: fir-opt --fir-add-alias-tags --split-input-file %s | FileCheck --check-prefixes=ALL,DEFAULT %s -// RUN: fir-opt --fir-add-alias-tags --local-alloc-tbaa --split-input-file %s | FileCheck --check-prefixes=ALL,LOCAL %s +// RUN: fir-opt --fir-add-alias-tags --split-input-file %s | FileCheck --check-prefixes=ALL %s // ALL: #[[ROOT:.+]] = #llvm.tbaa_root // ALL: #[[ANY:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[ANYDATA:.+]] = #llvm.tbaa_type_desc}> -// ALL: #[[TARGETDATA:.+]] = #llvm.tbaa_type_desc}> -// ALL: #[[GLOBALDATA:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[GLOBALDATA:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[BLK:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[BLK_A:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[BLK_C:.+]] = #llvm.tbaa_type_desc}> @@ -54,19 +52,17 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // ----- -// LOCAL: #[[ROOT:.+]] = #llvm.tbaa_root -// LOCAL: #[[ANY:.+]] = #llvm.tbaa_type_desc}> -// LOCAL: #[[ANYDATA:.+]] = #llvm.tbaa_type_desc}> -// LOCAL: #[[TARGETDATA:.+]] = #llvm.tbaa_type_desc}> -// LOCAL: #[[ALLOCATEDDATA:.+]] = #llvm.tbaa_type_desc}> -// LOCAL: #[[EQUIV:.+]] = #llvm.tbaa_type_desc}> -// LOCAL: #[[TAG:.+]] = #llvm.tbaa_tag +// ALL: #[[ROOT:.+]] = #llvm.tbaa_root +// ALL: #[[ANY:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[ANYDATA:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[ALLOCATEDDATA:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[EQUIV:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[TAG:.+]] = #llvm.tbaa_tag // ALL-LABEL: func.func @_QPtest_local_equiv() { -// LOCAL: fir.store{{.*}}{tbaa = [#[[TAG]]]} : !fir.ptr -// LOCAL: fir.store{{.*}}{tbaa = [#[[TAG]]]} : !fir.ref -// LOCAL: fir.store{{.*}}{tbaa = [#[[TAG]]]} : !fir.ptr -// DEFAULT-NOT: fir.store{{.}}tbaa +// ALL: fir.store{{.*}}{tbaa = [#[[TAG]]]} : !fir.ptr +// ALL: fir.store{{.*}}{tbaa = [#[[TAG]]]} : !fir.ref +// ALL: fir.store{{.*}}{tbaa = [#[[TAG]]]} : !fir.ptr module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4xi64>, i1 = dense<8> : vector<2xi64>, i8 = dense<8> : vector<2xi64>, i16 = dense<16> : vector<2xi64>, i32 = dense<32> : vector<2xi64>, i64 = dense<[32, 64]> : vector<2xi64>, f16 = dense<16> : vector<2xi64>, f64 = dense<64> : vector<2xi64>, f128 = dense<128> : vector<2xi64>, "dlti.endianness" = "little">, llvm.data_layout = ""} { func.func @_QPtest_local_equiv() { %c1 = arith.constant 1 : index @@ -98,8 +94,7 @@ func.func @_QPtest_local_equiv() { // ALL: #[[ROOT:.+]] = #llvm.tbaa_root // ALL: #[[ANY:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[ANYDATA:.+]] = #llvm.tbaa_type_desc}> -// ALL: #[[TARGETDATA:.+]] = #llvm.tbaa_type_desc}> -// ALL: #[[GLOBALDATA:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[GLOBALDATA:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[EQUIV:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[TAG:.+]] = #llvm.tbaa_tag module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4xi64>, i1 = dense<8> : vector<2xi64>, i8 = dense<8> : vector<2xi64>, i16 = dense<16> : vector<2xi64>, i32 = dense<32> : vector<2xi64>, i64 = dense<[32, 64]> : vector<2xi64>, f16 = dense<16> : vector<2xi64>, f64 = dense<64> : vector<2xi64>, f128 = dense<128> : vector<2xi64>, "dlti.endianness" = "little">, llvm.data_layout = ""} { @@ -143,8 +138,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec : vector<4 // ALL: #[[ROOT:.+]] = #llvm.tbaa_root // ALL: #[[ANY:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[ANYDATA:.+]] = #llvm.tbaa_type_desc}> -// ALL: #[[TARGETDATA:.+]] = #llvm.tbaa_type_desc}> -// ALL: #[[GLOBALDATA:.+]] = #llvm.tbaa_type_desc}> +// ALL: #[[GLOBALDATA:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[EQUIV:.+]] = #llvm.tbaa_type_desc}> // ALL: #[[TAG:.+]] = #llvm.tbaa_tag