Skip to content
  1. Mar 13, 2009
    • Evan Cheng's avatar
      Fix some significant problems with constant pools that resulted in unnecessary... · 1fb8aedd
      Evan Cheng authored
      Fix some significant problems with constant pools that resulted in unnecessary paddings between constant pool entries, larger than necessary alignments (e.g. 8 byte alignment for .literal4 sections), and potentially other issues.
      
      1. ConstantPoolSDNode alignment field is log2 value of the alignment requirement. This is not consistent with other SDNode variants.
      2. MachineConstantPool alignment field is also a log2 value.
      3. However, some places are creating ConstantPoolSDNode with alignment value rather than log2 values. This creates entries with artificially large alignments, e.g. 256 for SSE vector values.
      4. Constant pool entry offsets are computed when they are created. However, asm printer group them by sections. That means the offsets are no longer valid. However, asm printer uses them to determine size of padding between entries.
      5. Asm printer uses expensive data structure multimap to track constant pool entries by sections.
      6. Asm printer iterate over SmallPtrSet when it's emitting constant pool entries. This is non-deterministic.
      
      
      Solutions:
      1. ConstantPoolSDNode alignment field is changed to keep non-log2 value.
      2. MachineConstantPool alignment field is also changed to keep non-log2 value.
      3. Functions that create ConstantPool nodes are passing in non-log2 alignments.
      4. MachineConstantPoolEntry no longer keeps an offset field. It's replaced with an alignment field. Offsets are not computed when constant pool entries are created. They are computed on the fly in asm printer and JIT.
      5. Asm printer uses cheaper data structure to group constant pool entries.
      6. Asm printer compute entry offsets after grouping is done.
      7. Change JIT code to compute entry offsets on the fly.
      
      llvm-svn: 66875
      1fb8aedd
  2. Feb 04, 2009
  3. Feb 03, 2009
  4. Jan 27, 2009
  5. Jan 26, 2009
  6. Jan 12, 2009
  7. Nov 03, 2008
  8. Oct 15, 2008
  9. Oct 13, 2008
  10. Sep 16, 2008
  11. Sep 04, 2008
  12. Aug 24, 2008
    • Chris Lattner's avatar
      get MachineConstantPool off std::ostream, onto raw_ostream. It would be · 838aff36
      Chris Lattner authored
      really nice if someone converted MachineFunction::print to raw_ostream.
      
      llvm-svn: 55268
      838aff36
    • Chris Lattner's avatar
      Switch the asmprinter (.ll) and all the stuff it requires over to · 0c19df48
      Chris Lattner authored
      use raw_ostream instead of std::ostream.  Among other goodness,
      this speeds up llvm-dis of kc++ with a release build from 0.85s
      to 0.49s (88% faster).
      
      Other interesting changes:
       1) This makes Value::print be non-virtual.
       2) AP[S]Int and ConstantRange can no longer print to ostream directly, 
          use raw_ostream instead.
       3) This fixes a bug in raw_os_ostream where it didn't flush itself 
          when destroyed.
       4) This adds a new SDNode::print method, instead of only allowing "dump".
      
      
      A lot of APIs have both std::ostream and raw_ostream versions, it would
      be useful to go through and systematically anihilate the std::ostream 
      versions.
      
      This passes dejagnu, but there may be minor fallout, plz let me know if
      so and I'll fix it.
      
      llvm-svn: 55263
      0c19df48
  13. Jul 28, 2008
    • Dan Gohman's avatar
      Fold the useful features of alist and alist_node into ilist, and · 804c95df
      Dan Gohman authored
      a new ilist_node class, and remove them. Unlike alist_node,
      ilist_node doesn't attempt to manage storage itself, so it avoids
      the associated problems, including being opaque in gdb.
      
      Adjust the Recycler class so that it doesn't depend on alist_node.
      Also, change it to use explicit Size and Align parameters, allowing
      it to work when the largest-sized node doesn't have the greatest
      alignment requirement.
      
      Change MachineInstr's MachineMemOperand list from a pool-backed
      alist to a std::list for now.
      
      llvm-svn: 54146
      804c95df
  14. Jul 21, 2008
  15. Jul 11, 2008
  16. Jul 08, 2008
    • Dan Gohman's avatar
      Pool-allocation for MachineInstrs, MachineBasicBlocks, and · 3b460303
      Dan Gohman authored
      MachineMemOperands. The pools are owned by MachineFunctions.
      
      This drastically reduces the number of calls to malloc/free made
      during the "Emit" phase of scheduling, as well as later phases
      in CodeGen. Combined with other changes, this speeds up the
      "instruction selection" phase of CodeGen by 10% in some cases.
      
      llvm-svn: 53212
      3b460303
  17. Apr 06, 2008
  18. Feb 27, 2008
  19. Feb 26, 2008
  20. Feb 10, 2008
  21. Jan 25, 2008
  22. Dec 31, 2007
  23. Dec 29, 2007
  24. Nov 05, 2007
    • Duncan Sands's avatar
      Eliminate the remaining uses of getTypeSize. This · 283207a7
      Duncan Sands authored
      should only effect x86 when using long double.  Now
      12/16 bytes are output for long double globals (the
      exact amount depends on the alignment).  This brings
      globals in line with the rest of LLVM: the space
      reserved for an object is now always the ABI size.
      One tricky point is that only 10 bytes should be
      output for long double if it is a field in a packed
      struct, which is the reason for the additional
      argument to EmitGlobalConstant.
      
      llvm-svn: 43688
      283207a7
  25. Oct 03, 2007
  26. May 03, 2007
  27. May 02, 2007
  28. May 01, 2007
  29. Apr 26, 2007
  30. Apr 25, 2007
  31. Feb 14, 2007
  32. Jan 20, 2007
  33. Dec 22, 2006
Loading