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