Skip to content
  • Evan Cheng's avatar
    Add a if-conversion optimization that allows 'true' side of a diamond to be · 4266a793
    Evan Cheng authored
    unpredicated. That is, turn
     subeq  r0, r1, #1
     addne  r0, r1, #1                                                                                                                                                                                                     
    into
     sub    r0, r1, #1
     addne  r0, r1, #1
    
    For targets where conditional instructions are always executed, this may be
    beneficial. It may remove pseudo anti-dependency in out-of-order execution
    CPUs. e.g.
     op    r1, ...
     str   r1, [r10]        ; end-of-life of r1 as div result
     cmp   r0, #65
     movne r1, #44  ; raw dependency on previous r1
     moveq r1, #12
    
    If movne is unpredicated, then
     op    r1, ...
     str   r1, [r10]
     cmp   r0, #65
     mov   r1, #44  ; r1 written unconditionally
     moveq r1, #12
    
    Both mov and moveq are no longer depdendent on the first instruction. This gives
    the out-of-order execution engine more freedom to reorder them.
    
    This has passed entire LLVM test suite. But it has not been enabled for any ARM
    variant pending more performance evaluation.
    
    rdar://8951196
    
    llvm-svn: 146914
    4266a793
Loading