As noted in PR45210: https://bugs.llvm.org/show_bug.cgi?id=45210
...the bug is triggered as Eli say when sext(idx) * ElementSize overflows.
GEP = gep GV, 0, Idx1
ICI = icmp eq GEP, value
ICI = icmp eq (Idx * ElementSize), NewIdx
The foldCmpLoadFromIndexedGlobal function simplifies GEP+load operation to icmp.
And there is a problem because Idx * ElementSize can overflow.
Let's assume that ElementSize is 12, and the wanted value is at offset 0.
Then, there are four possible values for Idx to match offset 0: 0x00..00, 0x40..00, 0x80..00, 0xC0..00.
We should return true for all these values, but currently, we only return true for 0x00..00.
This problem can be solved through mask off (trailing zeros of ElementSize) bits from Idx.