llvm.org GIT mirror llvm / release_32 lib / Target / CellSPU / SPUSubtarget.h
release_32

Tree @release_32 (Download .tar.gz)

SPUSubtarget.h @release_32

4ee451d
564427e
 
 
4ee451d
 
564427e
 
 
5b1b448
564427e
 
 
4ee451d
 
564427e
5b1b448
ab8be96
564427e
 
9421470
385e930
9421470
564427e
 
0ddff1b
564427e
 
 
db01c8b
564427e
 
 
 
9421470
564427e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3be0340
564427e
276365d
 
564427e
 
 
0ddff1b
41a0243
564427e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3574eca
564427e
3574eca
564427e
505faa6
59a9178
564427e
c2ebfd4
 
5b1b448
c2ebfd4
564427e
 
 
 
//===-- SPUSubtarget.h - Define Subtarget for the Cell SPU ------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file declares the Cell SPU-specific subclass of TargetSubtargetInfo.
//
//===----------------------------------------------------------------------===//

#ifndef CELLSUBTARGET_H
#define CELLSUBTARGET_H

#include "llvm/Target/TargetSubtargetInfo.h"
#include "llvm/MC/MCInstrItineraries.h"
#include <string>

#define GET_SUBTARGETINFO_HEADER
#include "SPUGenSubtargetInfo.inc"

namespace llvm {
  class GlobalValue;
  class StringRef;

  namespace SPU {
    enum {
      PROC_NONE,
      DEFAULT_PROC
    };
  }
    
  class SPUSubtarget : public SPUGenSubtargetInfo {
  protected:
    /// stackAlignment - The minimum alignment known to hold of the stack frame
    /// on entry to the function and which must be maintained by every function.
    unsigned StackAlignment;
    
    /// Selected instruction itineraries (one entry per itinerary class.)
    InstrItineraryData InstrItins;

    /// Which SPU processor (this isn't really used, but it's there to keep
    /// the C compiler happy)
    unsigned ProcDirective;

    /// Use (assume) large memory -- effectively disables the LQA/STQA
    /// instructions that assume 259K local store.
    bool UseLargeMem;
    
  public:
    /// This constructor initializes the data members to match that
    /// of the specified triple.
    ///
    SPUSubtarget(const std::string &TT, const std::string &CPU,
                 const std::string &FS);
    
    /// ParseSubtargetFeatures - Parses features string setting specified 
    /// subtarget options.  Definition of function is auto generated by tblgen.
    void ParseSubtargetFeatures(StringRef CPU, StringRef FS);

    /// SetJITMode - This is called to inform the subtarget info that we are
    /// producing code for the JIT.
    void SetJITMode();

    /// getStackAlignment - Returns the minimum alignment known to hold of the
    /// stack frame on entry to the function and which must be maintained by
    /// every function for this subtarget.
    unsigned getStackAlignment() const { return StackAlignment; }
    
    /// getInstrItins - Return the instruction itineraies based on subtarget 
    /// selection.
    const InstrItineraryData &getInstrItineraryData() const {
      return InstrItins;
    }

    /// Use large memory addressing predicate
    bool usingLargeMem() const {
      return UseLargeMem;
    }

    /// getDataLayoutString - Return the pointer size and type alignment
    /// properties of this subtarget.
    const char *getDataLayoutString() const {
      return "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128"
             "-i16:16:128-i8:8:128-i1:8:128-a:0:128-v64:64:128-v128:128:128"
             "-s:128:128-n32:64";
    }

    bool enablePostRAScheduler(CodeGenOpt::Level OptLevel,
                               TargetSubtargetInfo::AntiDepBreakMode& Mode,
                               RegClassVector& CriticalPathRCs) const;
  };
} // End llvm namespace

#endif