From d09efff48cb0cd901e67f5a0a49b7af0ca8e8469 Mon Sep 17 00:00:00 2001 From: Russel Arbore <russel.jma@gmail.com> Date: Fri, 17 Jan 2025 14:57:40 -0800 Subject: [PATCH] handle const prop in dyn const eq check --- hercules_ir/src/typecheck.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/hercules_ir/src/typecheck.rs b/hercules_ir/src/typecheck.rs index 5a64e577..262ce6f8 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()], -- GitLab