quinnp created this revision. Herald added subscribers: shchenz, kbarton, nemanjai. quinnp requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
This patch adds range checking for some Power10 altivec builtins. Range checking is done in SemaChecking. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D109780 Files: clang/lib/Sema/SemaChecking.cpp clang/test/CodeGen/builtins-ppc-p10vector-error.c Index: clang/test/CodeGen/builtins-ppc-p10vector-error.c =================================================================== --- clang/test/CodeGen/builtins-ppc-p10vector-error.c +++ clang/test/CodeGen/builtins-ppc-p10vector-error.c @@ -30,3 +30,19 @@ unsigned long long test_vec_cntm_ull(void) { return vec_cntm(vulla, 2); // expected-error 1+ {{argument value 2 is outside the valid range [0, 1]}} } + +vector unsigned char test_xxgenpcvbm(void) { + return vec_genpcvm(vuca, -1); // expected-error 1+ {{argument value -1 is outside the valid range [0, 3]}} +} + +vector unsigned short test_xxgenpcvhm(void) { + return vec_genpcvm(vusa, -1); // expected-error 1+ {{argument value -1 is outside the valid range [0, 3]}} +} + +vector unsigned int test_xxgenpcvwm(void) { + return vec_genpcvm(vuia, 4); // expected-error 1+ {{argument value 4 is outside the valid range [0, 3]}} +} + +vector unsigned long long test_xxgenpcvdm(void) { + return vec_genpcvm(vulla, 4); // expected-error 1+ {{argument value 4 is outside the valid range [0, 3]}} +} Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -3478,6 +3478,11 @@ case PPC::BI__builtin_altivec_vcntmbw: case PPC::BI__builtin_altivec_vcntmbd: return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1); + case PPC::BI__builtin_vsx_xxgenpcvbm: + case PPC::BI__builtin_vsx_xxgenpcvhm: + case PPC::BI__builtin_vsx_xxgenpcvwm: + case PPC::BI__builtin_vsx_xxgenpcvdm: + return SemaBuiltinConstantArgRange(TheCall, 1, 0, 3); #define CUSTOM_BUILTIN(Name, Intr, Types, Acc) \ case PPC::BI__builtin_##Name: \ return SemaBuiltinPPCMMACall(TheCall, Types);
Index: clang/test/CodeGen/builtins-ppc-p10vector-error.c =================================================================== --- clang/test/CodeGen/builtins-ppc-p10vector-error.c +++ clang/test/CodeGen/builtins-ppc-p10vector-error.c @@ -30,3 +30,19 @@ unsigned long long test_vec_cntm_ull(void) { return vec_cntm(vulla, 2); // expected-error 1+ {{argument value 2 is outside the valid range [0, 1]}} } + +vector unsigned char test_xxgenpcvbm(void) { + return vec_genpcvm(vuca, -1); // expected-error 1+ {{argument value -1 is outside the valid range [0, 3]}} +} + +vector unsigned short test_xxgenpcvhm(void) { + return vec_genpcvm(vusa, -1); // expected-error 1+ {{argument value -1 is outside the valid range [0, 3]}} +} + +vector unsigned int test_xxgenpcvwm(void) { + return vec_genpcvm(vuia, 4); // expected-error 1+ {{argument value 4 is outside the valid range [0, 3]}} +} + +vector unsigned long long test_xxgenpcvdm(void) { + return vec_genpcvm(vulla, 4); // expected-error 1+ {{argument value 4 is outside the valid range [0, 3]}} +} Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -3478,6 +3478,11 @@ case PPC::BI__builtin_altivec_vcntmbw: case PPC::BI__builtin_altivec_vcntmbd: return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1); + case PPC::BI__builtin_vsx_xxgenpcvbm: + case PPC::BI__builtin_vsx_xxgenpcvhm: + case PPC::BI__builtin_vsx_xxgenpcvwm: + case PPC::BI__builtin_vsx_xxgenpcvdm: + return SemaBuiltinConstantArgRange(TheCall, 1, 0, 3); #define CUSTOM_BUILTIN(Name, Intr, Types, Acc) \ case PPC::BI__builtin_##Name: \ return SemaBuiltinPPCMMACall(TheCall, Types);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits