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?