@sho no problem, apologies if this is a bit confusing.

[quote="sho, post:5, topic:11682"]
As you probably know, I was confused about LLVM, and how it is used. So LLVM is 
used to build TVM compiler. LLVM also works when you input your model into TVM 
compiler and get TVM’s IR. LLVM compiles the TVM’s IR, and produces 
executables. (I’m still not sure where gcc is used when you build TVM from 
source though…)
[/quote]

There are actually two roles LLVM *could* play in TVM:
1. To build TVM from source
2. As a Target backend (e.g. `relay.build(..., target="llvm")`), in which case 
TVM *links* against LLVM (e.g. LLVM is a static library) at compile time, and 
TVM then contains the code-generation pieces of LLVM and is in turn able to 
emit machine code to implement a model, just like LLVM does.

[quote="sho, post:5, topic:11682"]
You don’t alway need to use LLVM. In that case, you specify ‘c’ as the target, 
and get your C code ready. You can use this C code, the runtime and your other 
programs to build with your own compiler, and run inference on MCUs.
[/quote]

This is correct. TVM's compilation flow is:
1. import models into Relay
2. "lower" Relay into TIR
3. "codegen" TIR to match the target. `// Target("llvm") or Target("c") mostly 
matters here`

So the final codegen step is where TIR is translated into some type of machine 
code. That could be LLVM's Intermediate Representation (which we can generate 
when TVM is linked against LLVM--like in kind #2 above), C source code, CUDA 
code, or other types.





---
[Visit Topic](https://discuss.tvm.apache.org/t/what-is-target-in-tvm/11682/7) 
to respond.

You are receiving this because you enabled mailing list mode.

To unsubscribe from these emails, [click 
here](https://discuss.tvm.apache.org/email/unsubscribe/efdb231699c1372a0fb8cc280c7db099ae656d06c82bc6d7b2ad42a4e4f21cff).

Reply via email to