| /arkcompiler/runtime_core/compiler/optimizer/ir/ |
| D | graph_checker.h | 64 void CheckPhiInputs(Inst *phi_inst); 71 bool CheckInstHasInput(Inst *inst, Inst *input); 72 bool CheckInstHasUser(Inst *inst, Inst *user); 75 void CheckSpillFillHolder(Inst *inst); 76 bool CheckInstRegUsageSaved(const Inst *inst, Register reg) const; 90 …void CheckObjectRec(const Inst *object, const Inst *user, const BasicBlock *block, Inst *start_fro… 92 void FindObjectInSaveState(const Inst *object, Inst *ss) const; 94 … void CheckSaveStateOsrRec(const Inst *inst, const Inst *user, BasicBlock *block, Marker visited); 119 static void VisitMov([[maybe_unused]] GraphVisitor *v, Inst *inst); 120 static void VisitNeg([[maybe_unused]] GraphVisitor *v, Inst *inst); [all …]
|
| D | graph_checker.cpp | 48 for (auto inst : block->AllInsts()) { in UserInputCheck() local 49 auto u = inst->GetFirstUser(); in UserInputCheck() 55 for (auto &user : inst->GetUsers()) { in UserInputCheck() 58 …ASSERT_DO(CheckInstHasInput(user_inst, inst), std::cerr << "Instruction is not an input to its use… in UserInputCheck() 59 … << "input: " << *inst << std::endl in UserInputCheck() 62 for (auto &input : inst->GetInputs()) { in UserInputCheck() 65 …ASSERT_DO(CheckInstHasUser(input_inst, inst), std::cerr << "Instruction is not a user to its input… in UserInputCheck() 66 … << "user: " << *inst << std::endl in UserInputCheck() 70 auto it = std::find_if(inst->GetInputs().begin(), inst->GetInputs().end(), in UserInputCheck() 72 [[maybe_unused]] bool has_save_state = (it != inst->GetInputs().end()); in UserInputCheck() [all …]
|
| D | ir_constructor.h | 33 * INST(0, Opcode::IntConstant).Constant(12); 34 * INST(1, Opcode::IntConstant).Constant(12); 35 * INST(2, Opcode::Add).Inputs(0, 1); 36 * INST(6, Opcode::Compare).Inputs(2).CC(ConditionCode::CC_AE); 37 * INST(7, Opcode::If).Inputs(6); 40 * INST(3, Opcode::Not).Inputs(0); 43 * INST(4, Opcode::Phi).Inputs(2, 3); 44 * INST(5, Opcode::Not).Inputs(4); 57 * INST creates new instruction and append it to the current basic block. 120 auto inst = graph_->CreateInst(std::forward<Args>(args)...); in NewInst() local [all …]
|
| D | analysis.cpp | 42 bool HasOsrEntryBetween(Inst *dominate_inst, Inst *inst) in HasOsrEntryBetween() argument 44 auto bb = inst->GetBasicBlock(); in HasOsrEntryBetween() 59 Inst *InstStoredValue(Inst *inst, Inst **second_value) in InstStoredValue() argument 61 ASSERT_PRINT(inst->IsStore(), "Attempt to take a stored value on non-store instruction"); in InstStoredValue() 62 Inst *val = nullptr; in InstStoredValue() 64 switch (inst->GetOpcode()) { in InstStoredValue() 72 val = inst->GetInput(inst->GetInputsCount() - 1).GetInst(); in InstStoredValue() 75 val = inst->GetInput(1).GetInst(); in InstStoredValue() 78 val = inst->GetInput(0).GetInst(); in InstStoredValue() 82 val = inst->GetInput(inst->GetInputsCount() - 2U).GetInst(); in InstStoredValue() [all …]
|
| /arkcompiler/runtime_core/compiler/optimizer/code_generator/ |
| D | codegen.h | 171 void CreateStackMap(Inst *inst, Inst *user = nullptr); 173 void CreateStackMapRec(SaveStateInst *save_state, bool require_vreg_map, Inst *target_site); 174 void CreateVRegMap(SaveStateInst *save_state, size_t vregs_count, Inst *target_site); 175 void CreateVreg(const Location &location, Inst *inst, const VirtualRegister &vreg); 180 void CreateVRegForRegister(const Location &location, Inst *inst, const VirtualRegister &vreg); 183 * 'live_inputs' shows that inst's source registers should be added the the mask 186 std::pair<RegMask, VRegMask> GetLiveRegisters(Inst *inst) in GetLiveRegisters() argument 190 if (!options.IsCompilerSaveOnlyLiveRegisters() || inst == nullptr) { in GetLiveRegisters() 200 // Add registers from intervals that are live at inst's definition in GetLiveRegisters() 202 …lr.VisitIntervalsWithLiveRegisters<live_inputs>(inst, [&live_regs, &live_fp_regs, this](const auto… in GetLiveRegisters() [all …]
|
| /arkcompiler/runtime_core/compiler/optimizer/optimizations/ |
| D | cleanup.h | 62 void MarkLiveRec(Marker live_mrk, Inst *inst); 65 void SetLiveRec(Inst *inst, Marker mrk, Marker live_mrk); 66 void LiveUserSearchRec(Inst *inst, Marker mrk, Marker live_mrk, Marker dead_mrk); 87 ArenaUnorderedMap<Inst *, uint32_t> map_; 89 Inst *fake_root_ {nullptr}; 91 // number of the inst according to the order it is reached during the DFS 94 inline uint32_t GetInstId(Inst *inst) const in GetInstId() argument 96 ASSERT(map_.count(inst) > 0); in GetInstId() 97 return map_.at(inst); in GetInstId() 101 * The immediate dominator of 'inst' [all …]
|
| D | memory_barriers.cpp | 30 for (auto inst : barriers_insts_) { in MergeBarriers() local 31 inst->ClearFlag(inst_flags::MEM_BARRIER); in MergeBarriers() 37 bool OptimizeMemoryBarriers::CheckInst(Inst *inst) in CheckInst() argument 39 … return (std::find(barriers_insts_.begin(), barriers_insts_.end(), inst) != barriers_insts_.end()); in CheckInst() 42 void OptimizeMemoryBarriers::CheckAllInputs(Inst *inst) in CheckAllInputs() argument 44 for (auto input : inst->GetInputs()) { in CheckAllInputs() 52 void OptimizeMemoryBarriers::CheckInput(Inst *input) in CheckInput() 59 void OptimizeMemoryBarriers::CheckTwoInputs(Inst *input1, Inst *input2) in CheckTwoInputs() 66 void OptimizeMemoryBarriers::VisitCallStatic(GraphVisitor *v, Inst *inst) in VisitCallStatic() argument 68 if (inst->CastToCallStatic()->IsInlined()) { in VisitCallStatic() [all …]
|
| D | memory_barriers.h | 57 void VisitDefault([[maybe_unused]] Inst *inst) override in VisitDefault() argument 59 ASSERT_DO(!inst->IsCall() && !inst->IsStore(), in VisitDefault() 60 … (std::cerr << "need to make a visitor for the instruction: " << *inst << std::endl)); in VisitDefault() 63 void CheckAllInputs(Inst *inst); 64 void CheckInput(Inst *input); 65 void CheckTwoInputs(Inst *input1, Inst *input2); 67 static void VisitCallStatic(GraphVisitor *v, Inst *inst); 68 static void VisitCallIndirect(GraphVisitor *v, Inst *inst); 69 static void VisitCall(GraphVisitor *v, Inst *inst); 70 static void VisitUnresolvedCallStatic(GraphVisitor *v, Inst *inst); [all …]
|
| D | vn.cpp | 26 static void AddSpecialTraits(Inst *inst, VnObject *obj) in AddSpecialTraits() argument 28 switch (inst->GetOpcode()) { in AddSpecialTraits() 30 if (inst->GetFlagsMask() == 0) { in AddSpecialTraits() 32 obj->Add(static_cast<uint32_t>(inst->CastToIntrinsic()->GetIntrinsicId())); in AddSpecialTraits() 36 obj->Add(static_cast<uint32_t>(inst->CastToCompareAnyType()->GetAnyType())); in AddSpecialTraits() 39 obj->Add(static_cast<uint32_t>(inst->CastToCastAnyTypeValue()->GetAnyType())); in AddSpecialTraits() 46 void VnObject::Add(Inst *inst) in Add() argument 48 Add(static_cast<uint32_t>(inst->GetOpcode())); in Add() 49 Add(static_cast<uint32_t>(inst->GetType())); in Add() 51 AddSpecialTraits(inst, this); in Add() [all …]
|
| D | scheduler.cpp | 49 void Scheduler::AddDep(uint32_t *prio, Inst *from, Inst *to, uint32_t latency, Inst *barrier) in AddDep() 90 Inst *last_barrier = nullptr; in BuildAllDeps() 91 for (auto inst : bb->InstsSafeReverse()) { in BuildAllDeps() local 92 ProcessInst(inst, mrk, &num_inst, &num_between, &num_special, &last_barrier); in BuildAllDeps() 104 void Scheduler::ProcessInst(Inst *inst, Marker mrk, uint32_t *num_inst, uint32_t *num_between, uint… in ProcessInst() argument 105 Inst **last_barrier) in ProcessInst() 108 uint32_t inst_latency = inst->Latency(); in ProcessInst() 109 bool barrier = inst->IsBarrier(); in ProcessInst() 112 old_.insert({inst, (*num_inst)++}); in ProcessInst() 113 ocycle_.insert({inst, ++oprev_}); in ProcessInst() [all …]
|
| D | deoptimize_elimination.cpp | 38 for (auto &inst : deoptimize_must_throw_) { in ReplaceDeoptimizeIfByUnconditionalDeoptimize() local 39 auto block = inst->GetBasicBlock(); in ReplaceDeoptimizeIfByUnconditionalDeoptimize() 41 block->ReplaceInstByDeoptimize(inst); in ReplaceDeoptimizeIfByUnconditionalDeoptimize() 62 bool DeoptimizeElimination::RequireRegMap(Inst *inst) in RequireRegMap() argument 64 for (auto &user : inst->GetUsers()) { in RequireRegMap() 79 void DeoptimizeElimination::VisitDefault(Inst *inst) in VisitDefault() argument 81 if (inst->GetType() != DataType::REFERENCE) { in VisitDefault() 84 for (auto &user : inst->GetUsers()) { in VisitDefault() 97 inst->RemoveUsers<true>(); in VisitDefault() 100 …COMPILER_LOG(DEBUG, DEOPTIMIZE_ELIM) << "All users the instructions " << inst->GetId() << " are Sa… in VisitDefault() [all …]
|
| /arkcompiler/runtime_core/libpandafile/tests/ |
| D | bytecode_instruction_tests.cpp | 32 BytecodeInstruction inst(bytecode); in TEST() local 33 EXPECT_EQ(static_cast<uint8_t>(inst.GetOpcode()), 0x00); in TEST() 34 EXPECT_EQ((inst.GetVReg<BytecodeInstruction::Format::V4_IMM4, 0>()), 1); in TEST() 35 EXPECT_EQ((inst.GetImm<BytecodeInstruction::Format::V4_IMM4, 0>()), -6); in TEST() 40 BytecodeInstruction inst(bytecode); in TEST() local 41 EXPECT_EQ(static_cast<uint8_t>(inst.GetOpcode()), 0x00); in TEST() 42 EXPECT_EQ((inst.GetVReg<BytecodeInstruction::Format::V4_IMM4, 0>()), 0xf); in TEST() 43 EXPECT_EQ((inst.GetImm<BytecodeInstruction::Format::V4_IMM4, 0>()), 0x2); in TEST() 49 BytecodeInstruction inst(bytecode); in TEST() local 50 EXPECT_EQ(static_cast<uint8_t>(inst.GetOpcode()), 0x00); in TEST() [all …]
|
| /arkcompiler/runtime_core/compiler/tests/ |
| D | deoptimize_elimination_test.cpp | 45 INST(2, Opcode::SaveStateDeoptimize).Inputs(1).SrcVregs({1}); in TEST_F() 47 INST(10, Opcode::SaveState).Inputs(1).SrcVregs({1}); in TEST_F() 49 INST(3, Opcode::SaveStateDeoptimize).Inputs(1).SrcVregs({1}); in TEST_F() 50 INST(4, Opcode::Compare).b().Inputs(0, 1).CC(CC_GT); in TEST_F() 51 INST(5, Opcode::DeoptimizeIf).Inputs(4, 3); in TEST_F() 53 INST(6, Opcode::SaveStateDeoptimize).Inputs(1).SrcVregs({1}); in TEST_F() 54 INST(7, Opcode::DeoptimizeIf).Inputs(4, 6); in TEST_F() 57 INST(8, Opcode::DeoptimizeIf).Inputs(1, 6); in TEST_F() 59 INST(9, Opcode::ReturnVoid).v0id(); in TEST_F() 71 INST(3, Opcode::SaveStateDeoptimize).Inputs(1).SrcVregs({1}); in TEST_F() [all …]
|
| D | iterators_test.cpp | 26 void Check(std::vector<Inst *> &tested_instructions) in Check() 33 std::vector<Inst *> result; in Check() 34 for (auto inst : block->PhiInsts()) { in Check() local 35 result.push_back(inst); in Check() 40 for (auto inst : block->Insts()) { in Check() local 41 result.push_back(inst); in Check() 46 for (auto inst : block->AllInsts()) { in Check() local 47 result.push_back(inst); in Check() 53 for (auto inst : block->PhiInstsSafe()) { in Check() local 54 result.push_back(inst); in Check() [all …]
|
| D | vn_test.cpp | 49 INST(6, Opcode::Add).u64().Inputs(0, 1); in TEST_F() 50 INST(7, Opcode::Sub).u32().Inputs(1, 0); in TEST_F() 51 INST(8, Opcode::Mul).f32().Inputs(4, 5); in TEST_F() 52 INST(9, Opcode::Div).f64().Inputs(3, 2); in TEST_F() 53 INST(10, Opcode::Sub).u32().Inputs(1, 0); in TEST_F() 54 INST(11, Opcode::Div).f64().Inputs(3, 2); in TEST_F() 55 INST(12, Opcode::Mul).f32().Inputs(4, 5); in TEST_F() 56 INST(13, Opcode::Add).u64().Inputs(0, 1); in TEST_F() 57 INST(20, Opcode::SaveState).NoVregs(); in TEST_F() 58 INST(14, Opcode::CallStatic).b().InputsAutoType(6, 7, 8, 9, 10, 11, 12, 13, 20); in TEST_F() [all …]
|
| D | scheduler_test.cpp | 39 INST(8, Opcode::Add).u64().Inputs(0, 1); in TEST_F() 40 INST(9, Opcode::Add).u64().Inputs(2, 3); in TEST_F() 42 INST(10, Opcode::Add).u64().Inputs(8, 9); in TEST_F() 44 INST(11, Opcode::Add).u64().Inputs(4, 5); in TEST_F() 45 INST(12, Opcode::Add).u64().Inputs(6, 7); in TEST_F() 46 INST(13, Opcode::Add).u64().Inputs(11, 12); in TEST_F() 48 INST(14, Opcode::Add).u64().Inputs(10, 13); in TEST_F() 49 INST(15, Opcode::Return).u64().Inputs(14); in TEST_F() 81 INST(10, Opcode::Add).u64().Inputs(2, 3); in TEST_F() 82 INST(11, Opcode::Add).u64().Inputs(4, 5); in TEST_F() [all …]
|
| D | move_constants_test.cpp | 33 INST(2, Opcode::IfImm).CC(CC_GE).Imm(5).Inputs(0); in TEST_F() 38 INST(3, Opcode::ReturnI).u64().Imm(0); in TEST_F() 43 INST(4, Opcode::IfImm).CC(CC_LE).Imm(10).Inputs(0); in TEST_F() 48 INST(6, Opcode::Return).ref().Inputs(1); in TEST_F() 53 INST(8, Opcode::Return).ref().Inputs(1); in TEST_F() 63 INST(2, Opcode::IfImm).CC(CC_GE).Imm(5).Inputs(0); in TEST_F() 68 INST(3, Opcode::ReturnI).u64().Imm(0); in TEST_F() 74 INST(4, Opcode::IfImm).CC(CC_LE).Imm(10).Inputs(0); in TEST_F() 79 INST(6, Opcode::Return).ref().Inputs(1); in TEST_F() 84 INST(8, Opcode::Return).ref().Inputs(1); in TEST_F() [all …]
|
| D | graph_cloner_test.cpp | 42 INST(44, Opcode::LoadAndInitClass).ref().Inputs().TypeId(68); in TEST_F() 43 INST(3, Opcode::NewArray).ref().Inputs(44, 2); in TEST_F() 44 INST(14, Opcode::Compare).CC(ConditionCode::CC_LT).b().Inputs(0, 13); // i < X in TEST_F() 45 INST(15, Opcode::IfImm).SrcType(DataType::BOOL).CC(CC_NE).Imm(0).Inputs(14); in TEST_F() 49 INST(4, Opcode::Phi).s32().Inputs(0, 10); in TEST_F() 50 INST(7, Opcode::SaveState).Inputs(0, 1, 2, 3).SrcVregs({0, 1, 2, 3}); in TEST_F() 51 INST(8, Opcode::BoundsCheck).s32().Inputs(2, 4, 7); in TEST_F() 52 INST(9, Opcode::StoreArray).s32().Inputs(3, 8, 0); // a[i] = 0 in TEST_F() 53 INST(10, Opcode::Add).s32().Inputs(4, 1); // i++ in TEST_F() 54 INST(5, Opcode::Compare).CC(ConditionCode::CC_LT).b().Inputs(10, 13); // i < X in TEST_F() [all …]
|
| D | memory_coalescing_test.cpp | 45 INST(44, Opcode::LoadAndInitClass).ref().Inputs().TypeId(68); in TEST_F() 46 INST(3, Opcode::NewArray).ref().Inputs(44, 0).TypeId(77); in TEST_F() 47 INST(41, Opcode::SaveState).Inputs(3).SrcVregs({7}); in TEST_F() 48 INST(42, Opcode::NullCheck).ref().Inputs(3, 41); in TEST_F() 49 INST(225, Opcode::LoadArrayI).s64().Inputs(42).Imm(0x0); in TEST_F() 50 INST(227, Opcode::LoadArrayI).s64().Inputs(42).Imm(0x1); in TEST_F() 52 INST(51, Opcode::Add).s64().Inputs(225, 227); in TEST_F() 53 INST(229, Opcode::StoreArrayI).s64().Inputs(42, 51).Imm(0x0); in TEST_F() 54 INST(230, Opcode::StoreArrayI).s64().Inputs(42, 51).Imm(0x1); in TEST_F() 55 INST(40, Opcode::Return).s64().Inputs(51); in TEST_F() [all …]
|
| D | adjust_arefs_test.cpp | 41 INST(10, Opcode::Phi).s32().Inputs(1, 40); in TEST_F() 42 INST(11, Opcode::LoadArray).u64().Inputs(0, 1); in TEST_F() 43 INST(12, Opcode::LoadArray).u64().Inputs(0, 1); in TEST_F() 44 INST(13, Opcode::StoreArray).u64().Inputs(0, 1, 2); in TEST_F() 45 INST(14, Opcode::StoreArray).u64().Inputs(0, 1, 2); in TEST_F() 46 INST(15, Opcode::Compare).b().Inputs(10, 1); in TEST_F() 47 INST(19, Opcode::IfImm).CC(CC_NE).Inputs(15).Imm(0); in TEST_F() 51 INST(40, Opcode::Add).s32().Inputs(10, 3); in TEST_F() 55 INST(50, Opcode::ReturnVoid); in TEST_F() 69 INST(10, Opcode::Phi).s32().Inputs(1, 40); in TEST_F() [all …]
|
| D | if_conversion_test.cpp | 52 INST(3, Opcode::Compare).b().CC(CC_B).Inputs(0, 1); in TEST_F() 53 INST(4, Opcode::IfImm).SrcType(DataType::BOOL).CC(CC_NE).Imm(0).Inputs(3); in TEST_F() 57 INST(5, Opcode::Mul).u64().Inputs(0, 2); in TEST_F() 61 INST(6, Opcode::Phi).u64().Inputs({{2, 0}, {3, 5}}); in TEST_F() 62 INST(7, Opcode::Return).u64().Inputs(6); in TEST_F() 76 INST(3, Opcode::Compare).b().CC(CC_B).Inputs(0, 1); in TEST_F() 77 INST(5, Opcode::Mul).u64().Inputs(0, 2); in TEST_F() 78 … INST(4, Opcode::SelectImm).u64().SrcType(DataType::BOOL).CC(CC_NE).Imm(0).Inputs(5, 0, 3); in TEST_F() 79 INST(7, Opcode::Return).u64().Inputs(4); in TEST_F() 94 INST(3, Opcode::If).SrcType(DataType::UINT64).CC(CC_NE).Inputs(0, 1); in TEST_F() [all …]
|
| /arkcompiler/runtime_core/compiler/optimizer/ir_builder/ |
| D | inst_templates.yaml | 17 % opc = inst.stripped_mnemonic.match regex_arithm 20 …auto inst = graph_->CreateInst<%= opc %>(<%= get_type(inst.dtype) %>, GetPc(instruction->GetAddres… 21 <%=template('operands', inst, '')-%> 22 AddInstruction(inst); 24 % opc = inst.stripped_mnemonic =~ /div/ ? 'Div' : 'Mod' 26 …auto inst_check = graph_->CreateInstZeroCheck(<%= get_type(inst.dtype) %>, GetPc(instruction->GetA… 27 % if inst.acc_and_operands.last.imm? 29 …inst_check->SetInput(0, FindOrCreate32BitConstant(instruction->GetImm<<%= inst.get_format %>, 0>()… 31 inst_check->SetInput(0, <%= inst.get_input_string(1) %>); 34 inst_check->SetInput(0, <%= inst.get_input_string(1) %>); [all …]
|
| /arkcompiler/runtime_core/bytecode_optimizer/ |
| D | reg_acc_alloc.cpp | 19 #include "compiler/optimizer/ir/inst.h" 26 bool IsAccWriteBetween(compiler::Inst *src_inst, compiler::Inst *dst_inst) in IsAccWriteBetween() 31 compiler::Inst *inst = src_inst->GetNext(); in IsAccWriteBetween() local 33 while (inst != dst_inst) { in IsAccWriteBetween() 34 if (UNLIKELY(inst == nullptr)) { in IsAccWriteBetween() 53 inst = *(block->AllInsts()); in IsAccWriteBetween() 55 if (inst->IsAccWrite()) { in IsAccWriteBetween() 59 if (inst->IsAccRead()) { in IsAccWriteBetween() 60 compiler::Inst *input = inst->GetInput(AccReadIndex(inst)).GetInst(); in IsAccWriteBetween() 67 inst = inst->GetNext(); in IsAccWriteBetween() [all …]
|
| /arkcompiler/runtime_core/irtoc/lang/ |
| D | ir_generator.rb | 28 Output.scoped_puts "inline bool #{func.name}(Inst* source_inst) {" do 34 Output << "Inst* p_#{index} = source_inst->GetInput(#{index}).GetInst();" 37 func.constants.each { |_, inst| generate_instruction(inst) } 84 bb.instructions.each { |inst| generate_instruction(inst) } 87 def generate_instruction(inst) argument 88 … raise 'No LiveIn/LiveOut are allowed in IR Builder generator' if inst.IsLiveIn? || inst.IsLiveOut? 89 var_name = inst.local_var_name 90 Output << "// Inst #{inst}" 91 if inst.IsReturnVoid? 93 elsif inst.IsReturn? [all …]
|
| /arkcompiler/runtime_core/compiler/optimizer/optimizations/regalloc/ |
| D | reg_alloc_resolver.cpp | 19 #include "compiler/optimizer/ir/inst.h" 35 for (auto inst : block->AllInstsSafe()) { in Resolve() local 36 if (inst->IsSaveState()) { in Resolve() 37 ResolveSaveState(inst); in Resolve() 40 ResolveInputs(inst); in Resolve() 41 ResolveOutput(inst); in Resolve() 42 if (GetGraph()->IsInstThrowable(inst)) { in Resolve() 43 AddCatchPhiMoves(inst); in Resolve() 49 void RegAllocResolver::AddCatchPhiMoves(Inst *inst) in AddCatchPhiMoves() argument 53 auto handlers = GetGraph()->GetThrowableInstHandlers(inst); in AddCatchPhiMoves() [all …]
|