@@ -6,6 +6,7 @@ private newtype TMemoryAccessKind =
66 TBufferMemoryAccess ( ) or
77 TBufferMayMemoryAccess ( ) or
88 TEscapedMemoryAccess ( ) or
9+ TEscapedMayMemoryAccess ( ) or
910 TPhiMemoryAccess ( ) or
1011 TUnmodeledMemoryAccess ( ) or
1112 TChiTotalMemoryAccess ( ) or
@@ -16,7 +17,17 @@ private newtype TMemoryAccessKind =
1617 * memory result.
1718 */
1819class MemoryAccessKind extends TMemoryAccessKind {
19- abstract string toString ( ) ;
20+ string toString ( ) {
21+ none ( )
22+ }
23+
24+ /**
25+ * Holds if the operand or result accesses memory pointed to by the `AddressOperand` on the
26+ * same instruction.
27+ */
28+ predicate usesAddressOperand ( ) {
29+ none ( )
30+ }
2031}
2132
2233/**
@@ -27,6 +38,10 @@ class IndirectMemoryAccess extends MemoryAccessKind, TIndirectMemoryAccess {
2738 override string toString ( ) {
2839 result = "indirect"
2940 }
41+
42+ override final predicate usesAddressOperand ( ) {
43+ any ( )
44+ }
3045}
3146
3247/**
@@ -37,6 +52,10 @@ class IndirectMayMemoryAccess extends MemoryAccessKind, TIndirectMayMemoryAccess
3752 override string toString ( ) {
3853 result = "indirect(may)"
3954 }
55+
56+ override final predicate usesAddressOperand ( ) {
57+ any ( )
58+ }
4059}
4160
4261/**
@@ -48,6 +67,10 @@ class BufferMemoryAccess extends MemoryAccessKind, TBufferMemoryAccess {
4867 override string toString ( ) {
4968 result = "buffer"
5069 }
70+
71+ override final predicate usesAddressOperand ( ) {
72+ any ( )
73+ }
5174}
5275
5376/**
@@ -59,6 +82,10 @@ class BufferMayMemoryAccess extends MemoryAccessKind, TBufferMayMemoryAccess {
5982 override string toString ( ) {
6083 result = "buffer(may)"
6184 }
85+
86+ override final predicate usesAddressOperand ( ) {
87+ any ( )
88+ }
6289}
6390
6491/**
@@ -70,6 +97,15 @@ class EscapedMemoryAccess extends MemoryAccessKind, TEscapedMemoryAccess {
7097 }
7198}
7299
100+ /**
101+ * The operand or result may access all memory whose address has escaped.
102+ */
103+ class EscapedMayMemoryAccess extends MemoryAccessKind , TEscapedMayMemoryAccess {
104+ override string toString ( ) {
105+ result = "escaped(may)"
106+ }
107+ }
108+
73109/**
74110 * The operand is a Phi operand, which accesses the same memory as its
75111 * definition.
0 commit comments