Skip to content
  1. Nov 16, 2013
  2. Nov 15, 2013
    • David Blaikie's avatar
      DwarfCompileUnit: Push DIDescriptor usage out from isShareableAcrossCUs · 4201ddf3
      David Blaikie authored
      This is the first of a few similar patches. We'll see how far it
      goes/makes sense.
      
      llvm-svn: 194871
      4201ddf3
    • Juergen Ributzka's avatar
      [weak vtables] Remove a bunch of weak vtables · dbedae89
      Juergen Ributzka authored
      This patch removes most of the trivial cases of weak vtables by pinning them to
      a single object file.
      
      Differential Revision: http://llvm-reviews.chandlerc.com/D2068
      
      Reviewed by Andy
      
      llvm-svn: 194865
      dbedae89
    • Matt Arsenault's avatar
      Fix confusing machine verifier error. · 23c9274b
      Matt Arsenault authored
      The error reported the number of explicit operands,
      but that isn't what is checked. In my case, this
      resulted in the confusing errors
      
      "Too few operands." followed shortly by
      "8 operands expected, but 8 given."
      
      llvm-svn: 194862
      23c9274b
    • Adrian Prantl's avatar
      Reimplement r194843 in a slightly less broken way. · 7d828bbe
      Adrian Prantl authored
      llvm-svn: 194848
      7d828bbe
    • Adrian Prantl's avatar
      Restore the behaviour from before r194728. · fc0fea02
      Adrian Prantl authored
      If getDIE() fails, getOrCreateContextDIE() should also return the CUDie.
      
      llvm-svn: 194843
      fc0fea02
    • Bob Wilson's avatar
      Avoid illegal integer promotion in fastisel · 9f3e6b25
      Bob Wilson authored
      Stop folding constant adds into GEP when the type size doesn't match.
      Otherwise, the adds' operands are effectively being promoted, changing the
      conditions of an overflow.  Results are different when:
      
          sext(a) + sext(b) != sext(a + b)
      
      Problem originally found on x86-64, but also fixed issues with ARM and PPC,
      which used similar code.
      
      <rdar://problem/15292280>
      
      Patch by Duncan Exon Smith!
      
      llvm-svn: 194840
      9f3e6b25
    • Daniel Sanders's avatar
      Fix illegal DAG produced by SelectionDAG::getConstant() for v2i64 type · 50b80410
      Daniel Sanders authored
      Summary:
      When getConstant() is called for an expanded vector type, it is split into
      multiple scalar constants which are then combined using appropriate build_vector
      and bitcast operations.
      
      In addition to the usual big/little endian differences, the case where the
      element-order of the vector does not have the same endianness as the elements
      themselves is also accounted for.  For example, for v4i32 on big-endian MIPS,
      the byte-order of the vector is <3210,7654,BA98,FEDC>. For little-endian, it is
      <0123,4567,89AB,CDEF>.
      Handling this case turns out to be a nop since getConstant() returns a splatted
      vector (so reversing the element order doesn't change the value)
      
      This fixes a number of cases in MIPS MSA where calling getConstant() during
      operation legalization introduces illegal types (e.g. to legalize v2i64 UNDEF
      into a v2i64 BUILD_VECTOR of illegal i64 zeros). It should also handle bigger
      differences between illegal and legal types such as legalizing v2i64 into v8i16.
      
      lowerMSASplatImm() in the MIPS backend no longer needs to avoid calling
      getConstant() so this function has been updated in the same patch.
      
      For the sake of transparency, the steps I've taken since the review are:
      * Added 'virtual' to isVectorEltOrderLittleEndian() as requested. This revealed
        that the MIPS tests were falsely passing because a polymorphic function was
        not actually polymorphic in the reviewed patch.
      * Fixed the tests that were now failing. This involved deleting the code to
        handle the MIPS MSA element-order (which was previously doing an byte-order
        swap instead of an element-order swap). This left
        isVectorEltOrderLittleEndian() unused and it was deleted.
      * Fixed build failures caused by rebasing beyond r194467-r194472. These build
        failures involved the bset, bneg, and bclr instructions added in these commits
        using lowerMSASplatImm() in a way that was no longer valid after this patch.
        Some of these were fixed by calling SelectionDAG::getConstant() instead,
        others were fixed by a new function getBuildVectorSplat() that provided the
        removed functionality of lowerMSASplatImm() in a more sensible way.
      
      Reviewers: bkramer
      
      Reviewed By: bkramer
      
      CC: llvm-commits
      
      Differential Revision: http://llvm-reviews.chandlerc.com/D1973
      
      llvm-svn: 194811
      50b80410
    • Matt Arsenault's avatar
      Add target hook to prevent folding some bitcasted loads. · c5559bb1
      Matt Arsenault authored
      This is to avoid this transformation in some cases:
      fold (conv (load x)) -> (load (conv*)x)
      
      On architectures that don't natively support some vector
      loads efficiently casting the load to a smaller vector of
      larger types and loading is more efficient.
      
      Patch by Micah Villmow.
      
      llvm-svn: 194783
      c5559bb1
    • Eric Christopher's avatar
      Use a reference rather than a pointer as we don't expect a NULL · 34a2c871
      Eric Christopher authored
      DbgVariable.
      
      No functional change.
      
      llvm-svn: 194761
      34a2c871
    • Matt Arsenault's avatar
      Add addrspacecast instruction. · b03bd4d9
      Matt Arsenault authored
      Patch by Michele Scandale!
      
      llvm-svn: 194760
      b03bd4d9
    • Andrew Trick's avatar
      When folding memory operands, preserve existing MachineMemOperands. · a9f4d928
      Andrew Trick authored
      This comes into play with patchpoint, which can fold multiple
      operands. Since the patchpoint is already treated as a call, the
      machine mem operands won't affect anything, and there's nothing to
      test. But we still want to do the right thing here to be sure that our
      MIs obey the rules.
      
      llvm-svn: 194750
      a9f4d928
  3. Nov 14, 2013
  4. Nov 13, 2013
  5. Nov 11, 2013
  6. Nov 10, 2013
    • Arnaud A. de Grandmaison's avatar
      CalculateSpillWeights does not need to be a pass · 760c1e0b
      Arnaud A. de Grandmaison authored
      Based on discussions with Lang Hames and Jakob Stoklund Olesen at the hacker's lab, and in the light of upcoming work on the PBQP register allocator, it was though that CalcSpillWeights does not need to be a pass. This change will enable to customize / tune the spill weight computation depending on the allocator.
      
      Update the documentation style while there.
      
      No functionnal change.
      
      llvm-svn: 194356
      760c1e0b
    • Matt Arsenault's avatar
      Use type form of getIntPtrType. · c900303e
      Matt Arsenault authored
      This should be inconsequential and is work
      towards removing the default address space
      arguments.
      
      llvm-svn: 194347
      c900303e
  7. Nov 09, 2013
    • Lang Hames's avatar
      Re-apply r194300 with fixes for warnings. · fb82630a
      Lang Hames authored
      llvm-svn: 194311
      fb82630a
    • Nick Lewycky's avatar
      Revert r194300 which broke the build. · 59886d00
      Nick Lewycky authored
      llvm-svn: 194308
      59886d00
    • Juergen Ributzka's avatar
      [Stackmap] Materialize the jump address within the patchpoint noop slide. · 87ed906b
      Juergen Ributzka authored
      This patch moves the jump address materialization inside the noop slide. This
      enables patching of the materialization itself or its complete removal. This
      patch also adds the ability to define scratch registers that can be used safely
      by the code called from the patchpoint intrinsic. At least one scratch register
      is required, because that one is used for the materialization of the jump
      address. This patch depends on D2009.
      
      Differential Revision: http://llvm-reviews.chandlerc.com/D2074
      
      Reviewed by Andy
      
      llvm-svn: 194306
      87ed906b
    • Lang Hames's avatar
      Rewrite the PBQP graph data structure. · 1662b832
      Lang Hames authored
      The new graph structure replaces the node and edge linked lists with vectors.
      Free lists (well, free vectors) are used for fast insertion/deletion.
      
      The ultimate aim is to make PBQP graphs cheap to clone. The motivation is that
      the PBQP solver destructively consumes input graphs while computing a solution,
      forcing the graph to be fully reconstructed for each round of PBQP. This
      imposes a high cost on large functions, which often require several rounds of
      solving/spilling to find a final register allocation. If we can cheaply clone
      the PBQP graph and incrementally update it between rounds then hopefully we can
      reduce this cost. Further, once we begin pooling matrix/vector values (future
      work), we can cache some PBQP solver metadata and share it between cloned
      graphs, allowing the PBQP solver to re-use some of the computation done in
      earlier rounds.
      
      For now this is just a data structure update. The allocator and solver still
      use the graph the same way as before, fully reconstructing it between each
      round. I expect no material change from this update, although it may change
      the iteration order of the nodes, causing ties in the solver to break in
      different directions, and this could perturb the generated allocations
      (hopefully in a completely benign way).
      
      Thanks very much to Arnaud Allard de Grandmaison for encouraging me to get back
      to work on this, and for a lot of discussion and many useful PBQP test cases.
      
      llvm-svn: 194300
      1662b832
    • Juergen Ributzka's avatar
      [Stackmap] Add AnyReg calling convention support for patchpoint intrinsic. · 9969d3e6
      Juergen Ributzka authored
      The idea of the AnyReg Calling Convention is to provide the call arguments in
      registers, but not to force them to be placed in a paticular order into a
      specified set of registers. Instead it is up tp the register allocator to assign
      any register as it sees fit. The same applies to the return value (if
      applicable).
      
      Differential Revision: http://llvm-reviews.chandlerc.com/D2009
      
      Reviewed by Andy
      
      llvm-svn: 194293
      9969d3e6
  8. Nov 08, 2013
Loading