CodeGenIntrinsics.h revision ee4fa1977dd3a495a8857eef924ee5961db765c6
19e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner//===- CodeGenIntrinsic.h - Intrinsic Class Wrapper ------------*- C++ -*--===// 29e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner// 39e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner// The LLVM Compiler Infrastructure 49e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner// 53060910e290949a9ac5eda8726d030790c4d60ffChris Lattner// This file is distributed under the University of Illinois Open Source 63060910e290949a9ac5eda8726d030790c4d60ffChris Lattner// 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> 1943fbbc36dc64243a1a57b072d37bccf6dad4d3cbChris Lattner#include "llvm/CodeGen/ValueTypes.h" 209e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 219e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattnernamespace llvm { 229e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner class Record; 239e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner class RecordKeeper; 248850a1bcef0c2a785f918395fe0a05054914b349Chris Lattner class CodeGenTarget; 259e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 269e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner struct CodeGenIntrinsic { 27c4de3dec62c3f60ae7297f93c19c799c403c2e9fReid Spencer Record *TheDef; // The actual record defining this intrinsic. 289e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner std::string Name; // The name of the LLVM function "llvm.bswap.i32" 299e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner std::string EnumName; // The name of the enum "bswap_i32" 30022f64fbbc4669623e79b805379266fed519017dChris Lattner std::string GCCBuiltinName;// Name of the corresponding GCC builtin, or "". 313f8b8913bc9cb232871445eefa8654caf7f9986fChris Lattner std::string TargetPrefix; // Target prefix, e.g. "ppc" for t-s intrinsics. 32022f64fbbc4669623e79b805379266fed519017dChris Lattner 336a160fba223a472f8ce4d0adef044660f69b4417Chris Lattner /// ArgVTs - The MVT::ValueType for each argument type. Note that this list 346a160fba223a472f8ce4d0adef044660f69b4417Chris Lattner /// is only populated when in the context of a target .td file. When 356a160fba223a472f8ce4d0adef044660f69b4417Chris Lattner /// building Intrinsics.td, this isn't available, because we don't know the 366a160fba223a472f8ce4d0adef044660f69b4417Chris Lattner /// target pointer size. 3743fbbc36dc64243a1a57b072d37bccf6dad4d3cbChris Lattner std::vector<MVT::ValueType> ArgVTs; 3843fbbc36dc64243a1a57b072d37bccf6dad4d3cbChris Lattner 3918faf5d9f7f89130b9e3304965b81e1c70ebb75cChris Lattner /// ArgTypeDefs - The records for each argument type. 4018faf5d9f7f89130b9e3304965b81e1c70ebb75cChris Lattner /// 4118faf5d9f7f89130b9e3304965b81e1c70ebb75cChris Lattner std::vector<Record*> ArgTypeDefs; 4218faf5d9f7f89130b9e3304965b81e1c70ebb75cChris Lattner 439e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner // Memory mod/ref behavior of this intrinsic. 449e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner enum { 459e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner NoMem, ReadArgMem, ReadMem, WriteArgMem, WriteMem 469e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner } ModRef; 479e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 48c4de3dec62c3f60ae7297f93c19c799c403c2e9fReid Spencer // This is set to true if the intrinsic is overloaded by its argument 49c4de3dec62c3f60ae7297f93c19c799c403c2e9fReid Spencer // types. 50c4de3dec62c3f60ae7297f93c19c799c403c2e9fReid Spencer bool isOverloaded; 51c4de3dec62c3f60ae7297f93c19c799c403c2e9fReid Spencer 52ee4fa1977dd3a495a8857eef924ee5961db765c6Dan Gohman CodeGenIntrinsic(Record *R); 539e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner }; 549e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 559e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner /// LoadIntrinsics - Read all of the intrinsics defined in the specified 569e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner /// .td file. 579e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner std::vector<CodeGenIntrinsic> LoadIntrinsics(const RecordKeeper &RC); 589e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner} 599e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner 609e493cfcc32aee58e6750ce1efa52d5c3bc3f893Chris Lattner#endif 61