https://sourceware.org/bugzilla/show_bug.cgi?id=30967

--- Comment #14 from Aleksei Vetrov <vvvvvv at google dot com> ---
Here are investigation results on why this happens in LLVM. It is a new
algorithm for assigning "hierarchical discriminator for FSAFDO".

>From https://reviews.llvm.org/D102246:
   #define BASE_DIS_BIT_BEG 0
   #define BASE_DIS_BIT_END 7

   #define PASS_1_DIS_BIT_BEG 8
   #define PASS_1_DIS_BIT_END 13

   #define PASS_2_DIS_BIT_BEG 14
   #define PASS_2_DIS_BIT_END 19

   #define PASS_3_DIS_BIT_BEG 20
   #define PASS_3_DIS_BIT_END 25

   #define PASS_LAST_DIS_BIT_BEG 26
   #define PASS_LAST_DIS_BIT_END 31

   unsigned DiscriminatorCurrPass;
   DiscriminatorCurrPass = R.second ? ++LDCM[LD] : LDCM[LD];
   DiscriminatorCurrPass = DiscriminatorCurrPass << LowBit;
   // LowBit is 26, this guarantees a big discriminator ^
   DiscriminatorCurrPass += getCallStackHash(BB, I, DIL);
   DiscriminatorCurrPass &= BitMaskThisPass;
   unsigned NewD = Discriminator | DiscriminatorCurrPass;
   const auto *const NewDIL = DIL->cloneWithDiscriminator(NewD);

FS discriminator seems to deliberately use bit 26-31 to add fields for its
pass.
So this big discriminator is caused by `-enable-fs-discriminator=true`.
The good news is this will not increase discriminators to bigger than UINT_MAX.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to