XCoreTargetTransformInfo.cpp revision 261991
1249259Sdim//===-- XCoreTargetTransformInfo.cpp - XCore specific TTI pass ----------------===// 2249259Sdim// 3353358Sdim// The LLVM Compiler Infrastructure 4353358Sdim// 5353358Sdim// This file is distributed under the University of Illinois Open Source 6249259Sdim// License. See LICENSE.TXT for details. 7249259Sdim// 8249259Sdim//===----------------------------------------------------------------------===// 9249259Sdim/// \file 10249259Sdim/// This file implements a TargetTransformInfo analysis pass specific to the 11249259Sdim/// XCore target machine. It uses the target's detailed information to provide 12249259Sdim/// more precise answers to certain TTI queries, while letting the target 13249259Sdim/// independent and default TTI implementations handle the rest. 14249259Sdim/// 15249259Sdim//===----------------------------------------------------------------------===// 16249259Sdim 17314564Sdim#define DEBUG_TYPE "xcoretti" 18314564Sdim#include "XCore.h" 19249259Sdim#include "llvm/Analysis/TargetTransformInfo.h" 20249259Sdim#include "llvm/Support/Debug.h" 21249259Sdim#include "llvm/Target/TargetLowering.h" 22314564Sdim#include "llvm/Target/CostTable.h" 23314564Sdimusing namespace llvm; 24314564Sdim 25249259Sdim// Declare the pass initialization routine locally as target-specific passes 26249259Sdim// don't havve a target-wide initialization entry point, and so we rely on the 27249259Sdim// pass constructor initialization. 28280031Sdimnamespace llvm { 29280031Sdimvoid initializeXCoreTTIPass(PassRegistry &); 30249259Sdim} 31249259Sdim 32314564Sdimnamespace { 33314564Sdim 34314564Sdimclass XCoreTTI : public ImmutablePass, public TargetTransformInfo { 35321369Sdimpublic: 36314564Sdim XCoreTTI() : ImmutablePass(ID) { 37314564Sdim llvm_unreachable("This pass cannot be directly constructed"); 38314564Sdim } 39280031Sdim 40249259Sdim XCoreTTI(const XCoreTargetMachine *TM) 41249259Sdim : ImmutablePass(ID) { 42249259Sdim initializeXCoreTTIPass(*PassRegistry::getPassRegistry()); 43249259Sdim } 44249259Sdim 45249259Sdim virtual void initializePass() { 46280031Sdim pushTTIStack(this); 47280031Sdim } 48249259Sdim 49249259Sdim virtual void finalizePass() { 50249259Sdim popTTIStack(); 51249259Sdim } 52249259Sdim 53249259Sdim virtual void getAnalysisUsage(AnalysisUsage &AU) const { 54249259Sdim TargetTransformInfo::getAnalysisUsage(AU); 55249259Sdim } 56321369Sdim 57321369Sdim static char ID; 58321369Sdim 59249259Sdim virtual void *getAdjustedAnalysisPointer(const void *ID) { 60249259Sdim if (ID == &TargetTransformInfo::ID) 61249259Sdim return (TargetTransformInfo*)this; 62249259Sdim return this; 63327952Sdim } 64327952Sdim 65327952Sdim unsigned getNumberOfRegisters(bool Vector) const { 66249259Sdim if (Vector) { 67249259Sdim return 0; 68249259Sdim } 69360784Sdim return 12; 70249259Sdim } 71249259Sdim}; 72249259Sdim 73249259Sdim} // end anonymous namespace 74249259Sdim 75309124SdimINITIALIZE_AG_PASS(XCoreTTI, TargetTransformInfo, "xcoretti", 76249259Sdim "XCore Target Transform Info", true, true, false) 77314564Sdimchar XCoreTTI::ID = 0; 78249259Sdim 79249259Sdim 80249259SdimImmutablePass * 81249259Sdimllvm::createXCoreTargetTransformInfoPass(const XCoreTargetMachine *TM) { 82249259Sdim return new XCoreTTI(TM); 83249259Sdim} 84249259Sdim