@@ -76,42 +76,46 @@ static bool setNoReturn(Function &F) {
7676 return true ;
7777}
7878
79+ static bool setMemoryEffects (Function &F, MemoryEffects ME) {
80+ MemoryEffects OrigME = F.getMemoryEffects ();
81+ MemoryEffects NewME = OrigME & ME;
82+ if (OrigME == NewME)
83+ return false ;
84+ F.setMemoryEffects (NewME);
85+ return true ;
86+ }
87+
7988static bool setOnlyAccessesInaccessibleMemory (Function &F) {
80- if (F. onlyAccessesInaccessibleMemory ( ))
89+ if (! setMemoryEffects (F, MemoryEffects::inaccessibleMemOnly () ))
8190 return false ;
82- F.setOnlyAccessesInaccessibleMemory ();
8391 ++NumInaccessibleMemOnly;
8492 return true ;
8593}
8694
8795static bool setOnlyReadsMemory (Function &F) {
88- if (F. onlyReadsMemory ( ))
96+ if (! setMemoryEffects (F, MemoryEffects::readOnly () ))
8997 return false ;
90- F.setOnlyReadsMemory ();
9198 ++NumReadOnly;
9299 return true ;
93100}
94101
95102static bool setOnlyWritesMemory (Function &F) {
96- if (F. onlyWritesMemory ()) // writeonly or readnone
103+ if (! setMemoryEffects (F, MemoryEffects::writeOnly ()))
97104 return false ;
98105 ++NumWriteOnly;
99- F.setOnlyWritesMemory ();
100106 return true ;
101107}
102108
103109static bool setOnlyAccessesArgMemory (Function &F) {
104- if (F. onlyAccessesArgMemory ( ))
110+ if (! setMemoryEffects (F, MemoryEffects::argMemOnly () ))
105111 return false ;
106- F.setOnlyAccessesArgMemory ();
107112 ++NumArgMemOnly;
108113 return true ;
109114}
110115
111116static bool setOnlyAccessesInaccessibleMemOrArgMem (Function &F) {
112- if (F. onlyAccessesInaccessibleMemOrArgMem ( ))
117+ if (! setMemoryEffects (F, MemoryEffects::inaccessibleOrArgMemOnly () ))
113118 return false ;
114- F.setOnlyAccessesInaccessibleMemOrArgMem ();
115119 ++NumInaccessibleMemOrArgMemOnly;
116120 return true ;
117121}
0 commit comments