diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/i386/i386-builtins.cc | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr106219.C | 31 |
2 files changed, 33 insertions, 0 deletions
diff --git a/gcc/config/i386/i386-builtins.cc b/gcc/config/i386/i386-builtins.cc index 96743e6..fe7243c 100644 --- a/gcc/config/i386/i386-builtins.cc +++ b/gcc/config/i386/i386-builtins.cc @@ -385,6 +385,8 @@ ix86_add_new_builtins (HOST_WIDE_INT isa, HOST_WIDE_INT isa2) ix86_builtins[i] = decl; if (ix86_builtins_isa[i].const_p) TREE_READONLY (decl) = 1; + if (ix86_builtins_isa[i].pure_p) + DECL_PURE_P (decl) = 1; } } diff --git a/gcc/testsuite/g++.dg/pr106219.C b/gcc/testsuite/g++.dg/pr106219.C new file mode 100644 index 0000000..3cad150 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr106219.C @@ -0,0 +1,31 @@ +// { dg-do compile } +// { dg-options "-O3" } +// { dg-additional-options "-march=bdver2" { target x86_64-*-* } } + +int max(int __b) { + if (0 < __b) + return __b; + return 0; +} +struct Plane { + Plane(int, int); + int *Row(); +}; +#ifdef __x86_64__ +#pragma GCC target "sse2,ssse3,avx,avx2" +#endif +float *ConvolveXSampleAndTranspose_rowp; +int ConvolveXSampleAndTranspose_res, ConvolveXSampleAndTranspose_r; +void ConvolveXSampleAndTranspose() { + Plane out(0, ConvolveXSampleAndTranspose_res); + for (int y;;) { + float sum; + for (int i = ConvolveXSampleAndTranspose_r; i; ++i) + sum += i; + for (; ConvolveXSampleAndTranspose_r; ++ConvolveXSampleAndTranspose_r) + sum += + ConvolveXSampleAndTranspose_rowp[max(ConvolveXSampleAndTranspose_r)] * + ConvolveXSampleAndTranspose_r; + out.Row()[y] = sum; + } +} |