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

Reply via email to