On Tue, Oct 12, 2021 at 8:35 AM Alexandre Oliva <ol...@adacore.com> wrote: > > On Oct 9, 2021, Richard Biener <richard.guent...@gmail.com> wrote: > > > Why two passes (and two IL traverses?) > > Different traversals, no reason to force them into a single pass. One > only looks at the last stmt of each block, where cond stmts may be, > while the other has to look at every stmt. > > > How do you prevent RTL optimizers (jump threading) from removing the > > redundant tests? > > The trick I'm using to copy of a value without the compiler's knowing > it's still the same value is 'asm ("" : "=g" (alt) : "0" (src));' > > I've pondered introducing __builtin_hidden_copy or somesuch, but it > didn't seem worth it.
I see. I remember Marc using sth similar initially when trying to solve the FENV access problem. Maybe we indeed want to have some kind of more generic "dataflow (optimization) barrier" ... Are there any issues with respect to debugging when using such asm()s? > > I'd have expected such hardening to occur very late in the RTL > > pipeline. > > Yeah, that would be another way to do it, but then it would have to be a > lot trickier, given all the different ways in which compare-and-branch > can be expressed in RTL. Agreed, though it would be less disturbing to the early RTL pipeline and RTL expansion. > -- > Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ > Free Software Activist GNU Toolchain Engineer > Disinformation flourishes because many people care deeply about injustice > but very few check the facts. Ask me about <https://stallmansupport.org>