|
hoshi-lang dev
Yet another programming language
|
#include <IROptimizer.hpp>

Classes | |
| struct | SimulationStack |
| struct | VariablesExtraInfo |
Public Attributes | |
| struct yoi::IRFunctionOptimizer::SimulationStack | simulationStack |
| std::map< yoi::indexT, VariablesExtraInfo > | variablesExtraInfo |
| CallGraph::FuncIdentifier | currentFuncId |
Private Member Functions | |
| AnalysisState | analyzeBlockForNullable (indexT blockIndex, const AnalysisState &inState) |
| AnalysisState | analyzeBlockForRaw (indexT blockIndex, const AnalysisState &inState) |
| AnalysisState | analyzeBlockForInterfaceAllocationReduction (indexT blockIndex, const AnalysisState &inState) |
| AnalysisState | mergeStatesForNullable (const AnalysisState &s1, const AnalysisState &s2) |
| AnalysisState | mergeStatesForRaw (const AnalysisState &s1, const AnalysisState &s2) |
| AnalysisState | mergeStatesForInterfaceAllocationReduction (const AnalysisState &s1, const AnalysisState &s2) |
Private Attributes | |
| std::shared_ptr< compilerContext > | compilerCtx |
| std::shared_ptr< IRModule > | irModule |
| std::shared_ptr< IRFunctionDefinition > | targetFunction |
| yoi::indexT | currentCodeBlockIndex |
| std::map< CallGraph::FuncIdentifier, FunctionAnalysisInfo > & | globalAnalysisResults |
Definition at line 52 of file IROptimizer.hpp.
| IRFunctionOptimizer | ( | const std::shared_ptr< compilerContext > & | compilerCtx, |
| const std::shared_ptr< IRModule > & | irModule, | ||
| std::map< CallGraph::FuncIdentifier, FunctionAnalysisInfo > & | globalResults | ||
| ) |
Definition at line 553 of file IROptimizer.cpp.
| IRFunctionOptimizer::SimulationStack::Item add | ( | const IRFunctionOptimizer::SimulationStack::Item & | a, |
| const IRFunctionOptimizer::SimulationStack::Item & | b | ||
| ) |
Definition at line 127 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

| AnalysisState analyzeBlock | ( | indexT | blockIndex, |
| const AnalysisState & | inState | ||
| ) |
Definition at line 2191 of file IROptimizer.cpp.
References IRFunctionOptimizer::currentCodeBlockIndex, IRFunctionOptimizer::handleInstruction(), IRFunctionOptimizer::simulationStack, AnalysisState::stack, IRFunctionOptimizer::targetFunction, IRFunctionOptimizer::variablesExtraInfo, and AnalysisState::variableStates.
Referenced by IRFunctionOptimizer::doOptimizationForCurrentFunction().


|
private |
Definition at line 3236 of file IROptimizer.cpp.
References IRMetadata::getMetadata(), IRMetadata::hasMetadata(), IRValueType::interfaceObject, IRFunctionOptimizer::SimulationStack::Item::metadata, IRFunctionOptimizer::SimulationStack::peek(), IRFunctionOptimizer::simulationStack, AnalysisState::stack, IRFunctionOptimizer::targetFunction, IRFunctionOptimizer::SimulationStack::Item::type, IRFunctionOptimizer::variablesExtraInfo, and AnalysisState::variableStates.

