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