#include "llvm/InstrTypes.h"
#include "llvm/Method.h"
-//===----------------------------------------------------------------------===//
-// PHINode Class
-//===----------------------------------------------------------------------===//
-
-// PHINode - The PHINode class is used to represent the magical mystical PHI
-// node, that can not exist in nature, but can be synthesized in a computer
-// scientist's overactive imagination.
-//
-class PHINode : public Instruction {
- PHINode(const PHINode &PN);
-public:
- PHINode(const Type *Ty, const string &Name = "");
-
- virtual Instruction *clone() const { return new PHINode(*this); }
- virtual const char *getOpcodeName() const { return "phi"; }
-
- // getNumIncomingValues - Return the number of incoming edges the PHI node has
- inline unsigned getNumIncomingValues() const { return Operands.size()/2; }
-
- // getIncomingValue - Return incoming value #x
- inline const Value *getIncomingValue(unsigned i) const {
- return Operands[i*2];
- }
- inline Value *getIncomingValue(unsigned i) {
- return Operands[i*2];
- }
- inline void setIncomingValue(unsigned i, Value *V) {
- Operands[i*2] = V;
- }
-
- // getIncomingBlock - Return incoming basic block #x
- inline const BasicBlock *getIncomingBlock(unsigned i) const {
- return cast<const BasicBlock>(Operands[i*2+1]);
- }
- inline BasicBlock *getIncomingBlock(unsigned i) {
- return cast<BasicBlock>(Operands[i*2+1]);
- }
- inline void setIncomingBlock(unsigned i, BasicBlock *BB) {
- Operands[i*2+1] = BB;
- }
-
- // addIncoming - Add an incoming value to the end of the PHI list
- void addIncoming(Value *D, BasicBlock *BB);
-
- // removeIncomingValue - Remove an incoming value. This is useful if a
- // predecessor basic block is deleted. The value removed is returned.
- Value *removeIncomingValue(const BasicBlock *BB);
-
- // getBasicBlockIndex - Return the first index of the specified basic
- // block in the value list for this PHI. Returns -1 if no instance.
- //
- int getBasicBlockIndex(const BasicBlock *BB) const {
- for (unsigned i = 0; i < Operands.size()/2; ++i)
- if (getIncomingBlock(i) == BB) return i;
- return -1;
- }
-
- // Methods for support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const PHINode *) { return true; }
- static inline bool classof(const Instruction *I) {
- return I->getOpcode() == Instruction::PHINode;
- }
- static inline bool classof(const Value *V) {
- return isa<Instruction>(V) && classof(cast<Instruction>(V));
- }
-};
-
-
//===----------------------------------------------------------------------===//
// CastInst Class
//===----------------------------------------------------------------------===//
--- /dev/null
+//===-- llvm/iPHINode.h - PHI instruction definition -------------*- C++ -*--=//
+//
+// This file defines the PHINode class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_IPHINODE_H
+#define LLVM_IPHINODE_H
+
+#include "llvm/Instruction.h"
+class BasicBlock;
+
+//===----------------------------------------------------------------------===//
+// PHINode Class
+//===----------------------------------------------------------------------===//
+
+// PHINode - The PHINode class is used to represent the magical mystical PHI
+// node, that can not exist in nature, but can be synthesized in a computer
+// scientist's overactive imagination.
+//
+class PHINode : public Instruction {
+ PHINode(const PHINode &PN);
+public:
+ PHINode(const Type *Ty, const string &Name = "");
+
+ virtual Instruction *clone() const { return new PHINode(*this); }
+ virtual const char *getOpcodeName() const { return "phi"; }
+
+ // getNumIncomingValues - Return the number of incoming edges the PHI node has
+ inline unsigned getNumIncomingValues() const { return Operands.size()/2; }
+
+ // getIncomingValue - Return incoming value #x
+ inline const Value *getIncomingValue(unsigned i) const {
+ return Operands[i*2];
+ }
+ inline Value *getIncomingValue(unsigned i) {
+ return Operands[i*2];
+ }
+ inline void setIncomingValue(unsigned i, Value *V) {
+ Operands[i*2] = V;
+ }
+
+ // getIncomingBlock - Return incoming basic block #x
+ inline const BasicBlock *getIncomingBlock(unsigned i) const {
+ return (const BasicBlock*)Operands[i*2+1].get();
+ }
+ inline BasicBlock *getIncomingBlock(unsigned i) {
+ return (BasicBlock*)Operands[i*2+1].get();
+ }
+ inline void setIncomingBlock(unsigned i, BasicBlock *BB) {
+ Operands[i*2+1] = (Value*)BB;
+ }
+
+ // addIncoming - Add an incoming value to the end of the PHI list
+ void addIncoming(Value *D, BasicBlock *BB);
+
+ // removeIncomingValue - Remove an incoming value. This is useful if a
+ // predecessor basic block is deleted. The value removed is returned.
+ Value *removeIncomingValue(const BasicBlock *BB);
+
+ // getBasicBlockIndex - Return the first index of the specified basic
+ // block in the value list for this PHI. Returns -1 if no instance.
+ //
+ int getBasicBlockIndex(const BasicBlock *BB) const {
+ for (unsigned i = 0; i < Operands.size()/2; ++i)
+ if (getIncomingBlock(i) == BB) return i;
+ return -1;
+ }
+
+ // Methods for support type inquiry through isa, cast, and dyn_cast:
+ static inline bool classof(const PHINode *) { return true; }
+ static inline bool classof(const Instruction *I) {
+ return I->getOpcode() == Instruction::PHINode;
+ }
+ static inline bool classof(const Value *V) {
+ return isa<Instruction>(V) && classof(cast<Instruction>(V));
+ }
+};
+
+#endif
#include "llvm/Analysis/InductionVariable.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/Expressions.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
+#include "llvm/InstrTypes.h"
#include "llvm/Type.h"
#include "llvm/ConstPoolVals.h"
//
//===------------------------------------------------------------------------=//
-//
-// TODO: Parse comments and add them to an internal node... so that they may
-// be saved in the bytecode format as well as everything else. Very important
-// for a general IR format.
-//
-
%{
#include "ParserInternals.h"
#include "llvm/Assembly/Parser.h"
#include "llvm/DerivedTypes.h"
#include "llvm/iTerminators.h"
#include "llvm/iMemory.h"
+#include "llvm/iPHINode.h"
#include "Support/STLExtras.h"
#include "Support/DepthFirstIterator.h"
#include <list>
//
//===------------------------------------------------------------------------===
+#include "ReaderInternals.h"
#include "llvm/Module.h"
#include "llvm/BasicBlock.h"
#include "llvm/ConstPoolVals.h"
-#include "llvm/DerivedTypes.h"
#include "llvm/GlobalVariable.h"
-#include "ReaderInternals.h"
#include <algorithm>
//
//===----------------------------------------------------------------------===//
-#include "llvm/iOther.h"
+#include "ReaderInternals.h"
#include "llvm/iTerminators.h"
#include "llvm/iMemory.h"
-#include "llvm/DerivedTypes.h"
-#include "ReaderInternals.h"
+#include "llvm/iPHINode.h"
+#include "llvm/iOther.h"
bool BytecodeParser::ParseRawInst(const uchar *&Buf, const uchar *EndBuf,
RawInst &Result) {
//
//===----------------------------------------------------------------------===//
+#include "ReaderInternals.h"
#include "llvm/Bytecode/Reader.h"
#include "llvm/Bytecode/Format.h"
#include "llvm/GlobalVariable.h"
#include "llvm/Module.h"
#include "llvm/BasicBlock.h"
-#include "llvm/DerivedTypes.h"
#include "llvm/ConstPoolVals.h"
+#include "llvm/iPHINode.h"
#include "llvm/iOther.h"
-#include "ReaderInternals.h"
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include "llvm/SymTabValue.h"
#include "llvm/Method.h"
#include "llvm/Instruction.h"
+#include "llvm/DerivedTypes.h"
#include <map>
#include <utility>
#include <list>
#include "llvm/Method.h"
#include "llvm/iTerminators.h"
#include "llvm/iMemory.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/ConstPoolVals.h"
#include "llvm/BasicBlock.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/Instruction.h"
#include "llvm/BasicBlock.h"
#include "llvm/Method.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/Target/MachineRegInfo.h"
#include "Support/CommandLine.h"
#include <string.h>
#include "Interpreter.h"
#include "ExecutionAnnotations.h"
+#include "llvm/iPHINode.h"
#include "llvm/iOther.h"
#include "llvm/iTerminators.h"
#include "llvm/iMemory.h"
#include "llvm/Method.h"
#include "llvm/iTerminators.h"
#include "llvm/iMemory.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/ConstPoolVals.h"
#include "llvm/BasicBlock.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/Instruction.h"
#include "llvm/BasicBlock.h"
#include "llvm/Method.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/Target/MachineRegInfo.h"
#include "Support/CommandLine.h"
#include <string.h>
#include "TransformInternals.h"
#include "llvm/Method.h"
#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/iMemory.h"
#include "llvm/ConstPoolVals.h"
#include "llvm/Optimizations/ConstantHandling.h"
//
//===----------------------------------------------------------------------===//
-
-
-
#include "llvm/Transforms/HoistPHIConstants.h"
+#include "llvm/iPHINode.h"
#include "llvm/iOther.h"
#include "llvm/BasicBlock.h"
#include "llvm/Method.h"
#include "TransformInternals.h"
#include "llvm/SymbolTable.h"
#include "llvm/DerivedTypes.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/iMemory.h"
#include "llvm/iTerminators.h"
+#include "llvm/iOther.h"
#include <algorithm>
static const Type *PtrArrSByte = 0; // '[sbyte]*' type
#include "llvm/Module.h"
#include "llvm/Method.h"
#include "llvm/iTerminators.h"
+#include "llvm/iPHINode.h"
#include "llvm/iOther.h"
#include <algorithm>
#include <map>
#include "llvm/Method.h"
#include "llvm/GlobalVariable.h"
#include "llvm/SymbolTable.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/iMemory.h"
#include "llvm/iTerminators.h"
+#include "llvm/iOther.h"
#include <algorithm>
// To enable debugging, uncomment this...
#include "llvm/Analysis/Dominators.h"
#include "llvm/Analysis/Writer.h"
#include "llvm/iTerminators.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "Support/STLExtras.h"
#include "Support/DepthFirstIterator.h"
#include <set>
#include "llvm/Method.h"
#include "llvm/BasicBlock.h"
#include "llvm/iTerminators.h"
+#include "llvm/iPHINode.h"
#include "llvm/iOther.h"
#include "llvm/ConstPoolVals.h"
#include "llvm/Method.h"
#include "llvm/BasicBlock.h"
#include "llvm/iTerminators.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/Assembly/Writer.h"
#include "Support/STLExtras.h"
#include <algorithm>
#include "llvm/Analysis/IntervalPartition.h"
#include "llvm/Assembly/Writer.h"
#include "llvm/SymbolTable.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "Support/STLExtras.h"
#include <algorithm>
#include "llvm/BasicBlock.h"
#include "llvm/ConstPoolVals.h"
#include "llvm/InstrTypes.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/iMemory.h"
#include "llvm/iTerminators.h"
+#include "llvm/iOther.h"
#include "llvm/Assembly/Writer.h"
#include "Support/STLExtras.h"
#include <algorithm>
#include "llvm/BasicBlock.h"
#include "llvm/Method.h"
#include "llvm/iTerminators.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/Type.h"
// UnifyAllExitNodes - Unify all exit nodes of the CFG by creating a new
#include "llvm/GlobalVariable.h"
#include "llvm/BasicBlock.h"
#include "llvm/ConstPoolVals.h"
-#include "llvm/iOther.h"
#include "llvm/iMemory.h"
#include "llvm/iTerminators.h"
+#include "llvm/iPHINode.h"
+#include "llvm/iOther.h"
#include "llvm/SymbolTable.h"
#include "Support/StringExtras.h"
#include "Support/STLExtras.h"
#include "llvm/Method.h"
#include "llvm/SymbolTable.h"
#include "llvm/Type.h"
-#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/CodeGen/MachineInstr.h"
// Instantiate Templates - This ugliness is the price we have to pay
//===----------------------------------------------------------------------===//
#include "llvm/iOther.h"
+#include "llvm/iPHINode.h"
#include "llvm/BasicBlock.h"
#include "llvm/Method.h"
#include "llvm/SymbolTable.h"