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.
This commit is contained in:
Dave Bartolomeo
2020-05-15 17:36:43 -04:00
parent 89ec60c948
commit 96c87b309b
5 changed files with 15 additions and 5 deletions

View File

@@ -289,7 +289,9 @@ class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, NonPhiMemoryOper
final override string toString() { result = tag.toString() }
final override Instruction getAnyDef() { hasDefinition(result, _) }
final override Instruction getAnyDef() {
result = unique(Instruction defInstr | hasDefinition(defInstr, _))
}
final override Overlap getDefinitionOverlap() { hasDefinition(_, result) }

View File

@@ -289,7 +289,9 @@ class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, NonPhiMemoryOper
final override string toString() { result = tag.toString() }
final override Instruction getAnyDef() { hasDefinition(result, _) }
final override Instruction getAnyDef() {
result = unique(Instruction defInstr | hasDefinition(defInstr, _))
}
final override Overlap getDefinitionOverlap() { hasDefinition(_, result) }

View File

@@ -289,7 +289,9 @@ class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, NonPhiMemoryOper
final override string toString() { result = tag.toString() }
final override Instruction getAnyDef() { hasDefinition(result, _) }
final override Instruction getAnyDef() {
result = unique(Instruction defInstr | hasDefinition(defInstr, _))
}
final override Overlap getDefinitionOverlap() { hasDefinition(_, result) }

View File

@@ -289,7 +289,9 @@ class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, NonPhiMemoryOper
final override string toString() { result = tag.toString() }
final override Instruction getAnyDef() { hasDefinition(result, _) }
final override Instruction getAnyDef() {
result = unique(Instruction defInstr | hasDefinition(defInstr, _))
}
final override Overlap getDefinitionOverlap() { hasDefinition(_, result) }

View File

@@ -289,7 +289,9 @@ class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, NonPhiMemoryOper
final override string toString() { result = tag.toString() }
final override Instruction getAnyDef() { hasDefinition(result, _) }
final override Instruction getAnyDef() {
result = unique(Instruction defInstr | hasDefinition(defInstr, _))
}
final override Overlap getDefinitionOverlap() { hasDefinition(_, result) }