|
private |
Definition at line 2374 of file IROptimizer.cpp.
References IR::add, IR::array_length, IR::basic_cast_bool, IR::basic_cast_char, IR::basic_cast_deci, IR::basic_cast_int, IR::bitwise_and, IR::bitwise_not, IR::bitwise_or, IR::bitwise_xor, IRFunctionOptimizer::compilerCtx, IRFunctionOptimizer::currentCodeBlockIndex, IRFunctionOptimizer::currentFuncId, IR::direct_assign, IR::div, IR::dyn_cast_any, IR::equal, IRFunctionOptimizer::globalAnalysisResults, IR::greater_equal, IR::greater_than, IRFunctionOptimizer::handleInstruction(), IR::interfaceof, IRFunctionDefinition::Intrinsic, IR::invoke, IR::invoke_dangling, IR::invoke_imported, IR::invoke_virtual, IRFunctionOptimizer::SimulationStack::items, IR::jump, IR::left_shift, IR::less_equal, IR::less_than, IR::load_element, IR::load_global, IR::load_local, IR::load_member, yoi::managedPtr(), IR::mod, IR::mul, IR::negate, IRFunctionDefinition::NoFFI, IRValueType::none, IR::nop, IR::not_equal, IRValueType::null, IRValueType::Nullable, FunctionAnalysisInfo::Nullable, IRFunctionOptimizer::SimulationStack::peek(), IR::pointer_cast, IRValueType::pointerObject, IRFunctionOptimizer::SimulationStack::pop(), IRFunctionOptimizer::SimulationStack::push(), IR::push_boolean, IR::push_character, IR::push_decimal, IR::push_integer, IR::push_null, IR::push_short, IR::push_string, IR::push_unsigned, FunctionAnalysisInfo::Raw, IR::resume, IR::ret, IR::ret_none, IR::right_shift, IRFunctionOptimizer::simulationStack, AnalysisState::stack, IR::store_element, IR::store_global, IR::store_local, IR::store_member, IR::sub, IRFunctionOptimizer::targetFunction, IRFunctionOptimizer::variablesExtraInfo, AnalysisState::variableStates, yoi::warning(), yoi::wstring2string(), IR::yield, and IR::yield_none.
Referenced by IRFunctionOptimizer::performNullableCheck().


|
private |
Definition at line 2875 of file IROptimizer.cpp.
References IR::add, IR::basic_cast_bool, IR::basic_cast_char, IR::basic_cast_deci, IR::basic_cast_int, IR::basic_cast_short, IR::basic_cast_unsigned, IR::bind_elements_post, IR::bind_elements_pred, IR::bitwise_and, IR::bitwise_or, IR::bitwise_xor, IRFunctionOptimizer::compilerCtx, IRFunctionOptimizer::currentCodeBlockIndex, IRFunctionOptimizer::currentFuncId, IRValueType::datastructObject, IR::direct_assign, IR::div, IR::equal, IRFunctionOptimizer::equal(), IRValueType::getBasicRawType(), IRFunctionOptimizer::globalAnalysisResults, IR::greater_equal, IR::greater_than, IRFunctionOptimizer::greaterThan(), IRFunctionOptimizer::greaterThanOrEqual(), IRFunctionOptimizer::handleInstruction(), IR::interfaceof, IRFunctionDefinition::Intrinsic, IR::invoke, IR::invoke_dangling, IR::invoke_imported, IR::invoke_virtual, IR::left_shift, IR::less_equal, IR::less_than, IRFunctionOptimizer::lessThan(), IR::load_element, IR::load_field, IR::load_local, yoi::managedPtr(), IR::mod, IR::mul, IR::new_datastruct, IRFunctionDefinition::NoFFI, IR::not_equal, IRFunctionOptimizer::notEqual(), IRValueType::null, yoi::panic(), IRFunctionOptimizer::SimulationStack::peek(), IRFunctionOptimizer::SimulationStack::pop(), IRFunctionOptimizer::SimulationStack::push(), IR::push_boolean, IR::push_character, IR::push_decimal, IR::push_integer, IR::push_null, IR::push_short, IR::push_string, IR::push_unsigned, IRValueType::Raw, IR::resume, IR::ret, IR::ret_none, IR::right_shift, IRFunctionOptimizer::simulationStack, AnalysisState::stack, IR::store_element, IR::store_field, IR::store_local, IR::sub, IRFunctionOptimizer::targetFunction, IRFunctionOptimizer::SimulationStack::Item::type, IRFunctionOptimizer::variablesExtraInfo, AnalysisState::variableStates, IR::yield, and IR::yield_none.
Referenced by IRFunctionOptimizer::performRawCheck().


