]> granicus.if.org Git - clang/commit
add a special case for codegen that improves the case where we have
authorChris Lattner <sabre@nondot.org>
Wed, 4 Mar 2009 04:46:18 +0000 (04:46 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 4 Mar 2009 04:46:18 +0000 (04:46 +0000)
commit5512f28fa7b26e87e613dc1558b29b2a89647809
treede00b82ae97cd0b553496c55e68263d3467a2388
parent91ee0140ecb60b5c1402edc9e577257636c4ca60
add a special case for codegen that improves the case where we have
multiple sequential cases to a) not create tons of fall-through basic blocks
and b) not recurse deeply.  This fixes codegen on 100K deep cases, and improves
codegen on moderate cases from this:

        switch i32 %tmp, label %sw.epilog [
                i32 1000, label %sw.bb
                i32 1001, label %sw.bb1
                i32 1002, label %sw.bb2
                i32 1003, label %sw.bb3
                i32 1004, label %sw.bb4
...
sw.bb:          ; preds = %entry
        br label %sw.bb1

sw.bb1:         ; preds = %entry, %sw.bb
        br label %sw.bb2

sw.bb2:         ; preds = %entry, %sw.bb1
        br label %sw.bb3

sw.bb3:         ; preds = %entry, %sw.bb2
        br label %sw.bb4

to:

        switch i32 %tmp, label %sw.epilog [
                i32 1000, label %sw.bb
                i32 1001, label %sw.bb
                i32 1002, label %sw.bb
                i32 1003, label %sw.bb
                i32 1004, label %sw.bb
sw.bb:  ;; many preds

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66015 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGStmt.cpp