Skip to content

Commit cb510ed

Browse files
committed
C++: Sync up identical files and restore imports
1 parent 04c5f1c commit cb510ed

File tree

5 files changed

+68
-120
lines changed

5 files changed

+68
-120
lines changed

cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -94,30 +94,6 @@ private predicate numberableInstruction(Instruction instr) {
9494
instr instanceof LoadTotalOverlapInstruction
9595
}
9696

97-
predicate multipleValueNumbers(Instruction instr, int n) {
98-
n > 1 and
99-
(
100-
n =
101-
strictcount(IRFunction irFunc, Language::AST ast |
102-
variableAddressValueNumber(instr, irFunc, ast)
103-
)
104-
or
105-
n =
106-
strictcount(IRFunction irFunc, Language::AST var |
107-
initializeParameterValueNumber(instr, irFunc, var)
108-
)
109-
or
110-
n = strictcount(IRFunction irFunc | initializeThisValueNumber(instr, irFunc))
111-
or
112-
n = strictcount(IRFunction irFunc, string value | constantValueNumber(instr, irFunc, value))
113-
or
114-
n =
115-
strictcount(IRFunction irFunc, IRType type, string value |
116-
stringConstantValueNumber(instr, irFunc, type, value)
117-
)
118-
)
119-
}
120-
12197
private predicate variableAddressValueNumber(
12298
VariableAddressInstruction instr, IRFunction irFunc, Language::AST ast
12399
) {

cpp/ql/src/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll

Lines changed: 33 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -9,39 +9,34 @@ newtype TValueNumber =
99
initializeParameterValueNumber(_, irFunc, var)
1010
} or
1111
TInitializeThisValueNumber(IRFunction irFunc) { initializeThisValueNumber(_, irFunc) } or
12-
TConstantValueNumber(IRFunction irFunc, IRType type, string value) {
13-
constantValueNumber(_, irFunc, type, value)
14-
} or
12+
TConstantValueNumber(IRFunction irFunc, string value) { constantValueNumber(_, irFunc, value) } or
1513
TStringConstantValueNumber(IRFunction irFunc, IRType type, string value) {
1614
stringConstantValueNumber(_, irFunc, type, value)
1715
} or
1816
TFieldAddressValueNumber(IRFunction irFunc, Field field, TValueNumber objectAddress) {
1917
fieldAddressValueNumber(_, irFunc, field, objectAddress)
2018
} or
2119
TBinaryValueNumber(
22-
IRFunction irFunc, Opcode opcode, IRType type, TValueNumber leftOperand,
23-
TValueNumber rightOperand
20+
IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand
2421
) {
25-
binaryValueNumber(_, irFunc, opcode, type, leftOperand, rightOperand)
22+
binaryValueNumber(_, irFunc, opcode, leftOperand, rightOperand)
2623
} or
2724
TPointerArithmeticValueNumber(
28-
IRFunction irFunc, Opcode opcode, IRType type, int elementSize, TValueNumber leftOperand,
25+
IRFunction irFunc, Opcode opcode, int elementSize, TValueNumber leftOperand,
2926
TValueNumber rightOperand
3027
) {
31-
pointerArithmeticValueNumber(_, irFunc, opcode, type, elementSize, leftOperand, rightOperand)
28+
pointerArithmeticValueNumber(_, irFunc, opcode, elementSize, leftOperand, rightOperand)
3229
} or
33-
TUnaryValueNumber(IRFunction irFunc, Opcode opcode, IRType type, TValueNumber operand) {
34-
unaryValueNumber(_, irFunc, opcode, type, operand)
30+
TUnaryValueNumber(IRFunction irFunc, Opcode opcode, TValueNumber operand) {
31+
unaryValueNumber(_, irFunc, opcode, operand)
3532
} or
3633
TInheritanceConversionValueNumber(
3734
IRFunction irFunc, Opcode opcode, Class baseClass, Class derivedClass, TValueNumber operand
3835
) {
3936
inheritanceConversionValueNumber(_, irFunc, opcode, baseClass, derivedClass, operand)
4037
} or
41-
TLoadTotalOverlapValueNumber(
42-
IRFunction irFunc, IRType type, TValueNumber memOperand, TValueNumber operand
43-
) {
44-
loadTotalOverlapValueNumber(_, irFunc, type, memOperand, operand)
38+
TLoadTotalOverlapValueNumber(IRFunction irFunc, TValueNumber memOperand, TValueNumber operand) {
39+
loadTotalOverlapValueNumber(_, irFunc, memOperand, operand)
4540
} or
4641
TUniqueValueNumber(IRFunction irFunc, Instruction instr) { uniqueValueNumber(instr, irFunc) }
4742

@@ -106,7 +101,8 @@ private predicate variableAddressValueNumber(
106101
// The underlying AST element is used as value-numbering key instead of the
107102
// `IRVariable` to work around a problem where a variable or expression with
108103
// multiple types gives rise to multiple `IRVariable`s.
109-
instr.getIRVariable().getAST() = ast
104+
instr.getIRVariable().getAST() = ast and
105+
strictcount(instr.getIRVariable().getAST()) = 1
110106
}
111107

112108
private predicate initializeParameterValueNumber(
@@ -123,11 +119,8 @@ private predicate initializeThisValueNumber(InitializeThisInstruction instr, IRF
123119
instr.getEnclosingIRFunction() = irFunc
124120
}
125121

126-
private predicate constantValueNumber(
127-
ConstantInstruction instr, IRFunction irFunc, IRType type, string value
128-
) {
122+
predicate constantValueNumber(ConstantInstruction instr, IRFunction irFunc, string value) {
129123
instr.getEnclosingIRFunction() = irFunc and
130-
instr.getResultIRType() = type and
131124
instr.getValue() = value
132125
}
133126

@@ -145,42 +138,40 @@ private predicate fieldAddressValueNumber(
145138
) {
146139
instr.getEnclosingIRFunction() = irFunc and
147140
instr.getField() = field and
141+
strictcount(instr.getField()) = 1 and
148142
tvalueNumber(instr.getObjectAddress()) = objectAddress
149143
}
150144

151145
private predicate binaryValueNumber(
152-
BinaryInstruction instr, IRFunction irFunc, Opcode opcode, IRType type, TValueNumber leftOperand,
146+
BinaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber leftOperand,
153147
TValueNumber rightOperand
154148
) {
155149
instr.getEnclosingIRFunction() = irFunc and
156150
not instr instanceof PointerArithmeticInstruction and
157151
instr.getOpcode() = opcode and
158-
instr.getResultIRType() = type and
159152
tvalueNumber(instr.getLeft()) = leftOperand and
160153
tvalueNumber(instr.getRight()) = rightOperand
161154
}
162155

163156
private predicate pointerArithmeticValueNumber(
164-
PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, IRType type,
165-
int elementSize, TValueNumber leftOperand, TValueNumber rightOperand
157+
PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize,
158+
TValueNumber leftOperand, TValueNumber rightOperand
166159
) {
167160
instr.getEnclosingIRFunction() = irFunc and
168161
instr.getOpcode() = opcode and
169-
instr.getResultIRType() = type and
170162
instr.getElementSize() = elementSize and
171163
tvalueNumber(instr.getLeft()) = leftOperand and
172164
tvalueNumber(instr.getRight()) = rightOperand
173165
}
174166

175167
private predicate unaryValueNumber(
176-
UnaryInstruction instr, IRFunction irFunc, Opcode opcode, IRType type, TValueNumber operand
168+
UnaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber operand
177169
) {
178170
instr.getEnclosingIRFunction() = irFunc and
179171
not instr instanceof InheritanceConversionInstruction and
180172
not instr instanceof CopyInstruction and
181173
not instr instanceof FieldAddressInstruction and
182174
instr.getOpcode() = opcode and
183-
instr.getResultIRType() = type and
184175
tvalueNumber(instr.getUnary()) = operand
185176
}
186177

@@ -196,11 +187,10 @@ private predicate inheritanceConversionValueNumber(
196187
}
197188

198189
private predicate loadTotalOverlapValueNumber(
199-
LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber memOperand,
190+
LoadTotalOverlapInstruction instr, IRFunction irFunc, TValueNumber memOperand,
200191
TValueNumber operand
201192
) {
202193
instr.getEnclosingIRFunction() = irFunc and
203-
instr.getResultIRType() = type and
204194
tvalueNumber(instr.getAnOperand().(MemoryOperand).getAnyDef()) = memOperand and
205195
tvalueNumberOfOperand(instr.getAnOperand().(AddressOperand)) = operand
206196
}
@@ -255,9 +245,9 @@ private TValueNumber nonUniqueValueNumber(Instruction instr) {
255245
initializeThisValueNumber(instr, irFunc) and
256246
result = TInitializeThisValueNumber(irFunc)
257247
or
258-
exists(IRType type, string value |
259-
constantValueNumber(instr, irFunc, type, value) and
260-
result = TConstantValueNumber(irFunc, type, value)
248+
exists(string value |
249+
constantValueNumber(instr, irFunc, value) and
250+
result = TConstantValueNumber(irFunc, value)
261251
)
262252
or
263253
exists(IRType type, string value |
@@ -270,14 +260,14 @@ private TValueNumber nonUniqueValueNumber(Instruction instr) {
270260
result = TFieldAddressValueNumber(irFunc, field, objectAddress)
271261
)
272262
or
273-
exists(Opcode opcode, IRType type, TValueNumber leftOperand, TValueNumber rightOperand |
274-
binaryValueNumber(instr, irFunc, opcode, type, leftOperand, rightOperand) and
275-
result = TBinaryValueNumber(irFunc, opcode, type, leftOperand, rightOperand)
263+
exists(Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand |
264+
binaryValueNumber(instr, irFunc, opcode, leftOperand, rightOperand) and
265+
result = TBinaryValueNumber(irFunc, opcode, leftOperand, rightOperand)
276266
)
277267
or
278-
exists(Opcode opcode, IRType type, TValueNumber operand |
279-
unaryValueNumber(instr, irFunc, opcode, type, operand) and
280-
result = TUnaryValueNumber(irFunc, opcode, type, operand)
268+
exists(Opcode opcode, TValueNumber operand |
269+
unaryValueNumber(instr, irFunc, opcode, operand) and
270+
result = TUnaryValueNumber(irFunc, opcode, operand)
281271
)
282272
or
283273
exists(
@@ -287,19 +277,15 @@ private TValueNumber nonUniqueValueNumber(Instruction instr) {
287277
result = TInheritanceConversionValueNumber(irFunc, opcode, baseClass, derivedClass, operand)
288278
)
289279
or
290-
exists(
291-
Opcode opcode, IRType type, int elementSize, TValueNumber leftOperand,
292-
TValueNumber rightOperand
293-
|
294-
pointerArithmeticValueNumber(instr, irFunc, opcode, type, elementSize, leftOperand,
295-
rightOperand) and
280+
exists(Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand |
281+
pointerArithmeticValueNumber(instr, irFunc, opcode, elementSize, leftOperand, rightOperand) and
296282
result =
297-
TPointerArithmeticValueNumber(irFunc, opcode, type, elementSize, leftOperand, rightOperand)
283+
TPointerArithmeticValueNumber(irFunc, opcode, elementSize, leftOperand, rightOperand)
298284
)
299285
or
300-
exists(IRType type, TValueNumber memOperand, TValueNumber operand |
301-
loadTotalOverlapValueNumber(instr, irFunc, type, memOperand, operand) and
302-
result = TLoadTotalOverlapValueNumber(irFunc, type, memOperand, operand)
286+
exists(TValueNumber memOperand, TValueNumber operand |
287+
loadTotalOverlapValueNumber(instr, irFunc, memOperand, operand) and
288+
result = TLoadTotalOverlapValueNumber(irFunc, memOperand, operand)
303289
)
304290
or
305291
// The value number of a copy is just the value number of its source value.

0 commit comments

Comments
 (0)