| IRFunctionOptimizer::SimulationStack::Item bitwiseAnd | ( | const IRFunctionOptimizer::SimulationStack::Item & | a, |
| const IRFunctionOptimizer::SimulationStack::Item & | b | ||
| ) |
Definition at line 342 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

| IRFunctionOptimizer::SimulationStack::Item bitwiseNot | ( | const IRFunctionOptimizer::SimulationStack::Item & | a | ) |
Definition at line 312 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::type, and IRValueType::unsignedObject.

| IRFunctionOptimizer::SimulationStack::Item bitwiseOr | ( | const IRFunctionOptimizer::SimulationStack::Item & | a, |
| const IRFunctionOptimizer::SimulationStack::Item & | b | ||
| ) |
Definition at line 373 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

| IRFunctionOptimizer::SimulationStack::Item bitwiseShiftLeft | ( | const IRFunctionOptimizer::SimulationStack::Item & | a, |
| const IRFunctionOptimizer::SimulationStack::Item & | b | ||
| ) |
Definition at line 435 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

| IRFunctionOptimizer::SimulationStack::Item bitwiseShiftRight | ( | const IRFunctionOptimizer::SimulationStack::Item & | a, |
| const IRFunctionOptimizer::SimulationStack::Item & | b | ||
| ) |
Definition at line 466 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

| IRFunctionOptimizer::SimulationStack::Item bitwiseXor | ( | const IRFunctionOptimizer::SimulationStack::Item & | a, |
| const IRFunctionOptimizer::SimulationStack::Item & | b | ||
| ) |
Definition at line 404 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

| IRFunctionOptimizer & controlFlowOptimization | ( | ) |
Definition at line 1868 of file IROptimizer.cpp.
References IRFunctionDefinition::Constructor, IR::debugInfo, IRFunctionDefinition::Generator, IR::jump, IR::jump_if_false, IR::jump_if_true, IR::load_local, IROperand::localVar, IRValueType::none, yoi::panic(), IR::ret, IR::ret_none, IRFunctionOptimizer::targetFunction, and yoi::wstring2string().
Referenced by IRFunctionOptimizer::doOptimizationForCurrentFunction().


| IRFunctionOptimizer::SimulationStack::Item div | ( | const IRFunctionOptimizer::SimulationStack::Item & | a, |
| const IRFunctionOptimizer::SimulationStack::Item & | b | ||
| ) |
Definition at line 220 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

| IRFunctionOptimizer & doOptimizationForCurrentFunction | ( | ) |
Definition at line 1949 of file IROptimizer.cpp.
References IRFunctionOptimizer::analyzeBlock(), IRFunctionOptimizer::controlFlowOptimization(), IR::jump, IR::jump_if_false, IR::jump_if_true, yoi::mergeStates(), IRFunctionOptimizer::performInterfaceAllocationReduction(), IRFunctionOptimizer::performNullableCheck(), IRFunctionOptimizer::performParamBorrowCheck(), IRFunctionOptimizer::performRawCheck(), IRFunctionOptimizer::reduceEmptyCodeBlock(), IRFunctionOptimizer::reduceRedundantJump(), IRFunctionOptimizer::reduceRedundantNop(), IR::ret, IR::ret_none, IRFunctionOptimizer::targetFunction, and IRFunctionOptimizer::transformBlock().
Referenced by IROptimizer::performBaseOptimization().


| IRFunctionOptimizer::SimulationStack::Item equal | ( | const SimulationStack::Item & | item, |
| const SimulationStack::Item & | right | ||
| ) |
Definition at line 689 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::compilerCtx, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.
Referenced by IRFunctionOptimizer::analyzeBlockForRaw().


