re PR target/83554 (ICE: in ix86_mitigate_rop, at config/i386/i386.c:41274 with ...
authorJakub Jelinek <jakub@redhat.com>
Thu, 4 Jan 2018 21:54:23 +0000 (22:54 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 4 Jan 2018 21:54:23 +0000 (22:54 +0100)
PR target/83554
* config/i386/i386.md (*<rotate_insn>hi3_1 splitter): Use
QIreg_operand instead of register_operand predicate.
* config/i386/i386.c (ix86_rop_should_change_byte_p,
set_rop_modrm_reg_bits, ix86_mitigate_rop): Use -mmitigate-rop in
comments instead of -fmitigate[-_]rop.

* gcc.target/i386/pr83554.c: New test.

Co-Authored-By: Uros Bizjak <ubizjak@gmail.com>
From-SVN: r256268

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr83554.c [new file with mode: 0644]

index 0692c62a98438851695f5e94ba56083a764600dc..58ec5052483efbcf579eda8d80c7fc3d2d94d6d9 100644 (file)
@@ -1,3 +1,13 @@
+2018-01-04  Jakub Jelinek  <jakub@redhat.com>
+           Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/83554
+       * config/i386/i386.md (*<rotate_insn>hi3_1 splitter): Use
+       QIreg_operand instead of register_operand predicate.
+       * config/i386/i386.c (ix86_rop_should_change_byte_p,
+       set_rop_modrm_reg_bits, ix86_mitigate_rop): Use -mmitigate-rop in
+       comments instead of -fmitigate[-_]rop.
+
 2018-01-04  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        PR bootstrap/81926
index c363de93e0238980213b2bbe443d1327b639d589..9956d56f65da7475f428d5680d42eaf9ecf4356f 100644 (file)
@@ -3089,7 +3089,7 @@ ix86_debug_options (void)
 }
 
 /* Return true if T is one of the bytes we should avoid with
-   -fmitigate-rop.  */
+   -mmitigate-rop.  */
 
 static bool
 ix86_rop_should_change_byte_p (int t)
@@ -41175,7 +41175,7 @@ ix86_seh_fixup_eh_fallthru (void)
 /* Given a register number BASE, the lowest of a group of registers, update
    regsets IN and OUT with the registers that should be avoided in input
    and output operands respectively when trying to avoid generating a modr/m
-   byte for -fmitigate-rop.  */
+   byte for -mmitigate-rop.  */
 
 static void
 set_rop_modrm_reg_bits (int base, HARD_REG_SET &in, HARD_REG_SET &out)
@@ -41186,7 +41186,7 @@ set_rop_modrm_reg_bits (int base, HARD_REG_SET &in, HARD_REG_SET &out)
   SET_HARD_REG_BIT (in, base + 3);
 }
 
-/* Called if -fmitigate_rop is in effect.  Try to rewrite instructions so
+/* Called if -mmitigate-rop is in effect.  Try to rewrite instructions so
    that certain encodings of modr/m bytes do not occur.  */
 static void
 ix86_mitigate_rop (void)
index 59118525ae78a40439d6ffa2b9a28f7f34e76732..3f58780640770a32bdbffe67ab67bab179c1ba35 100644 (file)
    (set_attr "mode" "QI")])
 
 (define_split
- [(set (match_operand:HI 0 "register_operand")
+ [(set (match_operand:HI 0 "QIreg_operand")
        (any_rotate:HI (match_dup 0) (const_int 8)))
   (clobber (reg:CC FLAGS_REG))]
  "reload_completed
index f7d629e7f4204b81feb7fc082bc7c1d58be78471..90f4d5740c54fee026238e19862754704d4cf611 100644 (file)
@@ -1,5 +1,8 @@
 2018-01-04  Jakub Jelinek  <jakub@redhat.com>
 
+       PR target/83554
+       * gcc.target/i386/pr83554.c: New test.
+
        PR ipa/82352
        * g++.dg/ipa/pr82352.C (size_t): Define to __SIZE_TYPE__ instead of
        long unsigned int.
diff --git a/gcc/testsuite/gcc.target/i386/pr83554.c b/gcc/testsuite/gcc.target/i386/pr83554.c
new file mode 100644 (file)
index 0000000..63ab366
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR target/83554 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-Os -mmitigate-rop" } */
+
+unsigned a;
+unsigned __int128
+foo (unsigned char c, unsigned short d, unsigned e, unsigned long f,
+     unsigned __int128 g, unsigned h, unsigned short i, unsigned long j)
+{
+  j /= (unsigned)-2;
+  h += h &= c == c;
+  h -= g;
+  i = i >> 8 | i << 8;
+  return c + d + e + f + g + h + i + j + a;
+}