Path: blob/main/contrib/llvm-project/clang/lib/Sema/SemaHexagon.cpp
35233 views
//===------ SemaHexagon.cpp ------ Hexagon target-specific routines -------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file implements semantic analysis functions specific to Hexagon.9//10//===----------------------------------------------------------------------===//1112#include "clang/Sema/SemaHexagon.h"13#include "clang/Basic/TargetBuiltins.h"14#include "clang/Sema/Sema.h"15#include "llvm/ADT/STLExtras.h"16#include <cstdint>17#include <iterator>1819namespace clang {2021SemaHexagon::SemaHexagon(Sema &S) : SemaBase(S) {}2223bool SemaHexagon::CheckHexagonBuiltinArgument(unsigned BuiltinID,24CallExpr *TheCall) {25struct ArgInfo {26uint8_t OpNum;27bool IsSigned;28uint8_t BitWidth;29uint8_t Align;30};31struct BuiltinInfo {32unsigned BuiltinID;33ArgInfo Infos[2];34};3536static BuiltinInfo Infos[] = {37{ Hexagon::BI__builtin_circ_ldd, {{ 3, true, 4, 3 }} },38{ Hexagon::BI__builtin_circ_ldw, {{ 3, true, 4, 2 }} },39{ Hexagon::BI__builtin_circ_ldh, {{ 3, true, 4, 1 }} },40{ Hexagon::BI__builtin_circ_lduh, {{ 3, true, 4, 1 }} },41{ Hexagon::BI__builtin_circ_ldb, {{ 3, true, 4, 0 }} },42{ Hexagon::BI__builtin_circ_ldub, {{ 3, true, 4, 0 }} },43{ Hexagon::BI__builtin_circ_std, {{ 3, true, 4, 3 }} },44{ Hexagon::BI__builtin_circ_stw, {{ 3, true, 4, 2 }} },45{ Hexagon::BI__builtin_circ_sth, {{ 3, true, 4, 1 }} },46{ Hexagon::BI__builtin_circ_sthhi, {{ 3, true, 4, 1 }} },47{ Hexagon::BI__builtin_circ_stb, {{ 3, true, 4, 0 }} },4849{ Hexagon::BI__builtin_HEXAGON_L2_loadrub_pci, {{ 1, true, 4, 0 }} },50{ Hexagon::BI__builtin_HEXAGON_L2_loadrb_pci, {{ 1, true, 4, 0 }} },51{ Hexagon::BI__builtin_HEXAGON_L2_loadruh_pci, {{ 1, true, 4, 1 }} },52{ Hexagon::BI__builtin_HEXAGON_L2_loadrh_pci, {{ 1, true, 4, 1 }} },53{ Hexagon::BI__builtin_HEXAGON_L2_loadri_pci, {{ 1, true, 4, 2 }} },54{ Hexagon::BI__builtin_HEXAGON_L2_loadrd_pci, {{ 1, true, 4, 3 }} },55{ Hexagon::BI__builtin_HEXAGON_S2_storerb_pci, {{ 1, true, 4, 0 }} },56{ Hexagon::BI__builtin_HEXAGON_S2_storerh_pci, {{ 1, true, 4, 1 }} },57{ Hexagon::BI__builtin_HEXAGON_S2_storerf_pci, {{ 1, true, 4, 1 }} },58{ Hexagon::BI__builtin_HEXAGON_S2_storeri_pci, {{ 1, true, 4, 2 }} },59{ Hexagon::BI__builtin_HEXAGON_S2_storerd_pci, {{ 1, true, 4, 3 }} },6061{ Hexagon::BI__builtin_HEXAGON_A2_combineii, {{ 1, true, 8, 0 }} },62{ Hexagon::BI__builtin_HEXAGON_A2_tfrih, {{ 1, false, 16, 0 }} },63{ Hexagon::BI__builtin_HEXAGON_A2_tfril, {{ 1, false, 16, 0 }} },64{ Hexagon::BI__builtin_HEXAGON_A2_tfrpi, {{ 0, true, 8, 0 }} },65{ Hexagon::BI__builtin_HEXAGON_A4_bitspliti, {{ 1, false, 5, 0 }} },66{ Hexagon::BI__builtin_HEXAGON_A4_cmpbeqi, {{ 1, false, 8, 0 }} },67{ Hexagon::BI__builtin_HEXAGON_A4_cmpbgti, {{ 1, true, 8, 0 }} },68{ Hexagon::BI__builtin_HEXAGON_A4_cround_ri, {{ 1, false, 5, 0 }} },69{ Hexagon::BI__builtin_HEXAGON_A4_round_ri, {{ 1, false, 5, 0 }} },70{ Hexagon::BI__builtin_HEXAGON_A4_round_ri_sat, {{ 1, false, 5, 0 }} },71{ Hexagon::BI__builtin_HEXAGON_A4_vcmpbeqi, {{ 1, false, 8, 0 }} },72{ Hexagon::BI__builtin_HEXAGON_A4_vcmpbgti, {{ 1, true, 8, 0 }} },73{ Hexagon::BI__builtin_HEXAGON_A4_vcmpbgtui, {{ 1, false, 7, 0 }} },74{ Hexagon::BI__builtin_HEXAGON_A4_vcmpheqi, {{ 1, true, 8, 0 }} },75{ Hexagon::BI__builtin_HEXAGON_A4_vcmphgti, {{ 1, true, 8, 0 }} },76{ Hexagon::BI__builtin_HEXAGON_A4_vcmphgtui, {{ 1, false, 7, 0 }} },77{ Hexagon::BI__builtin_HEXAGON_A4_vcmpweqi, {{ 1, true, 8, 0 }} },78{ Hexagon::BI__builtin_HEXAGON_A4_vcmpwgti, {{ 1, true, 8, 0 }} },79{ Hexagon::BI__builtin_HEXAGON_A4_vcmpwgtui, {{ 1, false, 7, 0 }} },80{ Hexagon::BI__builtin_HEXAGON_C2_bitsclri, {{ 1, false, 6, 0 }} },81{ Hexagon::BI__builtin_HEXAGON_C2_muxii, {{ 2, true, 8, 0 }} },82{ Hexagon::BI__builtin_HEXAGON_C4_nbitsclri, {{ 1, false, 6, 0 }} },83{ Hexagon::BI__builtin_HEXAGON_F2_dfclass, {{ 1, false, 5, 0 }} },84{ Hexagon::BI__builtin_HEXAGON_F2_dfimm_n, {{ 0, false, 10, 0 }} },85{ Hexagon::BI__builtin_HEXAGON_F2_dfimm_p, {{ 0, false, 10, 0 }} },86{ Hexagon::BI__builtin_HEXAGON_F2_sfclass, {{ 1, false, 5, 0 }} },87{ Hexagon::BI__builtin_HEXAGON_F2_sfimm_n, {{ 0, false, 10, 0 }} },88{ Hexagon::BI__builtin_HEXAGON_F2_sfimm_p, {{ 0, false, 10, 0 }} },89{ Hexagon::BI__builtin_HEXAGON_M4_mpyri_addi, {{ 2, false, 6, 0 }} },90{ Hexagon::BI__builtin_HEXAGON_M4_mpyri_addr_u2, {{ 1, false, 6, 2 }} },91{ Hexagon::BI__builtin_HEXAGON_S2_addasl_rrri, {{ 2, false, 3, 0 }} },92{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_acc, {{ 2, false, 6, 0 }} },93{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_and, {{ 2, false, 6, 0 }} },94{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_p, {{ 1, false, 6, 0 }} },95{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_nac, {{ 2, false, 6, 0 }} },96{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_or, {{ 2, false, 6, 0 }} },97{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_xacc, {{ 2, false, 6, 0 }} },98{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_acc, {{ 2, false, 5, 0 }} },99{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_and, {{ 2, false, 5, 0 }} },100{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_r, {{ 1, false, 5, 0 }} },101{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_nac, {{ 2, false, 5, 0 }} },102{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_or, {{ 2, false, 5, 0 }} },103{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_sat, {{ 1, false, 5, 0 }} },104{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_xacc, {{ 2, false, 5, 0 }} },105{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_vh, {{ 1, false, 4, 0 }} },106{ Hexagon::BI__builtin_HEXAGON_S2_asl_i_vw, {{ 1, false, 5, 0 }} },107{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_acc, {{ 2, false, 6, 0 }} },108{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_and, {{ 2, false, 6, 0 }} },109{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_p, {{ 1, false, 6, 0 }} },110{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_nac, {{ 2, false, 6, 0 }} },111{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_or, {{ 2, false, 6, 0 }} },112{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_rnd_goodsyntax,113{{ 1, false, 6, 0 }} },114{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_rnd, {{ 1, false, 6, 0 }} },115{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_acc, {{ 2, false, 5, 0 }} },116{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_and, {{ 2, false, 5, 0 }} },117{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_r, {{ 1, false, 5, 0 }} },118{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_nac, {{ 2, false, 5, 0 }} },119{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_or, {{ 2, false, 5, 0 }} },120{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_rnd_goodsyntax,121{{ 1, false, 5, 0 }} },122{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_rnd, {{ 1, false, 5, 0 }} },123{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_svw_trun, {{ 1, false, 5, 0 }} },124{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_vh, {{ 1, false, 4, 0 }} },125{ Hexagon::BI__builtin_HEXAGON_S2_asr_i_vw, {{ 1, false, 5, 0 }} },126{ Hexagon::BI__builtin_HEXAGON_S2_clrbit_i, {{ 1, false, 5, 0 }} },127{ Hexagon::BI__builtin_HEXAGON_S2_extractu, {{ 1, false, 5, 0 },128{ 2, false, 5, 0 }} },129{ Hexagon::BI__builtin_HEXAGON_S2_extractup, {{ 1, false, 6, 0 },130{ 2, false, 6, 0 }} },131{ Hexagon::BI__builtin_HEXAGON_S2_insert, {{ 2, false, 5, 0 },132{ 3, false, 5, 0 }} },133{ Hexagon::BI__builtin_HEXAGON_S2_insertp, {{ 2, false, 6, 0 },134{ 3, false, 6, 0 }} },135{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_acc, {{ 2, false, 6, 0 }} },136{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_and, {{ 2, false, 6, 0 }} },137{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p, {{ 1, false, 6, 0 }} },138{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_nac, {{ 2, false, 6, 0 }} },139{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_or, {{ 2, false, 6, 0 }} },140{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_xacc, {{ 2, false, 6, 0 }} },141{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_acc, {{ 2, false, 5, 0 }} },142{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_and, {{ 2, false, 5, 0 }} },143{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r, {{ 1, false, 5, 0 }} },144{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_nac, {{ 2, false, 5, 0 }} },145{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_or, {{ 2, false, 5, 0 }} },146{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_xacc, {{ 2, false, 5, 0 }} },147{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_vh, {{ 1, false, 4, 0 }} },148{ Hexagon::BI__builtin_HEXAGON_S2_lsr_i_vw, {{ 1, false, 5, 0 }} },149{ Hexagon::BI__builtin_HEXAGON_S2_setbit_i, {{ 1, false, 5, 0 }} },150{ Hexagon::BI__builtin_HEXAGON_S2_tableidxb_goodsyntax,151{{ 2, false, 4, 0 },152{ 3, false, 5, 0 }} },153{ Hexagon::BI__builtin_HEXAGON_S2_tableidxd_goodsyntax,154{{ 2, false, 4, 0 },155{ 3, false, 5, 0 }} },156{ Hexagon::BI__builtin_HEXAGON_S2_tableidxh_goodsyntax,157{{ 2, false, 4, 0 },158{ 3, false, 5, 0 }} },159{ Hexagon::BI__builtin_HEXAGON_S2_tableidxw_goodsyntax,160{{ 2, false, 4, 0 },161{ 3, false, 5, 0 }} },162{ Hexagon::BI__builtin_HEXAGON_S2_togglebit_i, {{ 1, false, 5, 0 }} },163{ Hexagon::BI__builtin_HEXAGON_S2_tstbit_i, {{ 1, false, 5, 0 }} },164{ Hexagon::BI__builtin_HEXAGON_S2_valignib, {{ 2, false, 3, 0 }} },165{ Hexagon::BI__builtin_HEXAGON_S2_vspliceib, {{ 2, false, 3, 0 }} },166{ Hexagon::BI__builtin_HEXAGON_S4_addi_asl_ri, {{ 2, false, 5, 0 }} },167{ Hexagon::BI__builtin_HEXAGON_S4_addi_lsr_ri, {{ 2, false, 5, 0 }} },168{ Hexagon::BI__builtin_HEXAGON_S4_andi_asl_ri, {{ 2, false, 5, 0 }} },169{ Hexagon::BI__builtin_HEXAGON_S4_andi_lsr_ri, {{ 2, false, 5, 0 }} },170{ Hexagon::BI__builtin_HEXAGON_S4_clbaddi, {{ 1, true , 6, 0 }} },171{ Hexagon::BI__builtin_HEXAGON_S4_clbpaddi, {{ 1, true, 6, 0 }} },172{ Hexagon::BI__builtin_HEXAGON_S4_extract, {{ 1, false, 5, 0 },173{ 2, false, 5, 0 }} },174{ Hexagon::BI__builtin_HEXAGON_S4_extractp, {{ 1, false, 6, 0 },175{ 2, false, 6, 0 }} },176{ Hexagon::BI__builtin_HEXAGON_S4_lsli, {{ 0, true, 6, 0 }} },177{ Hexagon::BI__builtin_HEXAGON_S4_ntstbit_i, {{ 1, false, 5, 0 }} },178{ Hexagon::BI__builtin_HEXAGON_S4_ori_asl_ri, {{ 2, false, 5, 0 }} },179{ Hexagon::BI__builtin_HEXAGON_S4_ori_lsr_ri, {{ 2, false, 5, 0 }} },180{ Hexagon::BI__builtin_HEXAGON_S4_subi_asl_ri, {{ 2, false, 5, 0 }} },181{ Hexagon::BI__builtin_HEXAGON_S4_subi_lsr_ri, {{ 2, false, 5, 0 }} },182{ Hexagon::BI__builtin_HEXAGON_S4_vrcrotate_acc, {{ 3, false, 2, 0 }} },183{ Hexagon::BI__builtin_HEXAGON_S4_vrcrotate, {{ 2, false, 2, 0 }} },184{ Hexagon::BI__builtin_HEXAGON_S5_asrhub_rnd_sat_goodsyntax,185{{ 1, false, 4, 0 }} },186{ Hexagon::BI__builtin_HEXAGON_S5_asrhub_sat, {{ 1, false, 4, 0 }} },187{ Hexagon::BI__builtin_HEXAGON_S5_vasrhrnd_goodsyntax,188{{ 1, false, 4, 0 }} },189{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_p, {{ 1, false, 6, 0 }} },190{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_p_acc, {{ 2, false, 6, 0 }} },191{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_p_and, {{ 2, false, 6, 0 }} },192{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_p_nac, {{ 2, false, 6, 0 }} },193{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_p_or, {{ 2, false, 6, 0 }} },194{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_p_xacc, {{ 2, false, 6, 0 }} },195{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_r, {{ 1, false, 5, 0 }} },196{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_r_acc, {{ 2, false, 5, 0 }} },197{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_r_and, {{ 2, false, 5, 0 }} },198{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_r_nac, {{ 2, false, 5, 0 }} },199{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_r_or, {{ 2, false, 5, 0 }} },200{ Hexagon::BI__builtin_HEXAGON_S6_rol_i_r_xacc, {{ 2, false, 5, 0 }} },201{ Hexagon::BI__builtin_HEXAGON_V6_valignbi, {{ 2, false, 3, 0 }} },202{ Hexagon::BI__builtin_HEXAGON_V6_valignbi_128B, {{ 2, false, 3, 0 }} },203{ Hexagon::BI__builtin_HEXAGON_V6_vlalignbi, {{ 2, false, 3, 0 }} },204{ Hexagon::BI__builtin_HEXAGON_V6_vlalignbi_128B, {{ 2, false, 3, 0 }} },205{ Hexagon::BI__builtin_HEXAGON_V6_vrmpybusi, {{ 2, false, 1, 0 }} },206{ Hexagon::BI__builtin_HEXAGON_V6_vrmpybusi_128B, {{ 2, false, 1, 0 }} },207{ Hexagon::BI__builtin_HEXAGON_V6_vrmpybusi_acc, {{ 3, false, 1, 0 }} },208{ Hexagon::BI__builtin_HEXAGON_V6_vrmpybusi_acc_128B,209{{ 3, false, 1, 0 }} },210{ Hexagon::BI__builtin_HEXAGON_V6_vrmpyubi, {{ 2, false, 1, 0 }} },211{ Hexagon::BI__builtin_HEXAGON_V6_vrmpyubi_128B, {{ 2, false, 1, 0 }} },212{ Hexagon::BI__builtin_HEXAGON_V6_vrmpyubi_acc, {{ 3, false, 1, 0 }} },213{ Hexagon::BI__builtin_HEXAGON_V6_vrmpyubi_acc_128B,214{{ 3, false, 1, 0 }} },215{ Hexagon::BI__builtin_HEXAGON_V6_vrsadubi, {{ 2, false, 1, 0 }} },216{ Hexagon::BI__builtin_HEXAGON_V6_vrsadubi_128B, {{ 2, false, 1, 0 }} },217{ Hexagon::BI__builtin_HEXAGON_V6_vrsadubi_acc, {{ 3, false, 1, 0 }} },218{ Hexagon::BI__builtin_HEXAGON_V6_vrsadubi_acc_128B,219{{ 3, false, 1, 0 }} },220221{ Hexagon::BI__builtin_HEXAGON_V6_v6mpyhubs10, {{ 2, false, 2, 0 }} },222{ Hexagon::BI__builtin_HEXAGON_V6_v6mpyhubs10_128B,223{{ 2, false, 2, 0 }} },224{ Hexagon::BI__builtin_HEXAGON_V6_v6mpyhubs10_vxx,225{{ 3, false, 2, 0 }} },226{ Hexagon::BI__builtin_HEXAGON_V6_v6mpyhubs10_vxx_128B,227{{ 3, false, 2, 0 }} },228{ Hexagon::BI__builtin_HEXAGON_V6_v6mpyvubs10, {{ 2, false, 2, 0 }} },229{ Hexagon::BI__builtin_HEXAGON_V6_v6mpyvubs10_128B,230{{ 2, false, 2, 0 }} },231{ Hexagon::BI__builtin_HEXAGON_V6_v6mpyvubs10_vxx,232{{ 3, false, 2, 0 }} },233{ Hexagon::BI__builtin_HEXAGON_V6_v6mpyvubs10_vxx_128B,234{{ 3, false, 2, 0 }} },235{ Hexagon::BI__builtin_HEXAGON_V6_vlutvvbi, {{ 2, false, 3, 0 }} },236{ Hexagon::BI__builtin_HEXAGON_V6_vlutvvbi_128B, {{ 2, false, 3, 0 }} },237{ Hexagon::BI__builtin_HEXAGON_V6_vlutvvb_oracci, {{ 3, false, 3, 0 }} },238{ Hexagon::BI__builtin_HEXAGON_V6_vlutvvb_oracci_128B,239{{ 3, false, 3, 0 }} },240{ Hexagon::BI__builtin_HEXAGON_V6_vlutvwhi, {{ 2, false, 3, 0 }} },241{ Hexagon::BI__builtin_HEXAGON_V6_vlutvwhi_128B, {{ 2, false, 3, 0 }} },242{ Hexagon::BI__builtin_HEXAGON_V6_vlutvwh_oracci, {{ 3, false, 3, 0 }} },243{ Hexagon::BI__builtin_HEXAGON_V6_vlutvwh_oracci_128B,244{{ 3, false, 3, 0 }} },245};246247// Use a dynamically initialized static to sort the table exactly once on248// first run.249static const bool SortOnce =250(llvm::sort(Infos,251[](const BuiltinInfo &LHS, const BuiltinInfo &RHS) {252return LHS.BuiltinID < RHS.BuiltinID;253}),254true);255(void)SortOnce;256257const BuiltinInfo *F = llvm::partition_point(258Infos, [=](const BuiltinInfo &BI) { return BI.BuiltinID < BuiltinID; });259if (F == std::end(Infos) || F->BuiltinID != BuiltinID)260return false;261262bool Error = false;263264for (const ArgInfo &A : F->Infos) {265// Ignore empty ArgInfo elements.266if (A.BitWidth == 0)267continue;268269int32_t Min = A.IsSigned ? -(1 << (A.BitWidth - 1)) : 0;270int32_t Max = (1 << (A.IsSigned ? A.BitWidth - 1 : A.BitWidth)) - 1;271if (!A.Align) {272Error |= SemaRef.BuiltinConstantArgRange(TheCall, A.OpNum, Min, Max);273} else {274unsigned M = 1 << A.Align;275Min *= M;276Max *= M;277Error |= SemaRef.BuiltinConstantArgRange(TheCall, A.OpNum, Min, Max);278Error |= SemaRef.BuiltinConstantArgMultiple(TheCall, A.OpNum, M);279}280}281return Error;282}283284bool SemaHexagon::CheckHexagonBuiltinFunctionCall(unsigned BuiltinID,285CallExpr *TheCall) {286return CheckHexagonBuiltinArgument(BuiltinID, TheCall);287}288289} // namespace clang290291292