| yoi::indexT generatePushOp | ( | const SimulationStack::Item & | item, |
| yoi::indexT | index | ||
| ) |
Generate push constant operation for the given value.
| item | The value to be pushed. |
| index | The index of the instruction to be inserted. |
Definition at line 497 of file IROptimizer.cpp.
References IRFunctionOptimizer::currentCodeBlockIndex, IR::debugInfo, IRFunctionOptimizer::SimulationStack::Item::ContributedInstructionSet::insert(), IRValueType::integerObject, IRFunctionOptimizer::targetFunction, IRFunctionOptimizer::SimulationStack::Item::type, and IRValueType::unsignedObject.

| IRFunctionOptimizer::SimulationStack::Item greaterThan | ( | const SimulationStack::Item & | item, |
| const SimulationStack::Item & | right | ||
| ) |
Definition at line 627 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::compilerCtx, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.
Referenced by IRFunctionOptimizer::analyzeBlockForRaw().


| IRFunctionOptimizer::SimulationStack::Item greaterThanOrEqual | ( | const SimulationStack::Item & | item, |
| const SimulationStack::Item & | right | ||
| ) |
Definition at line 658 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::compilerCtx, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.
Referenced by IRFunctionOptimizer::analyzeBlockForRaw().


| void handleInstruction | ( | const IR & | ins, |
| yoi::indexT | insIndex, | ||
| yoi::indexT | currentCodeBlockIndex | ||
| ) |
Definition at line 3473 of file IROptimizer.cpp.
References IRFunctionOptimizer::compilerCtx, IR::opcode, IR::operands, IRFunctionOptimizer::SimulationStack::push(), IR::push_boolean, IR::push_integer, and IRFunctionOptimizer::simulationStack.
Referenced by IRFunctionOptimizer::analyzeBlock(), IRFunctionOptimizer::analyzeBlockForNullable(), and IRFunctionOptimizer::analyzeBlockForRaw().


| IRFunctionOptimizer::SimulationStack::Item lessThan | ( | const SimulationStack::Item & | item, |
| const SimulationStack::Item & | right | ||
| ) |
Definition at line 566 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::compilerCtx, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.
Referenced by IRFunctionOptimizer::analyzeBlockForRaw().


| IRFunctionOptimizer::SimulationStack::Item lessThanOrEqual | ( | const SimulationStack::Item & | item, |
| const SimulationStack::Item & | right | ||
| ) |
Definition at line 596 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::compilerCtx, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

|
private |
Definition at line 3404 of file IROptimizer.cpp.
References IRFunctionOptimizer::SimulationStack::items, yoi::panic(), IRFunctionOptimizer::SimulationStack::push(), AnalysisState::stack, and AnalysisState::variableStates.

|
private |
Definition at line 2709 of file IROptimizer.cpp.
References IRFunctionOptimizer::SimulationStack::items, IRValueType::Nullable, yoi::panic(), IRFunctionOptimizer::SimulationStack::push(), AnalysisState::stack, and AnalysisState::variableStates.
Referenced by IRFunctionOptimizer::performNullableCheck().


|
private |
Definition at line 3349 of file IROptimizer.cpp.
References IRFunctionOptimizer::SimulationStack::items, yoi::panic(), IRFunctionOptimizer::SimulationStack::push(), IRValueType::Raw, AnalysisState::stack, and AnalysisState::variableStates.
Referenced by IRFunctionOptimizer::performRawCheck().


| IRFunctionOptimizer::SimulationStack::Item mod | ( | const IRFunctionOptimizer::SimulationStack::Item & | a, |
| const IRFunctionOptimizer::SimulationStack::Item & | b | ||
| ) |
Definition at line 251 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

| IRFunctionOptimizer::SimulationStack::Item mul | ( | const IRFunctionOptimizer::SimulationStack::Item & | a, |
| const IRFunctionOptimizer::SimulationStack::Item & | b | ||
| ) |
Definition at line 189 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

| IRFunctionOptimizer::SimulationStack::Item negate | ( | const IRFunctionOptimizer::SimulationStack::Item & | a | ) |
Definition at line 282 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

| IRFunctionOptimizer::SimulationStack::Item notEqual | ( | const SimulationStack::Item & | item, |
| const SimulationStack::Item & | right | ||
| ) |
Definition at line 719 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::compilerCtx, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.
Referenced by IRFunctionOptimizer::analyzeBlockForRaw().


