From: Uros Bizjak Date: Fri, 11 Nov 2016 17:04:18 +0000 (+0100) Subject: re PR target/78310 (ICE: insn does not satisfy its constraints: {*bmi2_rorxdi3_1... X-Git-Tag: releases/gcc-5.5.0~709 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7940b0c52426b55105b93cf8be3c1f47235f4d89;p=thirdparty%2Fgcc.git re PR target/78310 (ICE: insn does not satisfy its constraints: {*bmi2_rorxdi3_1} with -mbmi2) PR target/78310 * config/i386/i386.md (rotate to rotatex splitter): Avoid overflow when calculating operand 2. (rotate to rotatex zext splitter): Ditto. testsuite/ChangeLog: PR target/78310 * gcc.target/i386/pr78310.c: New test. From-SVN: r242124 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1981638eea57..63509bf7f162 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-11-11 Uros Bizjak + + PR target/78310 + * config/i386/i386.md (rotate to rotatex splitter): Avoid overflow + when calculating operand 2. + (rotate to rotatex zext splitter): Ditto. + 2016-11-09 Uros Bizjak PR target/78262 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 0807fa8db0d9..c0c64ee2e71f 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -10480,8 +10480,9 @@ [(set (match_dup 0) (rotatert:SWI48 (match_dup 1) (match_dup 2)))] { - operands[2] - = GEN_INT (GET_MODE_BITSIZE (mode) - INTVAL (operands[2])); + int bitsize = GET_MODE_BITSIZE (mode); + + operands[2] = GEN_INT ((bitsize - INTVAL (operands[2])) % bitsize); }) (define_split @@ -10547,8 +10548,9 @@ [(set (match_dup 0) (zero_extend:DI (rotatert:SI (match_dup 1) (match_dup 2))))] { - operands[2] - = GEN_INT (GET_MODE_BITSIZE (SImode) - INTVAL (operands[2])); + int bitsize = GET_MODE_BITSIZE (SImode); + + operands[2] = GEN_INT ((bitsize - INTVAL (operands[2])) % bitsize); }) (define_split diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bb5e61c419a4..51a798f3c652 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-11-11 Uros Bizjak + + PR target/78310 + * gcc.target/i386/pr78310.c: New test. + 2016-11-09 Uros Bizjak PR target/78262 diff --git a/gcc/testsuite/gcc.target/i386/pr78310.c b/gcc/testsuite/gcc.target/i386/pr78310.c new file mode 100644 index 000000000000..dfeae4c827cf --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78310.c @@ -0,0 +1,15 @@ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O -mbmi2" } */ + +unsigned long long a; +int b; + +int +fn1(int p1) +{ + p1 &= 1; + p1 &= (short)~p1; + b = a; + a = a << p1 | a >> (64 - p1); + return p1 + 1 + a; +}