On 01/05/2018 04:57 AM, Richard Earnshaw (lists) wrote: > 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. I think this is probably the key that Jakub and Richard B. were missing. It certainly hadn't clicked for me when we spoke earlier.
Jeff