brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.0 KiB · c57a6f9 Raw
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