Skip to content
  1. Aug 01, 2013
  2. Jul 31, 2013
    • 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 "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
      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
    • Elena Demikhovsky's avatar
      Added INSERT and EXTRACT intructions from AVX-512 ISA. · 67b05fc0
      Elena Demikhovsky authored
      All insertf*/extractf* functions replaced with insert/extract since we have insertf and inserti forms.
      Added lowering for INSERT_VECTOR_ELT / EXTRACT_VECTOR_ELT for 512-bit vectors.
      Added lowering for EXTRACT/INSERT subvector for 512-bit vectors.
      Added a test.
      
      llvm-svn: 187491
      67b05fc0
    • Richard Sandiford's avatar
      [SystemZ] Add RISBLG and RISBHG instruction definitions · 6cf80b3e
      Richard Sandiford authored
      The next patch will make use of RISBLG for codegen.
      
      llvm-svn: 187490
      6cf80b3e
    • Richard Trieu's avatar
      Add parentheses to silence gcc warning. · 8dc43231
      Richard Trieu authored
      llvm-svn: 187482
      8dc43231
    • Craig Topper's avatar
      62cb2bc8
    • Craig Topper's avatar
      Changed register names (and pointer keywords) to be lower case when using... · efd67d46
      Craig Topper authored
      Changed register names (and pointer keywords) to be lower case when using Intel X86 assembler syntax.
      
      Patch by Richard Mitton.
      
      llvm-svn: 187476
      efd67d46
    • Andrew Trick's avatar
      Fix a severe compile time problem when forming large SCEV expressions. · c3bc8b8d
      Andrew Trick authored
      This fix is very lightweight. The same fix already existed for AddRec
      but was missing for NAry expressions.
      
      This is obviously an improvement and I'm unsure how to test compile
      time problems.
      
      Patch by Xiaoyi Guo!
      
      llvm-svn: 187475
      c3bc8b8d
    • Craig Topper's avatar
      Remove trailing whitespace and some tab characters. · 75a5ba7e
      Craig Topper authored
      llvm-svn: 187472
      75a5ba7e
    • Craig Topper's avatar
      Fixed incorrect disassembly for MOV16o16a when using Intel syntax. · 6e8cd80d
      Craig Topper authored
      Patch by Richard Mitton.
      
      llvm-svn: 187471
      6e8cd80d
    • Eric Christopher's avatar
      Fix crashing on invalid inline asm with matching constraints. · e6656ac8
      Eric Christopher authored
      For a testcase like the following:
      
       typedef unsigned long uint64_t;
      
       typedef struct {
         uint64_t lo;
         uint64_t hi;
       } blob128_t;
      
       void add_128_to_128(const blob128_t *in, blob128_t *res) {
         asm ("PAND %1, %0" : "+Q"(*res) : "Q"(*in));
       }
      
      where we'll fail to allocate the register for the output constraint,
      our matching input constraint will not find a register to match,
      and could try to search past the end of the current operands array.
      
      On the idea that we'd like to attempt to keep compilation going
      to find more errors in the module, change the error cases when
      we're visiting inline asm IR to return immediately and avoid
      trying to create a node in the DAG. This leaves us with only
      a single error message per inline asm instruction, but allows us
      to safely keep going in the general case.
      
      llvm-svn: 187470
      e6656ac8
Loading