LCOV - code coverage report
Current view: top level - legacy/ascend950/unified_platform/ccu/ccu_representation/reps/arithmetic - ccu_rep_add.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 93.8 % 64 60
Test Date: 2026-07-28 12:11:00 Functions: 100.0 % 8 8

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2025 Huawei Technologies Co., Ltd.
       3              :  * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
       4              :  * CANN Open Software License Agreement Version 2.0 (the "License").
       5              :  * Please refer to the License for details. You may not use this file except in compliance with the License.
       6              :  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
       7              :  * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
       8              :  * See LICENSE in the root of the software repository for the full text of the License.
       9              :  */
      10              : 
      11              : #include "ccu_rep.h"
      12              : 
      13              : #include "string_util.h"
      14              : #include "exception_util.h"
      15              : #include "ccu_api_exception.h"
      16              : 
      17              : namespace Hccl {
      18              : namespace CcuRep {
      19              : 
      20          547 : void CcuRepAdd::SetCommonInfo()
      21              : {
      22          547 :     type       = CcuRepType::ADD;
      23          547 :     instrCount = 1;
      24          547 : }
      25              : 
      26            8 : CcuRepAdd::CcuRepAdd(const Address &addrC, const Address &addrA, const Variable &varB)
      27            8 :     : subType(AddSubType::ADDR_PLUS_VAR_TO_ADDR), addrA(addrA), addrC(addrC), varB(varB)
      28              : {
      29            8 :     SetCommonInfo();
      30            8 : }
      31              : 
      32            1 : CcuRepAdd::CcuRepAdd(const Address &addrC, const Address &addrA, const Address &addrB)
      33            1 :     : subType(AddSubType::ADDR_PLUS_ADDR_TO_ADDR), addrA(addrA), addrB(addrB), addrC(addrC)
      34              : {
      35            1 :     SetCommonInfo();
      36            1 : }
      37              : 
      38            1 : CcuRepAdd::CcuRepAdd(const Variable &varC, const Variable &varA, const Variable &varB)
      39            1 :     : subType(AddSubType::VAR_PLUS_VAR_TO_VAR), varA(varA), varB(varB),
      40            2 :       varC(varC)
      41              : {
      42            1 :     SetCommonInfo();
      43            1 : }
      44              : 
      45          508 : CcuRepAdd::CcuRepAdd(const Address &addrA, const Variable &offset)
      46          508 :     : subType(AddSubType::SELF_ADD_ADDRESS), addrA(addrA), varB(offset)
      47              : {
      48          508 :     SetCommonInfo();
      49          508 : }
      50              : 
      51           29 : CcuRepAdd::CcuRepAdd(const Variable &varA, const Variable &offset)
      52           29 :     : subType(AddSubType::SELF_ADD_VARIABLE), varA(varA), varB(offset)
      53              : {
      54           29 :     SetCommonInfo();
      55           29 : }
      56              : 
      57          168 : bool CcuRepAdd::Translate(CcuInstr *&instr, uint16_t &instrId, const TransDep &dep)
      58              : {
      59          168 :     CHECK_NULLPTR(instr, "[CcuRepAdd::Translate] instr is nullptr!");
      60          168 :     this->instrId = instrId;
      61          168 :     translated    = true;
      62              : 
      63          168 :     switch (subType) {
      64            8 :         case AddSubType::ADDR_PLUS_VAR_TO_ADDR: {
      65            8 :             LoadGSAXnInstr(instr++, addrC.Id(), addrA.Id(), varB.Id());
      66            8 :             break;
      67              :         }
      68            1 :         case AddSubType::ADDR_PLUS_ADDR_TO_ADDR: {
      69            1 :             LoadGSAGSAInstr(instr++, addrC.Id(), addrA.Id(), addrB.Id());
      70            1 :             break;
      71              :         }
      72            1 :         case AddSubType::VAR_PLUS_VAR_TO_VAR: {
      73            1 :             LoadXXInstr(instr++, varC.Id(), varA.Id(), varB.Id());
      74            1 :             break;
      75              :         }
      76          144 :         case AddSubType::SELF_ADD_ADDRESS: {
      77          144 :             LoadGSAXnInstr(instr++, addrA.Id(), addrA.Id(), varB.Id());
      78          144 :             break;
      79              :         }
      80           14 :         case AddSubType::SELF_ADD_VARIABLE: {
      81           14 :             LoadXXInstr(instr++, varA.Id(), varA.Id(), varB.Id());
      82           14 :             break;
      83              :         }
      84            0 :         default: {
      85            0 :             THROW<CcuApiException>("Invalid Add");
      86              :         }
      87              :     }
      88              :     
      89          168 :     CHK_PRT_THROW((instrId > UINT16_MAX - instrCount),
      90              :                         HCCL_ERROR("[CcuRepAdd::Translate]uint16 integer overflow occurs, instrId = [%hu], instrCount = [%hu]", instrId, instrCount),
      91              :                           InternalException, "integer overflow");
      92          168 :     instrId += instrCount;
      93              : 
      94          168 :     return translated;
      95              : }
      96              : 
      97          232 : std::string CcuRepAdd::Describe()
      98              : {
      99          232 :     switch (subType) {
     100           10 :         case AddSubType::ADDR_PLUS_VAR_TO_ADDR: {
     101           10 :             return StringFormat("Address[%u] = Address[%u] + Variable[%u]", addrC.Id(), addrA.Id(), varB.Id());
     102              :         }
     103            2 :         case AddSubType::ADDR_PLUS_ADDR_TO_ADDR: {
     104            2 :             return StringFormat("Address[%u] = Address[%u] + Address[%u]", addrC.Id(), addrA.Id(), addrB.Id());
     105              :         }
     106            2 :         case AddSubType::VAR_PLUS_VAR_TO_VAR: {
     107            2 :             return StringFormat("Variable[%u] = Variable[%u] + Variable[%u]", varC.Id(), varA.Id(), varB.Id());
     108              :         }
     109          200 :         case AddSubType::SELF_ADD_ADDRESS: {
     110          200 :             return StringFormat("Address[%u] += Variable[%u]", addrA.Id(), varB.Id());
     111              :         }
     112           18 :         case AddSubType::SELF_ADD_VARIABLE: {
     113           18 :             return StringFormat("Variable[%u] += Variable[%u]", varA.Id(), varB.Id());
     114              :         }
     115            0 :         default: {
     116            0 :             return StringFormat("Invalid Add");
     117              :         }
     118              :     }
     119              : }
     120              : 
     121              : }; // namespace CcuRep
     122              : }; // namespace Hccl
        

Generated by: LCOV version 2.0-1