From 5343cab8517335300f638b2080e2b38fc4f8d8f1 Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Mon, 9 Jun 2014 21:15:13 -0700 Subject: [PATCH] Support constant CALL_INDIRECT. --- .../compiler/passes/constant_propagation_pass.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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()) {