@@ -76,42 +76,46 @@ static bool setNoReturn(Function &F) {
76
76
return true ;
77
77
}
78
78
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
+
79
88
static bool setOnlyAccessesInaccessibleMemory (Function &F) {
80
- if (F. onlyAccessesInaccessibleMemory ( ))
89
+ if (! setMemoryEffects (F, MemoryEffects::inaccessibleMemOnly () ))
81
90
return false ;
82
- F.setOnlyAccessesInaccessibleMemory ();
83
91
++NumInaccessibleMemOnly;
84
92
return true ;
85
93
}
86
94
87
95
static bool setOnlyReadsMemory (Function &F) {
88
- if (F. onlyReadsMemory ( ))
96
+ if (! setMemoryEffects (F, MemoryEffects::readOnly () ))
89
97
return false ;
90
- F.setOnlyReadsMemory ();
91
98
++NumReadOnly;
92
99
return true ;
93
100
}
94
101
95
102
static bool setOnlyWritesMemory (Function &F) {
96
- if (F. onlyWritesMemory ()) // writeonly or readnone
103
+ if (! setMemoryEffects (F, MemoryEffects::writeOnly ()))
97
104
return false ;
98
105
++NumWriteOnly;
99
- F.setOnlyWritesMemory ();
100
106
return true ;
101
107
}
102
108
103
109
static bool setOnlyAccessesArgMemory (Function &F) {
104
- if (F. onlyAccessesArgMemory ( ))
110
+ if (! setMemoryEffects (F, MemoryEffects::argMemOnly () ))
105
111
return false ;
106
- F.setOnlyAccessesArgMemory ();
107
112
++NumArgMemOnly;
108
113
return true ;
109
114
}
110
115
111
116
static bool setOnlyAccessesInaccessibleMemOrArgMem (Function &F) {
112
- if (F. onlyAccessesInaccessibleMemOrArgMem ( ))
117
+ if (! setMemoryEffects (F, MemoryEffects::inaccessibleOrArgMemOnly () ))
113
118
return false ;
114
- F.setOnlyAccessesInaccessibleMemOrArgMem ();
115
119
++NumInaccessibleMemOrArgMemOnly;
116
120
return true ;
117
121
}
0 commit comments