diff --git a/hercules_ir/src/typecheck.rs b/hercules_ir/src/typecheck.rs
index 5a64e5771b6c8db1698c1471c5ce34fc4dcae323..262ce6f8465ac362d47e4ce78d3e0639154e7035 100644
--- a/hercules_ir/src/typecheck.rs
+++ b/hercules_ir/src/typecheck.rs
@@ -1128,7 +1128,8 @@ fn types_match(
 /*
  * Determine if the given dynamic constant matches the parameter's dynamic
  * constants when the provided dynamic constants are substituted in for the
- * dynamic constants used in the parameter's dynamic constant
+ * dynamic constants used in the parameter's dynamic constant. Implement dynamic
+ * constant normalization here as well - i.e., 1 * 2 * 3 = 6.
  */
 fn dyn_consts_match(
     dynamic_constants: &Vec<DynamicConstant>,
@@ -1136,6 +1137,14 @@ fn dyn_consts_match(
     param: DynamicConstantID,
     input: DynamicConstantID,
 ) -> bool {
+    // First, try evaluating the DCs and seeing if they're the same value.
+    if let (Some(cons1), Some(cons2)) = (
+        evaluate_dynamic_constant(param, dynamic_constants),
+        evaluate_dynamic_constant(input, dynamic_constants),
+    ) {
+        return cons1 == cons2;
+    }
+
     match (
         &dynamic_constants[param.idx()],
         &dynamic_constants[input.idx()],