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