Skip to content

Commit 72dc89f

Browse files
committed
fixup: use ParseSVEImmChecks in CheckSVEBuiltinFunctionCall
1 parent 3065dc6 commit 72dc89f

File tree

1 file changed

+13
-135
lines changed

1 file changed

+13
-135
lines changed

clang/lib/Sema/SemaChecking.cpp

Lines changed: 13 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -3117,6 +3117,18 @@ bool Sema::ParseSVEImmChecks(
31173117
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 255))
31183118
HasError = true;
31193119
break;
3120+
case SVETypeFlags::ImmCheck1_1:
3121+
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, 1))
3122+
HasError = true;
3123+
break;
3124+
case SVETypeFlags::ImmCheck1_3:
3125+
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, 3))
3126+
HasError = true;
3127+
break;
3128+
case SVETypeFlags::ImmCheck1_7:
3129+
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, 7))
3130+
HasError = true;
3131+
break;
31203132
case SVETypeFlags::ImmCheck2_4_Mul2:
31213133
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 2, 4) ||
31223134
SemaBuiltinConstantArgMultiple(TheCall, ArgNum, 2))
@@ -3233,141 +3245,7 @@ bool Sema::CheckSVEBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
32333245
}
32343246

32353247
// Perform all the immediate checks for this builtin call.
3236-
bool HasError = false;
3237-
for (auto &I : ImmChecks) {
3238-
int ArgNum, CheckTy, ElementSizeInBits;
3239-
std::tie(ArgNum, CheckTy, ElementSizeInBits) = I;
3240-
3241-
typedef bool(*OptionSetCheckFnTy)(int64_t Value);
3242-
3243-
// Function that checks whether the operand (ArgNum) is an immediate
3244-
// that is one of the predefined values.
3245-
auto CheckImmediateInSet = [&](OptionSetCheckFnTy CheckImm,
3246-
int ErrDiag) -> bool {
3247-
// We can't check the value of a dependent argument.
3248-
Expr *Arg = TheCall->getArg(ArgNum);
3249-
if (Arg->isTypeDependent() || Arg->isValueDependent())
3250-
return false;
3251-
3252-
// Check constant-ness first.
3253-
llvm::APSInt Imm;
3254-
if (SemaBuiltinConstantArg(TheCall, ArgNum, Imm))
3255-
return true;
3256-
3257-
if (!CheckImm(Imm.getSExtValue()))
3258-
return Diag(TheCall->getBeginLoc(), ErrDiag) << Arg->getSourceRange();
3259-
return false;
3260-
};
3261-
3262-
switch ((SVETypeFlags::ImmCheckType)CheckTy) {
3263-
case SVETypeFlags::ImmCheck0_31:
3264-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 31))
3265-
HasError = true;
3266-
break;
3267-
case SVETypeFlags::ImmCheck0_13:
3268-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 13))
3269-
HasError = true;
3270-
break;
3271-
case SVETypeFlags::ImmCheck1_16:
3272-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, 16))
3273-
HasError = true;
3274-
break;
3275-
case SVETypeFlags::ImmCheck0_7:
3276-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 7))
3277-
HasError = true;
3278-
break;
3279-
case SVETypeFlags::ImmCheck1_1:
3280-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, 1))
3281-
HasError = true;
3282-
break;
3283-
case SVETypeFlags::ImmCheck1_3:
3284-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, 3))
3285-
HasError = true;
3286-
break;
3287-
case SVETypeFlags::ImmCheck1_7:
3288-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, 7))
3289-
HasError = true;
3290-
break;
3291-
case SVETypeFlags::ImmCheckExtract:
3292-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0,
3293-
(2048 / ElementSizeInBits) - 1))
3294-
HasError = true;
3295-
break;
3296-
case SVETypeFlags::ImmCheckShiftRight:
3297-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, ElementSizeInBits))
3298-
HasError = true;
3299-
break;
3300-
case SVETypeFlags::ImmCheckShiftRightNarrow:
3301-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1,
3302-
ElementSizeInBits / 2))
3303-
HasError = true;
3304-
break;
3305-
case SVETypeFlags::ImmCheckShiftLeft:
3306-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0,
3307-
ElementSizeInBits - 1))
3308-
HasError = true;
3309-
break;
3310-
case SVETypeFlags::ImmCheckLaneIndex:
3311-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0,
3312-
(128 / (1 * ElementSizeInBits)) - 1))
3313-
HasError = true;
3314-
break;
3315-
case SVETypeFlags::ImmCheckLaneIndexCompRotate:
3316-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0,
3317-
(128 / (2 * ElementSizeInBits)) - 1))
3318-
HasError = true;
3319-
break;
3320-
case SVETypeFlags::ImmCheckLaneIndexDot:
3321-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0,
3322-
(128 / (4 * ElementSizeInBits)) - 1))
3323-
HasError = true;
3324-
break;
3325-
case SVETypeFlags::ImmCheckComplexRot90_270:
3326-
if (CheckImmediateInSet([](int64_t V) { return V == 90 || V == 270; },
3327-
diag::err_rotation_argument_to_cadd))
3328-
HasError = true;
3329-
break;
3330-
case SVETypeFlags::ImmCheckComplexRotAll90:
3331-
if (CheckImmediateInSet(
3332-
[](int64_t V) {
3333-
return V == 0 || V == 90 || V == 180 || V == 270;
3334-
},
3335-
diag::err_rotation_argument_to_cmla))
3336-
HasError = true;
3337-
break;
3338-
case SVETypeFlags::ImmCheck0_1:
3339-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 1))
3340-
HasError = true;
3341-
break;
3342-
case SVETypeFlags::ImmCheck0_2:
3343-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 2))
3344-
HasError = true;
3345-
break;
3346-
case SVETypeFlags::ImmCheck0_3:
3347-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 3))
3348-
HasError = true;
3349-
break;
3350-
case SVETypeFlags::ImmCheck0_0:
3351-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 0))
3352-
HasError = true;
3353-
break;
3354-
case SVETypeFlags::ImmCheck0_15:
3355-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 15))
3356-
HasError = true;
3357-
break;
3358-
case SVETypeFlags::ImmCheck0_255:
3359-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 255))
3360-
HasError = true;
3361-
break;
3362-
case SVETypeFlags::ImmCheck2_4_Mul2:
3363-
if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 2, 4) ||
3364-
SemaBuiltinConstantArgMultiple(TheCall, ArgNum, 2))
3365-
HasError = true;
3366-
break;
3367-
}
3368-
}
3369-
3370-
return HasError;
3248+
return ParseSVEImmChecks(TheCall, ImmChecks);
33713249
}
33723250

33733251
bool Sema::CheckNeonBuiltinFunctionCall(const TargetInfo &TI,

0 commit comments

Comments
 (0)