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

Hal Finkel via llvm-dev llvm-dev at lists.llvm.org
Tue Dec 1 09:23:39 PST 2015


----- Original Message -----
> From: "Eric Christopher" <echristo at gmail.com>
> To: "Hal Finkel" <hfinkel at anl.gov>, "llvm-dev" <llvm-dev at lists.llvm.org>
> Sent: Tuesday, December 1, 2015 11:03:05 AM
> Subject: Re: [llvm-dev] [RFC] Intrinsic naming convention (words with dots)
> 
> SGTM.
> 
> Thanks!

Follow-up question: Once we decide on a convention, should we:

 1. Just document it, leave existing things as-is, but make all new intrinsics comply with the convention.

 2. Update all existing intrinsic names to follow the naming convention (with auto-upgrade for bitcode as necessary).

 3. If we do (2), does that constitute an ABI break at the C level unless special provisions are made?

Thanks again,
Hal

> 
> -eric
> 
> 
> On Tue, Dec 1, 2015, 2:26 AM Hal Finkel via llvm-dev <
> llvm-dev at lists.llvm.org > 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
> 
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory


More information about the llvm-dev mailing list