@@ -222,15 +222,6 @@ private predicate hasVariableReadWithCapturedWrite(
222
222
variableReadActualInOuterScope ( bb , i , v , scope )
223
223
}
224
224
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
-
234
225
pragma [ noinline]
235
226
deprecated private predicate adjacentDefReadExt (
236
227
DefinitionExt def , SsaInput:: BasicBlock bb1 , int i1 , SsaInput:: BasicBlock bb2 , int i2 ,
@@ -240,22 +231,6 @@ deprecated private predicate adjacentDefReadExt(
240
231
v = def .getSourceVariable ( )
241
232
}
242
233
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
-
259
234
deprecated private predicate adjacentDefReachesReadExt (
260
235
DefinitionExt def , SsaInput:: BasicBlock bb1 , int i1 , SsaInput:: BasicBlock bb2 , int i2
261
236
) {
@@ -272,15 +247,6 @@ deprecated private predicate adjacentDefReachesReadExt(
272
247
)
273
248
}
274
249
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
-
284
250
deprecated private predicate adjacentDefReachesUncertainReadExt (
285
251
DefinitionExt def , SsaInput:: BasicBlock bb1 , int i1 , SsaInput:: BasicBlock bb2 , int i2
286
252
) {
@@ -391,11 +357,7 @@ private module Cached {
391
357
*/
392
358
cached
393
359
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 ) )
399
361
}
400
362
401
363
/**
@@ -407,10 +369,10 @@ private module Cached {
407
369
predicate adjacentReadPair (
408
370
Definition def , VariableReadAccessCfgNode read1 , VariableReadAccessCfgNode read2
409
371
) {
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
411
375
read1 = bb1 .getNode ( i1 ) and
412
- variableReadActual ( bb1 , i1 , def .getSourceVariable ( ) ) and
413
- adjacentDefSkipUncertainReads ( def , bb1 , i1 , bb2 , i2 ) and
414
376
read2 = bb2 .getNode ( i2 )
415
377
)
416
378
}
0 commit comments