/3rd_party/llvm/lib/Target/CellSPU/SPUSchedule.td

https://code.google.com/p/softart/ · Unknown · 59 lines · 54 code · 5 blank · 0 comment · 0 complexity · 6e6078fa70a8bb86439a394b2f76688b MD5 · raw file

  1. //===-- SPUSchedule.td - Cell Scheduling Definitions -------*- tablegen -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. //===----------------------------------------------------------------------===//
  10. // Even pipeline:
  11. def EVEN_UNIT : FuncUnit; // Even execution unit: (PC & 0x7 == 000)
  12. def ODD_UNIT : FuncUnit; // Odd execution unit: (PC & 0x7 == 100)
  13. //===----------------------------------------------------------------------===//
  14. // Instruction Itinerary classes used for Cell SPU
  15. //===----------------------------------------------------------------------===//
  16. def LoadStore : InstrItinClass; // ODD_UNIT
  17. def BranchHints : InstrItinClass; // ODD_UNIT
  18. def BranchResolv : InstrItinClass; // ODD_UNIT
  19. def ChanOpSPR : InstrItinClass; // ODD_UNIT
  20. def ShuffleOp : InstrItinClass; // ODD_UNIT
  21. def SelectOp : InstrItinClass; // ODD_UNIT
  22. def GatherOp : InstrItinClass; // ODD_UNIT
  23. def LoadNOP : InstrItinClass; // ODD_UNIT
  24. def ExecNOP : InstrItinClass; // EVEN_UNIT
  25. def SPrecFP : InstrItinClass; // EVEN_UNIT
  26. def DPrecFP : InstrItinClass; // EVEN_UNIT
  27. def FPInt : InstrItinClass; // EVEN_UNIT (FP<->integer)
  28. def ByteOp : InstrItinClass; // EVEN_UNIT
  29. def IntegerOp : InstrItinClass; // EVEN_UNIT
  30. def IntegerMulDiv: InstrItinClass; // EVEN_UNIT
  31. def RotShiftVec : InstrItinClass; // EVEN_UNIT Inter vector
  32. def RotShiftQuad : InstrItinClass; // ODD_UNIT Entire quad
  33. def ImmLoad : InstrItinClass; // EVEN_UNIT
  34. /* Note: The itinerary for the Cell SPU is somewhat contrived... */
  35. def SPUItineraries : ProcessorItineraries<[ODD_UNIT, EVEN_UNIT], [], [
  36. InstrItinData<LoadStore , [InstrStage<6, [ODD_UNIT]>]>,
  37. InstrItinData<BranchHints , [InstrStage<6, [ODD_UNIT]>]>,
  38. InstrItinData<BranchResolv, [InstrStage<4, [ODD_UNIT]>]>,
  39. InstrItinData<ChanOpSPR , [InstrStage<6, [ODD_UNIT]>]>,
  40. InstrItinData<ShuffleOp , [InstrStage<4, [ODD_UNIT]>]>,
  41. InstrItinData<SelectOp , [InstrStage<4, [ODD_UNIT]>]>,
  42. InstrItinData<GatherOp , [InstrStage<4, [ODD_UNIT]>]>,
  43. InstrItinData<LoadNOP , [InstrStage<1, [ODD_UNIT]>]>,
  44. InstrItinData<ExecNOP , [InstrStage<1, [EVEN_UNIT]>]>,
  45. InstrItinData<SPrecFP , [InstrStage<6, [EVEN_UNIT]>]>,
  46. InstrItinData<DPrecFP , [InstrStage<13, [EVEN_UNIT]>]>,
  47. InstrItinData<FPInt , [InstrStage<2, [EVEN_UNIT]>]>,
  48. InstrItinData<ByteOp , [InstrStage<4, [EVEN_UNIT]>]>,
  49. InstrItinData<IntegerOp , [InstrStage<2, [EVEN_UNIT]>]>,
  50. InstrItinData<RotShiftVec , [InstrStage<4, [EVEN_UNIT]>]>,
  51. InstrItinData<RotShiftQuad, [InstrStage<4, [ODD_UNIT]>]>,
  52. InstrItinData<IntegerMulDiv,[InstrStage<7, [EVEN_UNIT]>]>,
  53. InstrItinData<ImmLoad , [InstrStage<2, [EVEN_UNIT]>]>
  54. ]>;