LCOV - code coverage report
Current view: top level - base_comm/resources/ccu/ccu_representation/reps/arithmetic - ccu_rep_assign.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 96.6 % 58 56
Test Date: 2026-08-04 10:52:23 Functions: 100.0 % 14 14

            Line data    Source code
       1              : /*
       2              :  * Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved.
       3              :  * Description: ccu representation implementation file
       4              :  * Author: sunzhepeng
       5              :  * Create: 2024-06-17
       6              :  */
       7              : 
       8              : #include "ccu_rep_v1.h"
       9              : #include "ccu_ins_generator_v1.h"
      10              : #include "string_util.h"
      11              : #include "exception_util.h"
      12              : #include "ccu_api_exception.h"
      13              : #include "ccu_kernel.h"
      14              : 
      15              : namespace hcomm {
      16              : namespace CcuRep {
      17              : 
      18          366 : void CcuRepAssign::SetCommonInfo()
      19              : {
      20          366 :     type       = CcuRepType::ASSIGN;
      21          366 :     instrCount = insGenPtr->GetInstrCount(type);
      22          366 : }
      23              : 
      24          210 : CcuRepAssign::CcuRepAssign(CcuInsGeneratorBase* insGenPtr, const Variable &varA, uint64_t immediate)
      25          210 :     : insGenPtr(insGenPtr), subType(AssignSubType::IMD_TO_VARIABLE), immediate(immediate), varA(varA)
      26              : {
      27          210 :     SetCommonInfo();
      28          210 : }
      29              : 
      30           15 : CcuRepAssign::CcuRepAssign(CcuInsGeneratorBase* insGenPtr, const Address &addrA, uint64_t immediate)
      31           15 :     : insGenPtr(insGenPtr), subType(AssignSubType::IMD_TO_ADDR), immediate(immediate), addrA(addrA)
      32              : {
      33           15 :     SetCommonInfo();
      34           15 : }
      35              : 
      36           18 : CcuRepAssign::CcuRepAssign(CcuInsGeneratorBase* insGenPtr, const Address &addrA, const Variable &varA)
      37           18 :     : insGenPtr(insGenPtr), subType(AssignSubType::VAR_TO_ADDR), immediate(0), varA(varA), addrA(addrA)
      38              : {
      39           18 :     SetCommonInfo();
      40           18 : }
      41              : 
      42           42 : CcuRepAssign::CcuRepAssign(CcuInsGeneratorBase* insGenPtr, const Address &addrB, const Address &addrA)
      43           42 :     : insGenPtr(insGenPtr), subType(AssignSubType::ADDR_TO_ADDR), immediate(0), addrA(addrA), addrB(addrB)
      44              : {
      45           42 :     SetCommonInfo();
      46           42 : }
      47              : 
      48           81 : CcuRepAssign::CcuRepAssign(CcuInsGeneratorBase* insGenPtr, const Variable &varB, const Variable &varA)
      49           81 :     : insGenPtr(insGenPtr), subType(AssignSubType::VAR_TO_VAR), immediate(0), varA(varA), varB(varB)
      50              : {
      51           81 :     SetCommonInfo();
      52           81 : }
      53              : 
      54          325 : bool CcuRepAssign::Translate(CcuKernel* ccuKernel, CcuInstr *&instr, uint16_t &instrId, const TransDep &dep)
      55              : {
      56          325 :     Hccl::CHECK_NULLPTR(instr, "[CcuRepAssign::Translate] instr is nullptr!");
      57          325 :     this->instrId = instrId;
      58          325 :     translated    = true;
      59              : 
      60          325 :     insGenPtr->CcuRepAssignTranslate(ccuKernel, instr, this, dep);
      61              :     
      62          325 :     CHK_PRT_THROW((instrId > UINT16_MAX - instrCount),
      63              :                         HCCL_ERROR("[CcuRepAssign::Translate]uint16 integer overflow occurs, instrId = [%hu], instrCount = [%hu]", instrId, instrCount),
      64              :                           Hccl::InternalException, "integer overflow");
      65          325 :     instrId += instrCount;
      66              : 
      67          325 :     return translated;
      68              : }
      69              : 
      70          323 : std::string CcuRepAssign::Describe()
      71              : {
      72          323 :     switch (subType) {
      73          183 :         case AssignSubType::IMD_TO_VARIABLE: {
      74          183 :             return Hccl::StringFormat("Variable[%u] = Value[%lu]", varA.Id(), immediate);
      75              :         }
      76            9 :         case AssignSubType::IMD_TO_ADDR: {
      77            9 :             return Hccl::StringFormat("Address[%u] = Value[%lu]", addrA.Id(), immediate);
      78              :         }
      79           15 :         case AssignSubType::VAR_TO_ADDR: {
      80           15 :             return Hccl::StringFormat("Address[%u] = Variable[%u]", addrA.Id(), varA.Id());
      81              :         }
      82           39 :         case AssignSubType::ADDR_TO_ADDR: {
      83           39 :             return Hccl::StringFormat("Address[%u] = Address[%u]", addrB.Id(), addrA.Id());
      84              :         }
      85           77 :         case AssignSubType::VAR_TO_VAR: {
      86           77 :             return Hccl::StringFormat("Var[%u] = Var[%u]", varB.Id(), varA.Id());
      87              :         }
      88            0 :         default: {
      89            0 :             return Hccl::StringFormat("Invalid Assign");
      90              :         }
      91              :     }
      92              : }
      93              : 
      94           63 : Address CcuRepAssign::GetAddrA()
      95              : {
      96           63 :     return addrA;
      97              : }
      98              : 
      99           39 : Address CcuRepAssign::GetAddrB()
     100              : {
     101           39 :     return addrB;
     102              : }
     103              : 
     104          352 : Variable CcuRepAssign::GetVarA()
     105              : {
     106          352 :     return varA;
     107              : }
     108              : 
     109          152 : Variable CcuRepAssign::GetVarB()
     110              : {
     111          152 :     return varB;
     112              : }
     113              : 
     114          196 : uint64_t CcuRepAssign::GetImmed()
     115              : {
     116          196 :     return immediate;
     117              : }
     118              : 
     119          681 : AssignSubType CcuRepAssign::GetSubType()
     120              : {
     121          681 :     return subType;
     122              : }
     123              : }; // namespace CcuRep
     124              : }; // namespace hcomm
        

Generated by: LCOV version 2.0-1