Skip to content
  1. Jul 11, 2012
    • Rafael Espindola's avatar
      Don't process #pragma visibility during instantiation. The visibility of the · 5f0a1b89
      Rafael Espindola authored
      instantiation depends on the template, its arguments and parameters, but not
      where it is instantiated.
      
      llvm-svn: 160034
      5f0a1b89
    • Eric Christopher's avatar
      The end of a block doesn't necessarily need a line table entry unless · 29773789
      Eric Christopher authored
      there's something going on there. Remove the unconditional line entry
      and only add one if we're emitting cleanups (any other statements
      would be handled normally).
      
      Fixes rdar://9199234
      
      llvm-svn: 160033
      29773789
    • Eric Christopher's avatar
      FileCheck-ize. · 296a710b
      Eric Christopher authored
      llvm-svn: 160032
      296a710b
    • Akira Hatanaka's avatar
      Lower RETURNADDR node in Mips backend. · 878ad8b2
      Akira Hatanaka authored
      Patch by Sasa Stankovic.
      
      llvm-svn: 160031
      878ad8b2
    • Jordan Rose's avatar
      [analyzer] Add debug.DumpCalls, which prints out any CallEvents it sees. · 8889cf00
      Jordan Rose authored
      This is probably not so useful yet because it is not path-sensitive, though
      it does try to show inlining with indentation.
      
      This also adds a dump() method to CallEvent, which should be useful for
      debugging.
      
      llvm-svn: 160030
      8889cf00
    • Jordan Rose's avatar
      [analyzer] Guard against C++ member functions that look like system functions. · 6cd16c51
      Jordan Rose authored
      C++ method calls and C function calls both appear as CallExprs in the AST.
      This was causing crashes for an object that had a 'free' method.
      
      <rdar://problem/11822244>
      
      llvm-svn: 160029
      6cd16c51
    • Jack Carter's avatar
      Mips specific inline asm operand modifier 'L'. · e8cb2fc6
      Jack Carter authored
         
         Low order register of a double word register operand. Operands 
         are defined by the name of the variable they are marked with in
         the inline assembler code. This is a way to specify that the 
         operand just refers to the low order register for that variable.
         
         It is the opposite of modifier 'D' which specifies the high order
         register.
         
         Example:
         
       main()
      {
      
          long long ll_input = 0x1111222233334444LL;
          long long ll_val = 3;
          int i_result = 0;
      
          __asm__ __volatile__( 
      		   "or	%0, %L1, %2"
      	     : "=r" (i_result) 
      	     : "r" (ll_input), "r" (ll_val)); 
      }
      
         Which results in:
         
         	lui	$2, %hi(_gp_disp)
      	addiu	$2, $2, %lo(_gp_disp)
      	addiu	$sp, $sp, -8
      	addu	$2, $2, $25
      	sw	$2, 0($sp)
      	lui	$2, 13107
      	ori	$3, $2, 17476     <-- Low 32 bits of ll_input
      	lui	$2, 4369
      	ori	$4, $2, 8738      <-- High 32 bits of ll_input
      	addiu	$5, $zero, 3  <-- Low 32 bits of ll_val
      	addiu	$2, $zero, 0  <-- High 32 bits of ll_val
      	#APP
      	or	$3, $4, $5        <-- or i_result, high 32 ll_input, low 32 of ll_val
      	#NO_APP
      	addiu	$sp, $sp, 8
      	jr	$ra
      
      If not direction is done for the long long for 32 bit variables results
      in using the low 32 bits as ll_val shows.
      
      There is an existing bug if 'L' or 'D' is used for the destination register
      for 32 bit long longs in that the target value will be updated incorrectly
      for the non-specified part unless explicitly set within the inline asm code.
      
      llvm-svn: 160028
      e8cb2fc6
    • Jakob Stoklund Olesen's avatar
      Require and preserve LoopInfo for early if-conversion. · bc90a4ea
      Jakob Stoklund Olesen authored
      It will surely be needed by heuristics.
      
      llvm-svn: 160027
      bc90a4ea
    • Chandler Carruth's avatar
      Teach the LiveInterval::join function to use the fast merge algorithm, · 2207f76c
      Chandler Carruth authored
      generalizing its implementation sufficiently to support this value
      number scenario as well.
      
      This cuts out another significant performance hit in large functions
      (over 10k basic blocks, etc), especially those with "natural" CFG
      structures.
      
      llvm-svn: 160026
      2207f76c
    • Jakob Stoklund Olesen's avatar
      Run early if-conversion in domtree post-order. · 02638392
      Jakob Stoklund Olesen authored
      This ordering allows nested if-conversion without using a work list, and
      it makes it possible to update the dominator tree on the fly as well.
      
      Any erased basic blocks will always be dominated by the current
      post-order position, so the domtree can be pruned without invalidating
      the iterator.
      
      llvm-svn: 160025
      02638392
    • Richard Smith's avatar
      Fix crash when constant-evaluating a CXXConstructExpr representing · 9fce7bc7
      Richard Smith authored
      value-initialization for an array of class type with a trivial default
      constructor.
      
      llvm-svn: 160024
      9fce7bc7
    • Jordan Rose's avatar
      [analyzer] Construct stack variables directly in their VarDecl. · eab627b9
      Jordan Rose authored
      Also contains a number of tweaks to inlining that are necessary
      for constructors and destructors. (I have this enabled on a private
      branch, but it is very much unstable.)
      
      llvm-svn: 160023
      eab627b9
    • Jordan Rose's avatar
      [analyzer] Use CallEvent for building inlined stack frames. · d1d54aa1
      Jordan Rose authored
      In order to accomplish this, we now build the callee's stack frame
      as part of the CallEnter node, rather than the subsequent BlockEdge node.
      This should not have any effect on perceived behavior or diagnostics.
      
      This makes it safe to re-enable inlining of member overloaded operators.
      
      llvm-svn: 160022
      d1d54aa1
    • Jordan Rose's avatar
      [analyzer] Make CallEnter, CallExitBegin, and CallExitEnd not be StmtPoints · fbe6dba1
      Jordan Rose authored
      These ProgramPoints are used in inlining calls,
      and not all calls have associated statements anymore.
      
      llvm-svn: 160021
      fbe6dba1
    • Jordan Rose's avatar
      [analyzer] Add a CXXDestructorCall CallEvent. · 4ee71b8a
      Jordan Rose authored
      While this work is still fairly tentative (destructors are still left out of
      the CFG by default), we now handle destructors in the same way as any other
      calls, instead of just automatically trying to inline them.
      
      llvm-svn: 160020
      4ee71b8a
    • Jordan Rose's avatar
      [analyzer] Add new PreImplicitCall and PostImplicitCall ProgramPoints. · 681cce99
      Jordan Rose authored
      These are currently unused, but are intended to be used in lieu of PreStmt
      and PostStmt when the call is implicit (e.g. an automatic object destructor).
      
      This also modifies the Data1 field of ProgramPoints to allow storing any
      pointer-sized value, as opposed to only aligned pointers. This is necessary
      to store SourceLocations.
      
      There is currently no BugReporter support for these; they should be skipped
      over in any diagnostic output.
      
      This commit also tags checkers that currently rely on function calls only
      occurring at StmtPoints.
      
      llvm-svn: 160019
      681cce99
  2. Jul 10, 2012
Loading