llvm-project/clang/lib
Chris Lattner 0725a8b653 First tiny step to implementing PR9322: build infrastructure for only emitting the
live case of a switch statement when switching on a constant.  This is terribly
limited, but enough to handle the trivial example included.  Before we would 
emit:

define void @test1(i32 %i) nounwind {
entry:
  %i.addr = alloca i32, align 4
  store i32 %i, i32* %i.addr, align 4
  switch i32 1, label %sw.epilog [
    i32 1, label %sw.bb
  ]

sw.bb:                                            ; preds = %entry
  %tmp = load i32* %i.addr, align 4
  %inc = add nsw i32 %tmp, 1
  store i32 %inc, i32* %i.addr, align 4
  br label %sw.epilog

sw.epilog:                                        ; preds = %sw.bb, %entry
  switch i32 0, label %sw.epilog3 [
    i32 1, label %sw.bb1
  ]

sw.bb1:                                           ; preds = %sw.epilog
  %tmp2 = load i32* %i.addr, align 4
  %add = add nsw i32 %tmp2, 2
  store i32 %add, i32* %i.addr, align 4
  br label %sw.epilog3

sw.epilog3:                                       ; preds = %sw.bb1, %sw.epilog
  ret void
}

now we emit:

define void @test1(i32 %i) nounwind {
entry:
  %i.addr = alloca i32, align 4
  store i32 %i, i32* %i.addr, align 4
  %tmp = load i32* %i.addr, align 4
  %inc = add nsw i32 %tmp, 1
  store i32 %inc, i32* %i.addr, align 4
  ret void
}

This improves -O0 compile time (less IR to generate and shove through the code 
generator) and the clever linux kernel people found a way to fail to build if we 
don't do this optimization.  This step isn't enough to handle the kernel case
though.

llvm-svn: 126597
2011-02-28 00:22:07 +00:00
..
AST tidy up 2011-02-28 00:18:06 +00:00
Analysis Fix tiny error in CFG construction for BinaryConditionalOperators, making sure the branch always has two successors. Also teach Environment::getSVal() about OpaqueValueExprs. 2011-02-24 03:09:15 +00:00
Basic Teach TextDiagnosticPrinter to print out '-Werror' in addition to the warning flag for a warning mapped to an error. 2011-02-25 01:28:26 +00:00
CodeGen First tiny step to implementing PR9322: build infrastructure for only emitting the 2011-02-28 00:22:07 +00:00
Driver Driver: Attmpt to fix some possibly UB that MSVC doesn't care for. 2011-02-25 21:20:15 +00:00
Frontend Teach objc-rewriter to pass -fobjc-exceptions along. 2011-02-25 17:24:55 +00:00
FrontendTool Intoduce '-analyzer-checker-help' flag which outputs a list of all available static analyzer checkers. 2011-02-25 00:09:51 +00:00
Headers CMake: updated list of installable header files. PR9321. 2011-02-27 13:33:31 +00:00
Index Give some convenient idiomatic accessors to Stmt::child_range and 2011-02-13 04:07:26 +00:00
Lex Reimplement __pragma support using a TokenLexer 2011-02-22 13:49:06 +00:00
Parse When we encounter a dependent template name within a 2011-02-28 00:04:36 +00:00
Rewrite Fix objc rewriting bug casting to qualified objective-c pointetr. 2011-02-26 01:31:36 +00:00
Sema When we encounter a dependent template name within a 2011-02-28 00:04:36 +00:00
Serialization Push nested-name-specifier source location information into 2011-02-25 20:49:16 +00:00
StaticAnalyzer Update test cases. 2011-02-25 22:19:14 +00:00
CMakeLists.txt [analyzer] Move the files in lib/StaticAnalyzer to lib/StaticAnalyzer/Core. 2011-02-08 22:30:36 +00:00
Makefile Chris Lattner has strong opinions about directory 2010-12-23 19:38:26 +00:00