@@ -222,15 +222,6 @@ private predicate hasVariableReadWithCapturedWrite(
222222 variableReadActualInOuterScope ( bb , i , v , scope )
223223}
224224
225- pragma [ noinline]
226- private predicate adjacentDefRead (
227- Definition def , SsaInput:: BasicBlock bb1 , int i1 , SsaInput:: BasicBlock bb2 , int i2 ,
228- SsaInput:: SourceVariable v
229- ) {
230- Impl:: adjacentDefRead ( def , bb1 , i1 , bb2 , i2 ) and
231- v = def .getSourceVariable ( )
232- }
233-
234225pragma [ noinline]
235226deprecated private predicate adjacentDefReadExt (
236227 DefinitionExt def , SsaInput:: BasicBlock bb1 , int i1 , SsaInput:: BasicBlock bb2 , int i2 ,
@@ -240,22 +231,6 @@ deprecated private predicate adjacentDefReadExt(
240231 v = def .getSourceVariable ( )
241232}
242233
243- private predicate adjacentDefReachesRead (
244- Definition def , SsaInput:: BasicBlock bb1 , int i1 , SsaInput:: BasicBlock bb2 , int i2
245- ) {
246- exists ( SsaInput:: SourceVariable v | adjacentDefRead ( def , bb1 , i1 , bb2 , i2 , v ) |
247- def .definesAt ( v , bb1 , i1 )
248- or
249- SsaInput:: variableRead ( bb1 , i1 , v , true )
250- )
251- or
252- exists ( SsaInput:: BasicBlock bb3 , int i3 |
253- adjacentDefReachesRead ( def , bb1 , i1 , bb3 , i3 ) and
254- SsaInput:: variableRead ( bb3 , i3 , _, false ) and
255- Impl:: adjacentDefRead ( def , bb3 , i3 , bb2 , i2 )
256- )
257- }
258-
259234deprecated private predicate adjacentDefReachesReadExt (
260235 DefinitionExt def , SsaInput:: BasicBlock bb1 , int i1 , SsaInput:: BasicBlock bb2 , int i2
261236) {
@@ -272,15 +247,6 @@ deprecated private predicate adjacentDefReachesReadExt(
272247 )
273248}
274249
275- /** Same as `adjacentDefRead`, but skips uncertain reads. */
276- pragma [ nomagic]
277- private predicate adjacentDefSkipUncertainReads (
278- Definition def , SsaInput:: BasicBlock bb1 , int i1 , SsaInput:: BasicBlock bb2 , int i2
279- ) {
280- adjacentDefReachesRead ( def , bb1 , i1 , bb2 , i2 ) and
281- SsaInput:: variableRead ( bb2 , i2 , _, true )
282- }
283-
284250deprecated private predicate adjacentDefReachesUncertainReadExt (
285251 DefinitionExt def , SsaInput:: BasicBlock bb1 , int i1 , SsaInput:: BasicBlock bb2 , int i2
286252) {
@@ -391,11 +357,7 @@ private module Cached {
391357 */
392358 cached
393359 predicate firstRead ( Definition def , VariableReadAccessCfgNode read ) {
394- exists ( Cfg:: BasicBlock bb1 , int i1 , Cfg:: BasicBlock bb2 , int i2 |
395- def .definesAt ( _, bb1 , i1 ) and
396- adjacentDefSkipUncertainReads ( def , bb1 , i1 , bb2 , i2 ) and
397- read = bb2 .getNode ( i2 )
398- )
360+ exists ( Cfg:: BasicBlock bb , int i | Impl:: firstUse ( def , bb , i , true ) and read = bb .getNode ( i ) )
399361 }
400362
401363 /**
@@ -407,10 +369,10 @@ private module Cached {
407369 predicate adjacentReadPair (
408370 Definition def , VariableReadAccessCfgNode read1 , VariableReadAccessCfgNode read2
409371 ) {
410- exists ( Cfg:: BasicBlock bb1 , int i1 , Cfg:: BasicBlock bb2 , int i2 |
372+ exists ( Cfg:: BasicBlock bb1 , int i1 , Cfg:: BasicBlock bb2 , int i2 , LocalVariable v |
373+ Impl:: ssaDefReachesRead ( v , def , bb1 , i1 ) and
374+ Impl:: adjacentUseUse ( bb1 , i1 , bb2 , i2 , v , true ) and
411375 read1 = bb1 .getNode ( i1 ) and
412- variableReadActual ( bb1 , i1 , def .getSourceVariable ( ) ) and
413- adjacentDefSkipUncertainReads ( def , bb1 , i1 , bb2 , i2 ) and
414376 read2 = bb2 .getNode ( i2 )
415377 )
416378 }
0 commit comments