================ @@ -403,6 +369,63 @@ enum ArmSMEState : unsigned { ArmZT0Mask = 0b11 << 2 }; +bool SemaARM::ParseNeonImmChecks( + CallExpr *TheCall, SmallVector<std::tuple<int, int, int>, 2> &ImmChecks, + int OverloadType = -1) { + int ArgIdx, CheckTy, ElementType; + bool hasError = false; + + for (auto &I : ImmChecks) { + std::tie(ArgIdx, CheckTy, ElementType) = I; + + NeonTypeFlags Type = (OverloadType != -1) ? NeonTypeFlags(OverloadType) + : NeonTypeFlags(ElementType); + + switch ((ArmImmCheckType)CheckTy) { + case ArmImmCheckType::ImmCheck0_3: + hasError |= SemaRef.BuiltinConstantArgRange(TheCall, ArgIdx, 0, 3); + break; + case ArmImmCheckType::ImmCheck0_63: + hasError |= SemaRef.BuiltinConstantArgRange(TheCall, ArgIdx, 0, 63); + break; + case ArmImmCheckType::ImmCheck0_7: + hasError |= SemaRef.BuiltinConstantArgRange(TheCall, ArgIdx, 0, 7); + break; + case ArmImmCheckType::ImmCheck1_16: + hasError |= SemaRef.BuiltinConstantArgRange(TheCall, ArgIdx, 1, 16); + break; + case ArmImmCheckType::ImmCheck1_32: + hasError |= SemaRef.BuiltinConstantArgRange(TheCall, ArgIdx, 1, 32); + break; + case ArmImmCheckType::ImmCheck1_64: + hasError |= SemaRef.BuiltinConstantArgRange(TheCall, ArgIdx, 1, 64); + break; + case ArmImmCheckType::ImmCheckLaneIndex: + hasError |= SemaRef.BuiltinConstantArgRange( + TheCall, ArgIdx, 0, + (64 << Type.isQuad()) / Type.getEltSizeInBits() - 1); ---------------- Lukacma wrote:
Shouldn't isQuad() be 0 for this case always ? https://github.com/llvm/llvm-project/pull/100278 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits