Skip to content
  1. Feb 07, 2009
  2. Feb 05, 2009
  3. Feb 04, 2009
  4. Feb 03, 2009
  5. Feb 02, 2009
    • Daniel Dunbar's avatar
      More ABI API cleanup. · d931a87f
      Daniel Dunbar authored
       - Lift CGFunctionInfo creation above ReturnTypeUsesSret and
         EmitFunction{Epi,Pro}log.
      
      llvm-svn: 63553
      d931a87f
    • Daniel Dunbar's avatar
      ABI handling API changes. · 7633cbf0
      Daniel Dunbar authored
       - Lift CGFunctionInfo creation up to callers of EmitCall.
      
       - Move isVariadic bit out of CGFunctionInfo, take as argument to
         GetFunctionType instead.
      
      No functionality change.
      
      llvm-svn: 63550
      7633cbf0
  6. Jan 27, 2009
  7. Jan 20, 2009
  8. Jan 11, 2009
  9. Jan 10, 2009
  10. Jan 09, 2009
  11. Dec 20, 2008
  12. Dec 15, 2008
  13. Dec 13, 2008
  14. Dec 12, 2008
  15. Dec 09, 2008
  16. Nov 22, 2008
  17. Nov 20, 2008
  18. Nov 19, 2008
  19. Nov 15, 2008
  20. Nov 13, 2008
    • Daniel Dunbar's avatar
      Add IsFinished arg to EmitBlock. · fcac22ea
      Daniel Dunbar authored
       - Indicates that caller is done with the block and it can be dropped
         if it has no predecessors. Useful for callers who need to make
         landing pads but which may not be reached.
      
      No functionality change.
      
      llvm-svn: 59207
      fcac22ea
  21. Nov 12, 2008
    • Daniel Dunbar's avatar
      Comment/indentation fix. · 682712cd
      Daniel Dunbar authored
      llvm-svn: 59127
      682712cd
    • Daniel Dunbar's avatar
      IRgen improvements on unreachable code: · 5fc28718
      Daniel Dunbar authored
       - Split out "simple" statements which can easily handle IR generation
         when there is no insert point. These are generally statements which
         start by emitting a new block or are only containers for other
         statements.
      
       - This fixes a regression in emitting dummy blocks, notably for case
         statements.
      
       - This also fixes spurious emission of a number of debug stoppoint
         intrinsic instructions.
      
      Remove unneeded sw.body block, just clear the insertion point.
      
      Lift out CodeGenFunction::EmitStopPoint which calls into the
      CGDebugInfo class when generating debug info.
      
      Normalize definitions of Emit{Break,Continue}Stmt and usage of
      ErrorUnsupported.
      
      llvm-svn: 59118
      5fc28718
    • Chris Lattner's avatar
      Move EmitBranchOnBoolExpr and ConstantFoldsToSimpleInteger to · cd439299
      Chris Lattner authored
      CodeGenFunction.cpp.  Change VisitConditionalOperator to use
      constant fold instead of codegen'ing a constant conditional.
      
      Change ForStmt to use EmitBranchOnBoolExpr, this shrinks
      expr.c very slightly to 40239 lines.
      
      llvm-svn: 59113
      cd439299
    • Chris Lattner's avatar
      Make emission of 'if' conditions much more sophisticated when we · b7a9e164
      Chris Lattner authored
      have a condition that is an &&/||.  Before we used to compile things like this:
      
      int test() {
        if (x && y) foo(); else bar();
      }
      
      into:
      
      	%0 = load i32* @x		; <i32> [#uses=1]
      	%1 = icmp ne i32 %0, 0		; <i1> [#uses=1]
      	br i1 %1, label %land_rhs, label %land_cont
      
      land_rhs:		; preds = %entry
      	%2 = load i32* @y		; <i32> [#uses=1]
      	%3 = icmp ne i32 %2, 0		; <i1> [#uses=1]
      	br label %land_cont
      
      land_cont:		; preds = %land_rhs, %entry
      	%4 = phi i1 [ false, %entry ], [ %3, %land_rhs ]		; <i1> [#uses=1]
      	br i1 %4, label %ifthen, label %ifelse
      
      ifthen:		; preds = %land_cont
      	%call = call i32 (...)* @foo()		; <i32> [#uses=0]
      	br label %ifend
      
      ifelse:		; preds = %land_cont
      	%call1 = call i32 (...)* @bar()		; <i32> [#uses=0]
      	br label %ifend
      
      ifend:		; preds = %ifelse, %ifthen
      
      
      Now we turn it into the much more svelte code:
      
              %0 = load i32* @x               ; <i32> [#uses=1]
              %1 = icmp ne i32 %0, 0          ; <i1> [#uses=1]
              br i1 %1, label %land_lhs_true, label %ifelse
      
      land_lhs_true:          ; preds = %entry
              %2 = load i32* @y               ; <i32> [#uses=1]
              %3 = icmp ne i32 %2, 0          ; <i1> [#uses=1]
              br i1 %3, label %ifthen, label %ifelse
      
      ifthen:         ; preds = %land_lhs_true
              %call = call i32 (...)* @foo()          ; <i32> [#uses=0]
              br label %ifend
      
      ifelse:         ; preds = %land_lhs_true, %entry
              %call1 = call i32 (...)* @bar()         ; <i32> [#uses=0]
              br label %ifend
      
      ifend:          ; preds = %ifelse, %ifthen
      
      Note the lack of a phi node.
      
      This shrinks the -O0 .ll file for 176.gcc/expr.c from 43176 to 40267 lines.
      
      llvm-svn: 59111
      b7a9e164
    • Daniel Dunbar's avatar
      Disable generation of basic block names in NDEBUG mode. · 851eec11
      Daniel Dunbar authored
      Revert to enabling generation of instruction names when not in NDEBUG
      mode.
      
      llvm-svn: 59094
      851eec11
    • Daniel Dunbar's avatar
      Rework IRgen invariant w.r.t. current insert point. · 5c7e3935
      Daniel Dunbar authored
       - EmitStmt is no longer required to finish with a current insertion
         point defined (i.e. it does not need to make dummy
         blocks). Instead, it can clear the insertion point in the builder
         which indicates that the current insertion point is unreachable.
       - CodeGenFunction provides HaveInsertPoint and EnsureInsertPoint
         which respectively test if there is an insert point and ensure an
         insertion point exists (by making a dummy block).
       - Clearly mark functions in CodeGenFunction which can be called with
         no insertion point defined. Currently this is a limited set, and
         EmitStmt simply EnsureInsertPoint()s before emitting subsequent IR.
      
      Remove EmitDummyBlock, which is no longer needed. Clients who haven't
      already cleared the insertion point (typically via EmitBranch) can do
      so by hand.
      
      Remove isDummyBlock, which has effectively been renamed to
      HaveInsertPoint.
      
      The main thrust of this change is that we no longer have create dummy
      blocks just to destroy them a short time later in EmitBlock in the
      common case that there is no unreachable code following something like
      a goto. 
      
      Additionally, this means that we are not using the hokey condition in
      isDummyBlock that a block without a name is a dummy block. Guess how
      well that works when we never emit block names!
      
      llvm-svn: 59089
      5c7e3935
  22. Nov 11, 2008
Loading