I met a very strange error after transforming IR code.
What I did is that I create a function and insert it into the original program’s IR code.
I use following command to load my pass and generate the transformed bytecode (the “result”).
opt -load ~/mypass/libLLVMMYPASS.so -insert < mytestcode.ll > result
Then, I try to compile it to assembly code via llc
After that, the error occurs:
llc: result:1:1: error: expected top-level entity
It seems like the error is about the IR code.
Thus, I dump the module during my pass, it turns out that there is only one line different:
when I just open the IR code - mytestcode.ll, the first line is:
; ModuleID = ‘./mytestcode.c’
when I dump it during my pass, the first line is:
; ModuleID = ‘’
The strange thing is, after transformation by my pass, I also dump the transformed module, and copy all the dumped content to a file, and then, perform “llc” on it. Surprisingly, I found It works well. I also compile it to an executable and run it. The result is correct for my transformation.
Thus, I’m so confused about:
what the different between “; ModuleID = ‘./mytestcode.c’” and “; ModuleID = ‘’”. Will it impact the “llc” and trigger the error?
when I read the module during my pass, why the ModuleID has been changed from ‘./mytestcode.c’ to ‘’
why does the error “llc: result:1:1: error: expected top-level entity” happen, and why does the IR code dumped during my pass work well?
Thanks in advance!