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