Zheng Wang
2010-Apr-19 13:29 UTC
[LLVMdev] Performing my own pass with a single command line?
Hello, As far as I know, the LLVM pass manager only perform at the llvm bytecode level. This means for each program, I have to convert it to a LLVM bytecode by: llvm-gcc -c -emit-llvm test.c then, I can issue the llvm pass manager to invoke my own pass and produce an output as LLVM bytecode, such as: opt -my-pass < test.o > test.new.o After this point, I need to convert it to assembly code using llc, then to use 'as' to compile the assembly code to an object file, and finally I can use gcc to generate an executable program. *****My question is*****, is there any way to automatically evoke the pass manager, such as: llvm-gcc -c test.c and in such a way my own pass will be evoked? Cheers, Zheng
John Criswell
2010-Apr-19 14:11 UTC
[LLVMdev] Performing my own pass with a single command line?
Dear Zheng Wang, You have a few options: 1) You can add your pass to the set of passes that llvm-gcc runs when it optimizes code. This requires re-compiling llvm-gcc; it also means that your pass must be able to run on incomplete programs and be run multiple times over the same code (i.e., it cannot do whole-program analysis). 2) You can change the build system of the program you're working with to generate an LLVM bitcode file. It's the same as what you're doing now, except that the program's Makefiles automate the task for you. 3) You can add your passes to libLTO (http://llvm.org/docs/GoldPlugin.html and http://llvm.org/docs/LinkTimeOptimization.html). This will allow your passes to be run at link-time by the linker. This method takes some time to set up, but it should work beautfully once set up. Furthermore, it can do whole-program analysis and optimization (the linker knows when it is creating a final executable vs. an object file and can defer whole program analysis and transformation until the final link stage). -- John T. Zheng Wang wrote:> Hello, > > > As far as I know, the LLVM pass manager only perform at the llvm > bytecode level. > > This means for each program, I have to convert it to a LLVM bytecode by: > > llvm-gcc -c -emit-llvm test.c > > then, I can issue the llvm pass manager to invoke my own pass and > produce an output as LLVM bytecode, such as: > > opt -my-pass < test.o > test.new.o > > After this point, I need to convert it to assembly code using llc, > then to use 'as' to compile the assembly code to an object file, and > finally I can > use gcc to generate an executable program. > > *****My question is*****, is there any way to automatically evoke the > pass manager, such as: > > llvm-gcc -c test.c > > and in such a way my own pass will be evoked? > > Cheers, > Zheng > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >
Zheng Wang
2010-Apr-21 11:52 UTC
[LLVMdev] Performing my own pass with a single command line?
Hi John, Are there any documents about how to add a pass into LTO? Cheers, Zheng On 19 April 2010 15:11, John Criswell <criswell at uiuc.edu> wrote:> Dear Zheng Wang, > > You have a few options: > > 1) You can add your pass to the set of passes that llvm-gcc runs when it > optimizes code. This requires re-compiling llvm-gcc; it also means that > your pass must be able to run on incomplete programs and be run multiple > times over the same code (i.e., it cannot do whole-program analysis). > > 2) You can change the build system of the program you're working with to > generate an LLVM bitcode file. It's the same as what you're doing now, > except that the program's Makefiles automate the task for you. > > 3) You can add your passes to libLTO (http://llvm.org/docs/GoldPlugin.html > and http://llvm.org/docs/LinkTimeOptimization.html). This will allow your > passes to be run at link-time by the linker. This method takes some time to > set up, but it should work beautfully once set up. Furthermore, it can do > whole-program analysis and optimization (the linker knows when it is > creating a final executable vs. an object file and can defer whole program > analysis and transformation until the final link stage). > > -- John T. > > > Zheng Wang wrote: >> >> Hello, >> >> >> As far as I know, the LLVM pass manager only perform at the llvm >> bytecode level. >> >> This means for each program, I have to convert it to a LLVM bytecode by: >> >> llvm-gcc -c -emit-llvm test.c >> >> then, I can issue the llvm pass manager to invoke my own pass and >> produce an output as LLVM bytecode, such as: >> >> opt -my-pass < test.o > test.new.o >> >> After this point, I need to convert it to assembly code using llc, >> then to use 'as' to compile the assembly code to an object file, and >> finally I can >> use gcc to generate an executable program. >> >> *****My question is*****, is there any way to automatically evoke the >> pass manager, such as: >> >> llvm-gcc -c test.c >> >> and in such a way my own pass will be evoked? >> >> Cheers, >> Zheng >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> > >-- Best regards, WANG Zheng