Skip to content
  1. Mar 17, 2009
    • Scott Michel's avatar
      CellSPU: · 839ad0a5
      Scott Michel authored
      - Fix fabs, fneg for f32 and f64.
      - Use BuildVectorSDNode.isConstantSplat, now that the functionality exists
      - Continue to improve i64 constant lowering. Lower certain special constants
        to the constant pool when they correspond to SPU's shufb instruction's
        special mask values. This avoids the overhead of performing a shuffle on a
        zero-filled vector just to get the special constant when the memory load
        suffices.
      
      llvm-svn: 67067
      839ad0a5
  2. Mar 16, 2009
    • Scott Michel's avatar
      CellSPU: · d1db1aba
      Scott Michel authored
      Incorporate Tilmann's 128-bit operation patch. Evidently, it gets the
      llvm-gcc bootstrap a bit further along.
      
      llvm-svn: 67048
      d1db1aba
  3. Jan 26, 2009
    • Scott Michel's avatar
      CellSPU: · 49483188
      Scott Michel authored
      - Update DWARF debugging support.
      
      llvm-svn: 63059
      49483188
    • Scott Michel's avatar
      Untabify code. · 95b2a206
      Scott Michel authored
      llvm-svn: 62991
      95b2a206
    • Scott Michel's avatar
      CellSPU: · 9e3e4a92
      Scott Michel authored
      - Rename fcmp.ll test to fcmp32.ll, start adding new double tests to fcmp64.ll
      - Fix select_bits.ll test
      - Capitulate to the DAGCombiner and move i64 constant loads to instruction
        selection (SPUISelDAGtoDAG.cpp).
      
        <rant>DAGCombiner will insert all kinds of 64-bit optimizations after
        operation legalization occurs and now we have to do most of the work that
        instruction selection should be doing twice (once to determine if v2i64
        build_vector can be handled by SelectCode(), which then runs all of the
        predicates a second time to select the necessary instructions.) But,
        CellSPU is a good citizen.</rant>
      
      llvm-svn: 62990
      9e3e4a92
  4. Jan 21, 2009
    • Scott Michel's avatar
      CellSPU: · ed7d79fc
      Scott Michel authored
      - Ensure that (operation) legalization emits proper FDIV libcall when needed.
      - Fix various bugs encountered during llvm-spu-gcc build, along with various
        cleanups.
      - Start supporting double precision comparisons for remaining libgcc2 build.
        Discovered interesting DAGCombiner feature, which is currently solved via
        custom lowering (64-bit constants are not legal on CellSPU, but DAGCombiner
        insists on inserting one anyway.)
      - Update README.
      
      llvm-svn: 62664
      ed7d79fc
  5. Jan 15, 2009
    • Scott Michel's avatar
      - Convert remaining i64 custom lowering into custom instruction emission · a292fc6d
      Scott Michel authored
        sequences in SPUDAGToDAGISel.cpp and SPU64InstrInfo.td, killing custom
        DAG node types as needed.
      - i64 mul is now a legal instruction, but emits an instruction sequence
        that stretches tblgen and the imagination, as well as violating laws of
        several small countries and most southern US states (just kidding, but
        looking at a function with 80+ parameters is really weird and just plain
        wrong.)
      - Update tests as needed.
      
      llvm-svn: 62254
      a292fc6d
  6. Jan 07, 2009
    • Scott Michel's avatar
      CellSPU: · 494daa74
      Scott Michel authored
      - Add preliminary support for v2i32; load/store generates the right code but
        there's a lot work to be done to make this vector type operational.
      
      llvm-svn: 61829
      494daa74
  7. Jan 06, 2009
    • Scott Michel's avatar
      CellSPU: · 6887caf1
      Scott Michel authored
      - Fix bugs 3194, 3195: i128 load/stores produce correct code (although, we
        need to ensure that i128 is 16-byte aligned in real life), and 128 zero-
        extends are supported.
      - New td file: SPU128InstrInfo.td: this is where all new i128 support should
        be put in the future.
      - Continue to hammer on i64 operations and test cases; ensure that the only
        remaining problem will be i64 mul.
      
      llvm-svn: 61784
      6887caf1
  8. Jan 05, 2009
    • Scott Michel's avatar
      CellSPU: · a6642404
      Scott Michel authored
      - Fix (brcond (setq ...)) bug, where BRNZ should have been used vice BRZ.
      - Kill unused/unnecessary nodes in SPUNodes.td
      - Beef out the i64operations.c test harness to use a lot of unaligned
        loads, test loops and LLVM loop/basic block optimizations; run the
        test harness successfully on real Cell hardware.
      
      llvm-svn: 61664
      a6642404
  9. Dec 31, 2008
  10. Dec 29, 2008
    • Scott Michel's avatar
      - Various '#if 0' cleanups. · b8ee30de
      Scott Michel authored
      - Move v4i32, i32 mul into SPUInstrInfo.td, with a few more instruction
        cleanups there as well.
      - Make SMUL_LOHI, UMUL_LOHI competely illegal for Cell SPU, to better
        assist Chris to see the problem in bug 3101.
      
      llvm-svn: 61464
      b8ee30de
  11. Dec 27, 2008
    • Scott Michel's avatar
      - Remove Tilmann's custom truncate lowering: it completely hosed over · 8233527b
      Scott Michel authored
        DAGcombine's ability to find reasons to remove truncates when they were not
        needed. Consequently, the CellSPU backend would produce correct, but _really
        slow and horrible_, code.
      
        Replaced with instruction sequences that do the equivalent truncation in
        SPUInstrInfo.td.
      
      - Re-examine how unaligned loads and stores work. Generated unaligned
        load code has been tested on the CellSPU hardware; see the i32operations.c
        and i64operations.c in CodeGen/CellSPU/useful-harnesses.  (While they may be
        toy test code, it does prove that some real world code does compile
        correctly.)
      
      - Fix truncating stores in bug 3193 (note: unpack_df.ll will still make llc
        fault because i64 ult is not yet implemented.)
      
      - Added i64 eq and neq for setcc and select/setcc; started new instruction
        information file for them in SPU64InstrInfo.td. Additional i64 operations
        should be added to this file and not to SPUInstrInfo.td.
      
      llvm-svn: 61447
      8233527b
  12. Dec 10, 2008
    • Scott Michel's avatar
      CellSPU: · a2495508
      Scott Michel authored
      - Fix bug 3185, with misc other cleanups.
      - Needed to implement SPUInstrInfo::InsertBranch(). CAUTION: Not sure what
        gets or needs to get passed to InsertBranch() to insert a conditional
        branch. This will abort for now until a good test case shows up.
      
      llvm-svn: 60811
      a2495508
  13. Dec 04, 2008
    • Scott Michel's avatar
      CellSPU: Fix bug 3055 · ea3c49d4
      Scott Michel authored
      - Add v4f32, v2f64 to LowerVECTOR_SHUFFLE
      - Look for vector rotate in shuffle elements, generate a vector rotate
        instead of a full-blown shuffle when opportunity presents itself.
      - Generate larger test harness and fix a few interesting but obscure bugs.
      
      llvm-svn: 60552
      ea3c49d4
    • Scott Michel's avatar
      CellSPU: · 40f54d22
      Scott Michel authored
      - First patch from Nehal Desai, a new contributor at Aerospace. Nehal's patch
        fixes sign/zero/any-extending loads for integers and floating point. Example
        code, compiled w/o debugging or optimization where he first noticed the bug:
      
        int main(void) {
          float a = 99.0;
          printf("%d\n", a);
          return 0;
        }
      
        Verified that this code actually works on a Cell SPU.
      
      Changes by Scott Michel:
      - Fix bug in the value type list constructed by SPUISD::LDRESULT to include
        both the load result's result and chain, not just the chain alone.
      - Simplify LowerLOAD and remove extraneous and unnecessary chains.
      - Remove unused SPUISD pseudo instructions.
      
      llvm-svn: 60526
      40f54d22
  14. Dec 03, 2008
  15. Dec 02, 2008
    • Scott Michel's avatar
      CellSPU: · 7364025f
      Scott Michel authored
      - Incorporate Tilmann Scheller's ISD::TRUNCATE custom lowering patch
      - Update SPU calling convention info, even if it's not used yet (but can be
        at some point or another)
      - Ensure that any-extended f32 loads are custom lowered, especially when
        they're promoted for use in printf.
      
      llvm-svn: 60438
      7364025f
  16. Dec 01, 2008
    • Scott Michel's avatar
      CellSPU: · 08a4e204
      Scott Michel authored
      - Fix v2[if]64 vector insertion code before IBM files a bug report.
      - Ensure that zero (0) offsets relative to $sp don't trip an assert
        (add $sp, 0 gets legalized to $sp alone, tripping an assert)
      - Shuffle masks passed to SPUISD::SHUFB are now v16i8 or v4i32
      
      llvm-svn: 60358
      08a4e204
  17. Nov 25, 2008
  18. Nov 24, 2008
    • Scott Michel's avatar
      CellSPU: · efc8c7a2
      Scott Michel authored
      (a) Improve the extract element code: there's no need to do gymnastics with
          rotates into the preferred slot if a shuffle will do the same thing.
      (b) Rename a couple of SPUISD pseudo-instructions for readability and better
          semantic correspondence.
      (c) Fix i64 sign/any/zero extension lowering.
      
      llvm-svn: 59965
      efc8c7a2
  19. Nov 23, 2008
  20. Nov 21, 2008
    • Scott Michel's avatar
      CellSPU: · c6918c1f
      Scott Michel authored
      (a) Fix bgs 3052, 3057
      (b) Incorporate Duncan's suggestions re: i1 promotion
      (c) Indentation updates.
      
      llvm-svn: 59790
      c6918c1f
  21. Nov 11, 2008
  22. Oct 12, 2008
  23. Jul 22, 2008
  24. Jun 03, 2008
  25. Apr 30, 2008
  26. Mar 20, 2008
  27. Mar 10, 2008
  28. Mar 06, 2008
  29. Feb 23, 2008
    • Scott Michel's avatar
      Merge current work back to tree to minimize diffs and drift. Major highlights · 7d5eaec6
      Scott Michel authored
      for CellSPU modifications:
      
      - SPUInstrInfo.td refactoring: "multiclass" really is _your_ friend.
      - Other improvements based on refactoring effort in SPUISelLowering.cpp,
        esp. in SPUISelLowering::PerformDAGCombine(), where zero amount shifts and
        rotates are now eliminiated, other scalar-to-vector-to-scalar silliness
        is also eliminated.
      - 64-bit operations are being implemented, _muldi3.c gcc runtime now
        compiles and generates the right code. More work still needs to be done.
      
      llvm-svn: 47532
      7d5eaec6
  30. Feb 14, 2008
  31. Jan 30, 2008
    • Scott Michel's avatar
      More cleanups for CellSPU: · bb713ae0
      Scott Michel authored
      - Expand tabs... (poss 80-col violations, will get them later...)
      - Consolidate logic for SelectDFormAddr and SelectDForm2Addr into a single
        function, simplifying maintenance. Also reduced custom instruction
        generation for SPUvecinsert/INSERT_MASK.
      
      llvm-svn: 46544
      bb713ae0
  32. Jan 29, 2008
    • Scott Michel's avatar
      Overhaul Cell SPU's addressing mode internals so that there are now · ceae3bbf
      Scott Michel authored
      only two addressing mode nodes, SPUaform and SPUindirect (vice the
      three previous ones, SPUaform, SPUdform and SPUxform). This improves
      code somewhat because we now avoid using reg+reg addressing when
      it can be avoided. It also simplifies the address selection logic,
      which was the main point for doing this.
      
      Also, for various global variables that would be loaded using SPU's
      A-form addressing, prefer D-form offs[reg] addressing, keeping the
      base in a register if the variable is used more than once.
      
      llvm-svn: 46483
      ceae3bbf
  33. Jan 17, 2008
    • Scott Michel's avatar
      Forward progress: crtbegin.c now compiles successfully! · e4d3e3c0
      Scott Michel authored
      Fixed CellSPU's A-form (local store) address mode, so that all globals,
      externals, constant pool and jump table symbols are now wrapped within
      a SPUISD::AFormAddr pseudo-instruction. This now identifies all local
      store memory addresses, although it requires a bit of legerdemain during
      instruction selection to properly select loads to and stores from local
      store, properly generating "LQA" instructions.
      
      Also added mul_ops.ll test harness for exercising integer multiplication.
      
      llvm-svn: 46142
      e4d3e3c0
  34. Jan 11, 2008
    • Scott Michel's avatar
      More CellSPU refinement and progress: · 8d5841ae
      Scott Michel authored
      - Cleaned up custom load/store logic, common code is now shared [see note
        below], cleaned up address modes
      
      - More test cases: various intrinsics, structure element access (load/store
        test), updated target data strings, indirect function calls.
      
      Note: This patch contains a refactoring of the LoadSDNode and StoreSDNode
      structures: they now share a common base class, LSBaseSDNode, that
      provides an interface to their common functionality. There is some hackery
      to access the proper operand depending on the derived class; otherwise,
      to do a proper job would require finding and rearranging the SDOperands
      sent to StoreSDNode's constructor. The current refactor errs on the
      side of being conservatively and backwardly compatible while providing
      functionality that reduces redundant code for targets where loads and
      stores are custom-lowered.
      
      llvm-svn: 45851
      8d5841ae
  35. Jan 07, 2008
  36. Jan 06, 2008
    • Chris Lattner's avatar
      Change the 'isStore' inferrer to look for 'SDNPMayStore' · a348f55e
      Chris Lattner authored
      instead of "ISD::STORE".  This allows us to mark target-specific dag
      nodes as storing (such as ppc byteswap stores).  This allows us to remove
      more explicit isStore flags from the .td files.
      
      Finally, add a warning for when a .td file contains an explicit 
      isStore and tblgen is able to infer it.
      
      llvm-svn: 45654
      a348f55e
  37. Dec 29, 2007
Loading