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