1a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===- AMDILIntrinsicInfo.cpp - AMDIL Intrinsic Information ------*- C++ -*-===// 2a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 3a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// The LLVM Compiler Infrastructure 4a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 5a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// This file is distributed under the University of Illinois Open Source 6a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// License. See LICENSE.TXT for details. 7a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 8a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//==-----------------------------------------------------------------------===// 9a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 10a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// This file contains the AMDIL Implementation of the IntrinsicInfo class. 11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===-----------------------------------------------------------------------===// 13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 14a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "AMDILIntrinsicInfo.h" 15a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "AMDIL.h" 16b72ab79d73b29ec087d90cf2c698adbab4db5defTom Stellard#include "AMDGPUSubtarget.h" 17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/DerivedTypes.h" 18a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/Intrinsics.h" 19a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/Module.h" 20a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardusing namespace llvm; 22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN 2465917004d99ccb79f709e621f8f6cf66715ffdcaTom Stellard#include "AMDGPUGenIntrinsics.inc" 25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#undef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN 26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 272f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUIntrinsicInfo::AMDGPUIntrinsicInfo(TargetMachine *tm) 28228a6641ccddaf24a993f827af1e97379785985aTom Stellard : TargetIntrinsicInfo() 29a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 30a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 32a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstd::string 332f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUIntrinsicInfo::getName(unsigned int IntrID, Type **Tys, 34a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned int numTys) const 35a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 36a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard static const char* const names[] = { 37a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define GET_INTRINSIC_NAME_TABLE 3865917004d99ccb79f709e621f8f6cf66715ffdcaTom Stellard#include "AMDGPUGenIntrinsics.inc" 39a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#undef GET_INTRINSIC_NAME_TABLE 40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard }; 41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard //assert(!isOverloaded(IntrID) 432f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard //&& "AMDGPU Intrinsics are not overloaded"); 44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (IntrID < Intrinsic::num_intrinsics) { 45a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 0; 46a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 472f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard assert(IntrID < AMDGPUIntrinsic::num_AMDGPU_intrinsics 48a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard && "Invalid intrinsic ID"); 49a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 50a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard std::string Result(names[IntrID - Intrinsic::num_intrinsics]); 51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return Result; 52a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 54a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardunsigned int 552f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUIntrinsicInfo::lookupName(const char *Name, unsigned int Len) const 56a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 57a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define GET_FUNCTION_RECOGNIZER 5865917004d99ccb79f709e621f8f6cf66715ffdcaTom Stellard#include "AMDGPUGenIntrinsics.inc" 59a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#undef GET_FUNCTION_RECOGNIZER 60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard AMDGPUIntrinsic::ID IntrinsicID 61a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard = (AMDGPUIntrinsic::ID)Intrinsic::not_intrinsic; 62cc3907856ed7ec24359eea11fc2231dab680e2c4Tom Stellard IntrinsicID = getIntrinsicForGCCBuiltin("AMDIL", Name); 63cc3907856ed7ec24359eea11fc2231dab680e2c4Tom Stellard 64a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (IntrinsicID != (AMDGPUIntrinsic::ID)Intrinsic::not_intrinsic) { 65a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return IntrinsicID; 66a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 67a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 0; 68a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 69a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 70a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardbool 712f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUIntrinsicInfo::isOverloaded(unsigned id) const 72a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 73a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard // Overload Table 74a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define GET_INTRINSIC_OVERLOAD_TABLE 7565917004d99ccb79f709e621f8f6cf66715ffdcaTom Stellard#include "AMDGPUGenIntrinsics.inc" 76a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#undef GET_INTRINSIC_OVERLOAD_TABLE 77a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 78a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 79a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/// This defines the "getAttributes(ID id)" method. 80a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define GET_INTRINSIC_ATTRIBUTES 8165917004d99ccb79f709e621f8f6cf66715ffdcaTom Stellard#include "AMDGPUGenIntrinsics.inc" 82a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#undef GET_INTRINSIC_ATTRIBUTES 83a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 84a75c6163e605f35b14f26930dd9227e4f337ec9eTom StellardFunction* 852f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUIntrinsicInfo::getDeclaration(Module *M, unsigned IntrID, 86a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard Type **Tys, 87a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard unsigned numTys) const 88a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 89cc3907856ed7ec24359eea11fc2231dab680e2c4Tom Stellard //Silence a warning 90cc3907856ed7ec24359eea11fc2231dab680e2c4Tom Stellard AttrListPtr List = getAttributes((AMDGPUIntrinsic::ID)IntrID); 91cc3907856ed7ec24359eea11fc2231dab680e2c4Tom Stellard (void)List; 9232b83e0366560a77798545880f980adc04b4361fTom Stellard assert(!"Not implemented"); 93a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 94