| /arkcompiler/runtime_core/static_core/compiler/optimizer/code_generator/ |
| D | encode_visitor.h | 75 static void VisitMov(GraphVisitor *visitor, Inst *inst); 76 static void VisitNeg(GraphVisitor *visitor, Inst *inst); 77 static void VisitAbs(GraphVisitor *visitor, Inst *inst); 78 static void VisitNot(GraphVisitor *visitor, Inst *inst); 79 static void VisitSqrt(GraphVisitor *visitor, Inst *inst); 82 static void VisitAdd(GraphVisitor *visitor, Inst *inst); 83 static void VisitSub(GraphVisitor *visitor, Inst *inst); 84 static void VisitMul(GraphVisitor *visitor, Inst *inst); 85 static void VisitShl(GraphVisitor *visitor, Inst *inst); 86 static void VisitAShr(GraphVisitor *visitor, Inst *inst); [all …]
|
| /arkcompiler/runtime_core/static_core/libllvmbackend/lowering/ |
| D | llvm_ir_constructor.h | 21 #include "optimizer/ir/inst.h" 32 bool IsSafeCast(Inst *inst, unsigned int index); 33 bool TryEmitIntrinsic(Inst *inst, RuntimeInterface::IntrinsicId arkId); 37 bool EmitFastPath(Inst *inst, RuntimeInterface::EntrypointId eid, uint32_t numArgs); 38 bool EmitStringEquals(Inst *inst); 39 bool EmitStringBuilderBool(Inst *inst); 40 bool EmitStringBuilderChar(Inst *inst); 41 bool EmitStringBuilderString(Inst *inst); 42 bool EmitStringConcat2(Inst *inst); 43 bool EmitStringConcat3(Inst *inst); [all …]
|
| /arkcompiler/runtime_core/static_core/compiler/optimizer/optimizations/ |
| D | peepholes.h | 30 #define PEEPHOLE_IS_APPLIED(visitor, inst) (visitor)->SetIsApplied((inst), true, __FILE__, __LINE__) argument 68 static void VisitSafePoint([[maybe_unused]] GraphVisitor *v, Inst *inst); 69 static void VisitNeg([[maybe_unused]] GraphVisitor *v, Inst *inst); 70 static void VisitAbs([[maybe_unused]] GraphVisitor *v, Inst *inst); 71 static void VisitNot([[maybe_unused]] GraphVisitor *v, Inst *inst); 72 static void VisitAdd([[maybe_unused]] GraphVisitor *v, Inst *inst); 73 …static void VisitAddFinalize([[maybe_unused]] GraphVisitor *v, Inst *inst, Inst *input0, Inst *inp… 74 static void VisitSub([[maybe_unused]] GraphVisitor *v, Inst *inst); 75 …static void VisitSubFinalize([[maybe_unused]] GraphVisitor *v, Inst *inst, Inst *input0, Inst *inp… 76 …static void VisitMulOneConst([[maybe_unused]] GraphVisitor *v, Inst *inst, Inst *input0, Inst *inp… [all …]
|
| D | const_folding.h | 21 bool ConstFoldingCast(Inst *inst); 22 bool ConstFoldingNeg(Inst *inst); 23 bool ConstFoldingAbs(Inst *inst); 24 bool ConstFoldingNot(Inst *inst); 25 bool ConstFoldingAdd(Inst *inst); 26 bool ConstFoldingSub(Inst *inst); 27 bool ConstFoldingMul(Inst *inst); 28 bool ConstFoldingBinaryMathWithNan(Inst *inst); 29 bool ConstFoldingDiv(Inst *inst); 30 bool ConstFoldingDivWithNan(Inst *inst); [all …]
|
| D | memory_barriers.h | 62 void VisitDefault([[maybe_unused]] Inst *inst) override in VisitDefault() argument 64 ASSERT_DO(!inst->IsCall() && !inst->IsStore(), in VisitDefault() 65 … (std::cerr << "need to make a visitor for the instruction: " << *inst << std::endl)); in VisitDefault() 68 void CheckAllInputs(Inst *inst); 69 void CheckInput(Inst *input); 70 void CheckTwoInputs(Inst *input1, Inst *input2); 72 static void VisitCallStatic(GraphVisitor *v, Inst *inst); 73 static void VisitCallIndirect(GraphVisitor *v, Inst *inst); 74 static void VisitCall(GraphVisitor *v, Inst *inst); 75 static void VisitCallResolvedStatic(GraphVisitor *v, Inst *inst); [all …]
|
| D | string_builder_utils.h | 23 #include "optimizer/ir/inst.h" 28 bool IsStringBuilderInstance(Inst *inst); 29 bool IsMethodStringConcat(Inst *inst); 30 bool IsMethodStringBuilderConstructorWithStringArg(Inst *inst); 31 bool IsMethodStringBuilderConstructorWithCharArrayArg(Inst *inst); 32 bool IsStringBuilderToString(Inst *inst); 33 bool IsMethodStringBuilderDefaultConstructor(Inst *inst); 34 void InsertBeforeWithSaveState(Inst *inst, Inst *before); 35 void InsertAfterWithSaveState(Inst *inst, Inst *after); 36 void InsertBeforeWithInputs(Inst *inst, Inst *before); [all …]
|
| D | checks_elimination.h | 33 using GroupedBoundsChecks = ArenaVector<std::tuple<Inst *, InstVector, int64_t, int64_t>>; 35 using LoopNotFullyRedundantBoundsCheck = ArenaVector<std::pair<Inst *, GroupedBoundsChecks>>; 38 using InstPair = std::pair<Inst *, Inst *>; 39 using InstTriple = std::tuple<Inst *, Inst *, Inst *>; 43 using LoopInfo = std::tuple<CountableLoopInfo, Inst *, Inst *, Inst *, ConditionCode, bool, bool>; 100 static void VisitNullCheck(GraphVisitor *v, Inst *inst); 101 static void VisitNegativeCheck(GraphVisitor *v, Inst *inst); 102 static void VisitNotPositiveCheck(GraphVisitor *v, Inst *inst); 103 static void VisitZeroCheck(GraphVisitor *v, Inst *inst); 104 static void VisitRefTypeCheck(GraphVisitor *v, Inst *inst); [all …]
|
| D | memory_barriers.cpp | 30 for (auto inst : barriersInsts_) { 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(barriersInsts_.begin(), barriersInsts_.end(), inst) != barriersInsts_.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 | cleanup.h | 66 void MarkInlinedCaller(Marker liveMrk, Inst *saveState); 67 bool IsRemovableCall(Inst *inst); 69 void MarkLiveRec(Marker liveMrk, Inst *inst); 73 void MarkOneLiveInst(Marker deadMrk, Marker liveMrk, Inst *inst); 77 …bool TryToRemoveNonLiveInst(Inst *inst, BasicBlock *bb, ArenaSet<BasicBlock *> *newEmptyBlocks, Ma… 79 void SetLiveRec(Inst *inst, Marker mrk, Marker liveMrk); 80 void LiveUserSearchRec(Inst *inst, Marker mrk, Marker liveMrk, Marker deadMrk); 83 void TryMarkInstIsDead(Inst *inst, Marker deadMrk, Marker mrk, Marker liveMrk); 91 void BuildDominatorsVisitPhi(Inst *inst, size_t &amount); 106 ArenaUnorderedMap<Inst *, uint32_t> map_; [all …]
|
| D | lowering.h | 58 …* For example, suppose that we want to test if IR-subtree rooted by some Inst matches add or sub i… 61 * Inst* inst = ...; 65 * bool is_add_or_sub = Predicate::Capture(inst, capture); 67 * If inst is a binary instruction with opcode Add or Sub then Capture will return `true`, 68 … * capture.Get(0) will return left inst's input and capture.Get(1) will return right inst's input. 93 Inst *Get(size_t i) in Get() 99 void Set(size_t i, Inst *inst) in Set() argument 105 operands_[i] = inst; in Set() 137 std::array<Inst *, MAX_OPERANDS> operands_; 143 void Add(Inst *inst) in Add() argument [all …]
|
| D | locations_builder.h | 52 static Location GetLocationForReturn(Inst *inst); 54 static void VisitResolveStatic(GraphVisitor *visitor, Inst *inst); 55 static void VisitCallResolvedStatic(GraphVisitor *visitor, Inst *inst); 56 static void VisitCallStatic(GraphVisitor *visitor, Inst *inst); 57 static void VisitCallVirtual(GraphVisitor *visitor, Inst *inst); 58 static void VisitCallLaunchStatic(GraphVisitor *visitor, Inst *inst); 59 static void VisitCallLaunchVirtual(GraphVisitor *visitor, Inst *inst); 60 static void VisitCallResolvedLaunchStatic(GraphVisitor *visitor, Inst *inst); 61 static void VisitCallResolvedLaunchVirtual(GraphVisitor *visitor, Inst *inst); 62 static void VisitResolveVirtual(GraphVisitor *visitor, Inst *inst); [all …]
|
| D | escape.h | 49 using StateOwner = std::variant<Inst *, PhiState *, const ZeroInst *>; 50 using MaterializationSite = std::variant<Inst *, BasicBlock *>; 120 static bool IsAllocInst(Inst *inst) in IsAllocInst() argument 122 return inst->GetOpcode() == Opcode::NewObject || inst->GetOpcode() == Opcode::NewArray; in IsAllocInst() 126 static void Visit##InstName(GraphVisitor *v, Inst *inst) \ 128 static_cast<EscapeAnalysis *>(v)->Visit##InstName(inst); \ 133 static void Visit##InstName(GraphVisitor *v, Inst *inst) \ 135 static_cast<EscapeAnalysis *>(v)->Callback(inst); \ 161 static void VisitCallStatic([[maybe_unused]] GraphVisitor *v, [[maybe_unused]] Inst *inst) in VisitCallStatic() argument 163 static_cast<EscapeAnalysis *>(v)->VisitCall(inst->CastToCallStatic()); in VisitCallStatic() [all …]
|
| D | vn.cpp | 26 inline bool IsNotCommutativeInst(Inst *inst) in IsNotCommutativeInst() argument 28 return !inst->IsCommutative() || DataType::IsFloatType(inst->GetType()); in IsNotCommutativeInst() 31 inline bool IsAddressArithmeticInst(Inst *inst) in IsAddressArithmeticInst() argument 33 return inst->GetType() == DataType::POINTER && in IsAddressArithmeticInst() 34 (inst->GetOpcode() == Opcode::AddI || inst->GetOpcode() == Opcode::SubI); in IsAddressArithmeticInst() 37 static bool AddClassInst(Inst *inst, VnObject *obj) in AddClassInst() argument 39 if (inst->GetOpcode() != Opcode::LoadAndInitClass && inst->GetOpcode() != Opcode::InitClass && in AddClassInst() 40 inst->GetOpcode() != Opcode::LoadClass) { in AddClassInst() 45 auto classInst = static_cast<ClassInst *>(inst); in AddClassInst() 52 inst->SetVnObject(obj); in AddClassInst() [all …]
|
| D | string_builder_utils.cpp | 20 bool IsStringBuilderInstance(Inst *inst) in IsStringBuilderInstance() argument 22 if (inst->GetOpcode() != Opcode::NewObject) { in IsStringBuilderInstance() 26 auto klass = GetObjectClass(inst->CastToNewObject()); in IsStringBuilderInstance() 31 auto runtime = inst->GetBasicBlock()->GetGraph()->GetRuntime(); in IsStringBuilderInstance() 35 bool IsMethodStringConcat(Inst *inst) in IsMethodStringConcat() argument 37 if (inst->GetOpcode() != Opcode::CallStatic && inst->GetOpcode() != Opcode::CallVirtual) { in IsMethodStringConcat() 41 auto call = static_cast<CallInst *>(inst); in IsMethodStringConcat() 46 auto runtime = inst->GetBasicBlock()->GetGraph()->GetRuntime(); in IsMethodStringConcat() 50 bool IsMethodStringBuilderConstructorWithStringArg(Inst *inst) in IsMethodStringBuilderConstructorWithStringArg() argument 52 if (inst->GetOpcode() != Opcode::CallStatic) { in IsMethodStringBuilderConstructorWithStringArg() [all …]
|
| D | lowering.cpp | 26 void Lowering::VisitAdd([[maybe_unused]] GraphVisitor *v, Inst *inst) in VisitAdd() argument 28 auto newInst = LowerBinaryOperationWithShiftedOperand<Opcode::Add>(inst); in VisitAdd() 29 if (newInst == nullptr && LowerAddSub(inst) != nullptr) { in VisitAdd() 32 LowerMultiplyAddSub(newInst == nullptr ? inst : newInst); in VisitAdd() 35 void Lowering::VisitSub([[maybe_unused]] GraphVisitor *v, Inst *inst) in VisitSub() argument 37 auto newInst = LowerBinaryOperationWithShiftedOperand<Opcode::Sub, false>(inst); in VisitSub() 38 if (newInst == nullptr && LowerAddSub(inst) != nullptr) { in VisitSub() 41 LowerMultiplyAddSub(inst); in VisitSub() 44 void Lowering::VisitCastValueToAnyType([[maybe_unused]] GraphVisitor *v, Inst *inst) in VisitCastValueToAnyType() argument 46 auto graph = inst->GetBasicBlock()->GetGraph(); in VisitCastValueToAnyType() [all …]
|
| /arkcompiler/runtime_core/static_core/plugins/ets/libllvmbackend/ |
| D | ets_llvm_ir_constructor_h_gen.inl | 16 bool EmitArrayCopyTo(Inst *inst); 17 bool EmitStdStringSubstring(Inst *inst); 18 bool EmitStringBuilderAppendBool(Inst *inst); 19 bool EmitStringBuilderAppendChar(Inst *inst); 20 bool EmitStringBuilderAppendByte(Inst *inst); 21 bool EmitStringBuilderAppendShort(Inst *inst); 22 bool EmitStringBuilderAppendInt(Inst *inst); 23 bool EmitStringBuilderAppendLong(Inst *inst); 24 bool EmitStringBuilderAppendString(Inst *inst); 25 bool EmitStringBuilderAppendStrings(Inst *inst); [all …]
|
| /arkcompiler/runtime_core/static_core/compiler/optimizer/ir/ |
| D | analysis.h | 26 class Inst; variable 29 Inst *InstStoredValue(Inst *inst, Inst **secondValue); 30 Inst *InstStoredValue(Inst *inst); 32 template <typename T = Inst> 34 bool HasTryBlockBetween(Inst *dominateInst, Inst *inst); 35 bool IsSuitableForImplicitNullCheck(const Inst *inst); 36 bool IsInstNotNull(const Inst *inst); 37 bool CheckFcmpInputs(Inst *input0, Inst *input1); 38 bool CheckFcmpWithConstInput(Inst *input0, Inst *input1); 40 bool CanRemoveOverflowCheck(Inst *inst, Marker marker); [all …]
|
| D | graph_checker.h | 82 void CheckUserOfInt32(BasicBlock *block, Inst *inst, User &user); 83 void CheckInstUsers(Inst *inst, [[maybe_unused]] BasicBlock *block); 84 void CheckPhiInputs(Inst *phiInst); 91 bool CheckInstHasInput(Inst *inst, Inst *input); 92 bool CheckInstHasUser(Inst *inst, Inst *user); 95 bool FindCaller(Inst *caller, BasicBlock *domBlock, ArenaStack<Inst *> *inlinedCalls); 96 void CheckSpillFillHolder(Inst *inst); 97 bool CheckInstRegUsageSaved(const Inst *inst, Register reg) const; 107 void CheckInputType(Inst *inst); 110 void PrepareUsers(Inst *inst, ArenaVector<User *> *users); [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 …]
|
| /arkcompiler/runtime_core/static_core/compiler/optimizer/analysis/ |
| D | alias_analysis.h | 65 Pointer(PointerType type, const Inst *base, const Inst *idx, uint64_t imm, const void *typePtr) in Pointer() 71 static Pointer CreateObject(const Inst *base) in CreateObject() 86 … static Pointer CreateObjectField(const Inst *base, uint32_t typeId, const void *typePtr = nullptr) 91 static Pointer CreateArrayElement(const Inst *array, const Inst *idx, uint64_t imm = 0) 96 static Pointer CreateDictionaryElement(const Inst *array, const Inst *idx, uint64_t imm = 0) 106 const Inst *GetBase() const in GetBase() 111 const Inst *GetIdx() const in GetIdx() 162 static bool IsLocalAlias(const Inst *inst) in IsLocalAlias() argument 164 switch (inst->GetOpcode()) { in IsLocalAlias() 173 return !IsEscapingAlias(inst); in IsLocalAlias() [all …]
|
| /arkcompiler/runtime_core/static_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 % if (!inst.acc_and_operands[1].acc? && !inst.acc_write?) [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/static_core/compiler/tests/ |
| D | iterators_test.cpp | 26 void CheckInstForwardIterator(BasicBlock *block, std::vector<Inst *> &result) in CheckInstForwardIterator() 29 for (auto inst : block->PhiInsts()) { in CheckInstForwardIterator() local 30 result.push_back(inst); in CheckInstForwardIterator() 35 for (auto inst : block->Insts()) { in CheckInstForwardIterator() local 36 result.push_back(inst); in CheckInstForwardIterator() 41 for (auto inst : block->AllInsts()) { in CheckInstForwardIterator() local 42 result.push_back(inst); in CheckInstForwardIterator() 47 void CheckInstForwardValidIterator(BasicBlock *block, std::vector<Inst *> &result) in CheckInstForwardValidIterator() 50 for (auto inst : block->PhiInstsSafe()) { in CheckInstForwardValidIterator() local 51 result.push_back(inst); in CheckInstForwardValidIterator() [all …]
|
| /arkcompiler/runtime_core/compiler/tests/ |
| 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 …]
|
| /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() 52 BytecodeInstruction inst(bytecode); in TEST() local 53 EXPECT_EQ(static_cast<uint8_t>(inst.GetOpcode()), 0x00); in TEST() [all …]
|