Skip to content
  1. Jun 20, 2011
    • Jay Foad's avatar
      Change how PHINodes store their operands. · e03c05c3
      Jay Foad authored
      Change PHINodes to store simple pointers to their incoming basic blocks,
      instead of full-blown Uses.
      
      Note that this loses an optimization in SplitCriticalEdge(), because we
      can no longer walk the use list of a BasicBlock to find phi nodes. See
      the comment I removed starting "However, the foreach loop is slow for
      blocks with lots of predecessors".
      
      Extend replaceAllUsesWith() on a BasicBlock to also update any phi
      nodes in the block's successors. This mimics what would have happened
      when PHINodes were proper Users of their incoming blocks. (Note that
      this only works if OldBB->replaceAllUsesWith(NewBB) is called when
      OldBB still has a terminator instruction, so it still has some
      successors.)
      
      llvm-svn: 133435
      e03c05c3
    • Jay Foad's avatar
      Make better use of the PHINode API. · 372ad64b
      Jay Foad authored
      Change various bits of code to make better use of the existing PHINode
      API, to insulate them from forthcoming changes in how PHINodes store
      their operands.
      
      llvm-svn: 133434
      372ad64b
    • Jay Foad's avatar
      Remove the AugmentedUse struct. · 5c54d757
      Jay Foad authored
      I don't think the AugmentedUse struct buys us much, either in
      correctness or in ease of use. Ditch it, and simplify Use::getUser() and
      User::allocHungoffUses().
      
      llvm-svn: 133433
      5c54d757
    • Rafael Espindola's avatar
      Re enable 133415 with two fixes · 336e1023
      Rafael Espindola authored
      * Don't introduce a duplicated bb in the CFG
      * When making a branch unconditional, clear the PredCond array so that it
        is really unconditional.
      
      llvm-svn: 133432
      336e1023
    • Duncan Sands's avatar
      Disable the logic added by rafael in commit 133415 to see if it brings the · 406b9be0
      Duncan Sands authored
      dragonegg buildbots back to life.  Original commit message:
      Teach early dup how to duplicate basic blocks with one successor and only phi instructions
      into more complex blocks.
      
      llvm-svn: 133430
      406b9be0
    • Nadav Rotem's avatar
      Fix PromoteIntRes_TRUNCATE: Add support for cases where the · d34ce434
      Nadav Rotem authored
      source vector type is to be split while the target vector is to be promoted.
      (eg: <4 x i64> -> <4 x i8> )
      
      llvm-svn: 133424
      d34ce434
    • Francois Pichet's avatar
      Fix MSVC build. next() function already exists in the MSVC headers. This... · 3f60acad
      Francois Pichet authored
      Fix MSVC build. next() function already exists in the MSVC headers. This create a overload conflict. Make sure we pick up the llvm one.
      
      llvm-svn: 133416
      3f60acad
    • Rafael Espindola's avatar
      Teach early dup how to duplicate basic blocks with one successor and only phi instructions · ef636bff
      Rafael Espindola authored
      into more complex blocks.
      
      llvm-svn: 133415
      ef636bff
    • Chris Lattner's avatar
      Revamp the "ConstantStruct::get" methods. Previously, these were scattered · cc19efaa
      Chris Lattner authored
      all over the place in different styles and variants.  Standardize on two
      preferred entrypoints: one that takes a StructType and ArrayRef, and one that
      takes StructType and varargs.
      
      In cases where there isn't a struct type convenient, we now add a
      ConstantStruct::getAnon method (whose name will make more sense after a few
      more patches land).  
      
      It would be "really really nice" if the ConstantStruct::get and 
      ConstantVector::get methods didn't make temporary std::vectors.
      
      llvm-svn: 133412
      cc19efaa
    • Chris Lattner's avatar
      introduce an isLayoutIdentical() method, which is currently just a pointer · 676a3177
      Chris Lattner authored
      equality check.
      
      llvm-svn: 133409
      676a3177
    • Jakob Stoklund Olesen's avatar
      Add a RegisterTuples class to Target.td and TableGen. · 3bd1b65e
      Jakob Stoklund Olesen authored
      A RegisterTuples instance is used to synthesize super-registers by
      zipping together lists of sub-registers. This is useful for generating
      pseudo-registers representing register sequence constraints like 'two
      consecutive GPRs', or 'an even-odd pair of floating point registers'.
      
      The RegisterTuples def can be used in register set operations when
      building register classes. That is the only way of accessing the
      synthesized super-registers.
      
      For example, the ARM QQ register class of pseudo-registers could have
      been formed like this:
      
        // Form pairs Q0_Q1, Q2_Q3, ...
        def QQPairs : RegisterTuples<[qsub_0, qsub_1],
                                     [(decimate QPR, 2),
                                      (decimate (shl QPR, 1), 2)]>;
      
        def QQ : RegisterClass<..., (add QQPairs)>;
      
      Similarly, pseudo-registers representing '3 consecutive D-regs with
      wraparound' look like:
      
        // Form D0_D1_D2, D1_D2_D3, ..., D30_D31_D0, D31_D0_D1.
        def DSeqTriples : RegisterTuples<[dsub_0, dsub_1, dsub_2],
                                         [(rotl DPR, 0),
                                          (rotl DPR, 1),
                                          (rotl DPR, 2)]>;
      
      TableGen automatically computes aliasing information for the synthesized
      registers.
      
      Register tuples are still somewhat experimental. We still need to see
      how they interact with MC.
      
      llvm-svn: 133407
      3bd1b65e
  2. Jun 19, 2011
  3. Jun 18, 2011
Loading