diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4a3ca13d145f35e54c8ae8c30b00b2be1d69d2b9..4a2a883a53f91f22224ebfa10518dce37badb199 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,9 @@
-test-job:
+test-cpu:
   stage: test
   script:
     - cargo test --features=opencv
+
+test-gpu:
+  stage: test
+  script:
     - cargo test --features=cuda,opencv
diff --git a/hercules_ir/src/einsum.rs b/hercules_ir/src/einsum.rs
index c2521c22e237db47bd1656638ee05a1d37884269..d1c276e5c6cd05826374f8306f7e4c2153922e3d 100644
--- a/hercules_ir/src/einsum.rs
+++ b/hercules_ir/src/einsum.rs
@@ -235,12 +235,11 @@ impl<'a> EinsumContext<'a> {
                 control: _,
                 init: _,
                 reduct: _,
-            } => {
-                let reduce = self.so_far[&id];
+            } if let Some(reduce) = self.so_far.get(&id) => {
                 // Substitute opaque uses of thread ID nodes in inner expression
                 // with thread ID math expression, and increment inner-fork
                 // dimensions (alpha renaming).
-                return self.substitute_new_dims(reduce);
+                return self.substitute_new_dims(*reduce);
             }
             _ => MathExpr::OpaqueNode(id),
         };