Thanks @kparzysz-quic . Sorry for the delayed reply since we are taking break 
here.

Overall I like the direction we are going. Just to figure out the spectrum of 
possible APIs

My main question is how are we going to interact with multiple ParseIR calls. 
Some example would be helpful. For example, is it OK for us to have nested 
LLVMScope

```c++
void Example() {
     LLVMScope scope1(target);
     {
          // what is the effect here, seems mod_data1 is immediate in scope
          auto mod_data1 = LLVMScope::ParseIR(name);
     }
}
```

I also wonder if there is a way to "defer" the scope initialization. e.g. can 
LLVMModule be created, stored in the LLVMScope, but the target does not take 
in-effect until we enter the scope.  We call InitializeLLVM in the constructor 
of LLVMTarget, but do other things like option setting in the enter 
stage.Something like

```c++
void Example() {
     LLVMTarget target1(target);
     auto mod_data = LLVMTarget::ParseIR(name);
     // enter target1 scope
     With<LLVMTarget> scope1(target1);
     {
           // entering target in mod_data
          With<LLVMTarget> scope2(mod_data);
     }
}
```
I think the main question is how coupled the operations related to LLVM are.

-- 
Reply to this email directly or view it on GitHub:
https://github.com/apache/tvm-rfcs/pull/83#issuecomment-1178983089
You are receiving this because you are subscribed to this thread.

Message ID: <apache/tvm-rfcs/pull/83/c1178983...@github.com>

Reply via email to