1c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines//===- AMDGPUIntrinsicInfo.cpp - AMDGPU Intrinsic Information ---*- C++ -*-===// 2f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 3f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// The LLVM Compiler Infrastructure 4f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 5f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// This file is distributed under the University of Illinois Open Source 6f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// License. See LICENSE.TXT for details. 7f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 8f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//==-----------------------------------------------------------------------===// 9f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 10f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \file 11f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \brief AMDGPU Implementation of the IntrinsicInfo class. 12f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 13f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===-----------------------------------------------------------------------===// 14f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 15c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#include "AMDGPUIntrinsicInfo.h" 16f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUSubtarget.h" 170b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/DerivedTypes.h" 180b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Intrinsics.h" 190b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Module.h" 20f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 21f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardusing namespace llvm; 22f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 23f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN 24f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUGenIntrinsics.inc" 25f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#undef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN 26f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 2737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen HinesAMDGPUIntrinsicInfo::AMDGPUIntrinsicInfo() 28c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines : TargetIntrinsicInfo() {} 29f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 30c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesstd::string AMDGPUIntrinsicInfo::getName(unsigned IntrID, Type **Tys, 31c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines unsigned numTys) const { 32c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines static const char *const names[] = { 33f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define GET_INTRINSIC_NAME_TABLE 34f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUGenIntrinsics.inc" 35f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#undef GET_INTRINSIC_NAME_TABLE 36f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard }; 37f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 38f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard if (IntrID < Intrinsic::num_intrinsics) { 39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return nullptr; 40f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard } 41c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines assert(IntrID < AMDGPUIntrinsic::num_AMDGPU_intrinsics && 42c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines "Invalid intrinsic ID"); 43f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 44f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard std::string Result(names[IntrID - Intrinsic::num_intrinsics]); 45f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard return Result; 46f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 47f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 48c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesunsigned AMDGPUIntrinsicInfo::lookupName(const char *Name, 49c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines unsigned Len) const { 50431c73bc336b1d68171bc719af8a532078869c0fRafael Espindola if (!StringRef(Name, Len).startswith("llvm.")) 51431c73bc336b1d68171bc719af8a532078869c0fRafael Espindola return 0; // All intrinsics start with 'llvm.' 52431c73bc336b1d68171bc719af8a532078869c0fRafael Espindola 53f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define GET_FUNCTION_RECOGNIZER 54f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUGenIntrinsics.inc" 55f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#undef GET_FUNCTION_RECOGNIZER 56c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines AMDGPUIntrinsic::ID IntrinsicID = 57c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines (AMDGPUIntrinsic::ID)Intrinsic::not_intrinsic; 58f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard IntrinsicID = getIntrinsicForGCCBuiltin("AMDGPU", Name); 59f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 60f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard if (IntrinsicID != (AMDGPUIntrinsic::ID)Intrinsic::not_intrinsic) { 61f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard return IntrinsicID; 62f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard } 63f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard return 0; 64f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 65f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 66c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesbool AMDGPUIntrinsicInfo::isOverloaded(unsigned id) const { 67c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines// Overload Table 68f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define GET_INTRINSIC_OVERLOAD_TABLE 69f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUGenIntrinsics.inc" 70f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#undef GET_INTRINSIC_OVERLOAD_TABLE 71f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 72f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 73c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen HinesFunction *AMDGPUIntrinsicInfo::getDeclaration(Module *M, unsigned IntrID, 74c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Type **Tys, 75c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines unsigned numTys) const { 7608f2d9379c486a0e4b950e476913ee97b38ec333Tom Stellard llvm_unreachable("Not implemented"); 77f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 78