<div dir="ltr">Hi all,<div><br></div><div>I am one of the developers of <a href="https://github.com/plast-lab/llvm-datalog">llvm-datalog</a>, a static analysis tool for LLVM bitcode based on Datalog. </div><div><br></div><div>The first phase of our tool is to create some CSV files (for our Datalog schema) while traversing a bitcode file. During that phase, our implementation makes use of the Value::printAsOperand method to print operands from several LLVM bitcode instructions to the CSV file. But this approach doesn't scale and the problem seems to be the Value::printAsOperand method, based on some profiling that we performed afterwards.</div><div><br></div><div>After studying the source code, I think that the problem is the "slow path" of this method, which constructs a TypePrinting object from scratch, every time this path is triggered. As far as I can tell, each time this slow path is taken, it invokes methods (e.g., TypeFinder::run) that perform many *Module-wide* calculations that are redundant (except for the first time they are performed). This whole process accounts for most of our tool's execution time.</div><div><br></div><div>So, my question is: Is there any faster way to perform the same task? Note that we would like to keep our tool as an LLVM client, rather than relying on any internal API.</div><div><br></div><div>Cheers,</div><div>Kostas </div></div>