[PATCH] D26718: [llvm] Iterate SmallPtrSet in reverse order to uncover non-determinism in codegen

Duncan P. N. Exon Smith via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 7 13:11:55 PST 2016


> On 2016-Dec-07, at 12:15, Mehdi AMINI via Phabricator <reviews at reviews.llvm.org> wrote:
> 
> mehdi_amini added inline comments.
> 
> 
> ================
> Comment at: include/llvm/ADT/SmallPtrSet.h:30
> +#if LLVM_ENABLE_ABI_BREAKING_CHECKS
> +extern bool ReverseIterate;
> +#endif
> ----------------
> mgrang wrote:
>> mehdi_amini wrote:
>>> mgrang wrote:
>>>> mgrang wrote:
>>>>> mehdi_amini wrote:
>>>>>> This introduces a dependency from ADT to Support, I'm not sure it is OK.
>>>>>> Also the symbol should be in the LLVM namespace.
>>>>> @mehdi_amini Yes, I will move ReverseIterate to LLVM namespace.
>>>>> 
>>>>> Initially I was skeptical about defining ReverseIterate in Support. But then I did not know of a better place to do this, Could you please suggest what would be a preferable place to define this?
>>>> @mehdi_amini Could you please take a look at my updated patch and comment when you get a chance?
>>> I don't have a good suggestion. This is quite annoying. Maybe making them weak definition in a header (possibly using template)?
>> @mehdi_amini Thanks for the suggestion.
>> 
>> Variable templates are a C++14 feature and the compiler will output this warning:
>> "warning: variable templates are a C++14 extension [-Wc++14-extensions]"
>> 
>> Would we need to silence these? By passing -Wno-c++14-extensions in the CMake flags?
> No this is not OK, LLVM builds in C++11 mode.
> I didn't expect you to need a variable template, but a static member in a templated class.

Something like this should work:
--
template <class T = void> struct ReverseIterateImpl { static bool value = ...; };
typedef ReverseIterateImpl<> ReverseIterate;
--
then you can use it like this:
--
if (ReverseIterate::value) { ... }
--

> 
> 
> https://reviews.llvm.org/D26718
> 
> 
> 



More information about the llvm-commits mailing list