1249259Sdim//===- AMDILIntrinsicInfo.cpp - AMDGPU Intrinsic Information ------*- C++ -*-===// 2249259Sdim// 3249259Sdim// The LLVM Compiler Infrastructure 4249259Sdim// 5249259Sdim// This file is distributed under the University of Illinois Open Source 6249259Sdim// License. See LICENSE.TXT for details. 7249259Sdim// 8249259Sdim//==-----------------------------------------------------------------------===// 9249259Sdim// 10249259Sdim/// \file 11249259Sdim/// \brief AMDGPU Implementation of the IntrinsicInfo class. 12249259Sdim// 13249259Sdim//===-----------------------------------------------------------------------===// 14249259Sdim 15249259Sdim#include "AMDILIntrinsicInfo.h" 16249259Sdim#include "AMDGPUSubtarget.h" 17249259Sdim#include "llvm/IR/DerivedTypes.h" 18249259Sdim#include "llvm/IR/Intrinsics.h" 19249259Sdim#include "llvm/IR/Module.h" 20249259Sdim 21249259Sdimusing namespace llvm; 22249259Sdim 23249259Sdim#define GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN 24249259Sdim#include "AMDGPUGenIntrinsics.inc" 25249259Sdim#undef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN 26249259Sdim 27249259SdimAMDGPUIntrinsicInfo::AMDGPUIntrinsicInfo(TargetMachine *tm) 28249259Sdim : TargetIntrinsicInfo() { 29249259Sdim} 30249259Sdim 31249259Sdimstd::string 32249259SdimAMDGPUIntrinsicInfo::getName(unsigned int IntrID, Type **Tys, 33249259Sdim unsigned int numTys) const { 34249259Sdim static const char* const names[] = { 35249259Sdim#define GET_INTRINSIC_NAME_TABLE 36249259Sdim#include "AMDGPUGenIntrinsics.inc" 37249259Sdim#undef GET_INTRINSIC_NAME_TABLE 38249259Sdim }; 39249259Sdim 40249259Sdim if (IntrID < Intrinsic::num_intrinsics) { 41249259Sdim return 0; 42249259Sdim } 43249259Sdim assert(IntrID < AMDGPUIntrinsic::num_AMDGPU_intrinsics 44249259Sdim && "Invalid intrinsic ID"); 45249259Sdim 46249259Sdim std::string Result(names[IntrID - Intrinsic::num_intrinsics]); 47249259Sdim return Result; 48249259Sdim} 49249259Sdim 50249259Sdimunsigned int 51249259SdimAMDGPUIntrinsicInfo::lookupName(const char *Name, unsigned int Len) const { 52263508Sdim if (!StringRef(Name, Len).startswith("llvm.")) 53263508Sdim return 0; // All intrinsics start with 'llvm.' 54263508Sdim 55249259Sdim#define GET_FUNCTION_RECOGNIZER 56249259Sdim#include "AMDGPUGenIntrinsics.inc" 57249259Sdim#undef GET_FUNCTION_RECOGNIZER 58249259Sdim AMDGPUIntrinsic::ID IntrinsicID 59249259Sdim = (AMDGPUIntrinsic::ID)Intrinsic::not_intrinsic; 60249259Sdim IntrinsicID = getIntrinsicForGCCBuiltin("AMDGPU", Name); 61249259Sdim 62249259Sdim if (IntrinsicID != (AMDGPUIntrinsic::ID)Intrinsic::not_intrinsic) { 63249259Sdim return IntrinsicID; 64249259Sdim } 65249259Sdim return 0; 66249259Sdim} 67249259Sdim 68249259Sdimbool 69249259SdimAMDGPUIntrinsicInfo::isOverloaded(unsigned id) const { 70249259Sdim // Overload Table 71249259Sdim#define GET_INTRINSIC_OVERLOAD_TABLE 72249259Sdim#include "AMDGPUGenIntrinsics.inc" 73249259Sdim#undef GET_INTRINSIC_OVERLOAD_TABLE 74249259Sdim} 75249259Sdim 76249259SdimFunction* 77249259SdimAMDGPUIntrinsicInfo::getDeclaration(Module *M, unsigned IntrID, 78249259Sdim Type **Tys, 79249259Sdim unsigned numTys) const { 80249259Sdim llvm_unreachable("Not implemented"); 81249259Sdim} 82