Skip to content

Commit f79ab42

Browse files
tblahkcloudy0717
authored andcommitted
Revert "[flang][TBAA] refine TARGET/POINTER encoding" (llvm#170105)
Reverts llvm#169544 [Regressed](https://lab.llvm.org/buildbot/#/builders/143/builds/12956) gfortran test suite
1 parent bd2f650 commit f79ab42

File tree

13 files changed

+160
-162
lines changed

13 files changed

+160
-162
lines changed

flang/include/flang/Optimizer/Analysis/TBAAForest.h

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -99,25 +99,11 @@ struct TBAATree {
9999
// |- "any data access"
100100
// |
101101
// |- "dummy arg data"
102-
// |
103-
// |- <dummy arg name 1>
104-
// |- <dummy arg name 2>
105-
// |- "target data" <-- Any POINTER variable or TARGET dummy arg
106-
// |
107-
// |- <target name 1> <--- any TARGET variable which isn't a dummy arg
108-
// |- <target name 2>
109-
// |- "allocated data"
110-
// |
111-
// |- <allocated name 1>
112-
// |- <allocated name 2>
113-
// |- "direct data"
114-
// |
115-
// |- <direct name 1>
116-
// |- <direct name 2>
117-
// |- "global data"
118-
// |
119-
// |- <global name 1>
120-
// |- <global name 2>
102+
// |- "target data"
103+
// |
104+
// |- "allocated data"
105+
// |- "direct data"
106+
// |- "global data"
121107
static TBAATree buildTree(mlir::StringAttr functionName);
122108

123109
private:

flang/lib/Optimizer/Analysis/TBAAForest.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,12 @@ fir::TBAATree::TBAATree(mlir::LLVM::TBAATypeDescriptorAttr anyAccess,
6666
mlir::LLVM::TBAATypeDescriptorAttr dataRoot,
6767
mlir::LLVM::TBAATypeDescriptorAttr boxMemberTypeDesc)
6868
: targetDataTree(dataRoot.getContext(), "target data", dataRoot),
69-
globalDataTree(dataRoot.getContext(), "global data", dataRoot),
70-
allocatedDataTree(dataRoot.getContext(), "allocated data", dataRoot),
69+
globalDataTree(dataRoot.getContext(), "global data",
70+
targetDataTree.getRoot()),
71+
allocatedDataTree(dataRoot.getContext(), "allocated data",
72+
targetDataTree.getRoot()),
7173
dummyArgDataTree(dataRoot.getContext(), "dummy arg data", dataRoot),
72-
directDataTree(dataRoot.getContext(), "direct data", dataRoot),
74+
directDataTree(dataRoot.getContext(), "direct data",
75+
targetDataTree.getRoot()),
7376
anyAccessDesc(anyAccess), boxMemberTypeDesc(boxMemberTypeDesc),
7477
anyDataTypeDesc(dataRoot) {}

flang/lib/Optimizer/Transforms/AddAliasTags.cpp

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -692,9 +692,8 @@ void AddAliasTagsPass::runOnAliasInterface(fir::FirAliasTagOpInterface op,
692692
LLVM_DEBUG(llvm::dbgs().indent(2)
693693
<< "Found reference to dummy argument at " << *op << "\n");
694694
std::string name = getFuncArgName(llvm::cast<mlir::Value>(source.origin.u));
695-
// POINTERS can alias with any POINTER or TARGET. Assume that TARGET dummy
696-
// arguments might alias with each other (because of the "TARGET" hole for
697-
// dummy arguments). See flang/docs/Aliasing.md.
695+
// If it is a TARGET or POINTER, then we do not care about the name,
696+
// because the tag points to the root of the subtree currently.
698697
if (source.isTargetOrPointer()) {
699698
tag = state.getFuncTreeWithScope(func, scopeOp).targetDataTree.getTag();
700699
} else if (!name.empty()) {
@@ -717,12 +716,7 @@ void AddAliasTagsPass::runOnAliasInterface(fir::FirAliasTagOpInterface op,
717716
<< "Found reference to global " << globalName.str() << " at "
718717
<< *op << "\n");
719718
if (source.isPointer()) {
720-
// Pointers can alias with any pointer or target.
721719
tag = state.getFuncTreeWithScope(func, scopeOp).targetDataTree.getTag();
722-
} else if (source.isTarget()) {
723-
// Targets could alias with any pointer but not with each other.
724-
tag = state.getFuncTreeWithScope(func, scopeOp)
725-
.targetDataTree.getTag(globalName);
726720
} else {
727721
// In general, place the tags under the "global data" root.
728722
fir::TBAATree::SubtreeState *subTree =
@@ -782,17 +776,9 @@ void AddAliasTagsPass::runOnAliasInterface(fir::FirAliasTagOpInterface op,
782776
const char *name = glbl.getRootReference().data();
783777
LLVM_DEBUG(llvm::dbgs().indent(2) << "Found reference to direct " << name
784778
<< " at " << *op << "\n");
785-
// Pointer can alias with any pointer or target so that gets the root.
786779
if (source.isPointer())
787780
tag = state.getFuncTreeWithScope(func, scopeOp).targetDataTree.getTag();
788-
// Targets could alias with any pointer but not with each other so they
789-
// get their own node inside of the target data tree.
790-
else if (source.isTarget())
791-
tag = state.getFuncTreeWithScope(func, scopeOp)
792-
.targetDataTree.getTag(name);
793781
else
794-
// Boxes that are not pointers or targets cannot alias with those that
795-
// are. Put them under global data.
796782
tag = state.getFuncTreeWithScope(func, scopeOp)
797783
.directDataTree.getTag(name);
798784
} else {

flang/test/Driver/tco-test-gen.fir

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,13 @@ func.func @_QPtest(%arg0: !fir.ref<i32> {fir.bindc_name = "num"}, %arg1: !fir.re
7777
// CHECK: llvm.cond_br %[[VAL_17]], ^bb2, ^bb3
7878
// CHECK: ^bb2:
7979

80-
// AA: llvm.store %[[VAL_15]], %[[VAL_1]] {tbaa = [#llvm.tbaa_tag<base_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, access_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : i32, !llvm.ptr
80+
// AA: llvm.store %[[VAL_15]], %[[VAL_1]] {tbaa = [#llvm.tbaa_tag<base_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "target data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, access_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "target data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : i32, !llvm.ptr
8181
// NOAA: llvm.store %[[VAL_15]], %{{.*}} : i32, !llvm.ptr
8282

8383
// AA: %[[VAL_18:.*]] = llvm.load %[[ARG0]] {tbaa = [#llvm.tbaa_tag<base_type = <id = "dummy arg data/_QFtestEnum", members = {<#llvm.tbaa_type_desc<id = "dummy arg data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, access_type = <id = "dummy arg data/_QFtestEnum", members = {<#llvm.tbaa_type_desc<id = "dummy arg data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : !llvm.ptr -> i32
8484
// NOAA: %[[VAL_18:.*]] = llvm.load %[[ARG0]] : !llvm.ptr -> i32
8585

86-
// AA: %[[VAL_19:.*]] = llvm.load %[[VAL_1]] {tbaa = [#llvm.tbaa_tag<base_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, access_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : !llvm.ptr -> i32
86+
// AA: %[[VAL_19:.*]] = llvm.load %[[VAL_1]] {tbaa = [#llvm.tbaa_tag<base_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "target data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, access_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "target data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : !llvm.ptr -> i32
8787
// NOAA: %[[VAL_19:.*]] = llvm.load %{{.*}} : !llvm.ptr -> i32
8888

8989
// CHECK: %[[VAL_20:.*]] = llvm.add %[[VAL_18]], %[[VAL_19]] : i32
@@ -92,15 +92,15 @@ func.func @_QPtest(%arg0: !fir.ref<i32> {fir.bindc_name = "num"}, %arg1: !fir.re
9292

9393
// CHECK: %[[VAL_21:.*]] = llvm.trunc %[[VAL_10]] : i64 to i32
9494

95-
// AA: %[[VAL_22:.*]] = llvm.load %[[VAL_1]] {tbaa = [#llvm.tbaa_tag<base_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, access_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : !llvm.ptr -> i32
95+
// AA: %[[VAL_22:.*]] = llvm.load %[[VAL_1]] {tbaa = [#llvm.tbaa_tag<base_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "target data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, access_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "target data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : !llvm.ptr -> i32
9696
// NOAA: %[[VAL_22:.*]] = llvm.load %{{.*}} : !llvm.ptr -> i32
9797

9898
// CHECK: %[[VAL_23:.*]] = llvm.add %[[VAL_22]], %[[VAL_21]] overflow<nsw> : i32
9999
// CHECK: %[[VAL_24:.*]] = llvm.sub %[[VAL_16]], %{{.*}} : i64
100100
// CHECK: llvm.br ^bb1(%[[VAL_23]], %[[VAL_24]] : i32, i64)
101101
// CHECK: ^bb3:
102102

103-
// AA: llvm.store %[[VAL_15]], %[[VAL_1]] {tbaa = [#llvm.tbaa_tag<base_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, access_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : i32, !llvm.ptr
103+
// AA: llvm.store %[[VAL_15]], %[[VAL_1]] {tbaa = [#llvm.tbaa_tag<base_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "target data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, access_type = <id = "allocated data/_QFtestEi", members = {<#llvm.tbaa_type_desc<id = "allocated data", members = {<#llvm.tbaa_type_desc<id = "target data", members = {<#llvm.tbaa_type_desc<id = "any data access", members = {<#llvm.tbaa_type_desc<id = "any access", members = {<#llvm.tbaa_root<id = "Flang function root _QPtest">, 0>}>, 0>}>, 0>}>, 0>}>, 0>}>, offset = 0>]} : i32, !llvm.ptr
104104
// NOAA: llvm.store %[[VAL_15]], %{{.*}} : i32, !llvm.ptr
105105

106106
// CHECK: llvm.return

flang/test/Fir/tbaa-codegen2.fir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,4 @@ module attributes {fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", llvm.targ
114114
// CHECK: ![[TMP_DATA_ACCESS_TAG]] = !{![[TMP_DATA_ACCESS_TYPE:.*]], ![[TMP_DATA_ACCESS_TYPE]], i64 0}
115115
// CHECK: ![[TMP_DATA_ACCESS_TYPE]] = !{!"allocated data/", ![[TMP_ACCESS_TYPE:.*]], i64 0}
116116
// CHECK: ![[TMP_ACCESS_TYPE]] = !{!"allocated data", ![[TARGET_ACCESS_TAG:.*]], i64 0}
117+
// CHECK: ![[TARGET_ACCESS_TAG]] = !{!"target data", ![[DATA_ACCESS_TYPE]], i64 0}

0 commit comments

Comments
 (0)