llvm-6502/utils/TableGen/CodeGenIntrinsics.h
Reid Spencer c4de3dec62 For PR1297:
Implement code generation for overloaded intrinsic functions. The basic
difference is that "actual" argument types must be provided when
constructing intrinsic names and types. Also, for recognition, only the
prefix is examined. If it matches, the suffix is assumed to match. The
suffix is checked by the Verifier, however.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35539 91177308-0d34-0410-b5e6-96231b3b80d8
2007-04-01 07:20:02 +00:00

65 lines
2.2 KiB
C++

//===- CodeGenIntrinsic.h - Intrinsic Class Wrapper ------------*- C++ -*--===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by Chris Lattner and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines a wrapper class for the 'Intrinsic' TableGen class.
//
//===----------------------------------------------------------------------===//
#ifndef CODEGEN_INTRINSIC_H
#define CODEGEN_INTRINSIC_H
#include <string>
#include <vector>
#include "llvm/CodeGen/ValueTypes.h"
namespace llvm {
class Record;
class RecordKeeper;
class CodeGenTarget;
struct CodeGenIntrinsic {
Record *TheDef; // The actual record defining this intrinsic.
std::string Name; // The name of the LLVM function "llvm.bswap.i32"
std::string EnumName; // The name of the enum "bswap_i32"
std::string GCCBuiltinName;// Name of the corresponding GCC builtin, or "".
std::string TargetPrefix; // Target prefix, e.g. "ppc" for t-s intrinsics.
/// ArgTypes - The type primitive enum value for the return value and all
/// of the arguments. These are things like Type::Int32TyID.
std::vector<std::string> ArgTypes;
/// ArgVTs - The MVT::ValueType for each argument type. Note that this list
/// is only populated when in the context of a target .td file. When
/// building Intrinsics.td, this isn't available, because we don't know the
/// target pointer size.
std::vector<MVT::ValueType> ArgVTs;
/// ArgTypeDefs - The records for each argument type.
///
std::vector<Record*> ArgTypeDefs;
// Memory mod/ref behavior of this intrinsic.
enum {
NoMem, ReadArgMem, ReadMem, WriteArgMem, WriteMem
} ModRef;
// This is set to true if the intrinsic is overloaded by its argument
// types.
bool isOverloaded;
CodeGenIntrinsic(Record *R, CodeGenTarget *CGT);
};
/// LoadIntrinsics - Read all of the intrinsics defined in the specified
/// .td file.
std::vector<CodeGenIntrinsic> LoadIntrinsics(const RecordKeeper &RC);
}
#endif