Skip to content
  1. Aug 25, 2016
  2. Aug 24, 2016
    • Kyle Butt's avatar
      IfConversion: Rescan diamonds. · 6262ca34
      Kyle Butt authored
      The cost of predicating a diamond is only the instructions that are not shared
      between the two branches. Additionally If a predicate clobbering instruction
      occurs in the shared portion of the branches (e.g. a cond move), it may still
      be possible to if convert the sub-cfg. This change handles these two facts by
      rescanning the non-shared portion of a diamond sub-cfg to recalculate both the
      predication cost and whether both blocks are pred-clobbering.
      
      Fixed 2 bugs before recommitting. Branch instructions must be compared and found
      identical before diamond conversion. Also, predicate-clobbering instructions in
      the shared prefix disqualifies a potential diamond conversion. Includes tests
      for both.
      
      llvm-svn: 279670
      6262ca34
  3. May 30, 2014
    • Tim Northover's avatar
      ARM & AArch64: make use of common cmpxchg idioms after expansion · b4ddc084
      Tim Northover authored
      The C and C++ semantics for compare_exchange require it to return a bool
      indicating success. This gets mapped to LLVM IR which follows each cmpxchg with
      an icmp of the value loaded against the desired value.
      
      When lowered to ldxr/stxr loops, this extra comparison is redundant: its
      results are implicit in the control-flow of the function.
      
      This commit makes two changes: it replaces that icmp with appropriate PHI
      nodes, and then makes sure earlyCSE is called after expansion to actually make
      use of the opportunities revealed.
      
      I've also added -{arm,aarch64}-enable-atomic-tidy options, so that
      existing fragile tests aren't perturbed too much by the change. Many
      of them either rely on undef/unreachable too pervasively to be
      restored to something well-defined (particularly while making sure
      they test the same obscure assert from many years ago), or depend on a
      particular CFG shape, which is disrupted by SimplifyCFG.
      
      rdar://problem/16227836
      
      llvm-svn: 209883
      b4ddc084
  4. Jul 20, 2013
    • Lang Hames's avatar
      Refactor AnalyzeBranch on ARM. The previous version did not always analyze · 24864fe1
      Lang Hames authored
      indirect branches correctly. Under some circumstances, this led to the deletion
      of basic blocks that were the destination of indirect branches. In that case it
      left indirect branches to nowhere in the code.
      
      This patch replaces, and is more general than either of the previous fixes for
      indirect-branch-analysis issues, r181161 and r186461.
      
      For other branches (not indirect) this refactor should have *almost* identical
      behavior to the previous version. There are some corner cases where this
      refactor is able to analyze blocks that the previous version could not (e.g.
      this necessitated the update to thumb2-ifcvt2.ll). 
      
      <rdar://problem/14464830>
      
      llvm-svn: 186735
      24864fe1
Loading