| std::pair< std::map< indexT, std::vector< indexT > >, std::map< indexT, std::vector< indexT > > > performCFGAnalysis | ( | ) |
Definition at line 4640 of file IROptimizer.cpp.
References IR::jump, IR::jump_if_false, IR::jump_if_true, IR::ret, IR::ret_none, and IRFunctionOptimizer::targetFunction.
Referenced by IRFunctionOptimizer::performNullableCheck(), and IRFunctionOptimizer::performRawCheck().

| bool performInterfaceAllocationReduction | ( | ) |
Definition at line 4429 of file IROptimizer.cpp.
References AnalysisState::variableStates.
Referenced by IRFunctionOptimizer::doOptimizationForCurrentFunction().

| bool performNullableCheck | ( | ) |
Definition at line 2288 of file IROptimizer.cpp.
References IRFunctionOptimizer::analyzeBlockForNullable(), IRFunctionOptimizer::SimulationStack::items, yoi::managedPtr(), IRFunctionOptimizer::mergeStatesForNullable(), IRFunctionDefinition::NoRawAndNullOptimization, IRValueType::Nullable, IRFunctionOptimizer::performCFGAnalysis(), IRValueType::Raw, IR::ret, yoi::set_current_file_path(), AnalysisState::stack, IRFunctionOptimizer::targetFunction, and AnalysisState::variableStates.
Referenced by IRFunctionOptimizer::doOptimizationForCurrentFunction(), and IROptimizer::performBaseOptimization().


| bool performParamBorrowCheck | ( | ) |
Definition at line 4409 of file IROptimizer.cpp.
References IRValueType::Borrow, yoi::managedPtr(), IRValueType::NoBorrow, IRValueType::Raw, and IRFunctionDefinition::Variadic.
Referenced by IRFunctionOptimizer::doOptimizationForCurrentFunction().


| bool performRawCheck | ( | ) |
Definition at line 2764 of file IROptimizer.cpp.
References IRFunctionOptimizer::analyzeBlockForRaw(), IRFunctionOptimizer::compilerCtx, IRFunctionOptimizer::currentFuncId, IRFunctionDefinition::Generator, IRFunctionOptimizer::globalAnalysisResults, HOSHI_COMPILER_CTX_GLOB_ID_CONST, IRFunctionOptimizer::SimulationStack::items, yoi::managedPtr(), IRFunctionOptimizer::mergeStatesForRaw(), IRFunctionDefinition::NoRawAndNullOptimization, IRValueType::Nullable, IRFunctionOptimizer::performCFGAnalysis(), IRValueType::Raw, IR::ret, AnalysisState::stack, IRFunctionOptimizer::targetFunction, and AnalysisState::variableStates.
Referenced by IRFunctionOptimizer::doOptimizationForCurrentFunction().


| yoi::indexT reduce | ( | const SimulationStack::Item::ContributedInstructionSet & | contributedInstructions, |
| yoi::indexT | currentIndex | ||
| ) |
Reduce the given set of instructions by removing redundant instructions.
| contributedInstructions | The set of instructions to be reduced. |
| currentIndex | The current index of the instruction being processed. |
Definition at line 106 of file IROptimizer.cpp.
References IRFunctionOptimizer::SimulationStack::Item::ContributedInstructionSet::codeBlockIndex, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IR::nop, IRFunctionOptimizer::SimulationStack::Item::ContributedInstructionSet::optimizable, and IRFunctionOptimizer::targetFunction.
Referenced by IRFunctionOptimizer::reduceRedundantTempVar().

| IRFunctionOptimizer & reduceEmptyCodeBlock | ( | ) |
Definition at line 2051 of file IROptimizer.cpp.
References IR::jump, IR::jump_if_false, IR::jump_if_true, IR::nop, IRFunctionOptimizer::targetFunction, yoi::warning(), and yoi::wstring2string().
Referenced by IRFunctionOptimizer::doOptimizationForCurrentFunction().


