diff --git a/src/alloy/compiler/passes/constant_propagation_pass.cc b/src/alloy/compiler/passes/constant_propagation_pass.cc index 140d0bf9c..13001a904 100644 --- a/src/alloy/compiler/passes/constant_propagation_pass.cc +++ b/src/alloy/compiler/passes/constant_propagation_pass.cc @@ -9,6 +9,9 @@ #include +#include +#include + using namespace alloy; using namespace alloy::compiler; using namespace alloy::compiler::passes; @@ -89,6 +92,17 @@ int ConstantPropagationPass::Run(HIRBuilder* builder) { } } break; + case OPCODE_CALL_INDIRECT: + if (i->src1.value->IsConstant()) { + runtime::FunctionInfo* symbol_info; + if (runtime_->LookupFunctionInfo( + (uint32_t)i->src1.value->constant.i32, &symbol_info)) { + break; + } + i->Replace(&OPCODE_CALL_info, i->flags); + i->src1.symbol_info = symbol_info; + } + break; case OPCODE_CALL_INDIRECT_TRUE: if (i->src1.value->IsConstant()) { if (i->src1.value->IsConstantTrue()) {