Reputation: 1817
I'm taking a look at LLVM libraries and I figured out that Clang emits the LLVM IR modules adding this metadata:
!llvm.module.flags = !{!0}
!llvm.ident = !{!1}
!0 = !{i32 1, !"PIC Level", i32 2}
!1 = !{!"Apple LLVM version 7.3.0 (clang-703.0.31)"}
Then I found out that calling the method setPICLevel()
on a module gets a similar result:
!0 = !{i32 1, !"PIC Level", i32 0}
So the whole metadata !0
is about the PIC level.
I've been searching for it on the internet but I've found nothing. What's this PIC level and what does it indicate?
Upvotes: 8
Views: 1971
Reputation: 2624
It is a flag that only applies to PowerPC and is ignored otherwise. It sets the model for position-independent code to either a small or large model. Other architectures of course can have PIC, but this flag representing the size if the model is not applicable elsewhere.
You could see the commit where it was first added to LLVM: http://comments.gmane.org/gmane.comp.compilers.llvm.cvs/205216
More info:
https://en.m.wikipedia.org/wiki/Position-independent_code
Upvotes: 7