| IRFunctionOptimizer & reduceRedundantCodeAfterRet | ( | ) |
Definition at line 1856 of file IROptimizer.cpp.
References IRFunctionOptimizer::currentCodeBlockIndex, and IRFunctionOptimizer::targetFunction.
Referenced by IRFunctionOptimizer::transformBlock().

| IRFunctionOptimizer & reduceRedundantConstantExpr | ( | ) |
Definition at line 749 of file IROptimizer.cpp.
References IRFunctionOptimizer::compilerCtx, IRFunctionOptimizer::currentCodeBlockIndex, IRFunctionOptimizer::SimulationStack::push(), IR::push_boolean, IR::push_decimal, IR::push_integer, IRFunctionOptimizer::simulationStack, and IRFunctionOptimizer::targetFunction.
Referenced by IRFunctionOptimizer::transformBlock().


| IRFunctionOptimizer & reduceRedundantJump | ( | ) |
Definition at line 1838 of file IROptimizer.cpp.
References IR::jump, and IRFunctionOptimizer::targetFunction.
Referenced by IRFunctionOptimizer::doOptimizationForCurrentFunction().

| IRFunctionOptimizer & reduceRedundantNop | ( | ) |
Definition at line 1830 of file IROptimizer.cpp.
References IR::nop, IR::opcode, and IRFunctionOptimizer::targetFunction.
Referenced by IRFunctionOptimizer::doOptimizationForCurrentFunction().

| IRFunctionOptimizer & reduceRedundantTempVar | ( | ) |
Definition at line 1823 of file IROptimizer.cpp.
References IRFunctionOptimizer::SimulationStack::items, IRFunctionOptimizer::reduce(), and IRFunctionOptimizer::simulationStack.

| IRFunctionOptimizer & setTargetFunction | ( | const std::shared_ptr< IRFunctionDefinition > & | targetFunction, |
| CallGraph::FuncIdentifier | funcId | ||
| ) |
Definition at line 558 of file IROptimizer.cpp.
References IRFunctionOptimizer::currentCodeBlockIndex, IRFunctionOptimizer::currentFuncId, and IRFunctionOptimizer::targetFunction.
Referenced by IROptimizer::performBaseOptimization().

| IRFunctionOptimizer::SimulationStack::Item sub | ( | const IRFunctionOptimizer::SimulationStack::Item & | a, |
| const IRFunctionOptimizer::SimulationStack::Item & | b | ||
| ) |
Definition at line 158 of file IROptimizer.cpp.
References IRValueType::booleanObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::boolValue, IRValueType::characterObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::charValue, IRFunctionOptimizer::SimulationStack::Item::contributedInstructions, IRValueType::decimalObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::deciValue, IRFunctionOptimizer::SimulationStack::Item::hasPossibleValue, IRValueType::integerObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::intValue, yoi::panic(), IRFunctionOptimizer::SimulationStack::Item::possibleValue, IRValueType::shortObject, IRFunctionOptimizer::SimulationStack::Item::PossibleValue::shortValue, IRFunctionOptimizer::SimulationStack::Item::type, IRValueType::unsignedObject, and IRFunctionOptimizer::SimulationStack::Item::PossibleValue::unsignedValue.

| void transformBlock | ( | indexT | blockIndex, |
| const AnalysisState & | inState | ||
| ) |
Definition at line 2275 of file IROptimizer.cpp.
References IRFunctionOptimizer::currentCodeBlockIndex, IRFunctionOptimizer::reduceRedundantCodeAfterRet(), IRFunctionOptimizer::reduceRedundantConstantExpr(), IRFunctionOptimizer::simulationStack, AnalysisState::stack, IRFunctionOptimizer::variablesExtraInfo, and AnalysisState::variableStates.
Referenced by IRFunctionOptimizer::doOptimizationForCurrentFunction().


