This patch adds 2 testcases.  One tests that GCC is able to create
bit-test clusters of size 64.  The other one contains two switches which
GCC wouldn't completely cover with bit-test clusters before the changes
from this patch set.

gcc/testsuite/ChangeLog:

        * gcc.dg/tree-ssa/switch-5.c: New test.
        * gcc.dg/tree-ssa/switch-6.c: New test.

Signed-off-by: Filip Kastl <fka...@suse.cz>
---
 gcc/testsuite/gcc.dg/tree-ssa/switch-5.c | 60 ++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/tree-ssa/switch-6.c | 51 ++++++++++++++++++++
 2 files changed, 111 insertions(+)
 create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/switch-5.c
 create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/switch-6.c

diff --git a/gcc/testsuite/gcc.dg/tree-ssa/switch-5.c 
b/gcc/testsuite/gcc.dg/tree-ssa/switch-5.c
new file mode 100644
index 00000000000..b05742cf153
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/switch-5.c
@@ -0,0 +1,60 @@
+/* { dg-do compile { target { { x86_64-*-* aarch64-*-* ia64-*-* powerpc64-*-* 
} && lp64 } } } */
+/* { dg-options "-O2 -fdump-tree-switchlower1" } */
+
+int f0();    
+int f1();    
+int f2();    
+int f3();    
+int f4();    
+     
+int foo(int a)    
+{    
+    switch (a)    
+    {    
+        case 0:    
+        case 2:    
+        case 4:    
+        case 6:    
+            return f0();    
+        case 8:    
+            return f1();    
+        case 10:    
+        case 14:    
+        case 16:    
+        case 18:    
+            return f2();    
+        case 12:    
+            return f3();    
+        case 20:    
+            return f4();    
+    }    
+    return -1;    
+}
+
+/* { dg-final { scan-tree-dump ";; GIMPLE switch case clusters: BT:0-8 
BT:10-20" "switchlower1" } } */
+
+int bar(int a)    
+{    
+    switch (a)    
+    {    
+        case 20:    
+        case 18:    
+        case 16:    
+        case 14:    
+            return f0();    
+        case 12:    
+            return f1();    
+        case 10:    
+        case 6:    
+        case 4:    
+        case 2:    
+            return f2();    
+        case 8:    
+            return f3();    
+        case 0:    
+            return f4();    
+    }    
+    return -1;    
+}
+
+/* { dg-final { scan-tree-dump ";; GIMPLE switch case clusters: BT:0-10 
BT:12-20" "switchlower1" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/switch-6.c 
b/gcc/testsuite/gcc.dg/tree-ssa/switch-6.c
new file mode 100644
index 00000000000..bbbc87462c4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/switch-6.c
@@ -0,0 +1,51 @@
+/* { dg-do compile { target { { x86_64-*-* aarch64-*-* ia64-*-* powerpc64-*-* 
} && lp64 } } } */
+/* { dg-options "-O2 -fdump-tree-switchlower1 -fno-jump-tables" } */
+
+/* Test that bit-test switch lowering can create cluster of size 64 (there was
+   an of-by-one error causing it to only do 63 before).  */
+
+int f();    
+
+int foo(int a)
+{
+    switch (a)
+    {
+        case 0:
+        case 3:
+        case 5:
+        case 7:
+        case 9:
+        case 11:
+        case 13:
+        case 15:
+        case 17:
+        case 19:
+        case 21:
+        case 23:
+        case 25:
+        case 27:
+        case 29:
+        case 31:
+        case 33:
+        case 35:
+        case 37:
+        case 39:
+        case 41:
+        case 43:
+        case 45:
+        case 47:
+        case 49:
+        case 51:
+        case 53:
+        case 55:
+        case 57:
+        case 59:
+        case 61:
+        case 63:
+            return f();
+        default:
+            return -1;
+    }
+}
+
+/* { dg-final { scan-tree-dump ";; GIMPLE switch case clusters: BT:0-63" 
"switchlower1" } } */
-- 
2.48.1

Reply via email to