diff options
author | Chris Lattner <sabre@nondot.org> | 2009-03-04 04:46:18 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-03-04 04:46:18 +0000 |
commit | 4192bce91b2c4baf36d3cec47eeb33b2ef93648b (patch) | |
tree | ab88fd6f43804f94538f4b157eb0de6bd4921c0a /clang/lib/CodeGen/CGExpr.cpp | |
parent | 9bbf1ba1e6ed08efd19dcfa11c8549f472d430ed (diff) | |
download | bcm5719-llvm-4192bce91b2c4baf36d3cec47eeb33b2ef93648b.tar.gz bcm5719-llvm-4192bce91b2c4baf36d3cec47eeb33b2ef93648b.zip |
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
llvm-svn: 66015
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
0 files changed, 0 insertions, 0 deletions