[LLVMdev] Are Module / Function / Instruction iteration orders stable?

Duncan P. N. Exon Smith dexonsmith at apple.com
Thu Jun 25 14:39:21 PDT 2015


> On 2015-Jun-25, at 11:33, Daniel Berlin <dberlin at dberlin.org> wrote:
> 
> These specific things *should* be stable.

(Agreed.)

> The use order is not stable, however.

A fronted can opt-in to stable use-list ordering.  `clang -cc1` has an
`-emit-llvm-uselists` option that turns this on.  The clang driver
uses that for `clang -save-temps`, for example.

The use-list order is only guaranteed to be stable if the reader/writer
are the exact same version; otherwise it can degrade.

> 
> 
> On Thu, Jun 25, 2015 at 9:38 AM, Christian Convey
> <christian.convey at gmail.com> wrote:
>> Hi guys,
>> 
>> Suppose I have an IR file on disk, and I access it via a Module pass.  Also
>> suppose that the bitcode file hasn't changed, and no transformation passes
>> have run.
>> 
>> Then can I safely assume that every time my Module pass executes code like
>> the following, it will always visit the Module's Functions, BasicBlocks, and
>> Instructions in the same order?
>> 
>>> for (auto const & Fn : Module) {
>>>  for (auto const & BB : Fn) {
>>>     for (auto const & Ins : BB) {
>>>     }
>>>  }
>>> }
>> 
>> 
>> I don't notice anything in the LLVM docs suggesting that I can count on the
>> order staying the same when visiting a Module's Functions or a Function's
>> BasicBlocks.  But I'm told there was an IRC post the other day stating that
>> the order *is* stable.
>> 
>> Thanks, Christian
>> 
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev





More information about the llvm-dev mailing list