]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Backport r269492
authorMartin Liska <mliska@suse.cz>
Thu, 11 Apr 2019 08:59:48 +0000 (10:59 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 11 Apr 2019 08:59:48 +0000 (08:59 +0000)
2019-04-11  Martin Liska  <mliska@suse.cz>

Backport from mainline
2019-03-08  Martin Liska  <mliska@suse.cz>

PR target/86952
* config/i386/i386.c (ix86_option_override_internal): Disable
jump tables when retpolines are used.
2019-04-11  Martin Liska  <mliska@suse.cz>

Backport from mainline
2019-03-08  Martin Liska  <mliska@suse.cz>

PR target/86952
* gcc.target/i386/pr86952.c: New test.
* gcc.target/i386/indirect-thunk-7.c: Use jump tables to match
scanned pattern.
* gcc.target/i386/indirect-thunk-inline-7.c: Likewise.

From-SVN: r270277

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
gcc/testsuite/gcc.target/i386/pr86952.c [new file with mode: 0644]

index 00910dcf37550d4b617eb3eeeed2d21a635e7bd7..c0b8b5bc99986f4d51e60a787df93094da67d8df 100644 (file)
@@ -1,3 +1,12 @@
+2019-04-11  Martin Liska  <mliska@suse.cz>
+
+       Backport from mainline
+       2019-03-08  Martin Liska  <mliska@suse.cz>
+
+       PR target/86952
+       * config/i386/i386.c (ix86_option_override_internal): Disable
+       jump tables when retpolines are used.
+
 2019-04-10  Matthew Malcomson  <matthew.malcomson@arm.com>
 
        PR target/90024
index 18dce38640b517ab582638f15df05ef529454458..96bdb3a78ba93ed4cd943b63d730c771fe2f9b80 100644 (file)
@@ -6282,6 +6282,12 @@ ix86_option_override_internal (bool main_args_p,
     target_option_default_node = target_option_current_node
       = build_target_option_node (opts);
 
+  /* PR86952: jump table usage with retpolines is slow.
+     The PR provides some numbers about the slowness.  */
+  if (ix86_indirect_branch != indirect_branch_keep
+      && !opts_set->x_flag_jump_tables)
+    opts->x_flag_jump_tables = 0;
+
   return true;
 }
 
index d235ad826e6bdbd3794b116b320e834aa541a288..3e4395151c1ddbb5a56d43c29a1b764c2566d427 100644 (file)
@@ -1,3 +1,14 @@
+2019-04-11  Martin Liska  <mliska@suse.cz>
+
+       Backport from mainline
+       2019-03-08  Martin Liska  <mliska@suse.cz>
+
+       PR target/86952
+       * gcc.target/i386/pr86952.c: New test.
+       * gcc.target/i386/indirect-thunk-7.c: Use jump tables to match
+       scanned pattern.
+       * gcc.target/i386/indirect-thunk-inline-7.c: Likewise.
+
 2019-04-10  Harald Anlauf  <anlauf@gmx.de>
 
        Backport from trunk
index 3c72036dbaf43a4309d73eda3e03b8ce40cfc69d..53868f46558d8d760bcec686c20a659a10248027 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic -fjump-tables" } */
 
 void func0 (void);
 void func1 (void);
index 2b9a33e93dca4e3443d3aeab3880c43caeac16d7..bc185fe98afee6ad28c2c651047a19966801c4dd 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */
+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic -fjump-tables" } */
 
 void func0 (void);
 void func1 (void);
index ea009245a58f79a7e565d27b4c4275355732dc4b..e6f064959a1cef2d9cb0a4ba97f0b2422d1f074f 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */
+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic -fjump-tables" } */
 
 void func0 (void);
 void func1 (void);
diff --git a/gcc/testsuite/gcc.target/i386/pr86952.c b/gcc/testsuite/gcc.target/i386/pr86952.c
new file mode 100644 (file)
index 0000000..004e167
--- /dev/null
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mindirect-branch=thunk" } */
+
+int global;
+
+int
+foo (int x)
+{
+  switch (x & 7)
+    {
+      case 0: ; return 1722;
+      case 1: global += 1; return 1060;
+      case 2: ; return 1990;
+      case 3: ; return 1242;
+      case 4: ; return 1466;
+      case 5: ; return 894;
+      case 6: ; return 570;
+      case 7: ; return 572;
+      default: return 0;
+    }
+}
+
+/* { dg-final { scan-assembler-not "jmp\[ \t\]\\*" } } */