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: 94.7 % 76 72
Test Date: 2026-08-18 17:47:01 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),
      28            8 :           addrA(addrA),
      29            8 :           addrC(addrC),
      30           16 :           varB(varB)
      31              :     {
      32            8 :         SetCommonInfo();
      33            8 :     }
      34              : 
      35            1 :     CcuRepAdd::CcuRepAdd(const Address& addrC, const Address& addrA, const Address& addrB)
      36            1 :         : subType(AddSubType::ADDR_PLUS_ADDR_TO_ADDR),
      37            1 :           addrA(addrA),
      38            1 :           addrB(addrB),
      39            2 :           addrC(addrC)
      40              :     {
      41            1 :         SetCommonInfo();
      42            1 :     }
      43              : 
      44            1 :     CcuRepAdd::CcuRepAdd(const Variable& varC, const Variable& varA, const Variable& varB)
      45            1 :         : subType(AddSubType::VAR_PLUS_VAR_TO_VAR),
      46            1 :           varA(varA),
      47            1 :           varB(varB),
      48            2 :           varC(varC)
      49              :     {
      50            1 :         SetCommonInfo();
      51            1 :     }
      52              : 
      53          456 :     CcuRepAdd::CcuRepAdd(const Address& addrA, const Variable& offset)
      54          456 :         : subType(AddSubType::SELF_ADD_ADDRESS),
      55          456 :           addrA(addrA),
      56          456 :           varB(offset)
      57              :     {
      58          456 :         SetCommonInfo();
      59          456 :     }
      60              : 
      61           26 :     CcuRepAdd::CcuRepAdd(const Variable& varA, const Variable& offset)
      62           26 :         : subType(AddSubType::SELF_ADD_VARIABLE),
      63           26 :           varA(varA),
      64           52 :           varB(offset)
      65              :     {
      66           26 :         SetCommonInfo();
      67           26 :     }
      68              : 
      69          113 :     bool CcuRepAdd::Translate(CcuInstr*& instr, uint16_t& instrId, [[maybe_unused]] const TransDep& dep)
      70              :     {
      71          113 :         CHECK_NULLPTR(instr, "[CcuRepAdd::Translate] instr is nullptr!");
      72          113 :         this->instrId = instrId;
      73          113 :         translated = true;
      74              : 
      75          113 :         switch (subType) {
      76            8 :             case AddSubType::ADDR_PLUS_VAR_TO_ADDR: {
      77            8 :                 LoadGSAXnInstr(instr++, addrC.Id(), addrA.Id(), varB.Id());
      78            8 :                 break;
      79              :             }
      80            1 :             case AddSubType::ADDR_PLUS_ADDR_TO_ADDR: {
      81            1 :                 LoadGSAGSAInstr(instr++, addrC.Id(), addrA.Id(), addrB.Id());
      82            1 :                 break;
      83              :             }
      84            1 :             case AddSubType::VAR_PLUS_VAR_TO_VAR: {
      85            1 :                 LoadXXInstr(instr++, varC.Id(), varA.Id(), varB.Id());
      86            1 :                 break;
      87              :             }
      88           92 :             case AddSubType::SELF_ADD_ADDRESS: {
      89           92 :                 LoadGSAXnInstr(instr++, addrA.Id(), addrA.Id(), varB.Id());
      90           92 :                 break;
      91              :             }
      92           11 :             case AddSubType::SELF_ADD_VARIABLE: {
      93           11 :                 LoadXXInstr(instr++, varA.Id(), varA.Id(), varB.Id());
      94           11 :                 break;
      95              :             }
      96            0 :             default: {
      97            0 :                 THROW<CcuApiException>("Invalid Add");
      98              :             }
      99              :         }
     100              : 
     101          113 :         CHK_PRT_THROW(
     102              :             (instrId > UINT16_MAX - instrCount),
     103              :             HCCL_ERROR(
     104              :                 "[CcuRepAdd::Translate]uint16 integer overflow occurs, instrId = [%hu], instrCount = [%hu]", instrId,
     105              :                 instrCount),
     106              :             InternalException, "integer overflow");
     107          113 :         instrId += instrCount;
     108              : 
     109          113 :         return translated;
     110              :     }
     111              : 
     112          122 :     std::string CcuRepAdd::Describe()
     113              :     {
     114          122 :         switch (subType) {
     115           10 :             case AddSubType::ADDR_PLUS_VAR_TO_ADDR: {
     116           10 :                 return StringFormat("Address[%u] = Address[%u] + Variable[%u]", addrC.Id(), addrA.Id(), varB.Id());
     117              :             }
     118            2 :             case AddSubType::ADDR_PLUS_ADDR_TO_ADDR: {
     119            2 :                 return StringFormat("Address[%u] = Address[%u] + Address[%u]", addrC.Id(), addrA.Id(), addrB.Id());
     120              :             }
     121            2 :             case AddSubType::VAR_PLUS_VAR_TO_VAR: {
     122            2 :                 return StringFormat("Variable[%u] = Variable[%u] + Variable[%u]", varC.Id(), varA.Id(), varB.Id());
     123              :             }
     124           96 :             case AddSubType::SELF_ADD_ADDRESS: {
     125           96 :                 return StringFormat("Address[%u] += Variable[%u]", addrA.Id(), varB.Id());
     126              :             }
     127           12 :             case AddSubType::SELF_ADD_VARIABLE: {
     128           12 :                 return StringFormat("Variable[%u] += Variable[%u]", varA.Id(), varB.Id());
     129              :             }
     130            0 :             default: {
     131            0 :                 return StringFormat("Invalid Add");
     132              :             }
     133              :         }
     134              :     }
     135              : 
     136              : }; // namespace CcuRep
     137              : }; // namespace Hccl
        

Generated by: LCOV version 2.0-1