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