aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/InlineAsm.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-01-24 04:13:11 +0000
committerChris Lattner <sabre@nondot.org>2006-01-24 04:13:11 +0000
commitcc041ba03aed685400197fb938b7a583713d25af (patch)
tree002b884baab37ed1918904254b86eb9f3d39a50f /include/llvm/InlineAsm.h
parent52060a0e7190d7713042f18b1b949d1ae953638f (diff)
downloadexternal_llvm-cc041ba03aed685400197fb938b7a583713d25af.zip
external_llvm-cc041ba03aed685400197fb938b7a583713d25af.tar.gz
external_llvm-cc041ba03aed685400197fb938b7a583713d25af.tar.bz2
Initial checkin of the InlineAsm class
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25570 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/InlineAsm.h')
-rw-r--r--include/llvm/InlineAsm.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/include/llvm/InlineAsm.h b/include/llvm/InlineAsm.h
new file mode 100644
index 0000000..a35825d
--- /dev/null
+++ b/include/llvm/InlineAsm.h
@@ -0,0 +1,89 @@
+//===-- llvm/InlineAsm.h - Class to represent inline asm strings-*- 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 class represents the inline asm strings, which are Value*'s that are
+// used as the callee operand of call instructions.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_INLINEASM_H
+#define LLVM_INLINEASM_H
+
+#include "llvm/Value.h"
+
+namespace llvm {
+
+class AssemblyAnnotationWriter;
+class PointerType;
+class FunctionType;
+class Module;
+template<typename SC> struct ilist_traits;
+template<typename ValueSubClass, typename ItemParentClass, typename SymTabClass,
+ typename SubClass> class SymbolTableListTraits;
+
+class InlineAsm : public Value {
+ friend class SymbolTableListTraits<InlineAsm, Module, Module,
+ ilist_traits<InlineAsm> >;
+ InlineAsm(const InlineAsm &); // do not implement
+ void operator=(const InlineAsm&); // do not implement
+
+ void setParent(Module *Parent);
+ InlineAsm *Prev, *Next;
+ void setNext(InlineAsm *N) { Next = N; }
+ void setPrev(InlineAsm *N) { Prev = N; }
+ InlineAsm *getNext() { return Next; }
+ const InlineAsm *getNext() const { return Next; }
+ InlineAsm *getPrev() { return Prev; }
+ const InlineAsm *getPrev() const { return Prev; }
+
+ Module *Parent;
+ std::string AsmString, Constraints;
+ bool AsmHasSideEffects;
+public:
+ InlineAsm(const FunctionType *Ty, const std::string &AsmString,
+ const std::string &Constraints, bool hasSideEffects,
+ const std::string &Name = "", Module *ParentModule = 0);
+
+ bool getHasSideEffects() const { return AsmHasSideEffects; }
+ void setSideEffects(bool X) { AsmHasSideEffects = X; }
+
+ /// getType - InlineAsm's are always pointers.
+ ///
+ const PointerType *getType() const {
+ return reinterpret_cast<const PointerType*>(Value::getType());
+ }
+
+ /// getFunctionType - InlineAsm's are always pointers to functions.
+ ///
+ const FunctionType *getFunctionType() const;
+
+ /// getParent - Get the module that this global value is contained inside
+ /// of...
+ Module *getParent() { return Parent; }
+ const Module *getParent() const { return Parent; }
+
+
+ /// removeFromParent/eraseFromParent - Unlink and unlink/delete this object
+ /// from the module it is embedded into.
+ void removeFromParent();
+ void eraseFromParent();
+
+ virtual void print(std::ostream &O) const { print(O, 0); }
+ void print(std::ostream &OS, AssemblyAnnotationWriter *AAW) const;
+
+ // Methods for support type inquiry through isa, cast, and dyn_cast:
+ static inline bool classof(const InlineAsm *) { return true; }
+ static inline bool classof(const Value *V) {
+ return V->getValueType() == Value::InlineAsmVal;
+ }
+};
+
+} // End llvm namespace
+
+#endif