CodeGenIntrinsics.h revision 3f8b8913bc9cb232871445eefa8654caf7f9986f
19e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner//===- CodeGenIntrinsic.h - Intrinsic Class Wrapper ------------*- C++ -*--===// 29e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner// 39e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner// The LLVM Compiler Infrastructure 49e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner// 5b672d981a8d04e2a9ca1c3a646f1cccb59c26277Chris Lattner// This file was developed by Chris Lattner and is distributed under 69e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner// the University of Illinois Open Source License. See LICENSE.TXT for details. 79e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner// 89e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner//===----------------------------------------------------------------------===// 99e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner// 109e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner// This file defines a wrapper class for the 'Intrinsic' TableGen class. 119e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner// 129e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner//===----------------------------------------------------------------------===// 139e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 149e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner#ifndef CODEGEN_INTRINSIC_H 159e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner#define CODEGEN_INTRINSIC_H 169e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 179e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner#include <string> 189e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner#include <vector> 199e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 209e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattnernamespace llvm { 219e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner class Record; 229e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner class RecordKeeper; 239e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 249e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner struct CodeGenIntrinsic { 259e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner Record *TheDef; // The actual record defining this instruction. 269e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner std::string Name; // The name of the LLVM function "llvm.bswap.i32" 279e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner std::string EnumName; // The name of the enum "bswap_i32" 28022f64fbbc4669623e79b805379266fed519017dChris Lattner std::string GCCBuiltinName;// Name of the corresponding GCC builtin, or "". 293f8b8913bc9cb232871445eefa8654caf7f9986fChris Lattner std::string TargetPrefix; // Target prefix, e.g. "ppc" for t-s intrinsics. 30022f64fbbc4669623e79b805379266fed519017dChris Lattner 31f97a00e681c7a526d49759d0d1b9d327cbf6c04aChris Lattner /// ArgTypes - The type primitive enum value for the return value and all 32f97a00e681c7a526d49759d0d1b9d327cbf6c04aChris Lattner /// of the arguments. These are things like Type::UIntTyID. 33f97a00e681c7a526d49759d0d1b9d327cbf6c04aChris Lattner std::vector<std::string> ArgTypes; 34f97a00e681c7a526d49759d0d1b9d327cbf6c04aChris Lattner 3518faf5d9f7f89130b9e3304965b81e1c70ebb75cChris Lattner /// ArgTypeDefs - The records for each argument type. 3618faf5d9f7f89130b9e3304965b81e1c70ebb75cChris Lattner /// 3718faf5d9f7f89130b9e3304965b81e1c70ebb75cChris Lattner std::vector<Record*> ArgTypeDefs; 3818faf5d9f7f89130b9e3304965b81e1c70ebb75cChris Lattner 399e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner // Memory mod/ref behavior of this intrinsic. 409e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner enum { 419e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner NoMem, ReadArgMem, ReadMem, WriteArgMem, WriteMem 429e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner } ModRef; 439e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 449e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner CodeGenIntrinsic(Record *R); 459e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner }; 469e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 479e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner /// LoadIntrinsics - Read all of the intrinsics defined in the specified 489e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner /// .td file. 499e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner std::vector<CodeGenIntrinsic> LoadIntrinsics(const RecordKeeper &RC); 509e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner} 519e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 529e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner#endif 53