Skip to content

Commit 4eb6d0c

Browse files
committed
Break recursion
1 parent d6fc9de commit 4eb6d0c

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

include/Emitter.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ class Emitter {
3232
void dispatchInstruction(const llvm::Instruction *instruction, Node *node);
3333
Node *emit(const llvm::Value *value);
3434

35+
Node *functionNode(const llvm::Value *value);
36+
Node *basicBlockNode(const llvm::Value *value);
37+
Node *instructionNode(const llvm::Value *value);
38+
Node *valueNode(const llvm::Value *value);
39+
3540
/// Extension points
3641

3742
void fillIn(const llvm::Module *module, Node *node);

src/Emitter.cpp

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ Node *Emitter::emit(const llvm::Value *value) {
7979
Node *emittedNode = nullptr;
8080

8181
if (const auto *instruction = llvm::dyn_cast<llvm::Instruction>(value)) {
82-
emittedNode = builder.newInstructionNode();
82+
emittedNode = instructionNode(value);
8383
fillIn(instruction, emittedNode);
8484
dispatchInstruction(instruction, emittedNode);
8585
for (unsigned i = 0; i < instruction->getNumOperands(); i++) {
@@ -88,17 +88,17 @@ Node *Emitter::emit(const llvm::Value *value) {
8888
} else {
8989
switch (value->getValueID()) {
9090
case llvm::Value::FunctionVal: {
91-
emittedNode = builder.newFunctionNode();
91+
emittedNode = functionNode(value);
9292
fillIn(llvm::cast<llvm::Function>(value), emittedNode);
9393
} break;
9494
case llvm::Value::BasicBlockVal: {
95-
emittedNode = builder.newBasicBlockNode();
95+
emittedNode = basicBlockNode(value);
9696
fillIn(llvm::cast<llvm::BasicBlock>(value), emittedNode);
9797
} break;
9898

9999
#define GRAPHML_HANDLE_VALUE(Name) \
100100
case Value::Name##Val: { \
101-
emittedNode = builder.newValueNode(); \
101+
emittedNode = valueNode(value); \
102102
emittedNode->setValueKind(ValueKind::Name); \
103103
fillIn(llvm::cast<Name>(value), emittedNode); \
104104
} break;
@@ -124,13 +124,36 @@ Node *Emitter::emit(const llvm::Value *value) {
124124
if (value->hasName() && emittedNode) {
125125
emittedNode->setName(value->getName());
126126
}
127-
emittedValues[value] = emittedNode;
128127
Node *typeNode = typeEmitter.emitType(value->getType());
129128
builder.connectType(typeNode, emittedNode);
130129

131130
return emittedNode;
132131
}
133132

133+
Node *Emitter::functionNode(const llvm::Value *value) {
134+
Node *node = builder.newFunctionNode();
135+
emittedValues[value] = node;
136+
return node;
137+
}
138+
139+
Node *Emitter::basicBlockNode(const llvm::Value *value) {
140+
Node *node = builder.newBasicBlockNode();
141+
emittedValues[value] = node;
142+
return node;
143+
}
144+
145+
Node *Emitter::instructionNode(const llvm::Value *value) {
146+
Node *node = builder.newInstructionNode();
147+
emittedValues[value] = node;
148+
return node;
149+
}
150+
151+
Node *Emitter::valueNode(const llvm::Value *value) {
152+
Node *node = builder.newValueNode();
153+
emittedValues[value] = node;
154+
return node;
155+
}
156+
134157
/// Extension Points
135158

136159
void Emitter::fillIn(const llvm::Module *module, llvm2graphml::Node *node) {

0 commit comments

Comments
 (0)