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-08-04 10:52:23 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          492 : void CcuRepAdd::SetCommonInfo()
      21              : {
      22          492 :     type       = CcuRepType::ADD;
      23          492 :     instrCount = 1;
      24          492 : }
      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          456 : CcuRepAdd::CcuRepAdd(const Address &addrA, const Variable &offset)
      46          456 :     : subType(AddSubType::SELF_ADD_ADDRESS), addrA(addrA), varB(offset)
      47              : {
      48          456 :     SetCommonInfo();
      49          456 : }
      50              : 
      51           26 : CcuRepAdd::CcuRepAdd(const Variable &varA, const Variable &offset)
      52           26 :     : subType(AddSubType::SELF_ADD_VARIABLE), varA(varA), varB(offset)
      53              : {
      54           26 :     SetCommonInfo();
      55           26 : }
      56              : 
      57          113 : bool CcuRepAdd::Translate(CcuInstr *&instr, uint16_t &instrId, const TransDep &dep)
      58              : {
      59          113 :     CHECK_NULLPTR(instr, "[CcuRepAdd::Translate] instr is nullptr!");
      60          113 :     this->instrId = instrId;
      61          113 :     translated    = true;
      62              : 
      63          113 :     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           92 :         case AddSubType::SELF_ADD_ADDRESS: {
      77           92 :             LoadGSAXnInstr(instr++, addrA.Id(), addrA.Id(), varB.Id());
      78           92 :             break;
      79              :         }
      80           11 :         case AddSubType::SELF_ADD_VARIABLE: {
      81           11 :             LoadXXInstr(instr++, varA.Id(), varA.Id(), varB.Id());
      82           11 :             break;
      83              :         }
      84            0 :         default: {
      85            0 :             THROW<CcuApiException>("Invalid Add");
      86              :         }
      87              :     }
      88              :     
      89          113 :     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          113 :     instrId += instrCount;
      93              : 
      94          113 :     return translated;
      95              : }
      96              : 
      97          122 : std::string CcuRepAdd::Describe()
      98              : {
      99          122 :     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           96 :         case AddSubType::SELF_ADD_ADDRESS: {
     110           96 :             return StringFormat("Address[%u] += Variable[%u]", addrA.Id(), varB.Id());
     111              :         }
     112           12 :         case AddSubType::SELF_ADD_VARIABLE: {
     113           12 :             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