[cfe-dev] Possible bug when using -O2/-O3 in clang 13 for ARMv7

Mikhail R. Gadelha via cfe-dev cfe-dev at lists.llvm.org
Mon Dec 13 10:07:23 PST 2021


Em seg., 13 de dez. de 2021 às 07:45, David Spickett <
david.spickett at linaro.org> escreveu:

> Caveat that I'm on shaky ground when it comes to my understanding of
> how the pass managers work.
>
> I think clang 13 uses the new pass manager, so this would be what you want:
> $ ./bin/clang /tmp/test.c -c -o /dev/null -O1 -Xclang -fdebug-pass-manager
>

Someone suggested looking into Alias Analysis as well.


> Certainly I see a lot of differences trying that myself.
> (https://llvm.org/docs/NewPassManager.html#invoking-opt)
>
> That tells you what the target generic passes being run are, then the
> target specific things use the old pass manager which you can use
> "-mllvm -debug-pass=Structure" for instead.
> (
> https://llvm.org/docs/NewPassManager.html#status-of-the-new-and-legacy-pass-managers
> )
>
> How you get an option from clang to opt to change which passes are
> run, I couldn't work out. There is "-passes=" for opt but that won't
> get through from clang with "-mllvm", maybe I just didn't do it
> correctly.
>
> Though I found a good suggestion from Medhi Amini in another thread,
> that would mean you could use opt directly:
> "But you may start by bisecting the input files compiling half of them
> with O1 and the other half with O0 and recurse till you find the file
> that is miscompiled with O1. Then you can use opt to test variant of
> the pipeline on this file and relink manually."
> (https://groups.google.com/g/llvm-dev/c/Y1HHgpmBidM)
>
>
I see, but I was thinking about something simpler: adding -O2 and -fno-foo
flags to disable optimizations (e.g., -fno-slp-vectorizer), WDYT?

I've found this post from '14 about that:
https://stackoverflow.com/questions/15548023/clang-optimization-levels


> Hope that helps but in any case please go ahead and open an issue and
> we can narrow it down further.
>

Done: https://github.com/llvm/llvm-project/issues/52669


>
> On Mon, 13 Dec 2021 at 10:27, David Spickett <david.spickett at linaro.org>
> wrote:
> >
> > FWIW I think opening an issue with what you've got would be fine.
> >
> > > when I build JSC using either -O2 or -O3, I get random garbage when
> querying for the "Infinity" constant from javascript
> >
> > Can you elaborate on what JSC is and how you do the query? Is it
> something like:
> > * build an interpreter
> > * interpret javascript code that prints infinity
> > * check for expected value
> >
> > I know zero about javascript in general but if we can get a script to
> > do that then we could bisect it. It'll take a while but we (Linaro)
> > have access to some machines that could help there.
> > (assuming this presents on armv8 hardware, but if it doesn't it's at
> > least a data point)
> >
> > > It seems like some optimization introduced by -O2 is causing the issue.
> >
> > Agreed
> >
> > > Is there a flag in clang to print which optimizations are enabled for
> -O1 and -O2 so I can diff them?
> >
> > Yes but I can never remember which one it is, so let me try to find
> > it. Unless someone else knows it already and can reply.
> >
> > On Sat, 11 Dec 2021 at 18:01, Mikhail R. Gadelha via cfe-dev
> > <cfe-dev at lists.llvm.org> wrote:
> > >
> > > Hi everyone,
> > >
> > > This is kind of a follow-up to my previous email about compiling JSC
> using clang for ARMv7: when I build JSC using either -O2 or -O3, I get
> random garbage when querying for the "Infinity" constant from javascript,
> as if the constant was not being initialized. The variable is being
> initialized correctly, that I'm sure.
> > >
> > > Some tests I did:
> > > 1. Using -O1 or no optimization doesn't trigger the issue.
> > > 2. Using either -O2 or -O3 with address or the undef behavior
> sanitizers doesn't trigger the issue.
> > > 3. Building JSC with clang 11.0.1-2 (from Debian) and clang 12.0.1
> (from github) doesn't trigger the issue.
> > > 4. The issue happens with clang 13.0.0 (from github) and the
> 13.0.1-rc1 (also from github).
> > >
> > > It seems like some optimization introduced by -O2 is causing the issue.
> > >
> > > Does anyone have any tips I can follow to improve this bug report?
> I'll try to compile JSC with -O2 and disable the optimizations manually to
> pinpoint what's causing the issue (hopefully it's a single optimization and
> not a combination of them). Is there a flag in clang to print which
> optimizations are enabled for -O1 and -O2 so I can diff them?
> > >
> > > I wish I had more information, but I'm still trying to debug why this
> is happening. I wanted to try to get more information first before opening
> a github issue.
> > >
> > > Thanks in advance,
> > >
> > > --
> > >
> > > Mikhail R. Gadelha.
> > > _______________________________________________
> > > cfe-dev mailing list
> > > cfe-dev at lists.llvm.org
> > > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>


-- 

Mikhail Ramalho.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20211213/4990ed0d/attachment.html>


More information about the cfe-dev mailing list