|
private |
Definition at line 53 of file IROptimizer.hpp.
Referenced by IRFunctionOptimizer::analyzeBlockForNullable(), IRFunctionOptimizer::analyzeBlockForRaw(), IRFunctionOptimizer::equal(), IRFunctionOptimizer::greaterThan(), IRFunctionOptimizer::greaterThanOrEqual(), IRFunctionOptimizer::handleInstruction(), IRFunctionOptimizer::lessThan(), IRFunctionOptimizer::lessThanOrEqual(), IRFunctionOptimizer::notEqual(), IRFunctionOptimizer::performRawCheck(), and IRFunctionOptimizer::reduceRedundantConstantExpr().
|
private |
Definition at line 56 of file IROptimizer.hpp.
Referenced by IRFunctionOptimizer::analyzeBlock(), IRFunctionOptimizer::analyzeBlockForNullable(), IRFunctionOptimizer::analyzeBlockForRaw(), IRFunctionOptimizer::generatePushOp(), IRFunctionOptimizer::reduceRedundantCodeAfterRet(), IRFunctionOptimizer::reduceRedundantConstantExpr(), IRFunctionOptimizer::setTargetFunction(), and IRFunctionOptimizer::transformBlock().
| CallGraph::FuncIdentifier currentFuncId |
Definition at line 233 of file IROptimizer.hpp.
Referenced by IRFunctionOptimizer::analyzeBlockForNullable(), IRFunctionOptimizer::analyzeBlockForRaw(), IRFunctionOptimizer::performRawCheck(), and IRFunctionOptimizer::setTargetFunction().
|
private |
Definition at line 57 of file IROptimizer.hpp.
Referenced by IRFunctionOptimizer::analyzeBlockForNullable(), IRFunctionOptimizer::analyzeBlockForRaw(), and IRFunctionOptimizer::performRawCheck().
|
private |
Definition at line 54 of file IROptimizer.hpp.
| struct yoi::IRFunctionOptimizer::SimulationStack simulationStack |
Referenced by IRFunctionOptimizer::analyzeBlock(), IRFunctionOptimizer::analyzeBlockForInterfaceAllocationReduction(), IRFunctionOptimizer::analyzeBlockForNullable(), IRFunctionOptimizer::analyzeBlockForRaw(), IRFunctionOptimizer::handleInstruction(), IRFunctionOptimizer::reduceRedundantConstantExpr(), IRFunctionOptimizer::reduceRedundantTempVar(), and IRFunctionOptimizer::transformBlock().
|
private |
Definition at line 55 of file IROptimizer.hpp.
Referenced by IRFunctionOptimizer::analyzeBlock(), IRFunctionOptimizer::analyzeBlockForInterfaceAllocationReduction(), IRFunctionOptimizer::analyzeBlockForNullable(), IRFunctionOptimizer::analyzeBlockForRaw(), IRFunctionOptimizer::controlFlowOptimization(), IRFunctionOptimizer::doOptimizationForCurrentFunction(), IRFunctionOptimizer::generatePushOp(), IRFunctionOptimizer::performCFGAnalysis(), IRFunctionOptimizer::performNullableCheck(), IRFunctionOptimizer::performRawCheck(), IRFunctionOptimizer::reduce(), IRFunctionOptimizer::reduceEmptyCodeBlock(), IRFunctionOptimizer::reduceRedundantCodeAfterRet(), IRFunctionOptimizer::reduceRedundantConstantExpr(), IRFunctionOptimizer::reduceRedundantJump(), IRFunctionOptimizer::reduceRedundantNop(), and IRFunctionOptimizer::setTargetFunction().
| std::map<yoi::indexT, VariablesExtraInfo> variablesExtraInfo |
Definition at line 219 of file IROptimizer.hpp.
Referenced by IRFunctionOptimizer::analyzeBlock(), IRFunctionOptimizer::analyzeBlockForInterfaceAllocationReduction(), IRFunctionOptimizer::analyzeBlockForNullable(), IRFunctionOptimizer::analyzeBlockForRaw(), and IRFunctionOptimizer::transformBlock().