diff --git a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/Uniqueness.expected b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/Uniqueness.expected
index 0aebaa26f602..e69de29bb2d1 100644
--- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/Uniqueness.expected
+++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/Uniqueness.expected
@@ -1,58 +0,0 @@
-| test.cpp:5:3:5:13 | ... = ... | |
-| test.cpp:6:3:6:13 | ... = ... | |
-| test.cpp:7:3:7:7 | ... = ... | |
-| test.cpp:10:16:10:16 | 1 | |
-| test.cpp:16:3:16:24 | ... = ... | |
-| test.cpp:17:3:17:24 | ... = ... | |
-| test.cpp:18:3:18:7 | ... = ... | |
-| test.cpp:21:16:21:16 | 2 | |
-| test.cpp:29:3:29:24 | ... = ... | |
-| test.cpp:30:3:30:17 | call to change_global02 | |
-| test.cpp:31:3:31:24 | ... = ... | |
-| test.cpp:32:3:32:7 | ... = ... | |
-| test.cpp:35:16:35:16 | 3 | |
-| test.cpp:43:3:43:24 | ... = ... | |
-| test.cpp:44:3:44:9 | ... = ... | |
-| test.cpp:45:3:45:24 | ... = ... | |
-| test.cpp:46:3:46:7 | ... = ... | |
-| test.cpp:51:25:51:25 | (unsigned int)... | |
-| test.cpp:53:10:53:13 | (int)... | |
-| test.cpp:53:10:53:13 | * ... | LoadTotalOverlap, Unary |
-| test.cpp:53:18:53:21 | (int)... | |
-| test.cpp:55:5:55:15 | ... = ... | |
-| test.cpp:56:12:56:25 | (...) | |
-| test.cpp:56:12:56:43 | ... && ... | |
-| test.cpp:56:13:56:16 | (int)... | |
-| test.cpp:56:13:56:16 | * ... | Unary, Unique |
-| test.cpp:56:21:56:24 | (int)... | |
-| test.cpp:56:21:56:24 | * ... | LoadTotalOverlap, Unary |
-| test.cpp:56:30:56:43 | (...) | |
-| test.cpp:56:31:56:34 | (int)... | |
-| test.cpp:56:31:56:34 | * ... | Unary, Unique |
-| test.cpp:56:39:56:42 | (int)... | |
-| test.cpp:56:47:56:51 | ... ++ | |
-| test.cpp:59:9:59:12 | (int)... | |
-| test.cpp:59:9:59:12 | * ... | Unary, Unique |
-| test.cpp:59:17:59:20 | (int)... | |
-| test.cpp:62:5:62:12 | ... ++ | |
-| test.cpp:77:20:77:28 | call to getAValue | Unary, Unique |
-| test.cpp:77:20:77:30 | (signed short)... | |
-| test.cpp:79:7:79:7 | (int)... | |
-| test.cpp:79:7:79:7 | v | Unary, Unary |
-| test.cpp:79:11:79:20 | (int)... | |
-| test.cpp:79:17:79:20 | val1 | LoadTotalOverlap, Unary |
-| test.cpp:79:24:79:33 | (int)... | |
-| test.cpp:79:30:79:33 | val2 | LoadTotalOverlap, Unary |
-| test.cpp:80:5:80:19 | ... = ... | |
-| test.cpp:80:9:80:17 | call to getAValue | Unary, Unique |
-| test.cpp:80:9:80:19 | (signed short)... | |
-| test.cpp:88:3:88:20 | ... = ... | |
-| test.cpp:88:12:88:12 | (void *)... | |
-| test.cpp:105:11:105:12 | (Base *)... | |
-| test.cpp:105:11:105:12 | pd | InheritanceConversion, InitializeParameter |
-| test.cpp:106:14:106:35 | static_cast... | |
-| test.cpp:106:33:106:34 | pd | InheritanceConversion, InitializeParameter |
-| test.cpp:128:3:128:11 | ... = ... | |
-| test.cpp:139:3:139:24 | ... = ... | |
-| test.cpp:147:3:147:18 | ... = ... | |
-| test.cpp:156:3:156:17 | ... = ... | |
diff --git a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/Uniqueness.ql b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/Uniqueness.ql
index 5b020d757eec..bc6dbf94bf7c 100644
--- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/Uniqueness.ql
+++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/Uniqueness.ql
@@ -1,5 +1,5 @@
import cpp
-import semmle.code.cpp.valuenumbering.GlobalValueNumbering
+import semmle.code.cpp.valuenumbering.GlobalValueNumberingImpl
// Every expression should have exactly one GVN.
// So this query should have zero results.
diff --git a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/diff_ir_expr.expected b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/diff_ir_expr.expected
index e69de29bb2d1..cd44eb8572b7 100644
--- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/diff_ir_expr.expected
+++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/diff_ir_expr.expected
@@ -0,0 +1,142 @@
+| test.cpp:5:3:5:13 | ... = ... | test.cpp:5:3:5:13 | ... = ... | AST only |
+| test.cpp:6:3:6:13 | ... = ... | test.cpp:6:3:6:13 | ... = ... | AST only |
+| test.cpp:7:3:7:7 | ... = ... | test.cpp:7:3:7:7 | ... = ... | AST only |
+| test.cpp:10:16:10:16 | 1 | test.cpp:10:16:10:16 | 1 | AST only |
+| test.cpp:16:3:16:24 | ... = ... | test.cpp:16:3:16:24 | ... = ... | AST only |
+| test.cpp:17:3:17:24 | ... = ... | test.cpp:17:3:17:24 | ... = ... | AST only |
+| test.cpp:18:3:18:7 | ... = ... | test.cpp:18:3:18:7 | ... = ... | AST only |
+| test.cpp:21:16:21:16 | 2 | test.cpp:21:16:21:16 | 2 | AST only |
+| test.cpp:29:3:29:3 | x | test.cpp:31:3:31:3 | x | IR only |
+| test.cpp:29:3:29:24 | ... = ... | test.cpp:29:3:29:24 | ... = ... | AST only |
+| test.cpp:30:3:30:17 | call to change_global02 | test.cpp:30:3:30:17 | call to change_global02 | AST only |
+| test.cpp:31:3:31:3 | x | test.cpp:29:3:29:3 | x | IR only |
+| test.cpp:31:3:31:24 | ... = ... | test.cpp:31:3:31:24 | ... = ... | AST only |
+| test.cpp:32:3:32:7 | ... = ... | test.cpp:32:3:32:7 | ... = ... | AST only |
+| test.cpp:35:16:35:16 | 3 | test.cpp:35:16:35:16 | 3 | AST only |
+| test.cpp:43:3:43:3 | x | test.cpp:45:3:45:3 | x | IR only |
+| test.cpp:43:3:43:24 | ... = ... | test.cpp:43:3:43:24 | ... = ... | AST only |
+| test.cpp:43:7:43:24 | ... + ... | test.cpp:45:7:45:24 | ... + ... | IR only |
+| test.cpp:43:7:43:24 | ... + ... | test.cpp:46:7:46:7 | x | IR only |
+| test.cpp:43:17:43:24 | global03 | test.cpp:45:17:45:24 | global03 | IR only |
+| test.cpp:44:3:44:5 | * ... | test.cpp:44:4:44:5 | p2 | IR only |
+| test.cpp:44:3:44:9 | ... = ... | test.cpp:44:3:44:9 | ... = ... | AST only |
+| test.cpp:44:4:44:5 | p2 | test.cpp:44:3:44:5 | * ... | IR only |
+| test.cpp:44:9:44:9 | 0 | test.cpp:51:25:51:25 | 0 | AST only |
+| test.cpp:44:9:44:9 | 0 | test.cpp:53:18:53:21 | (int)... | AST only |
+| test.cpp:44:9:44:9 | 0 | test.cpp:56:39:56:42 | (int)... | AST only |
+| test.cpp:44:9:44:9 | 0 | test.cpp:59:17:59:20 | (int)... | AST only |
+| test.cpp:44:9:44:9 | 0 | test.cpp:88:12:88:12 | 0 | AST only |
+| test.cpp:45:3:45:3 | x | test.cpp:43:3:43:3 | x | IR only |
+| test.cpp:45:3:45:24 | ... = ... | test.cpp:45:3:45:24 | ... = ... | AST only |
+| test.cpp:45:7:45:24 | ... + ... | test.cpp:43:7:43:24 | ... + ... | IR only |
+| test.cpp:45:17:45:24 | global03 | test.cpp:43:17:43:24 | global03 | IR only |
+| test.cpp:46:3:46:7 | ... = ... | test.cpp:46:3:46:7 | ... = ... | AST only |
+| test.cpp:46:7:46:7 | x | test.cpp:43:7:43:24 | ... + ... | IR only |
+| test.cpp:51:25:51:25 | 0 | test.cpp:44:9:44:9 | 0 | AST only |
+| test.cpp:51:25:51:25 | 0 | test.cpp:53:18:53:21 | (int)... | AST only |
+| test.cpp:51:25:51:25 | 0 | test.cpp:56:39:56:42 | (int)... | AST only |
+| test.cpp:51:25:51:25 | 0 | test.cpp:59:17:59:20 | (int)... | AST only |
+| test.cpp:51:25:51:25 | 0 | test.cpp:88:12:88:12 | 0 | AST only |
+| test.cpp:51:25:51:25 | (unsigned int)... | test.cpp:51:25:51:25 | (unsigned int)... | AST only |
+| test.cpp:53:10:53:13 | (int)... | test.cpp:53:10:53:13 | (int)... | AST only |
+| test.cpp:53:10:53:13 | (int)... | test.cpp:56:21:56:24 | (int)... | AST only |
+| test.cpp:53:18:53:21 | (int)... | test.cpp:44:9:44:9 | 0 | AST only |
+| test.cpp:53:18:53:21 | (int)... | test.cpp:51:25:51:25 | 0 | AST only |
+| test.cpp:53:18:53:21 | (int)... | test.cpp:53:18:53:21 | (int)... | AST only |
+| test.cpp:53:18:53:21 | (int)... | test.cpp:56:39:56:42 | (int)... | AST only |
+| test.cpp:53:18:53:21 | (int)... | test.cpp:59:17:59:20 | (int)... | AST only |
+| test.cpp:53:18:53:21 | (int)... | test.cpp:88:12:88:12 | 0 | AST only |
+| test.cpp:55:5:55:15 | ... = ... | test.cpp:55:5:55:15 | ... = ... | AST only |
+| test.cpp:56:12:56:25 | (...) | test.cpp:56:12:56:25 | (...) | AST only |
+| test.cpp:56:12:56:43 | ... && ... | test.cpp:56:12:56:43 | ... && ... | AST only |
+| test.cpp:56:13:56:16 | (int)... | test.cpp:56:13:56:16 | (int)... | AST only |
+| test.cpp:56:13:56:16 | (int)... | test.cpp:56:31:56:34 | (int)... | AST only |
+| test.cpp:56:13:56:16 | (int)... | test.cpp:59:9:59:12 | (int)... | AST only |
+| test.cpp:56:13:56:16 | * ... | test.cpp:56:31:56:34 | * ... | AST only |
+| test.cpp:56:13:56:16 | * ... | test.cpp:59:9:59:12 | * ... | AST only |
+| test.cpp:56:21:56:24 | (int)... | test.cpp:53:10:53:13 | (int)... | AST only |
+| test.cpp:56:21:56:24 | (int)... | test.cpp:56:21:56:24 | (int)... | AST only |
+| test.cpp:56:30:56:43 | (...) | test.cpp:56:30:56:43 | (...) | AST only |
+| test.cpp:56:31:56:34 | (int)... | test.cpp:56:13:56:16 | (int)... | AST only |
+| test.cpp:56:31:56:34 | (int)... | test.cpp:56:31:56:34 | (int)... | AST only |
+| test.cpp:56:31:56:34 | (int)... | test.cpp:59:9:59:12 | (int)... | AST only |
+| test.cpp:56:31:56:34 | * ... | test.cpp:56:13:56:16 | * ... | AST only |
+| test.cpp:56:31:56:34 | * ... | test.cpp:59:9:59:12 | * ... | AST only |
+| test.cpp:56:39:56:42 | (int)... | test.cpp:44:9:44:9 | 0 | AST only |
+| test.cpp:56:39:56:42 | (int)... | test.cpp:51:25:51:25 | 0 | AST only |
+| test.cpp:56:39:56:42 | (int)... | test.cpp:53:18:53:21 | (int)... | AST only |
+| test.cpp:56:39:56:42 | (int)... | test.cpp:56:39:56:42 | (int)... | AST only |
+| test.cpp:56:39:56:42 | (int)... | test.cpp:59:17:59:20 | (int)... | AST only |
+| test.cpp:56:39:56:42 | (int)... | test.cpp:88:12:88:12 | 0 | AST only |
+| test.cpp:56:47:56:51 | ... ++ | test.cpp:56:47:56:51 | ... ++ | AST only |
+| test.cpp:59:9:59:12 | (int)... | test.cpp:56:13:56:16 | (int)... | AST only |
+| test.cpp:59:9:59:12 | (int)... | test.cpp:56:31:56:34 | (int)... | AST only |
+| test.cpp:59:9:59:12 | (int)... | test.cpp:59:9:59:12 | (int)... | AST only |
+| test.cpp:59:9:59:12 | * ... | test.cpp:56:13:56:16 | * ... | AST only |
+| test.cpp:59:9:59:12 | * ... | test.cpp:56:31:56:34 | * ... | AST only |
+| test.cpp:59:17:59:20 | (int)... | test.cpp:44:9:44:9 | 0 | AST only |
+| test.cpp:59:17:59:20 | (int)... | test.cpp:51:25:51:25 | 0 | AST only |
+| test.cpp:59:17:59:20 | (int)... | test.cpp:53:18:53:21 | (int)... | AST only |
+| test.cpp:59:17:59:20 | (int)... | test.cpp:56:39:56:42 | (int)... | AST only |
+| test.cpp:59:17:59:20 | (int)... | test.cpp:59:17:59:20 | (int)... | AST only |
+| test.cpp:59:17:59:20 | (int)... | test.cpp:88:12:88:12 | 0 | AST only |
+| test.cpp:62:5:62:12 | ... ++ | test.cpp:62:5:62:12 | ... ++ | AST only |
+| test.cpp:77:20:77:28 | call to getAValue | test.cpp:79:7:79:7 | v | IR only |
+| test.cpp:77:20:77:30 | (signed short)... | test.cpp:77:20:77:30 | (signed short)... | AST only |
+| test.cpp:77:20:77:30 | (signed short)... | test.cpp:79:7:79:7 | v | AST only |
+| test.cpp:79:7:79:7 | (int)... | test.cpp:79:7:79:7 | (int)... | AST only |
+| test.cpp:79:7:79:7 | v | test.cpp:77:20:77:28 | call to getAValue | IR only |
+| test.cpp:79:7:79:7 | v | test.cpp:77:20:77:30 | (signed short)... | AST only |
+| test.cpp:79:11:79:20 | (int)... | test.cpp:79:11:79:20 | (int)... | AST only |
+| test.cpp:79:24:79:33 | (int)... | test.cpp:79:24:79:33 | (int)... | AST only |
+| test.cpp:80:5:80:19 | ... = ... | test.cpp:80:5:80:19 | ... = ... | AST only |
+| test.cpp:80:9:80:19 | (signed short)... | test.cpp:80:9:80:19 | (signed short)... | AST only |
+| test.cpp:88:3:88:20 | ... = ... | test.cpp:88:3:88:20 | ... = ... | AST only |
+| test.cpp:88:12:88:12 | 0 | test.cpp:44:9:44:9 | 0 | AST only |
+| test.cpp:88:12:88:12 | 0 | test.cpp:51:25:51:25 | 0 | AST only |
+| test.cpp:88:12:88:12 | 0 | test.cpp:53:18:53:21 | (int)... | AST only |
+| test.cpp:88:12:88:12 | 0 | test.cpp:56:39:56:42 | (int)... | AST only |
+| test.cpp:88:12:88:12 | 0 | test.cpp:59:17:59:20 | (int)... | AST only |
+| test.cpp:88:12:88:12 | (void *)... | test.cpp:88:12:88:12 | (void *)... | AST only |
+| test.cpp:92:11:92:16 | ... = ... | test.cpp:92:15:92:16 | 10 | IR only |
+| test.cpp:92:11:92:16 | ... = ... | test.cpp:93:10:93:10 | x | IR only |
+| test.cpp:92:15:92:16 | 10 | test.cpp:92:11:92:16 | ... = ... | IR only |
+| test.cpp:92:15:92:16 | 10 | test.cpp:93:10:93:10 | x | IR only |
+| test.cpp:93:10:93:10 | x | test.cpp:92:11:92:16 | ... = ... | IR only |
+| test.cpp:93:10:93:10 | x | test.cpp:92:15:92:16 | 10 | IR only |
+| test.cpp:105:11:105:12 | (Base *)... | test.cpp:105:11:105:12 | (Base *)... | AST only |
+| test.cpp:105:11:105:12 | (Base *)... | test.cpp:106:14:106:35 | static_cast... | AST only |
+| test.cpp:105:11:105:12 | (Base *)... | test.cpp:107:11:107:12 | pb | AST only |
+| test.cpp:105:11:105:12 | pd | test.cpp:107:11:107:12 | pb | IR only |
+| test.cpp:106:14:106:35 | static_cast... | test.cpp:105:11:105:12 | (Base *)... | AST only |
+| test.cpp:106:14:106:35 | static_cast... | test.cpp:106:14:106:35 | static_cast... | AST only |
+| test.cpp:106:14:106:35 | static_cast... | test.cpp:107:11:107:12 | pb | AST only |
+| test.cpp:106:33:106:34 | pd | test.cpp:107:11:107:12 | pb | IR only |
+| test.cpp:107:11:107:12 | pb | test.cpp:105:11:105:12 | (Base *)... | AST only |
+| test.cpp:107:11:107:12 | pb | test.cpp:105:11:105:12 | pd | IR only |
+| test.cpp:107:11:107:12 | pb | test.cpp:106:14:106:35 | static_cast... | AST only |
+| test.cpp:107:11:107:12 | pb | test.cpp:106:33:106:34 | pd | IR only |
+| test.cpp:113:3:113:5 | a | test.cpp:115:3:115:5 | a | IR only |
+| test.cpp:115:3:115:5 | a | test.cpp:113:3:113:5 | a | IR only |
+| test.cpp:125:15:125:15 | x | test.cpp:128:7:128:7 | x | AST only |
+| test.cpp:126:15:126:15 | x | test.cpp:128:7:128:7 | x | AST only |
+| test.cpp:128:3:128:11 | ... = ... | test.cpp:128:3:128:11 | ... = ... | AST only |
+| test.cpp:128:7:128:7 | x | test.cpp:125:15:125:15 | x | AST only |
+| test.cpp:128:7:128:7 | x | test.cpp:126:15:126:15 | x | AST only |
+| test.cpp:128:11:128:11 | n | test.cpp:129:15:129:15 | x | IR only |
+| test.cpp:129:15:129:15 | x | test.cpp:128:11:128:11 | n | IR only |
+| test.cpp:136:21:136:21 | x | test.cpp:137:21:137:21 | x | AST only |
+| test.cpp:136:21:136:21 | x | test.cpp:139:13:139:13 | x | AST only |
+| test.cpp:137:21:137:21 | x | test.cpp:136:21:136:21 | x | AST only |
+| test.cpp:137:21:137:21 | x | test.cpp:139:13:139:13 | x | AST only |
+| test.cpp:139:3:139:24 | ... = ... | test.cpp:139:3:139:24 | ... = ... | AST only |
+| test.cpp:139:13:139:13 | x | test.cpp:136:21:136:21 | x | AST only |
+| test.cpp:139:13:139:13 | x | test.cpp:137:21:137:21 | x | AST only |
+| test.cpp:144:15:144:15 | x | test.cpp:149:15:149:15 | x | IR only |
+| test.cpp:145:15:145:15 | y | test.cpp:147:7:147:7 | y | AST only |
+| test.cpp:147:3:147:18 | ... = ... | test.cpp:147:3:147:18 | ... = ... | AST only |
+| test.cpp:147:7:147:7 | y | test.cpp:145:15:145:15 | y | AST only |
+| test.cpp:149:15:149:15 | x | test.cpp:144:15:144:15 | x | IR only |
+| test.cpp:153:21:153:21 | x | test.cpp:154:21:154:21 | x | AST only |
+| test.cpp:154:21:154:21 | x | test.cpp:153:21:153:21 | x | AST only |
+| test.cpp:156:3:156:17 | ... = ... | test.cpp:156:3:156:17 | ... = ... | AST only |
diff --git a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/diff_ir_expr.ql b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/diff_ir_expr.ql
index 317c3d975565..7b897f39dbd9 100644
--- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/diff_ir_expr.ql
+++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/diff_ir_expr.ql
@@ -1,5 +1,5 @@
import cpp
-import semmle.code.cpp.valuenumbering.GlobalValueNumbering as AST
+import semmle.code.cpp.valuenumbering.GlobalValueNumberingImpl as AST
import semmle.code.cpp.ir.internal.ASTValueNumbering as IR
import semmle.code.cpp.ir.IR