================
@@ -560,6 +576,16 @@ Interpreter::Parse(llvm::StringRef Code) {
     llvm::Expected<TranslationUnitDecl *> DeviceTU = DeviceParser->Parse(Code);
     if (auto E = DeviceTU.takeError())
       return std::move(E);
+
+    RegisterPTU(*DeviceTU, nullptr, DeviceAct.get());
+
+    llvm::Expected<llvm::StringRef> PTX = DeviceParser->GeneratePTX();
+    if (!PTX)
+      return PTX.takeError();
+
+    llvm::Error Err = DeviceParser->GenerateFatbinary();
+    if (Err)
+      return std::move(Err);
   }
----------------
anutosh491 wrote:

Changes with respect to parsing if `DeviceParser` is non nullptr

If we currently look at how generatePTX is framed (check 
[lines](https://github.com/llvm/llvm-project/pull/136404/files#diff-facf198ec2120aeb2be299cac501daf8e32793547be89a06139bcb988ad532c7R58-R59))
 

We operate on PTUs from the list of PTUS.

But currently we add no "devicePTUs" (produced by the deviceparser) as such in 
our list of PTUs.

So `auto &PTU = PTUs.back();`  would
i) either return a nullptr
ii) or point to a host PTU 

Both of which are wrong. The generatePTX function is meant to work on 
"devicePTUs" (produced by the deviceparser) as such who's modules have the 
target triple `nvptx64-nvidia-cuda` rather than that provided by the host 
(possibly `x86_64-unknown-linux-gnu`)

So first we 
i) Parse the code
ii) Register the PTU just like we do for the host case
iii) Then we operate on it (using `GeneratePTX` and `GenerateFatbinary`)
 





https://github.com/llvm/llvm-project/pull/136404
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to