@@ -2290,9 +2290,11 @@ private predicate controls(IRGuardCondition g, Node n, boolean edge) {
22902290module BarrierGuard< guardChecksSig / 3 guardChecks> {
22912291 bindingset [ value, n]
22922292 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+ )
22962298 }
22972299
22982300 /**
@@ -2328,8 +2330,8 @@ module BarrierGuard<guardChecksSig/3 guardChecks> {
23282330 * NOTE: If an indirect expression is tracked, use `getAnIndirectBarrierNode` instead.
23292331 */
23302332 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
23332335 guardChecks ( g ,
23342336 pragma [ only_bind_into ] ( value .getAnInstruction ( ) .getConvertedResultExpression ( ) ) , edge ) and
23352337 controls ( g , result , edge )
@@ -2383,10 +2385,12 @@ module BarrierGuard<guardChecksSig/3 guardChecks> {
23832385 bindingset [ value, n]
23842386 pragma [ inline_late]
23852387 private predicate indirectConvertedExprHasValueNumber (
2386- Expr e , int indirectionIndex , ValueNumber value , Node n
2388+ int indirectionIndex , ValueNumber value , Node n
23872389 ) {
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+ )
23902394 }
23912395
23922396 /**
@@ -2424,8 +2428,8 @@ module BarrierGuard<guardChecksSig/3 guardChecks> {
24242428 * NOTE: If a non-indirect expression is tracked, use `getABarrierNode` instead.
24252429 */
24262430 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
24292433 guardChecks ( g ,
24302434 pragma [ only_bind_into ] ( value .getAnInstruction ( ) .getConvertedResultExpression ( ) ) , edge ) and
24312435 controls ( g , result , edge )
@@ -2466,16 +2470,18 @@ private EdgeKind getConditionalEdge(boolean branch) {
24662470module InstructionBarrierGuard< instructionGuardChecksSig / 3 instructionGuardChecks> {
24672471 bindingset [ value, n]
24682472 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+ )
24722478 }
24732479
24742480 /** Gets a node that is safely guarded by the given guard check. */
24752481 Node getABarrierNode ( ) {
2476- exists ( IRGuardCondition g , ValueNumber value , boolean edge , Operand use |
2482+ exists ( IRGuardCondition g , ValueNumber value , boolean edge |
24772483 instructionGuardChecks ( g , pragma [ only_bind_into ] ( value .getAnInstruction ( ) ) , edge ) and
2478- operandHasValueNumber ( use , value , result ) and
2484+ operandHasValueNumber ( value , result ) and
24792485 controls ( g , result , edge )
24802486 )
24812487 or
0 commit comments