Hi, I have a doubt about running passes on machine code. We are implementing a transformation on machine code that consists in analyzing a series of functions, extracting some aggregate properties, and then using the extracted information to optimize each functions. I am not familiar with LLVM internals, so I am not sure how to implement each step. From the documentation, it seems that the only way to work on the machine-dependent representation is to write a MachineFunctionPass. However, such pass would be run separately on every function, while what we need is pretty much a ModulePass running on machine code, or some way to enumerate all the MachineFunction objects. Is there any way to achieve this? Thanks, Lorenzo
Hi Lorenzo,> I have a doubt about running passes on machine code. We are > implementing a transformation on machine code that consists in > analyzing a series of functions, extracting some aggregate properties, > and then using the extracted information to optimize each functions. > > I am not familiar with LLVM internals, so I am not sure how to > implement each step. From the documentation, it seems that the only > way to work on the machine-dependent representation is to write a > MachineFunctionPass. However, such pass would be run separately on > every function, while what we need is pretty much a ModulePass running > on machine code, or some way to enumerate all the MachineFunction > objects. Is there any way to achieve this?one of the design goals of LLVM codegen is to be able to codegen one function at a time, so the front-end can generate a function, codegen it, then throw away the function before moving onto the next function. Ciao, Duncan.
Hi Duncan, thanks for your reply. So if I understand correctly MachineFunction objects are converted to machine code one at a time, and each object is "thrown away" after having been converted. Seems that the only way to achieve what I have in mind is to write the machine code for all the functions to a file, and then load it and process it in a separate tool (possibly based on LLVM-mc). Is this correct? Thanks, Lorenzo On Sat, Apr 2, 2011 at 2:19 AM, Duncan Sands <baldrick at free.fr> wrote:> Hi Lorenzo, > >> I have a doubt about running passes on machine code. We are >> implementing a transformation on machine code that consists in >> analyzing a series of functions, extracting some aggregate properties, >> and then using the extracted information to optimize each functions. >> >> I am not familiar with LLVM internals, so I am not sure how to >> implement each step. From the documentation, it seems that the only >> way to work on the machine-dependent representation is to write a >> MachineFunctionPass. However, such pass would be run separately on >> every function, while what we need is pretty much a ModulePass running >> on machine code, or some way to enumerate all the MachineFunction >> objects. Is there any way to achieve this? > > one of the design goals of LLVM codegen is to be able to codegen one function > at a time, so the front-end can generate a function, codegen it, then throw > away the function before moving onto the next function. > > Ciao, Duncan. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >