On 05/01/18 11:35, Jakub Jelinek wrote: > On Fri, Jan 05, 2018 at 10:59:21AM +0000, Richard Earnshaw (lists) wrote: >>> But the condition could be just 'true' in the instruction encoding? That >>> is, >>> why do you do both the jump-around and the csel? Maybe I misunderstood >>> the RTL you appear to generate. I'd have expected an UNSPEC to avoid >>> the compiler messing up things. >>> >> >> That's why the intrinsic takes explicit bounds not a simple bool >> expressing the conditions. It prevents the optimizers from replacing >> the condition by value range propagation. That does restrict the > > Preventing optimizers from replacing the condition can be done in many ways, > IFN, UNSPEC, ... > The question is if you really need it at the assembly level, or if you can > just do an unconditional branch or branch conditional on say comparison of > two constants, without any dynamic bounds. > > Jakub >
The bounds /have/ to reflect the real speculation condition. Otherwise the CSEL becomes ineffective. R.