blob: e94bb6013d83ed51741c0b102ba706f97d3b3baf [file] [log] [blame]
Matt Arsenaultc791f392014-06-23 18:00:31 +00001//===- AMDGPUIntrinsicInfo.cpp - AMDGPU Intrinsic Information ---*- C++ -*-===//
Tom Stellard75aadc22012-12-11 21:25:42 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//==-----------------------------------------------------------------------===//
9//
10/// \file
11/// \brief AMDGPU Implementation of the IntrinsicInfo class.
12//
13//===-----------------------------------------------------------------------===//
14
Matt Arsenaultc791f392014-06-23 18:00:31 +000015#include "AMDGPUIntrinsicInfo.h"
Tom Stellard75aadc22012-12-11 21:25:42 +000016#include "AMDGPUSubtarget.h"
Chandler Carruth9fb823b2013-01-02 11:36:10 +000017#include "llvm/IR/DerivedTypes.h"
18#include "llvm/IR/Intrinsics.h"
19#include "llvm/IR/Module.h"
Tom Stellard75aadc22012-12-11 21:25:42 +000020
21using namespace llvm;
22
23#define GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN
24#include "AMDGPUGenIntrinsics.inc"
25#undef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN
26
Eric Christopherac4b69e2014-07-25 22:22:39 +000027AMDGPUIntrinsicInfo::AMDGPUIntrinsicInfo()
Matt Arsenaultc791f392014-06-23 18:00:31 +000028 : TargetIntrinsicInfo() {}
Tom Stellard75aadc22012-12-11 21:25:42 +000029
Matt Arsenaultc791f392014-06-23 18:00:31 +000030std::string AMDGPUIntrinsicInfo::getName(unsigned IntrID, Type **Tys,
31 unsigned numTys) const {
32 static const char *const names[] = {
Tom Stellard75aadc22012-12-11 21:25:42 +000033#define GET_INTRINSIC_NAME_TABLE
34#include "AMDGPUGenIntrinsics.inc"
35#undef GET_INTRINSIC_NAME_TABLE
36 };
37
38 if (IntrID < Intrinsic::num_intrinsics) {
Craig Topper062a2ba2014-04-25 05:30:21 +000039 return nullptr;
Tom Stellard75aadc22012-12-11 21:25:42 +000040 }
Matt Arsenaultc791f392014-06-23 18:00:31 +000041 assert(IntrID < AMDGPUIntrinsic::num_AMDGPU_intrinsics &&
42 "Invalid intrinsic ID");
Tom Stellard75aadc22012-12-11 21:25:42 +000043
44 std::string Result(names[IntrID - Intrinsic::num_intrinsics]);
45 return Result;
46}
47
Matt Arsenaultc791f392014-06-23 18:00:31 +000048unsigned AMDGPUIntrinsicInfo::lookupName(const char *Name,
49 unsigned Len) const {
Rafael Espindolaebd8e382013-05-22 14:57:42 +000050 if (!StringRef(Name, Len).startswith("llvm."))
51 return 0; // All intrinsics start with 'llvm.'
52
Tom Stellard75aadc22012-12-11 21:25:42 +000053#define GET_FUNCTION_RECOGNIZER
54#include "AMDGPUGenIntrinsics.inc"
55#undef GET_FUNCTION_RECOGNIZER
Matt Arsenaultc791f392014-06-23 18:00:31 +000056 AMDGPUIntrinsic::ID IntrinsicID =
57 (AMDGPUIntrinsic::ID)Intrinsic::not_intrinsic;
Tom Stellard75aadc22012-12-11 21:25:42 +000058 IntrinsicID = getIntrinsicForGCCBuiltin("AMDGPU", Name);
59
60 if (IntrinsicID != (AMDGPUIntrinsic::ID)Intrinsic::not_intrinsic) {
61 return IntrinsicID;
62 }
63 return 0;
64}
65
Matt Arsenaultc791f392014-06-23 18:00:31 +000066bool AMDGPUIntrinsicInfo::isOverloaded(unsigned id) const {
67// Overload Table
Tom Stellard75aadc22012-12-11 21:25:42 +000068#define GET_INTRINSIC_OVERLOAD_TABLE
69#include "AMDGPUGenIntrinsics.inc"
70#undef GET_INTRINSIC_OVERLOAD_TABLE
71}
72
Matt Arsenaultc791f392014-06-23 18:00:31 +000073Function *AMDGPUIntrinsicInfo::getDeclaration(Module *M, unsigned IntrID,
74 Type **Tys,
75 unsigned numTys) const {
Tom Stellard6975d352012-12-13 19:38:52 +000076 llvm_unreachable("Not implemented");
Tom Stellard75aadc22012-12-11 21:25:42 +000077}