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