[PATCH] D66699: [PowerPC][Altivec] Fix constant argument for vec_dss
This revision was automatically updated to reflect the committed changes. jsji marked an inline comment as done. Closed by commit rL370902: [PowerPC][Altivec] Fix constant argument for vec_dss (authored by jsji, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits. Changed prior to commit: https://reviews.llvm.org/D66699?vs=218479=218684#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66699/new/ https://reviews.llvm.org/D66699 Files: cfe/trunk/include/clang/Basic/BuiltinsPPC.def cfe/trunk/lib/Headers/altivec.h cfe/trunk/lib/Sema/SemaChecking.cpp cfe/trunk/test/CodeGen/altivec-dss.c cfe/trunk/test/CodeGen/builtins-ppc-error.c Index: cfe/trunk/test/CodeGen/builtins-ppc-error.c === --- cfe/trunk/test/CodeGen/builtins-ppc-error.c +++ cfe/trunk/test/CodeGen/builtins-ppc-error.c @@ -73,3 +73,8 @@ __builtin_unpack_vector_int128(vsllli, index); //expected-error {{argument to '__builtin_unpack_vector_int128' must be a constant integer}} __builtin_unpack_vector_int128(vsllli, 5); //expected-error {{argument value 5 is outside the valid range [0, 1]}} } + +void testDSS(int index) { + vec_dss(index); //expected-error {{argument to '__builtin_altivec_dss' must be a constant integer}} + vec_dss(5); //expected-error {{argument value 5 is outside the valid range [0, 3]}} +} Index: cfe/trunk/test/CodeGen/altivec-dss.c === --- cfe/trunk/test/CodeGen/altivec-dss.c +++ cfe/trunk/test/CodeGen/altivec-dss.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple powerpc-linux-gnu -S -O0 -o - %s -target-feature +altivec | FileCheck %s + +// REQUIRES: powerpc-registered-target + +#include + +// CHECK-LABEL: test1 +// CHECK: dss +void test1() { + vec_dss(1); +} Index: cfe/trunk/lib/Sema/SemaChecking.cpp === --- cfe/trunk/lib/Sema/SemaChecking.cpp +++ cfe/trunk/lib/Sema/SemaChecking.cpp @@ -3220,6 +3220,8 @@ case PPC::BI__builtin_altivec_crypto_vshasigmad: return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || SemaBuiltinConstantArgRange(TheCall, 2, 0, 15); + case PPC::BI__builtin_altivec_dss: +return SemaBuiltinConstantArgRange(TheCall, 0, 0, 3); case PPC::BI__builtin_tbegin: case PPC::BI__builtin_tend: i = 0; l = 0; u = 1; break; case PPC::BI__builtin_tsr: i = 0; l = 0; u = 7; break; Index: cfe/trunk/lib/Headers/altivec.h === --- cfe/trunk/lib/Headers/altivec.h +++ cfe/trunk/lib/Headers/altivec.h @@ -3286,9 +3286,7 @@ /* vec_dss */ -static __inline__ void __attribute__((__always_inline__)) vec_dss(int __a) { - __builtin_altivec_dss(__a); -} +#define vec_dss __builtin_altivec_dss /* vec_dssall */ Index: cfe/trunk/include/clang/Basic/BuiltinsPPC.def === --- cfe/trunk/include/clang/Basic/BuiltinsPPC.def +++ cfe/trunk/include/clang/Basic/BuiltinsPPC.def @@ -55,7 +55,7 @@ BUILTIN(__builtin_altivec_vctsxs, "V4SiV4fIi", "") BUILTIN(__builtin_altivec_vctuxs, "V4UiV4fIi", "") -BUILTIN(__builtin_altivec_dss, "vUi", "") +BUILTIN(__builtin_altivec_dss, "vUIi", "") BUILTIN(__builtin_altivec_dssall, "v", "") BUILTIN(__builtin_altivec_dst, "vvC*iUi", "") BUILTIN(__builtin_altivec_dstt, "vvC*iUi", "") Index: cfe/trunk/test/CodeGen/builtins-ppc-error.c === --- cfe/trunk/test/CodeGen/builtins-ppc-error.c +++ cfe/trunk/test/CodeGen/builtins-ppc-error.c @@ -73,3 +73,8 @@ __builtin_unpack_vector_int128(vsllli, index); //expected-error {{argument to '__builtin_unpack_vector_int128' must be a constant integer}} __builtin_unpack_vector_int128(vsllli, 5); //expected-error {{argument value 5 is outside the valid range [0, 1]}} } + +void testDSS(int index) { + vec_dss(index); //expected-error {{argument to '__builtin_altivec_dss' must be a constant integer}} + vec_dss(5); //expected-error {{argument value 5 is outside the valid range [0, 3]}} +} Index: cfe/trunk/test/CodeGen/altivec-dss.c === --- cfe/trunk/test/CodeGen/altivec-dss.c +++ cfe/trunk/test/CodeGen/altivec-dss.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple powerpc-linux-gnu -S -O0 -o - %s -target-feature +altivec | FileCheck %s + +// REQUIRES: powerpc-registered-target + +#include + +// CHECK-LABEL: test1 +// CHECK: dss +void test1() { + vec_dss(1); +} Index: cfe/trunk/lib/Sema/SemaChecking.cpp === --- cfe/trunk/lib/Sema/SemaChecking.cpp +++ cfe/trunk/lib/Sema/SemaChecking.cpp @@ -3220,6 +3220,8 @@ case PPC::BI__builtin_altivec_crypto_vshasigmad: return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) ||
[PATCH] D66699: [PowerPC][Altivec] Fix constant argument for vec_dss
jsji marked 2 inline comments as done. jsji added inline comments. Comment at: clang/test/CodeGen/builtins-ppc-error.c:78 +void testDSS(int index) { + vec_dss(index); //expected-error {{argument to '__builtin_altivec_dss' must be a constant integer}} + wuzish wrote: > It would be better if add range constraint check at > Sema::CheckPPCBuiltinFunctionCall Good point, Done. Thanks. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66699/new/ https://reviews.llvm.org/D66699 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D66699: [PowerPC][Altivec] Fix constant argument for vec_dss
jsji updated this revision to Diff 218479. jsji added a comment. Add range check and test. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66699/new/ https://reviews.llvm.org/D66699 Files: clang/include/clang/Basic/BuiltinsPPC.def clang/lib/Headers/altivec.h clang/lib/Sema/SemaChecking.cpp clang/test/CodeGen/altivec-dss.c clang/test/CodeGen/builtins-ppc-error.c Index: clang/test/CodeGen/builtins-ppc-error.c === --- clang/test/CodeGen/builtins-ppc-error.c +++ clang/test/CodeGen/builtins-ppc-error.c @@ -73,3 +73,8 @@ __builtin_unpack_vector_int128(vsllli, index); //expected-error {{argument to '__builtin_unpack_vector_int128' must be a constant integer}} __builtin_unpack_vector_int128(vsllli, 5); //expected-error {{argument value 5 is outside the valid range [0, 1]}} } + +void testDSS(int index) { + vec_dss(index); //expected-error {{argument to '__builtin_altivec_dss' must be a constant integer}} + vec_dss(5); //expected-error {{argument value 5 is outside the valid range [0, 3]}} +} Index: clang/test/CodeGen/altivec-dss.c === --- /dev/null +++ clang/test/CodeGen/altivec-dss.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple powerpc-linux-gnu -S -O0 -o - %s -target-feature +altivec | FileCheck %s + +// REQUIRES: powerpc-registered-target + +#include + +// CHECK-LABEL: test1 +// CHECK: dss +void test1() { + vec_dss(1); +} Index: clang/lib/Sema/SemaChecking.cpp === --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -3220,6 +3220,8 @@ case PPC::BI__builtin_altivec_crypto_vshasigmad: return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || SemaBuiltinConstantArgRange(TheCall, 2, 0, 15); + case PPC::BI__builtin_altivec_dss: +return SemaBuiltinConstantArgRange(TheCall, 0, 0, 3); case PPC::BI__builtin_tbegin: case PPC::BI__builtin_tend: i = 0; l = 0; u = 1; break; case PPC::BI__builtin_tsr: i = 0; l = 0; u = 7; break; Index: clang/lib/Headers/altivec.h === --- clang/lib/Headers/altivec.h +++ clang/lib/Headers/altivec.h @@ -3286,9 +3286,7 @@ /* vec_dss */ -static __inline__ void __attribute__((__always_inline__)) vec_dss(int __a) { - __builtin_altivec_dss(__a); -} +#define vec_dss __builtin_altivec_dss /* vec_dssall */ Index: clang/include/clang/Basic/BuiltinsPPC.def === --- clang/include/clang/Basic/BuiltinsPPC.def +++ clang/include/clang/Basic/BuiltinsPPC.def @@ -55,7 +55,7 @@ BUILTIN(__builtin_altivec_vctsxs, "V4SiV4fIi", "") BUILTIN(__builtin_altivec_vctuxs, "V4UiV4fIi", "") -BUILTIN(__builtin_altivec_dss, "vUi", "") +BUILTIN(__builtin_altivec_dss, "vUIi", "") BUILTIN(__builtin_altivec_dssall, "v", "") BUILTIN(__builtin_altivec_dst, "vvC*iUi", "") BUILTIN(__builtin_altivec_dstt, "vvC*iUi", "") Index: clang/test/CodeGen/builtins-ppc-error.c === --- clang/test/CodeGen/builtins-ppc-error.c +++ clang/test/CodeGen/builtins-ppc-error.c @@ -73,3 +73,8 @@ __builtin_unpack_vector_int128(vsllli, index); //expected-error {{argument to '__builtin_unpack_vector_int128' must be a constant integer}} __builtin_unpack_vector_int128(vsllli, 5); //expected-error {{argument value 5 is outside the valid range [0, 1]}} } + +void testDSS(int index) { + vec_dss(index); //expected-error {{argument to '__builtin_altivec_dss' must be a constant integer}} + vec_dss(5); //expected-error {{argument value 5 is outside the valid range [0, 3]}} +} Index: clang/test/CodeGen/altivec-dss.c === --- /dev/null +++ clang/test/CodeGen/altivec-dss.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple powerpc-linux-gnu -S -O0 -o - %s -target-feature +altivec | FileCheck %s + +// REQUIRES: powerpc-registered-target + +#include + +// CHECK-LABEL: test1 +// CHECK: dss +void test1() { + vec_dss(1); +} Index: clang/lib/Sema/SemaChecking.cpp === --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -3220,6 +3220,8 @@ case PPC::BI__builtin_altivec_crypto_vshasigmad: return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || SemaBuiltinConstantArgRange(TheCall, 2, 0, 15); + case PPC::BI__builtin_altivec_dss: +return SemaBuiltinConstantArgRange(TheCall, 0, 0, 3); case PPC::BI__builtin_tbegin: case PPC::BI__builtin_tend: i = 0; l = 0; u = 1; break; case PPC::BI__builtin_tsr: i = 0; l = 0; u = 7; break; Index: clang/lib/Headers/altivec.h === --- clang/lib/Headers/altivec.h +++
[PATCH] D66699: [PowerPC][Altivec] Fix constant argument for vec_dss
wuzish added inline comments. Comment at: clang/test/CodeGen/builtins-ppc-error.c:78 +void testDSS(int index) { + vec_dss(index); //expected-error {{argument to '__builtin_altivec_dss' must be a constant integer}} + It would be better if add range constraint check at Sema::CheckPPCBuiltinFunctionCall Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66699/new/ https://reviews.llvm.org/D66699 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D66699: [PowerPC][Altivec] Fix constant argument for vec_dss
jsji added a comment. Ping.. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66699/new/ https://reviews.llvm.org/D66699 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D66699: [PowerPC][Altivec] Fix constant argument for vec_dss
jsji created this revision. jsji added reviewers: nemanjai, hfinkel. Herald added subscribers: cfe-commits, shchenz, MaskRay, kbarton. Herald added a project: clang. jsji added a reviewer: PowerPC. Herald added a subscriber: wuzish. This is similar to vec_ct* in https://reviews.llvm.org/rL304205. The argument must be a constant, otherwise instruction selection will fail. always_inline is not enough for isel to always fold everything away at -O0. The fix is to turn the function into macros in altivec.h. Fixes https://bugs.llvm.org/show_bug.cgi?id=43072 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D66699 Files: clang/include/clang/Basic/BuiltinsPPC.def clang/lib/Headers/altivec.h clang/test/CodeGen/altivec-dss.c clang/test/CodeGen/builtins-ppc-error.c Index: clang/test/CodeGen/builtins-ppc-error.c === --- clang/test/CodeGen/builtins-ppc-error.c +++ clang/test/CodeGen/builtins-ppc-error.c @@ -73,3 +73,8 @@ __builtin_unpack_vector_int128(vsllli, index); //expected-error {{argument to '__builtin_unpack_vector_int128' must be a constant integer}} __builtin_unpack_vector_int128(vsllli, 5); //expected-error {{argument value 5 is outside the valid range [0, 1]}} } + +void testDSS(int index) { + vec_dss(index); //expected-error {{argument to '__builtin_altivec_dss' must be a constant integer}} + +} Index: clang/test/CodeGen/altivec-dss.c === --- /dev/null +++ clang/test/CodeGen/altivec-dss.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple powerpc-linux-gnu -S -O0 -o - %s -target-feature +altivec | FileCheck %s + +// REQUIRES: powerpc-registered-target + +#include + +// CHECK-LABEL: test1 +// CHECK: dss +void test1() { + vec_dss(1); +} Index: clang/lib/Headers/altivec.h === --- clang/lib/Headers/altivec.h +++ clang/lib/Headers/altivec.h @@ -3286,9 +3286,7 @@ /* vec_dss */ -static __inline__ void __attribute__((__always_inline__)) vec_dss(int __a) { - __builtin_altivec_dss(__a); -} +#define vec_dss __builtin_altivec_dss /* vec_dssall */ Index: clang/include/clang/Basic/BuiltinsPPC.def === --- clang/include/clang/Basic/BuiltinsPPC.def +++ clang/include/clang/Basic/BuiltinsPPC.def @@ -55,7 +55,7 @@ BUILTIN(__builtin_altivec_vctsxs, "V4SiV4fIi", "") BUILTIN(__builtin_altivec_vctuxs, "V4UiV4fIi", "") -BUILTIN(__builtin_altivec_dss, "vUi", "") +BUILTIN(__builtin_altivec_dss, "vUIi", "") BUILTIN(__builtin_altivec_dssall, "v", "") BUILTIN(__builtin_altivec_dst, "vvC*iUi", "") BUILTIN(__builtin_altivec_dstt, "vvC*iUi", "") Index: clang/test/CodeGen/builtins-ppc-error.c === --- clang/test/CodeGen/builtins-ppc-error.c +++ clang/test/CodeGen/builtins-ppc-error.c @@ -73,3 +73,8 @@ __builtin_unpack_vector_int128(vsllli, index); //expected-error {{argument to '__builtin_unpack_vector_int128' must be a constant integer}} __builtin_unpack_vector_int128(vsllli, 5); //expected-error {{argument value 5 is outside the valid range [0, 1]}} } + +void testDSS(int index) { + vec_dss(index); //expected-error {{argument to '__builtin_altivec_dss' must be a constant integer}} + +} Index: clang/test/CodeGen/altivec-dss.c === --- /dev/null +++ clang/test/CodeGen/altivec-dss.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple powerpc-linux-gnu -S -O0 -o - %s -target-feature +altivec | FileCheck %s + +// REQUIRES: powerpc-registered-target + +#include + +// CHECK-LABEL: test1 +// CHECK: dss +void test1() { + vec_dss(1); +} Index: clang/lib/Headers/altivec.h === --- clang/lib/Headers/altivec.h +++ clang/lib/Headers/altivec.h @@ -3286,9 +3286,7 @@ /* vec_dss */ -static __inline__ void __attribute__((__always_inline__)) vec_dss(int __a) { - __builtin_altivec_dss(__a); -} +#define vec_dss __builtin_altivec_dss /* vec_dssall */ Index: clang/include/clang/Basic/BuiltinsPPC.def === --- clang/include/clang/Basic/BuiltinsPPC.def +++ clang/include/clang/Basic/BuiltinsPPC.def @@ -55,7 +55,7 @@ BUILTIN(__builtin_altivec_vctsxs, "V4SiV4fIi", "") BUILTIN(__builtin_altivec_vctuxs, "V4UiV4fIi", "") -BUILTIN(__builtin_altivec_dss, "vUi", "") +BUILTIN(__builtin_altivec_dss, "vUIi", "") BUILTIN(__builtin_altivec_dssall, "v", "") BUILTIN(__builtin_altivec_dst, "vvC*iUi", "") BUILTIN(__builtin_altivec_dstt, "vvC*iUi", "") ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits