Path: blob/main/contrib/llvm-project/clang/lib/Sema/SemaLoongArch.cpp
35233 views
//===------ SemaLoongArch.cpp ---- LoongArch 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 LoongArch.9//10//===----------------------------------------------------------------------===//1112#include "clang/Sema/SemaLoongArch.h"13#include "clang/Basic/TargetBuiltins.h"14#include "clang/Sema/Sema.h"15#include "llvm/Support/MathExtras.h"1617namespace clang {1819SemaLoongArch::SemaLoongArch(Sema &S) : SemaBase(S) {}2021bool SemaLoongArch::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI,22unsigned BuiltinID,23CallExpr *TheCall) {24switch (BuiltinID) {25default:26break;27// Basic intrinsics.28case LoongArch::BI__builtin_loongarch_cacop_d:29case LoongArch::BI__builtin_loongarch_cacop_w: {30SemaRef.BuiltinConstantArgRange(TheCall, 0, 0, llvm::maxUIntN(5));31SemaRef.BuiltinConstantArgRange(TheCall, 2, llvm::minIntN(12),32llvm::maxIntN(12));33break;34}35case LoongArch::BI__builtin_loongarch_break:36case LoongArch::BI__builtin_loongarch_dbar:37case LoongArch::BI__builtin_loongarch_ibar:38case LoongArch::BI__builtin_loongarch_syscall:39// Check if immediate is in [0, 32767].40return SemaRef.BuiltinConstantArgRange(TheCall, 0, 0, 32767);41case LoongArch::BI__builtin_loongarch_csrrd_w:42case LoongArch::BI__builtin_loongarch_csrrd_d:43return SemaRef.BuiltinConstantArgRange(TheCall, 0, 0, 16383);44case LoongArch::BI__builtin_loongarch_csrwr_w:45case LoongArch::BI__builtin_loongarch_csrwr_d:46return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 16383);47case LoongArch::BI__builtin_loongarch_csrxchg_w:48case LoongArch::BI__builtin_loongarch_csrxchg_d:49return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 16383);50case LoongArch::BI__builtin_loongarch_lddir_d:51case LoongArch::BI__builtin_loongarch_ldpte_d:52return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 31);53case LoongArch::BI__builtin_loongarch_movfcsr2gr:54case LoongArch::BI__builtin_loongarch_movgr2fcsr:55return SemaRef.BuiltinConstantArgRange(TheCall, 0, 0, llvm::maxUIntN(2));5657// LSX intrinsics.58case LoongArch::BI__builtin_lsx_vbitclri_b:59case LoongArch::BI__builtin_lsx_vbitrevi_b:60case LoongArch::BI__builtin_lsx_vbitseti_b:61case LoongArch::BI__builtin_lsx_vsat_b:62case LoongArch::BI__builtin_lsx_vsat_bu:63case LoongArch::BI__builtin_lsx_vslli_b:64case LoongArch::BI__builtin_lsx_vsrai_b:65case LoongArch::BI__builtin_lsx_vsrari_b:66case LoongArch::BI__builtin_lsx_vsrli_b:67case LoongArch::BI__builtin_lsx_vsllwil_h_b:68case LoongArch::BI__builtin_lsx_vsllwil_hu_bu:69case LoongArch::BI__builtin_lsx_vrotri_b:70case LoongArch::BI__builtin_lsx_vsrlri_b:71return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 7);72case LoongArch::BI__builtin_lsx_vbitclri_h:73case LoongArch::BI__builtin_lsx_vbitrevi_h:74case LoongArch::BI__builtin_lsx_vbitseti_h:75case LoongArch::BI__builtin_lsx_vsat_h:76case LoongArch::BI__builtin_lsx_vsat_hu:77case LoongArch::BI__builtin_lsx_vslli_h:78case LoongArch::BI__builtin_lsx_vsrai_h:79case LoongArch::BI__builtin_lsx_vsrari_h:80case LoongArch::BI__builtin_lsx_vsrli_h:81case LoongArch::BI__builtin_lsx_vsllwil_w_h:82case LoongArch::BI__builtin_lsx_vsllwil_wu_hu:83case LoongArch::BI__builtin_lsx_vrotri_h:84case LoongArch::BI__builtin_lsx_vsrlri_h:85return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 15);86case LoongArch::BI__builtin_lsx_vssrarni_b_h:87case LoongArch::BI__builtin_lsx_vssrarni_bu_h:88case LoongArch::BI__builtin_lsx_vssrani_b_h:89case LoongArch::BI__builtin_lsx_vssrani_bu_h:90case LoongArch::BI__builtin_lsx_vsrarni_b_h:91case LoongArch::BI__builtin_lsx_vsrlni_b_h:92case LoongArch::BI__builtin_lsx_vsrlrni_b_h:93case LoongArch::BI__builtin_lsx_vssrlni_b_h:94case LoongArch::BI__builtin_lsx_vssrlni_bu_h:95case LoongArch::BI__builtin_lsx_vssrlrni_b_h:96case LoongArch::BI__builtin_lsx_vssrlrni_bu_h:97case LoongArch::BI__builtin_lsx_vsrani_b_h:98return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 15);99case LoongArch::BI__builtin_lsx_vslei_bu:100case LoongArch::BI__builtin_lsx_vslei_hu:101case LoongArch::BI__builtin_lsx_vslei_wu:102case LoongArch::BI__builtin_lsx_vslei_du:103case LoongArch::BI__builtin_lsx_vslti_bu:104case LoongArch::BI__builtin_lsx_vslti_hu:105case LoongArch::BI__builtin_lsx_vslti_wu:106case LoongArch::BI__builtin_lsx_vslti_du:107case LoongArch::BI__builtin_lsx_vmaxi_bu:108case LoongArch::BI__builtin_lsx_vmaxi_hu:109case LoongArch::BI__builtin_lsx_vmaxi_wu:110case LoongArch::BI__builtin_lsx_vmaxi_du:111case LoongArch::BI__builtin_lsx_vmini_bu:112case LoongArch::BI__builtin_lsx_vmini_hu:113case LoongArch::BI__builtin_lsx_vmini_wu:114case LoongArch::BI__builtin_lsx_vmini_du:115case LoongArch::BI__builtin_lsx_vaddi_bu:116case LoongArch::BI__builtin_lsx_vaddi_hu:117case LoongArch::BI__builtin_lsx_vaddi_wu:118case LoongArch::BI__builtin_lsx_vaddi_du:119case LoongArch::BI__builtin_lsx_vbitclri_w:120case LoongArch::BI__builtin_lsx_vbitrevi_w:121case LoongArch::BI__builtin_lsx_vbitseti_w:122case LoongArch::BI__builtin_lsx_vsat_w:123case LoongArch::BI__builtin_lsx_vsat_wu:124case LoongArch::BI__builtin_lsx_vslli_w:125case LoongArch::BI__builtin_lsx_vsrai_w:126case LoongArch::BI__builtin_lsx_vsrari_w:127case LoongArch::BI__builtin_lsx_vsrli_w:128case LoongArch::BI__builtin_lsx_vsllwil_d_w:129case LoongArch::BI__builtin_lsx_vsllwil_du_wu:130case LoongArch::BI__builtin_lsx_vsrlri_w:131case LoongArch::BI__builtin_lsx_vrotri_w:132case LoongArch::BI__builtin_lsx_vsubi_bu:133case LoongArch::BI__builtin_lsx_vsubi_hu:134case LoongArch::BI__builtin_lsx_vbsrl_v:135case LoongArch::BI__builtin_lsx_vbsll_v:136case LoongArch::BI__builtin_lsx_vsubi_wu:137case LoongArch::BI__builtin_lsx_vsubi_du:138return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 31);139case LoongArch::BI__builtin_lsx_vssrarni_h_w:140case LoongArch::BI__builtin_lsx_vssrarni_hu_w:141case LoongArch::BI__builtin_lsx_vssrani_h_w:142case LoongArch::BI__builtin_lsx_vssrani_hu_w:143case LoongArch::BI__builtin_lsx_vsrarni_h_w:144case LoongArch::BI__builtin_lsx_vsrani_h_w:145case LoongArch::BI__builtin_lsx_vfrstpi_b:146case LoongArch::BI__builtin_lsx_vfrstpi_h:147case LoongArch::BI__builtin_lsx_vsrlni_h_w:148case LoongArch::BI__builtin_lsx_vsrlrni_h_w:149case LoongArch::BI__builtin_lsx_vssrlni_h_w:150case LoongArch::BI__builtin_lsx_vssrlni_hu_w:151case LoongArch::BI__builtin_lsx_vssrlrni_h_w:152case LoongArch::BI__builtin_lsx_vssrlrni_hu_w:153return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 31);154case LoongArch::BI__builtin_lsx_vbitclri_d:155case LoongArch::BI__builtin_lsx_vbitrevi_d:156case LoongArch::BI__builtin_lsx_vbitseti_d:157case LoongArch::BI__builtin_lsx_vsat_d:158case LoongArch::BI__builtin_lsx_vsat_du:159case LoongArch::BI__builtin_lsx_vslli_d:160case LoongArch::BI__builtin_lsx_vsrai_d:161case LoongArch::BI__builtin_lsx_vsrli_d:162case LoongArch::BI__builtin_lsx_vsrari_d:163case LoongArch::BI__builtin_lsx_vrotri_d:164case LoongArch::BI__builtin_lsx_vsrlri_d:165return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 63);166case LoongArch::BI__builtin_lsx_vssrarni_w_d:167case LoongArch::BI__builtin_lsx_vssrarni_wu_d:168case LoongArch::BI__builtin_lsx_vssrani_w_d:169case LoongArch::BI__builtin_lsx_vssrani_wu_d:170case LoongArch::BI__builtin_lsx_vsrarni_w_d:171case LoongArch::BI__builtin_lsx_vsrlni_w_d:172case LoongArch::BI__builtin_lsx_vsrlrni_w_d:173case LoongArch::BI__builtin_lsx_vssrlni_w_d:174case LoongArch::BI__builtin_lsx_vssrlni_wu_d:175case LoongArch::BI__builtin_lsx_vssrlrni_w_d:176case LoongArch::BI__builtin_lsx_vssrlrni_wu_d:177case LoongArch::BI__builtin_lsx_vsrani_w_d:178return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 63);179case LoongArch::BI__builtin_lsx_vssrarni_d_q:180case LoongArch::BI__builtin_lsx_vssrarni_du_q:181case LoongArch::BI__builtin_lsx_vssrani_d_q:182case LoongArch::BI__builtin_lsx_vssrani_du_q:183case LoongArch::BI__builtin_lsx_vsrarni_d_q:184case LoongArch::BI__builtin_lsx_vssrlni_d_q:185case LoongArch::BI__builtin_lsx_vssrlni_du_q:186case LoongArch::BI__builtin_lsx_vssrlrni_d_q:187case LoongArch::BI__builtin_lsx_vssrlrni_du_q:188case LoongArch::BI__builtin_lsx_vsrani_d_q:189case LoongArch::BI__builtin_lsx_vsrlrni_d_q:190case LoongArch::BI__builtin_lsx_vsrlni_d_q:191return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 127);192case LoongArch::BI__builtin_lsx_vseqi_b:193case LoongArch::BI__builtin_lsx_vseqi_h:194case LoongArch::BI__builtin_lsx_vseqi_w:195case LoongArch::BI__builtin_lsx_vseqi_d:196case LoongArch::BI__builtin_lsx_vslti_b:197case LoongArch::BI__builtin_lsx_vslti_h:198case LoongArch::BI__builtin_lsx_vslti_w:199case LoongArch::BI__builtin_lsx_vslti_d:200case LoongArch::BI__builtin_lsx_vslei_b:201case LoongArch::BI__builtin_lsx_vslei_h:202case LoongArch::BI__builtin_lsx_vslei_w:203case LoongArch::BI__builtin_lsx_vslei_d:204case LoongArch::BI__builtin_lsx_vmaxi_b:205case LoongArch::BI__builtin_lsx_vmaxi_h:206case LoongArch::BI__builtin_lsx_vmaxi_w:207case LoongArch::BI__builtin_lsx_vmaxi_d:208case LoongArch::BI__builtin_lsx_vmini_b:209case LoongArch::BI__builtin_lsx_vmini_h:210case LoongArch::BI__builtin_lsx_vmini_w:211case LoongArch::BI__builtin_lsx_vmini_d:212return SemaRef.BuiltinConstantArgRange(TheCall, 1, -16, 15);213case LoongArch::BI__builtin_lsx_vandi_b:214case LoongArch::BI__builtin_lsx_vnori_b:215case LoongArch::BI__builtin_lsx_vori_b:216case LoongArch::BI__builtin_lsx_vshuf4i_b:217case LoongArch::BI__builtin_lsx_vshuf4i_h:218case LoongArch::BI__builtin_lsx_vshuf4i_w:219case LoongArch::BI__builtin_lsx_vxori_b:220return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 255);221case LoongArch::BI__builtin_lsx_vbitseli_b:222case LoongArch::BI__builtin_lsx_vshuf4i_d:223case LoongArch::BI__builtin_lsx_vextrins_b:224case LoongArch::BI__builtin_lsx_vextrins_h:225case LoongArch::BI__builtin_lsx_vextrins_w:226case LoongArch::BI__builtin_lsx_vextrins_d:227case LoongArch::BI__builtin_lsx_vpermi_w:228return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 255);229case LoongArch::BI__builtin_lsx_vpickve2gr_b:230case LoongArch::BI__builtin_lsx_vpickve2gr_bu:231case LoongArch::BI__builtin_lsx_vreplvei_b:232return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 15);233case LoongArch::BI__builtin_lsx_vinsgr2vr_b:234return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 15);235case LoongArch::BI__builtin_lsx_vpickve2gr_h:236case LoongArch::BI__builtin_lsx_vpickve2gr_hu:237case LoongArch::BI__builtin_lsx_vreplvei_h:238return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 7);239case LoongArch::BI__builtin_lsx_vinsgr2vr_h:240return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 7);241case LoongArch::BI__builtin_lsx_vpickve2gr_w:242case LoongArch::BI__builtin_lsx_vpickve2gr_wu:243case LoongArch::BI__builtin_lsx_vreplvei_w:244return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 3);245case LoongArch::BI__builtin_lsx_vinsgr2vr_w:246return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 3);247case LoongArch::BI__builtin_lsx_vpickve2gr_d:248case LoongArch::BI__builtin_lsx_vpickve2gr_du:249case LoongArch::BI__builtin_lsx_vreplvei_d:250return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 1);251case LoongArch::BI__builtin_lsx_vinsgr2vr_d:252return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 1);253case LoongArch::BI__builtin_lsx_vstelm_b:254return SemaRef.BuiltinConstantArgRange(TheCall, 2, -128, 127) ||255SemaRef.BuiltinConstantArgRange(TheCall, 3, 0, 15);256case LoongArch::BI__builtin_lsx_vstelm_h:257return SemaRef.BuiltinConstantArgRange(TheCall, 2, -256, 254) ||258SemaRef.BuiltinConstantArgRange(TheCall, 3, 0, 7);259case LoongArch::BI__builtin_lsx_vstelm_w:260return SemaRef.BuiltinConstantArgRange(TheCall, 2, -512, 508) ||261SemaRef.BuiltinConstantArgRange(TheCall, 3, 0, 3);262case LoongArch::BI__builtin_lsx_vstelm_d:263return SemaRef.BuiltinConstantArgRange(TheCall, 2, -1024, 1016) ||264SemaRef.BuiltinConstantArgRange(TheCall, 3, 0, 1);265case LoongArch::BI__builtin_lsx_vldrepl_b:266case LoongArch::BI__builtin_lsx_vld:267return SemaRef.BuiltinConstantArgRange(TheCall, 1, -2048, 2047);268case LoongArch::BI__builtin_lsx_vldrepl_h:269return SemaRef.BuiltinConstantArgRange(TheCall, 1, -2048, 2046);270case LoongArch::BI__builtin_lsx_vldrepl_w:271return SemaRef.BuiltinConstantArgRange(TheCall, 1, -2048, 2044);272case LoongArch::BI__builtin_lsx_vldrepl_d:273return SemaRef.BuiltinConstantArgRange(TheCall, 1, -2048, 2040);274case LoongArch::BI__builtin_lsx_vst:275return SemaRef.BuiltinConstantArgRange(TheCall, 2, -2048, 2047);276case LoongArch::BI__builtin_lsx_vldi:277return SemaRef.BuiltinConstantArgRange(TheCall, 0, -4096, 4095);278case LoongArch::BI__builtin_lsx_vrepli_b:279case LoongArch::BI__builtin_lsx_vrepli_h:280case LoongArch::BI__builtin_lsx_vrepli_w:281case LoongArch::BI__builtin_lsx_vrepli_d:282return SemaRef.BuiltinConstantArgRange(TheCall, 0, -512, 511);283284// LASX intrinsics.285case LoongArch::BI__builtin_lasx_xvbitclri_b:286case LoongArch::BI__builtin_lasx_xvbitrevi_b:287case LoongArch::BI__builtin_lasx_xvbitseti_b:288case LoongArch::BI__builtin_lasx_xvsat_b:289case LoongArch::BI__builtin_lasx_xvsat_bu:290case LoongArch::BI__builtin_lasx_xvslli_b:291case LoongArch::BI__builtin_lasx_xvsrai_b:292case LoongArch::BI__builtin_lasx_xvsrari_b:293case LoongArch::BI__builtin_lasx_xvsrli_b:294case LoongArch::BI__builtin_lasx_xvsllwil_h_b:295case LoongArch::BI__builtin_lasx_xvsllwil_hu_bu:296case LoongArch::BI__builtin_lasx_xvrotri_b:297case LoongArch::BI__builtin_lasx_xvsrlri_b:298return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 7);299case LoongArch::BI__builtin_lasx_xvbitclri_h:300case LoongArch::BI__builtin_lasx_xvbitrevi_h:301case LoongArch::BI__builtin_lasx_xvbitseti_h:302case LoongArch::BI__builtin_lasx_xvsat_h:303case LoongArch::BI__builtin_lasx_xvsat_hu:304case LoongArch::BI__builtin_lasx_xvslli_h:305case LoongArch::BI__builtin_lasx_xvsrai_h:306case LoongArch::BI__builtin_lasx_xvsrari_h:307case LoongArch::BI__builtin_lasx_xvsrli_h:308case LoongArch::BI__builtin_lasx_xvsllwil_w_h:309case LoongArch::BI__builtin_lasx_xvsllwil_wu_hu:310case LoongArch::BI__builtin_lasx_xvrotri_h:311case LoongArch::BI__builtin_lasx_xvsrlri_h:312return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 15);313case LoongArch::BI__builtin_lasx_xvssrarni_b_h:314case LoongArch::BI__builtin_lasx_xvssrarni_bu_h:315case LoongArch::BI__builtin_lasx_xvssrani_b_h:316case LoongArch::BI__builtin_lasx_xvssrani_bu_h:317case LoongArch::BI__builtin_lasx_xvsrarni_b_h:318case LoongArch::BI__builtin_lasx_xvsrlni_b_h:319case LoongArch::BI__builtin_lasx_xvsrlrni_b_h:320case LoongArch::BI__builtin_lasx_xvssrlni_b_h:321case LoongArch::BI__builtin_lasx_xvssrlni_bu_h:322case LoongArch::BI__builtin_lasx_xvssrlrni_b_h:323case LoongArch::BI__builtin_lasx_xvssrlrni_bu_h:324case LoongArch::BI__builtin_lasx_xvsrani_b_h:325return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 15);326case LoongArch::BI__builtin_lasx_xvslei_bu:327case LoongArch::BI__builtin_lasx_xvslei_hu:328case LoongArch::BI__builtin_lasx_xvslei_wu:329case LoongArch::BI__builtin_lasx_xvslei_du:330case LoongArch::BI__builtin_lasx_xvslti_bu:331case LoongArch::BI__builtin_lasx_xvslti_hu:332case LoongArch::BI__builtin_lasx_xvslti_wu:333case LoongArch::BI__builtin_lasx_xvslti_du:334case LoongArch::BI__builtin_lasx_xvmaxi_bu:335case LoongArch::BI__builtin_lasx_xvmaxi_hu:336case LoongArch::BI__builtin_lasx_xvmaxi_wu:337case LoongArch::BI__builtin_lasx_xvmaxi_du:338case LoongArch::BI__builtin_lasx_xvmini_bu:339case LoongArch::BI__builtin_lasx_xvmini_hu:340case LoongArch::BI__builtin_lasx_xvmini_wu:341case LoongArch::BI__builtin_lasx_xvmini_du:342case LoongArch::BI__builtin_lasx_xvaddi_bu:343case LoongArch::BI__builtin_lasx_xvaddi_hu:344case LoongArch::BI__builtin_lasx_xvaddi_wu:345case LoongArch::BI__builtin_lasx_xvaddi_du:346case LoongArch::BI__builtin_lasx_xvbitclri_w:347case LoongArch::BI__builtin_lasx_xvbitrevi_w:348case LoongArch::BI__builtin_lasx_xvbitseti_w:349case LoongArch::BI__builtin_lasx_xvsat_w:350case LoongArch::BI__builtin_lasx_xvsat_wu:351case LoongArch::BI__builtin_lasx_xvslli_w:352case LoongArch::BI__builtin_lasx_xvsrai_w:353case LoongArch::BI__builtin_lasx_xvsrari_w:354case LoongArch::BI__builtin_lasx_xvsrli_w:355case LoongArch::BI__builtin_lasx_xvsllwil_d_w:356case LoongArch::BI__builtin_lasx_xvsllwil_du_wu:357case LoongArch::BI__builtin_lasx_xvsrlri_w:358case LoongArch::BI__builtin_lasx_xvrotri_w:359case LoongArch::BI__builtin_lasx_xvsubi_bu:360case LoongArch::BI__builtin_lasx_xvsubi_hu:361case LoongArch::BI__builtin_lasx_xvsubi_wu:362case LoongArch::BI__builtin_lasx_xvsubi_du:363case LoongArch::BI__builtin_lasx_xvbsrl_v:364case LoongArch::BI__builtin_lasx_xvbsll_v:365return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 31);366case LoongArch::BI__builtin_lasx_xvssrarni_h_w:367case LoongArch::BI__builtin_lasx_xvssrarni_hu_w:368case LoongArch::BI__builtin_lasx_xvssrani_h_w:369case LoongArch::BI__builtin_lasx_xvssrani_hu_w:370case LoongArch::BI__builtin_lasx_xvsrarni_h_w:371case LoongArch::BI__builtin_lasx_xvsrani_h_w:372case LoongArch::BI__builtin_lasx_xvfrstpi_b:373case LoongArch::BI__builtin_lasx_xvfrstpi_h:374case LoongArch::BI__builtin_lasx_xvsrlni_h_w:375case LoongArch::BI__builtin_lasx_xvsrlrni_h_w:376case LoongArch::BI__builtin_lasx_xvssrlni_h_w:377case LoongArch::BI__builtin_lasx_xvssrlni_hu_w:378case LoongArch::BI__builtin_lasx_xvssrlrni_h_w:379case LoongArch::BI__builtin_lasx_xvssrlrni_hu_w:380return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 31);381case LoongArch::BI__builtin_lasx_xvbitclri_d:382case LoongArch::BI__builtin_lasx_xvbitrevi_d:383case LoongArch::BI__builtin_lasx_xvbitseti_d:384case LoongArch::BI__builtin_lasx_xvsat_d:385case LoongArch::BI__builtin_lasx_xvsat_du:386case LoongArch::BI__builtin_lasx_xvslli_d:387case LoongArch::BI__builtin_lasx_xvsrai_d:388case LoongArch::BI__builtin_lasx_xvsrli_d:389case LoongArch::BI__builtin_lasx_xvsrari_d:390case LoongArch::BI__builtin_lasx_xvrotri_d:391case LoongArch::BI__builtin_lasx_xvsrlri_d:392return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 63);393case LoongArch::BI__builtin_lasx_xvssrarni_w_d:394case LoongArch::BI__builtin_lasx_xvssrarni_wu_d:395case LoongArch::BI__builtin_lasx_xvssrani_w_d:396case LoongArch::BI__builtin_lasx_xvssrani_wu_d:397case LoongArch::BI__builtin_lasx_xvsrarni_w_d:398case LoongArch::BI__builtin_lasx_xvsrlni_w_d:399case LoongArch::BI__builtin_lasx_xvsrlrni_w_d:400case LoongArch::BI__builtin_lasx_xvssrlni_w_d:401case LoongArch::BI__builtin_lasx_xvssrlni_wu_d:402case LoongArch::BI__builtin_lasx_xvssrlrni_w_d:403case LoongArch::BI__builtin_lasx_xvssrlrni_wu_d:404case LoongArch::BI__builtin_lasx_xvsrani_w_d:405return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 63);406case LoongArch::BI__builtin_lasx_xvssrarni_d_q:407case LoongArch::BI__builtin_lasx_xvssrarni_du_q:408case LoongArch::BI__builtin_lasx_xvssrani_d_q:409case LoongArch::BI__builtin_lasx_xvssrani_du_q:410case LoongArch::BI__builtin_lasx_xvsrarni_d_q:411case LoongArch::BI__builtin_lasx_xvssrlni_d_q:412case LoongArch::BI__builtin_lasx_xvssrlni_du_q:413case LoongArch::BI__builtin_lasx_xvssrlrni_d_q:414case LoongArch::BI__builtin_lasx_xvssrlrni_du_q:415case LoongArch::BI__builtin_lasx_xvsrani_d_q:416case LoongArch::BI__builtin_lasx_xvsrlni_d_q:417case LoongArch::BI__builtin_lasx_xvsrlrni_d_q:418return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 127);419case LoongArch::BI__builtin_lasx_xvseqi_b:420case LoongArch::BI__builtin_lasx_xvseqi_h:421case LoongArch::BI__builtin_lasx_xvseqi_w:422case LoongArch::BI__builtin_lasx_xvseqi_d:423case LoongArch::BI__builtin_lasx_xvslti_b:424case LoongArch::BI__builtin_lasx_xvslti_h:425case LoongArch::BI__builtin_lasx_xvslti_w:426case LoongArch::BI__builtin_lasx_xvslti_d:427case LoongArch::BI__builtin_lasx_xvslei_b:428case LoongArch::BI__builtin_lasx_xvslei_h:429case LoongArch::BI__builtin_lasx_xvslei_w:430case LoongArch::BI__builtin_lasx_xvslei_d:431case LoongArch::BI__builtin_lasx_xvmaxi_b:432case LoongArch::BI__builtin_lasx_xvmaxi_h:433case LoongArch::BI__builtin_lasx_xvmaxi_w:434case LoongArch::BI__builtin_lasx_xvmaxi_d:435case LoongArch::BI__builtin_lasx_xvmini_b:436case LoongArch::BI__builtin_lasx_xvmini_h:437case LoongArch::BI__builtin_lasx_xvmini_w:438case LoongArch::BI__builtin_lasx_xvmini_d:439return SemaRef.BuiltinConstantArgRange(TheCall, 1, -16, 15);440case LoongArch::BI__builtin_lasx_xvandi_b:441case LoongArch::BI__builtin_lasx_xvnori_b:442case LoongArch::BI__builtin_lasx_xvori_b:443case LoongArch::BI__builtin_lasx_xvshuf4i_b:444case LoongArch::BI__builtin_lasx_xvshuf4i_h:445case LoongArch::BI__builtin_lasx_xvshuf4i_w:446case LoongArch::BI__builtin_lasx_xvxori_b:447case LoongArch::BI__builtin_lasx_xvpermi_d:448return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 255);449case LoongArch::BI__builtin_lasx_xvbitseli_b:450case LoongArch::BI__builtin_lasx_xvshuf4i_d:451case LoongArch::BI__builtin_lasx_xvextrins_b:452case LoongArch::BI__builtin_lasx_xvextrins_h:453case LoongArch::BI__builtin_lasx_xvextrins_w:454case LoongArch::BI__builtin_lasx_xvextrins_d:455case LoongArch::BI__builtin_lasx_xvpermi_q:456case LoongArch::BI__builtin_lasx_xvpermi_w:457return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 255);458case LoongArch::BI__builtin_lasx_xvrepl128vei_b:459return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 15);460case LoongArch::BI__builtin_lasx_xvrepl128vei_h:461case LoongArch::BI__builtin_lasx_xvpickve2gr_w:462case LoongArch::BI__builtin_lasx_xvpickve2gr_wu:463case LoongArch::BI__builtin_lasx_xvpickve_w_f:464case LoongArch::BI__builtin_lasx_xvpickve_w:465return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 7);466case LoongArch::BI__builtin_lasx_xvinsgr2vr_w:467case LoongArch::BI__builtin_lasx_xvinsve0_w:468return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 7);469case LoongArch::BI__builtin_lasx_xvrepl128vei_w:470case LoongArch::BI__builtin_lasx_xvpickve2gr_d:471case LoongArch::BI__builtin_lasx_xvpickve2gr_du:472case LoongArch::BI__builtin_lasx_xvpickve_d_f:473case LoongArch::BI__builtin_lasx_xvpickve_d:474return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 3);475case LoongArch::BI__builtin_lasx_xvinsve0_d:476case LoongArch::BI__builtin_lasx_xvinsgr2vr_d:477return SemaRef.BuiltinConstantArgRange(TheCall, 2, 0, 3);478case LoongArch::BI__builtin_lasx_xvstelm_b:479return SemaRef.BuiltinConstantArgRange(TheCall, 2, -128, 127) ||480SemaRef.BuiltinConstantArgRange(TheCall, 3, 0, 31);481case LoongArch::BI__builtin_lasx_xvstelm_h:482return SemaRef.BuiltinConstantArgRange(TheCall, 2, -256, 254) ||483SemaRef.BuiltinConstantArgRange(TheCall, 3, 0, 15);484case LoongArch::BI__builtin_lasx_xvstelm_w:485return SemaRef.BuiltinConstantArgRange(TheCall, 2, -512, 508) ||486SemaRef.BuiltinConstantArgRange(TheCall, 3, 0, 7);487case LoongArch::BI__builtin_lasx_xvstelm_d:488return SemaRef.BuiltinConstantArgRange(TheCall, 2, -1024, 1016) ||489SemaRef.BuiltinConstantArgRange(TheCall, 3, 0, 3);490case LoongArch::BI__builtin_lasx_xvrepl128vei_d:491return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 1);492case LoongArch::BI__builtin_lasx_xvldrepl_b:493case LoongArch::BI__builtin_lasx_xvld:494return SemaRef.BuiltinConstantArgRange(TheCall, 1, -2048, 2047);495case LoongArch::BI__builtin_lasx_xvldrepl_h:496return SemaRef.BuiltinConstantArgRange(TheCall, 1, -2048, 2046);497case LoongArch::BI__builtin_lasx_xvldrepl_w:498return SemaRef.BuiltinConstantArgRange(TheCall, 1, -2048, 2044);499case LoongArch::BI__builtin_lasx_xvldrepl_d:500return SemaRef.BuiltinConstantArgRange(TheCall, 1, -2048, 2040);501case LoongArch::BI__builtin_lasx_xvst:502return SemaRef.BuiltinConstantArgRange(TheCall, 2, -2048, 2047);503case LoongArch::BI__builtin_lasx_xvldi:504return SemaRef.BuiltinConstantArgRange(TheCall, 0, -4096, 4095);505case LoongArch::BI__builtin_lasx_xvrepli_b:506case LoongArch::BI__builtin_lasx_xvrepli_h:507case LoongArch::BI__builtin_lasx_xvrepli_w:508case LoongArch::BI__builtin_lasx_xvrepli_d:509return SemaRef.BuiltinConstantArgRange(TheCall, 0, -512, 511);510}511return false;512}513514} // namespace clang515516517