Skip to content

Commit 96c87b3

Browse files
author
Dave Bartolomeo
committed
C++/C#: Use unique to get a better join order
The previous changes made the optimizer choose a bad join order for the RHS of the antijoin in `addressOperandAllocationAndOffset`. Once again, `unique` to the rescue.
1 parent 89ec60c commit 96c87b3

File tree

5 files changed

+15
-5
lines changed

5 files changed

+15
-5
lines changed

cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,9 @@ class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, NonPhiMemoryOper
289289

290290
final override string toString() { result = tag.toString() }
291291

292-
final override Instruction getAnyDef() { hasDefinition(result, _) }
292+
final override Instruction getAnyDef() {
293+
result = unique(Instruction defInstr | hasDefinition(defInstr, _))
294+
}
293295

294296
final override Overlap getDefinitionOverlap() { hasDefinition(_, result) }
295297

cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Operand.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,9 @@ class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, NonPhiMemoryOper
289289

290290
final override string toString() { result = tag.toString() }
291291

292-
final override Instruction getAnyDef() { hasDefinition(result, _) }
292+
final override Instruction getAnyDef() {
293+
result = unique(Instruction defInstr | hasDefinition(defInstr, _))
294+
}
293295

294296
final override Overlap getDefinitionOverlap() { hasDefinition(_, result) }
295297

cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/Operand.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,9 @@ class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, NonPhiMemoryOper
289289

290290
final override string toString() { result = tag.toString() }
291291

292-
final override Instruction getAnyDef() { hasDefinition(result, _) }
292+
final override Instruction getAnyDef() {
293+
result = unique(Instruction defInstr | hasDefinition(defInstr, _))
294+
}
293295

294296
final override Overlap getDefinitionOverlap() { hasDefinition(_, result) }
295297

csharp/ql/src/semmle/code/csharp/ir/implementation/raw/Operand.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,9 @@ class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, NonPhiMemoryOper
289289

290290
final override string toString() { result = tag.toString() }
291291

292-
final override Instruction getAnyDef() { hasDefinition(result, _) }
292+
final override Instruction getAnyDef() {
293+
result = unique(Instruction defInstr | hasDefinition(defInstr, _))
294+
}
293295

294296
final override Overlap getDefinitionOverlap() { hasDefinition(_, result) }
295297

csharp/ql/src/semmle/code/csharp/ir/implementation/unaliased_ssa/Operand.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,9 @@ class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, NonPhiMemoryOper
289289

290290
final override string toString() { result = tag.toString() }
291291

292-
final override Instruction getAnyDef() { hasDefinition(result, _) }
292+
final override Instruction getAnyDef() {
293+
result = unique(Instruction defInstr | hasDefinition(defInstr, _))
294+
}
293295

294296
final override Overlap getDefinitionOverlap() { hasDefinition(_, result) }
295297

0 commit comments

Comments
 (0)