@@ -2290,9 +2290,11 @@ private predicate controls(IRGuardCondition g, Node n, boolean edge) {
2290
2290
module BarrierGuard< guardChecksSig / 3 guardChecks> {
2291
2291
bindingset [ value, n]
2292
2292
pragma [ inline_late]
2293
- private predicate convertedExprHasValueNumber ( Expr e , ValueNumber value , Node n ) {
2294
- e = value .getAnInstruction ( ) .getConvertedResultExpression ( ) and
2295
- n .asConvertedExpr ( ) = e
2293
+ private predicate convertedExprHasValueNumber ( ValueNumber value , Node n ) {
2294
+ exists ( Expr e |
2295
+ e = value .getAnInstruction ( ) .getConvertedResultExpression ( ) and
2296
+ n .asConvertedExpr ( ) = e
2297
+ )
2296
2298
}
2297
2299
2298
2300
/**
@@ -2328,8 +2330,8 @@ module BarrierGuard<guardChecksSig/3 guardChecks> {
2328
2330
* NOTE: If an indirect expression is tracked, use `getAnIndirectBarrierNode` instead.
2329
2331
*/
2330
2332
Node getABarrierNode ( ) {
2331
- exists ( IRGuardCondition g , Expr e , ValueNumber value , boolean edge |
2332
- convertedExprHasValueNumber ( e , value , result ) and
2333
+ exists ( IRGuardCondition g , ValueNumber value , boolean edge |
2334
+ convertedExprHasValueNumber ( value , result ) and
2333
2335
guardChecks ( g ,
2334
2336
pragma [ only_bind_into ] ( value .getAnInstruction ( ) .getConvertedResultExpression ( ) ) , edge ) and
2335
2337
controls ( g , result , edge )
@@ -2383,10 +2385,12 @@ module BarrierGuard<guardChecksSig/3 guardChecks> {
2383
2385
bindingset [ value, n]
2384
2386
pragma [ inline_late]
2385
2387
private predicate indirectConvertedExprHasValueNumber (
2386
- Expr e , int indirectionIndex , ValueNumber value , Node n
2388
+ int indirectionIndex , ValueNumber value , Node n
2387
2389
) {
2388
- e = value .getAnInstruction ( ) .getConvertedResultExpression ( ) and
2389
- n .asIndirectConvertedExpr ( indirectionIndex ) = e
2390
+ exists ( Expr e |
2391
+ e = value .getAnInstruction ( ) .getConvertedResultExpression ( ) and
2392
+ n .asIndirectConvertedExpr ( indirectionIndex ) = e
2393
+ )
2390
2394
}
2391
2395
2392
2396
/**
@@ -2424,8 +2428,8 @@ module BarrierGuard<guardChecksSig/3 guardChecks> {
2424
2428
* NOTE: If a non-indirect expression is tracked, use `getABarrierNode` instead.
2425
2429
*/
2426
2430
Node getAnIndirectBarrierNode ( int indirectionIndex ) {
2427
- exists ( IRGuardCondition g , Expr e , ValueNumber value , boolean edge |
2428
- indirectConvertedExprHasValueNumber ( e , indirectionIndex , value , result ) and
2431
+ exists ( IRGuardCondition g , ValueNumber value , boolean edge |
2432
+ indirectConvertedExprHasValueNumber ( indirectionIndex , value , result ) and
2429
2433
guardChecks ( g ,
2430
2434
pragma [ only_bind_into ] ( value .getAnInstruction ( ) .getConvertedResultExpression ( ) ) , edge ) and
2431
2435
controls ( g , result , edge )
@@ -2466,16 +2470,18 @@ private EdgeKind getConditionalEdge(boolean branch) {
2466
2470
module InstructionBarrierGuard< instructionGuardChecksSig / 3 instructionGuardChecks> {
2467
2471
bindingset [ value, n]
2468
2472
pragma [ inline_late]
2469
- private predicate operandHasValueNumber ( Operand use , ValueNumber value , Node n ) {
2470
- use = value .getAnInstruction ( ) .getAUse ( ) and
2471
- n .asOperand ( ) = use
2473
+ private predicate operandHasValueNumber ( ValueNumber value , Node n ) {
2474
+ exists ( Operand use |
2475
+ use = value .getAnInstruction ( ) .getAUse ( ) and
2476
+ n .asOperand ( ) = use
2477
+ )
2472
2478
}
2473
2479
2474
2480
/** Gets a node that is safely guarded by the given guard check. */
2475
2481
Node getABarrierNode ( ) {
2476
- exists ( IRGuardCondition g , ValueNumber value , boolean edge , Operand use |
2482
+ exists ( IRGuardCondition g , ValueNumber value , boolean edge |
2477
2483
instructionGuardChecks ( g , pragma [ only_bind_into ] ( value .getAnInstruction ( ) ) , edge ) and
2478
- operandHasValueNumber ( use , value , result ) and
2484
+ operandHasValueNumber ( value , result ) and
2479
2485
controls ( g , result , edge )
2480
2486
)
2481
2487
or
0 commit comments