Hi,
I needed to compile a cuda source file (say, a.cu) into IR (a.bc), and then merge a.bc with another bitcode file (b.bc, compiled from b.cu). So I used llvm-link a.bc b.bc -o c.bc
However, I noticed that an internal function ’ _ZL21__nvvm_reflect_anchorv() ’ is defined in both a.bc & b.bc, and when merging these two files, one of the two definitions was renamed to ‘_ZL21__nvvm_reflect_anchorv.2()’, and written into c.bc.
Then I did llc c.bc -o c.s -march=nvptx ; ptxas c.s -o c.o
However, ptxas would give the following complaint:
ptxas c.s, line 171; error : Duplicate definition of function ‘_ZL21__nvvm_reflect_anchorv’
ptxas c.s, line 171; fatal : Parsing error near ‘.2’: syntax error
So I inspected c.s and found the issue above was caused by the following line:
.func (.param .b32 func_retval0) _ZL21__nvvm_reflect_anchorv.2() // @_ZL21__nvvm_reflect_anchorv.2
After I manually deleted the definition of this function in c.s, the compilation works file. I wonder how could I force llc to remove **_ZL21__nvvm_reflect_anchorv.2**()
? Or is that possible to prevent _ZL21__nvvm_reflect_anchorv**()** from being generated into a.bc & b.bc in the first place? Or is this possible to ask llvm-link to NOT rename _ZL21__nvvm_reflect_anchorv() into ZL21__nvvm_reflect_anchorv**.2****()**?
Thanks!
Yuanfeng Peng