http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45830
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> 2010-11-19 23:49:03 UTC --- Author: jakub Date: Fri Nov 19 23:48:57 2010 New Revision: 166966 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=166966 Log: PR tree-optimization/45830 * stmt.c (expand_switch_using_bit_tests_p): New function. (expand_case): Use it. * tree.h (expand_switch_using_bit_tests_p): New prototype. * tree-switch-conversion.c (struct switch_conv_info): Add bit_test_uniq, bit_test_count and bit_test_bb fields. (check_range): Fix a comment. (check_process_case): Compute bit_test_uniq and bit_test_count. (create_temp_arrays): Use XCNEWVEC, merge 3 arrays into one allocation. (free_temp_arrays): Use XDELETEVEC, adjust for the 3 arrays merging. (constructor_contains_same_values_p): Use FOR_EACH_VEC_ELT. (array_value_type): New function. (build_one_array): Use it, if it returned different type, fold_convert all constructor fields and convert back to the wider type in the generated code. (process_switch): Initialize bit_test_uniq, bit_test_count and bit_test_bb fields. Don't optimize if expand_switch_using_bit_tests_p returned true. * gcc.target/i386/pr45830.c: New test. * gcc.c-torture/execute/pr45830.c: New test. Added: trunk/gcc/testsuite/gcc.c-torture/execute/pr45830.c trunk/gcc/testsuite/gcc.target/i386/pr45830.c Modified: trunk/gcc/ChangeLog trunk/gcc/stmt.c trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-switch-conversion.c trunk/gcc/tree.h