1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//===- AMDILIntrinsicInfo.cpp - AMDIL Intrinsic Information ------*- C++ -*-===// 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// The LLVM Compiler Infrastructure 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// This file is distributed under the University of Illinois Open Source 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// License. See LICENSE.TXT for details. 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//==-----------------------------------------------------------------------===// 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// This file contains the AMDIL Implementation of the IntrinsicInfo class. 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//===-----------------------------------------------------------------------===// 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "AMDILIntrinsicInfo.h" 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "AMDIL.h" 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "AMDGPUSubtarget.h" 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "llvm/DerivedTypes.h" 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "llvm/Intrinsics.h" 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "llvm/Module.h" 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgusing namespace llvm; 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "AMDGPUGenIntrinsics.inc" 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgAMDGPUIntrinsicInfo::AMDGPUIntrinsicInfo(TargetMachine *tm) 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org : TargetIntrinsicInfo() 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstd::string 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgAMDGPUIntrinsicInfo::getName(unsigned int IntrID, Type **Tys, 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int numTys) const 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static const char* const names[] = { 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GET_INTRINSIC_NAME_TABLE 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "AMDGPUGenIntrinsics.inc" 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GET_INTRINSIC_NAME_TABLE 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }; 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org //assert(!isOverloaded(IntrID) 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org //&& "AMDGPU Intrinsics are not overloaded"); 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (IntrID < Intrinsic::num_intrinsics) { 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(IntrID < AMDGPUIntrinsic::num_AMDGPU_intrinsics 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && "Invalid intrinsic ID"); 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org std::string Result(names[IntrID - Intrinsic::num_intrinsics]); 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return Result; 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned int 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgAMDGPUIntrinsicInfo::lookupName(const char *Name, unsigned int Len) const 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GET_FUNCTION_RECOGNIZER 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "AMDGPUGenIntrinsics.inc" 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GET_FUNCTION_RECOGNIZER 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AMDGPUIntrinsic::ID IntrinsicID 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org = (AMDGPUIntrinsic::ID)Intrinsic::not_intrinsic; 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org IntrinsicID = getIntrinsicForGCCBuiltin("AMDIL", Name); 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (IntrinsicID != (AMDGPUIntrinsic::ID)Intrinsic::not_intrinsic) { 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return IntrinsicID; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgAMDGPUIntrinsicInfo::isOverloaded(unsigned id) const 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org // Overload Table 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GET_INTRINSIC_OVERLOAD_TABLE 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "AMDGPUGenIntrinsics.inc" 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GET_INTRINSIC_OVERLOAD_TABLE 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/// This defines the "getAttributes(ID id)" method. 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GET_INTRINSIC_ATTRIBUTES 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "AMDGPUGenIntrinsics.inc" 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef GET_INTRINSIC_ATTRIBUTES 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFunction* 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgAMDGPUIntrinsicInfo::getDeclaration(Module *M, unsigned IntrID, 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Type **Tys, 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned numTys) const 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org //Silence a warning 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AttrListPtr List = getAttributes((AMDGPUIntrinsic::ID)IntrID); 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void)List; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(!"Not implemented"); 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 94