From: jakub Date: Wed, 14 Nov 2018 12:36:59 +0000 (+0000) Subject: PR rtl-optimization/87817 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8d5aee98ab10d847bc9b6354cd64f4b0f580c85d;p=thirdparty%2Fgcc.git PR rtl-optimization/87817 * config/i386/i386.c (ix86_fold_builtin): For _bzhi_u{32,64} if last argument has low 8 bits clear, fold to 0. * gcc.target/i386/bmi2-bzhi-3.c (main): Add a couple of new tests. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266140 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d77ae3666dbe..6f9b26e465c5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-11-14 Jakub Jelinek + + PR rtl-optimization/87817 + * config/i386/i386.c (ix86_fold_builtin): For _bzhi_u{32,64} if + last argument has low 8 bits clear, fold to 0. + 2018-11-14 Iain Sandoe * tree-vect-data-refs.c (vect_can_force_dr_alignment_p): Cast diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index b3e0807b894a..76a92b167f55 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -32671,6 +32671,8 @@ ix86_fold_builtin (tree fndecl, int n_args, unsigned int idx = tree_to_uhwi (args[1]) & 0xff; if (idx >= TYPE_PRECISION (TREE_TYPE (args[0]))) return args[0]; + if (idx == 0) + return build_int_cst (TREE_TYPE (TREE_TYPE (fndecl)), 0); if (!tree_fits_uhwi_p (args[0])) break; unsigned HOST_WIDE_INT res = tree_to_uhwi (args[0]); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 303bca4bd534..d8897fa5dbe5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-11-14 Jakub Jelinek + + PR rtl-optimization/87817 + * gcc.target/i386/bmi2-bzhi-3.c (main): Add a couple of new tests. + 2018-11-14 Wilco Dijkstra * gcc.target/aarch64/pr62178.c: Relax scan-assembler checks. diff --git a/gcc/testsuite/gcc.target/i386/bmi2-bzhi-3.c b/gcc/testsuite/gcc.target/i386/bmi2-bzhi-3.c index cc334eba1ba3..79905eba9b58 100644 --- a/gcc/testsuite/gcc.target/i386/bmi2-bzhi-3.c +++ b/gcc/testsuite/gcc.target/i386/bmi2-bzhi-3.c @@ -58,7 +58,11 @@ main () link_error (); if (_bzhi_u32 (c, 32) != c || _bzhi_u32 (c, 64) != c - || _bzhi_u32 (c, 255) != c) + || _bzhi_u32 (c, 255) != c + || _bzhi_u32 (c, 544) != c + || _bzhi_u32 (c, 0) != 0 + || _bzhi_u32 (c, 256) != 0 + || _bzhi_u32 (c, 1024) != 0) link_error (); #ifdef __x86_64__ if (f21 () != 0 || f22 (-1ULL) != 0 @@ -70,7 +74,11 @@ main () || f33 () != -1ULL || f34 (-1ULL) != -1ULL) link_error (); if (_bzhi_u64 (d, 64) != d - || _bzhi_u64 (d, 255) != d) + || _bzhi_u64 (d, 255) != d + || _bzhi_u64 (d, 576) != d + || _bzhi_u64 (d, 0) != 0 + || _bzhi_u64 (d, 256) != 0 + || _bzhi_u64 (d, 512) != 0) link_error (); #endif return 0;