[llvm-dev] [RFC] Intrinsic naming convention (words with dots)

John Criswell via llvm-dev llvm-dev at lists.llvm.org
Wed Dec 2 17:35:27 PST 2015


Dear Hal,

The current rule for an intrinsic, IIRC, is llvm.<str> where <str> is 
some arbitrary name that is allowed within an LLVM function name.

While I can understand the desire for consistency, I think what you 
suggest is a purely aesthetic change with no real value.  If you want to 
spend your time on aesthetics, that's fine with me, but you're 
introducing changes to the LLVM assembler, disassembler, and 
documentation to do it.  It may also cause issues with in-tree and 
out-of-tree test suites that grep for intrinsic names in LLVM assembly 
output (not sure how many tests do that, but it's possible).

Personally, I wouldn't spend my time on it, but that's just me.

FWIW,

John Criswell


On 12/1/15 5:26 AM, Hal Finkel via llvm-dev wrote:
> Hi everyone,
>
> We seem to have allowed our documented target-independent intrinsics to acquire a somewhat-haphazard naming system, and I think we should standardize on one convention. All of the intrinsics have 'llvm.' as a prefix, and some also have some additional prefix 'llvm.dbg.', 'llvm.eh.', 'llvm.experimental.', etc., but after that we lose consistency. When there is just a single word (or acronym) everything is fine, but the way we join multiple words (or acronyms) falls into three categories:
>
>   1. No separator (e.g. @llvm.readcyclecounter)
>   2. Using '.' as a separator (e.g. @llvm.sadd.with.overflow)
>   3. Using '_' as a separator (e.g. @llvm.read_register)
>
> I propose that we standardize on (2) -- words with dots -- as it seems to have a plurality of more-recent intrinsics (and I think it is easy to read, as is (3)). Thoughts?
>
> Although this is somewhat subjective, here's our current set of intrinsics with multiple words (or acronyms) by these categories. I'm excluding here externally-defined terms (e.g. llvm.va_start):
>
> No separators (except for the initial namespace prefix):
>
> @llvm.gcroot
> @llvm.gcread
> @llvm.gcwrite
>
> @llvm.experimental.stackmap
> @llvm.experimental.patchpoint
>
> @llvm.experimental.gc.statepoint
>
> @llvm.returnaddress
> @llvm.frameaddress
>
> @llvm.localescape
> @llvm.localrecover
>
> @llvm.stacksave
> @llvm.stackrestore
>
> @llvm.pcmarker
> @llvm.readcyclecounter
>
> @llvm.bitreverse
>
> @llvm.eh.begincatch
> @llvm.eh.endcatch
>
> @llvm.eh.padparam
>
> @llvm.stackprotector
> @llvm.stackprotectorcheck
> @llvm.objectsize
>
> @llvm.donothing
>
> Words with dots:
>
> @llvm.sadd.with.overflow
> @llvm.uadd.with.overflow
> @llvm.ssub.with.overflow
> @llvm.usub.with.overflow
> @llvm.smul.with.overflow
> @llvm.umul.with.overflow
>
> @llvm.convert.to.fp16
> @llvm.convert.from.fp16
>
> @llvm.eh.typeid.for
>
> @llvm.init.trampoline
> @llvm.adjust.trampoline
>
> @llvm.masked.load
> @llvm.masked.store
>
> @llvm.masked.gather
> @llvm.masked.scatter
>
> @llvm.lifetime.start
> @llvm.lifetime.end
>
> @llvm.invariant.start
> @llvm.invariant.end
> @llvm.invariant.group.barrier
>
> @llvm.var.annotation
> @llvm.ptr.annotation
>
> @llvm.bitset.test
>
> Words with underscores (except for the initial namespace prefix):
>
> @llvm.read_register
> @llvm.write_register
>
> @llvm.clear_cache
>
> @llvm.instrprof_increment
> @llvm.instrprof_value_profile
>
> Thanks again,
> Hal
>


-- 
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
http://www.cs.rochester.edu/u/criswell



More information about the llvm-dev mailing list