Skip to content
  1. Aug 01, 2013
  2. Jul 31, 2013
    • Andrew Trick's avatar
      comment typo. · 753663cc
      Andrew Trick authored
      llvm-svn: 187531
      753663cc
    • Kevin Enderby's avatar
      Added the B9.3.19 SUBS PC, LR, #imm (Thumb2) system instruction. · 78f9572f
      Kevin Enderby authored
      While the .td entry is nice and all, it takes a pretty gross hack in
      ARMAsmParser::ParseInstruction() because of handling of other "subs"
      instructions to get it to match.  Ran it by Jim Grosbach and he said it was
      about what he expected to make this work given the existing code.
      
      rdar://14214063
      
      llvm-svn: 187530
      78f9572f
    • Tom Stellard's avatar
      Revert "R600: Non vector only instruction can be scheduled on trans unit" · ca69a53b
      Tom Stellard authored
      This reverts commit 98ce62780ea7185ba710868bf83c8077e8d7f6d6.
      
      llvm-svn: 187526
      ca69a53b
    • Tom Stellard's avatar
      Revert "TableGen: Enumerate Schedule Model too." · 0ebf29d4
      Tom Stellard authored
      This reverts commit 2ca1e4a39c7e0d7a00e66ff5437c6d7ace2404a0.
      
      llvm-svn: 187525
      0ebf29d4
    • Tom Stellard's avatar
      Revert "R600: Use SchedModel enum for is{Trans,Vector}Only functions" · 4dd41845
      Tom Stellard authored
      This reverts commit 3f1de26cb5cc0543a6a1d71259a7a39d97139051.
      
      llvm-svn: 187524
      4dd41845
    • Vincent Lejeune's avatar
      R600: Do not mergevector after a vector reg is used · 220db748
      Vincent Lejeune authored
      If we merge vector when a vector is used, it will generate an artificial
      antidependency that can prevent 2 tex/vtx instructions to use the same
      clause and thus generate extra clauses that reduce performance.
      
      There is no test case as such situation is really hard to predict.
      
      llvm-svn: 187516
      220db748
    • Vincent Lejeune's avatar
      bb3f9311
    • Vincent Lejeune's avatar
      R600: Non vector only instruction can be scheduled on trans unit · df18804e
      Vincent Lejeune authored
      llvm-svn: 187514
      df18804e
    • Vincent Lejeune's avatar
      R600: Don't mix LDS and non-LDS instructions in the same group · 21de8baa
      Vincent Lejeune authored
      There are a lot of restrictions on instruction groups that contain
      LDS instructions, so for now we will be conservative and not packetize
      anything else with them.
      
      llvm-svn: 187513
      21de8baa
    • Vincent Lejeune's avatar
      R600: Use SchedModel enum for is{Trans,Vector}Only functions · 79afe17e
      Vincent Lejeune authored
      llvm-svn: 187512
      79afe17e
    • Vincent Lejeune's avatar
      TableGen: Enumerate Schedule Model too. · 22e6ddd4
      Vincent Lejeune authored
      llvm-svn: 187511
      22e6ddd4
    • Vincent Lejeune's avatar
      R600: Remove predicated_break inst · 0c5ed2b4
      Vincent Lejeune authored
      We were using two instructions for similar purpose : break and
      predicated break. Only predicated_break was emitted and it was
      lowered at R600ControlFlowFinalizer to JUMP;CF_BREAK;POP.
      This commit simplify the situation by making AMDILCFGStructurizer
      emit IF_PREDICATE;BREAK;ENDIF; instead of predicated_break (which
      is now removed).
      
      There is no functionality change.
      
      llvm-svn: 187510
      0c5ed2b4
    • Matt Arsenault's avatar
      Reject bitcasts between address spaces with different sizes · 24b49c41
      Matt Arsenault authored
      llvm-svn: 187506
      24b49c41
    • Richard Sandiford's avatar
      [SystemZ] Implement isLegalAddressingMode() · 791bea41
      Richard Sandiford authored
      The loop optimizers were assuming that scales > 1 were OK.  I think this
      is actually a bug in TargetLoweringBase::isLegalAddressingMode(),
      since it seems to be trying to reject anything that isn't r+i or r+r,
      but it has no default case for scales other than 0, 1 or 2.  Implementing
      the hook for z means that z can no longer test any change there though.
      
      llvm-svn: 187497
      791bea41
    • Richard Sandiford's avatar
      [SystemZ] Be more careful about inverting CC masks (conditional loads) · ee834382
      Richard Sandiford authored
      Extend r187495 to conditional loads.  I split this out because the
      easiest way seemed to be to force a particular operand order in
      SystemZISelDAGToDAG.cpp.
      
      llvm-svn: 187496
      ee834382
    • Richard Sandiford's avatar
      [SystemZ] Be more careful about inverting CC masks · 3d768e33
      Richard Sandiford authored
      System z branches have a mask to select which of the 4 CC values should
      cause the branch to be taken.  We can invert a branch by inverting the mask.
      However, not all instructions can produce all 4 CC values, so inverting
      the branch like this can lead to some oddities.  For example, integer
      comparisons only produce a CC of 0 (equal), 1 (less) or 2 (greater).
      If an integer EQ is reversed to NE before instruction selection,
      the branch will test for 1 or 2.  If instead the branch is reversed
      after instruction selection (by inverting the mask), it will test for
      1, 2 or 3.  Both are correct, but the second isn't really canonical.
      This patch therefore keeps track of which CC values are possible
      and uses this when inverting a mask.
      
      Although this is mostly cosmestic, it fixes undefined behavior
      for the CIJNLH in branch-08.ll.  Another fix would have been
      to mask out bit 0 when generating the fused compare and branch,
      but the point of this patch is that we shouldn't need to do that
      in the first place.
      
      The patch also makes it easier to reuse CC results from other instructions.
      
      llvm-svn: 187495
      3d768e33
    • Richard Sandiford's avatar
      [SystemZ] Move compare-and-branch generation even later · 8a757bba
      Richard Sandiford authored
      r187116 moved compare-and-branch generation from the instruction-selection
      pass to the peephole optimizer (via optimizeCompare).  It turns out that even
      this is a bit too early.  Fused compare-and-branch instructions don't
      interact well with predication, where a CC result is needed.  They also
      make it harder to reuse the CC side-effects of earlier instructions
      (not yet implemented, but the subject of a later patch).
      
      Another problem was that the AnalyzeBranch family of routines weren't
      handling compares and branches, so we weren't able to reverse the fused
      form in cases where we would reverse a separate branch.  This could have
      been fixed by extending AnalyzeBranch, but given the other problems,
      I've instead moved the fusing to the long-branch pass, which is also
      responsible for the opposite transformation: splitting out-of-range
      compares and branches into separate compares and long branches.
      
      I've added a test for the AnalyzeBranch problem.  A test for the
      predication problem is included in the next patch, which fixes a bug
      in the choice of CC mask.
      
      llvm-svn: 187494
      8a757bba
    • Elena Demikhovsky's avatar
      Fixed assertion in Extract128BitVector() · b0a75431
      Elena Demikhovsky authored
      llvm-svn: 187493
      b0a75431
    • Richard Sandiford's avatar
      [SystemZ] Postpone NI->RISBG conversion to convertToThreeAddress() · 6a06ba36
      Richard Sandiford authored
      r186399 aggressively used the RISBG instruction for immediate ANDs,
      both because it can handle some values that AND IMMEDIATE can't,
      and because it allows the destination register to be different from
      the source.  I realized later while implementing the distinct-ops
      support that it would be better to leave the choice up to
      convertToThreeAddress() instead.  The AND IMMEDIATE form is shorter
      and is less likely to be cracked.
      
      This is a problem for 32-bit ANDs because we assume that all 32-bit
      operations will leave the high word untouched, whereas RISBG used in
      this way will either clear the high word or copy it from the source
      register.  The patch uses the z196 instruction RISBLG for this instead.
      
      This means that z10 will be restricted to NILL, NILH and NILF for
      32-bit ANDs, but I think that should be OK for now.  Although we're
      using z10 as the base architecture, the optimization work is going
      to be focused more on z196 and zEC12.
      
      llvm-svn: 187492
      6a06ba36
Loading