mirror of https://github.com/microsoft/clang.git
[PPC] Enhance altivec conversion function macros implementation.
Add checking for the second parameter of altivec conversion builtin to make sure it is compile-time constant int. This patch fixes PR33212: PPC vec_cst useless at -O0 Differential Revision: https://reviews.llvm.org/D34092 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@305401 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1bc0fd6576
commit
d3bd267b24
|
@ -51,10 +51,10 @@ BUILTIN(__builtin_altivec_vavguw, "V4UiV4UiV4Ui", "")
|
|||
|
||||
BUILTIN(__builtin_altivec_vrfip, "V4fV4f", "")
|
||||
|
||||
BUILTIN(__builtin_altivec_vcfsx, "V4fV4ii", "")
|
||||
BUILTIN(__builtin_altivec_vcfux, "V4fV4ii", "")
|
||||
BUILTIN(__builtin_altivec_vctsxs, "V4SiV4fi", "")
|
||||
BUILTIN(__builtin_altivec_vctuxs, "V4UiV4fi", "")
|
||||
BUILTIN(__builtin_altivec_vcfsx, "V4fV4iIi", "")
|
||||
BUILTIN(__builtin_altivec_vcfux, "V4fV4iIi", "")
|
||||
BUILTIN(__builtin_altivec_vctsxs, "V4SiV4fIi", "")
|
||||
BUILTIN(__builtin_altivec_vctuxs, "V4UiV4fIi", "")
|
||||
|
||||
BUILTIN(__builtin_altivec_dss, "vUi", "")
|
||||
BUILTIN(__builtin_altivec_dssall, "v", "")
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
#include <altivec.h>
|
||||
|
||||
extern vector signed int vsi;
|
||||
extern vector signed int vui;
|
||||
extern vector float vf;
|
||||
extern vector unsigned char vuc;
|
||||
|
||||
void testInsertWord(void) {
|
||||
|
@ -34,3 +36,34 @@ void testXXSLDWI(int index) {
|
|||
vec_xxsldwi(1, 2, 3); //expected-error {{first two arguments to '__builtin_vsx_xxsldwi' must be vectors}}
|
||||
vec_xxsldwi(vsi, vuc, 2); //expected-error {{first two arguments to '__builtin_vsx_xxsldwi' must have the same type}}
|
||||
}
|
||||
|
||||
void testCTF(int index) {
|
||||
vec_ctf(vsi, index); //expected-error {{argument to '__builtin_altivec_vcfsx' must be a constant integer}}
|
||||
vec_ctf(vui, index); //expected-error {{argument to '__builtin_altivec_vcfsx' must be a constant integer}}
|
||||
}
|
||||
|
||||
void testVCFSX(int index) {
|
||||
vec_vcfsx(vsi, index); //expected-error {{argument to '__builtin_altivec_vcfsx' must be a constant integer}}
|
||||
}
|
||||
|
||||
void testVCFUX(int index) {
|
||||
vec_vcfux(vui, index); //expected-error {{argument to '__builtin_altivec_vcfux' must be a constant integer}}
|
||||
}
|
||||
|
||||
void testCTS(int index) {
|
||||
vec_cts(vf, index); //expected-error {{argument to '__builtin_altivec_vctsxs' must be a constant integer}}
|
||||
|
||||
}
|
||||
|
||||
void testVCTSXS(int index) {
|
||||
vec_vctsxs(vf, index); //expected-error {{argument to '__builtin_altivec_vctsxs' must be a constant integer}}
|
||||
}
|
||||
|
||||
void testCTU(int index) {
|
||||
vec_ctu(vf, index); //expected-error {{argument to '__builtin_altivec_vctuxs' must be a constant integer}}
|
||||
|
||||
}
|
||||
|
||||
void testVCTUXS(int index) {
|
||||
vec_vctuxs(vf, index); //expected-error {{argument to '__builtin_altivec_vctuxs' must be a constant integer}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue