Skip to content

Commit 557cb17

Browse files
committed
Dataflow: Minor perf fix for single config wrapper.
1 parent d4c5877 commit 557cb17

40 files changed

+360
-80
lines changed

cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ private Configuration getConfig(TConfigState state) { state = TMkConfigState(res
264264

265265
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
266266

267+
private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
268+
267269
private module Config implements FullStateConfigSig {
268270
class FlowState = TConfigState;
269271

@@ -292,13 +294,18 @@ private module Config implements FullStateConfigSig {
292294

293295
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
294296

295-
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
297+
predicate isAdditionalFlowStep(Node node1, Node node2) {
298+
singleConfiguration() and
299+
any(Configuration config).isAdditionalFlowStep(node1, node2)
300+
}
296301

297302
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
298303
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
299304
getConfig(state2) = getConfig(state1)
300305
or
301-
getConfig(state1).isAdditionalFlowStep(node1, node2) and state2 = state1
306+
not singleConfiguration() and
307+
getConfig(state1).isAdditionalFlowStep(node1, node2) and
308+
state2 = state1
302309
}
303310

304311
predicate allowImplicitRead(Node node, ContentSet c) {

cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ private Configuration getConfig(TConfigState state) { state = TMkConfigState(res
264264

265265
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
266266

267+
private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
268+
267269
private module Config implements FullStateConfigSig {
268270
class FlowState = TConfigState;
269271

@@ -292,13 +294,18 @@ private module Config implements FullStateConfigSig {
292294

293295
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
294296

295-
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
297+
predicate isAdditionalFlowStep(Node node1, Node node2) {
298+
singleConfiguration() and
299+
any(Configuration config).isAdditionalFlowStep(node1, node2)
300+
}
296301

297302
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
298303
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
299304
getConfig(state2) = getConfig(state1)
300305
or
301-
getConfig(state1).isAdditionalFlowStep(node1, node2) and state2 = state1
306+
not singleConfiguration() and
307+
getConfig(state1).isAdditionalFlowStep(node1, node2) and
308+
state2 = state1
302309
}
303310

304311
predicate allowImplicitRead(Node node, ContentSet c) {

cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ private Configuration getConfig(TConfigState state) { state = TMkConfigState(res
264264

265265
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
266266

267+
private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
268+
267269
private module Config implements FullStateConfigSig {
268270
class FlowState = TConfigState;
269271

@@ -292,13 +294,18 @@ private module Config implements FullStateConfigSig {
292294

293295
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
294296

295-
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
297+
predicate isAdditionalFlowStep(Node node1, Node node2) {
298+
singleConfiguration() and
299+
any(Configuration config).isAdditionalFlowStep(node1, node2)
300+
}
296301

297302
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
298303
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
299304
getConfig(state2) = getConfig(state1)
300305
or
301-
getConfig(state1).isAdditionalFlowStep(node1, node2) and state2 = state1
306+
not singleConfiguration() and
307+
getConfig(state1).isAdditionalFlowStep(node1, node2) and
308+
state2 = state1
302309
}
303310

304311
predicate allowImplicitRead(Node node, ContentSet c) {

cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ private Configuration getConfig(TConfigState state) { state = TMkConfigState(res
264264

265265
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
266266

267+
private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
268+
267269
private module Config implements FullStateConfigSig {
268270
class FlowState = TConfigState;
269271

@@ -292,13 +294,18 @@ private module Config implements FullStateConfigSig {
292294

293295
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
294296

295-
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
297+
predicate isAdditionalFlowStep(Node node1, Node node2) {
298+
singleConfiguration() and
299+
any(Configuration config).isAdditionalFlowStep(node1, node2)
300+
}
296301

297302
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
298303
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
299304
getConfig(state2) = getConfig(state1)
300305
or
301-
getConfig(state1).isAdditionalFlowStep(node1, node2) and state2 = state1
306+
not singleConfiguration() and
307+
getConfig(state1).isAdditionalFlowStep(node1, node2) and
308+
state2 = state1
302309
}
303310

304311
predicate allowImplicitRead(Node node, ContentSet c) {

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl1.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ private Configuration getConfig(TConfigState state) { state = TMkConfigState(res
264264

265265
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
266266

267+
private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
268+
267269
private module Config implements FullStateConfigSig {
268270
class FlowState = TConfigState;
269271

@@ -292,13 +294,18 @@ private module Config implements FullStateConfigSig {
292294

293295
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
294296

295-
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
297+
predicate isAdditionalFlowStep(Node node1, Node node2) {
298+
singleConfiguration() and
299+
any(Configuration config).isAdditionalFlowStep(node1, node2)
300+
}
296301

297302
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
298303
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
299304
getConfig(state2) = getConfig(state1)
300305
or
301-
getConfig(state1).isAdditionalFlowStep(node1, node2) and state2 = state1
306+
not singleConfiguration() and
307+
getConfig(state1).isAdditionalFlowStep(node1, node2) and
308+
state2 = state1
302309
}
303310

304311
predicate allowImplicitRead(Node node, ContentSet c) {

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ private Configuration getConfig(TConfigState state) { state = TMkConfigState(res
264264

265265
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
266266

267+
private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
268+
267269
private module Config implements FullStateConfigSig {
268270
class FlowState = TConfigState;
269271

@@ -292,13 +294,18 @@ private module Config implements FullStateConfigSig {
292294

293295
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
294296

295-
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
297+
predicate isAdditionalFlowStep(Node node1, Node node2) {
298+
singleConfiguration() and
299+
any(Configuration config).isAdditionalFlowStep(node1, node2)
300+
}
296301

297302
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
298303
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
299304
getConfig(state2) = getConfig(state1)
300305
or
301-
getConfig(state1).isAdditionalFlowStep(node1, node2) and state2 = state1
306+
not singleConfiguration() and
307+
getConfig(state1).isAdditionalFlowStep(node1, node2) and
308+
state2 = state1
302309
}
303310

304311
predicate allowImplicitRead(Node node, ContentSet c) {

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ private Configuration getConfig(TConfigState state) { state = TMkConfigState(res
264264

265265
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
266266

267+
private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
268+
267269
private module Config implements FullStateConfigSig {
268270
class FlowState = TConfigState;
269271

@@ -292,13 +294,18 @@ private module Config implements FullStateConfigSig {
292294

293295
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
294296

295-
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
297+
predicate isAdditionalFlowStep(Node node1, Node node2) {
298+
singleConfiguration() and
299+
any(Configuration config).isAdditionalFlowStep(node1, node2)
300+
}
296301

297302
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
298303
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
299304
getConfig(state2) = getConfig(state1)
300305
or
301-
getConfig(state1).isAdditionalFlowStep(node1, node2) and state2 = state1
306+
not singleConfiguration() and
307+
getConfig(state1).isAdditionalFlowStep(node1, node2) and
308+
state2 = state1
302309
}
303310

304311
predicate allowImplicitRead(Node node, ContentSet c) {

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ private Configuration getConfig(TConfigState state) { state = TMkConfigState(res
264264

265265
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
266266

267+
private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
268+
267269
private module Config implements FullStateConfigSig {
268270
class FlowState = TConfigState;
269271

@@ -292,13 +294,18 @@ private module Config implements FullStateConfigSig {
292294

293295
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
294296

295-
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
297+
predicate isAdditionalFlowStep(Node node1, Node node2) {
298+
singleConfiguration() and
299+
any(Configuration config).isAdditionalFlowStep(node1, node2)
300+
}
296301

297302
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
298303
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
299304
getConfig(state2) = getConfig(state1)
300305
or
301-
getConfig(state1).isAdditionalFlowStep(node1, node2) and state2 = state1
306+
not singleConfiguration() and
307+
getConfig(state1).isAdditionalFlowStep(node1, node2) and
308+
state2 = state1
302309
}
303310

304311
predicate allowImplicitRead(Node node, ContentSet c) {

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ private Configuration getConfig(TConfigState state) { state = TMkConfigState(res
264264

265265
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
266266

267+
private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
268+
267269
private module Config implements FullStateConfigSig {
268270
class FlowState = TConfigState;
269271

@@ -292,13 +294,18 @@ private module Config implements FullStateConfigSig {
292294

293295
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
294296

295-
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
297+
predicate isAdditionalFlowStep(Node node1, Node node2) {
298+
singleConfiguration() and
299+
any(Configuration config).isAdditionalFlowStep(node1, node2)
300+
}
296301

297302
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
298303
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
299304
getConfig(state2) = getConfig(state1)
300305
or
301-
getConfig(state1).isAdditionalFlowStep(node1, node2) and state2 = state1
306+
not singleConfiguration() and
307+
getConfig(state1).isAdditionalFlowStep(node1, node2) and
308+
state2 = state1
302309
}
303310

304311
predicate allowImplicitRead(Node node, ContentSet c) {

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ private Configuration getConfig(TConfigState state) { state = TMkConfigState(res
264264

265265
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
266266

267+
private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
268+
267269
private module Config implements FullStateConfigSig {
268270
class FlowState = TConfigState;
269271

@@ -292,13 +294,18 @@ private module Config implements FullStateConfigSig {
292294

293295
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
294296

295-
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
297+
predicate isAdditionalFlowStep(Node node1, Node node2) {
298+
singleConfiguration() and
299+
any(Configuration config).isAdditionalFlowStep(node1, node2)
300+
}
296301

297302
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
298303
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
299304
getConfig(state2) = getConfig(state1)
300305
or
301-
getConfig(state1).isAdditionalFlowStep(node1, node2) and state2 = state1
306+
not singleConfiguration() and
307+
getConfig(state1).isAdditionalFlowStep(node1, node2) and
308+
state2 = state1
302309
}
303310

304311
predicate allowImplicitRead(Node node, ContentSet c) {

0 commit comments

Comments
 (0)