[llvm-dev] Where is the code that is called when clang calls the job which generates IR?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[llvm-dev] Where is the code that is called when clang calls the job which generates IR?

Zhizhou Yang via llvm-dev
Where is the source code that is called when the clang binary executable calls the command/job which compiles C code to IR?

I am using Clang as a library (basically a simplified version of the main function in /tools/clang/tools/driver/driver.cpp). 

My program creates an instance of clang::driver::Driver. I pass arguments to TheDriver.BuildCompilation(args)). And then call ExecuteCompilation. Everything works.

When I call TheDriver.PrintActions(*C) the output is

0: input, "testcode.cpp", c++
1: preprocessor, {0}, c++-cpp-output
2: compiler, {1}, ir
3: backend, {2}, assembler
4: assembler, {3}, object
5: linker, {4}, image

And when I loop over the jobs inside the Compilation object I see that the clang binary executable is called 4 times (using execve) and finally ld.lld is called.

I'm interested in the call to clang for "2: compiler, {1}, ir". 

Is /tools/clang/tools/driver/driver.cpp called again? It seems that the main function in driver.cpp eventually calls itself again. If not what is called, and where is the source code?

_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Reply | Threaded
Open this post in threaded view
|

Re: [llvm-dev] Where is the code that is called when clang calls the job which generates IR?

Zhizhou Yang via llvm-dev

(Remembering to add llvm-dev this time…)

 

If you look at the argc/argv for the "2: compiler" case, the first option should be "-cc1" which will cause the driver to dispatch to cc1_main(), which is in cc1_main.cpp.

--paulr

 

 

From: llvm-dev [mailto:[hidden email]] On Behalf Of Rob bor78 via llvm-dev
Sent: Thursday, July 05, 2018 10:25 AM
To: [hidden email]
Subject: [llvm-dev] Where is the code that is called when clang calls the job which generates IR?

 

Where is the source code that is called when the clang binary executable calls the command/job which compiles C code to IR?


I am using Clang as a library (basically a simplified version of the main function in /tools/clang/tools/driver/driver.cpp). 

 

My program creates an instance of clang::driver::Driver. I pass arguments to TheDriver.BuildCompilation(args)). And then call ExecuteCompilation. Everything works.

When I call TheDriver.PrintActions(*C) the output is

0: input, "testcode.cpp", c++
1: preprocessor, {0}, c++-cpp-output
2: compiler, {1}, ir
3: backend, {2}, assembler
4: assembler, {3}, object
5: linker, {4}, image

And when I loop over the jobs inside the Compilation object I see that the clang binary executable is called 4 times (using execve) and finally ld.lld is called.

I'm interested in the call to clang for "2: compiler, {1}, ir". 

 

Is /tools/clang/tools/driver/driver.cpp called again? It seems that the main function in driver.cpp eventually calls itself again. If not what is called, and where is the source code?


_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Reply | Threaded
Open this post in threaded view
|

Re: [llvm-dev] Where is the code that is called when clang calls the job which generates IR?

Zhizhou Yang via llvm-dev
In reply to this post by Zhizhou Yang via llvm-dev
Look for code in clang/lib/CodeGen/

Easy starting point could be

void CodeGenFunction::EmitFunctionBody;

Cheers

On Thu, Jul 5, 2018 at 7:55 PM, Rob bor78 via llvm-dev <[hidden email]> wrote:
Where is the source code that is called when the clang binary executable calls the command/job which compiles C code to IR?

I am using Clang as a library (basically a simplified version of the main function in /tools/clang/tools/driver/driver.cpp). 

My program creates an instance of clang::driver::Driver. I pass arguments to TheDriver.BuildCompilation(args)). And then call ExecuteCompilation. Everything works.

When I call TheDriver.PrintActions(*C) the output is

0: input, "testcode.cpp", c++
1: preprocessor, {0}, c++-cpp-output
2: compiler, {1}, ir
3: backend, {2}, assembler
4: assembler, {3}, object
5: linker, {4}, image

And when I loop over the jobs inside the Compilation object I see that the clang binary executable is called 4 times (using execve) and finally ld.lld is called.

I'm interested in the call to clang for "2: compiler, {1}, ir". 

Is /tools/clang/tools/driver/driver.cpp called again? It seems that the main function in driver.cpp eventually calls itself again. If not what is called, and where is the source code?

_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev



_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev