From: Nathan Chancellor <nathan@kernel.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Tiezhu Yang <yangtiezhu@loongson.cn>,
Alex Deucher <alexdeucher@gmail.com>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Huacai Chen <chenhuacai@kernel.org>,
loongarch@lists.linux.dev, amd-gfx@lists.freedesktop.org,
linux-kernel@vger.kernel.org,
Nick Desaulniers <ndesaulniers@google.com>,
llvm@lists.linux.dev
Subject: Re: [PATCH v6 9/9] drm/amd/display: Mark dc_fixpt_from_fraction() noinline
Date: Fri, 20 Dec 2024 15:34:03 -0700 [thread overview]
Message-ID: <20241220223403.GA2605890@ax162> (raw)
In-Reply-To: <20241220103100.GB17537@noisy.programming.kicks-ass.net>
On Fri, Dec 20, 2024 at 11:31:00AM +0100, Peter Zijlstra wrote:
> Also, curse the DRM Makefiles, you can't do:
>
> make drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.s
Small tip: You can get the path of the target by building
drivers/gpu/drm/amd/amdgpu/ and finding it in the output. In this case,
it'd be
$ make drivers/gpu/drm/amd/amdgpu/../display/dc/basics/fixpt31_32.s
Not excusing that it does not work as it should but sometimes you have
to work with what you can *shrug*
> > $ clang --version | head -1
> > clang version 20.0.0git (https://github.com/llvm/llvm-project.git
> > 8daf4f16fa08b5d876e98108721dd1743a360326)
>
> So I didn't have a recent build at hand.. so I've not validated the
> below.
...
> If you put them size-by-side, you'll see it's more or less the same
> code-gen (trivial differences), but now it just stops code-gen, where
> previously it would continue.
>
> So this really is a compiler problem, this needs no annotation, it's
> straight up broken.
>
> Now, the thing is, these ASSERT()s are checking for divide-by-zero, I
> suspect clang figured that out and invokes UB on us and just stops
> code-gen.
Yeah, I think your analysis is spot on, as this was introduced by a
change in clang from a few months ago according to my bisect:
https://github.com/llvm/llvm-project/commit/37932643abab699e8bb1def08b7eb4eae7ff1448
Since the ASSERT does not do anything to prevent the divide by zero (it
just flags it with WARN_ON) and the rest of the code doesn't either, I
assume that the codegen stops as soon as it encounters the unreachable
that change created from the path where divide by zero would occur via
dc_fixpt_recip() ->
dc_fixpt_from_fraction() ->
complete_integer_division_u64() ->
div64_u64_rem()
Shouldn't callers of division functions harden them against dividing by
zero?
> Nathan, Nick, don't we have a compiler flag that forces __builtin_trap()
> whenever clang pulls something like this? I think UBSAN does this, but
> we really shouldn't pull in the whole of that for sanity.
Right, I think that LLVM has a hidden flag for this:
-mllvm -trap-unreachable
That makes this particular warning disappear.
It isn't the greatest because '-mllvm' flags need to be passed along to
the linker for LTO but that's easy enough to deal with. I know we have
talked about enabling that flag in the past but I cannot remember why we
decided against it (maybe code size concerns and other optimization
restrictions)? It looks like GCC has a similar flag,
-funreachable-traps.
Cheers,
Nathan
next prev parent reply other threads:[~2024-12-20 22:34 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-17 1:08 [PATCH v6 0/9] Add jump table support for objtool on LoongArch Tiezhu Yang
2024-12-17 1:08 ` [PATCH v6 1/9] objtool: Handle various symbol types of rodata Tiezhu Yang
2024-12-17 1:08 ` [PATCH v6 2/9] objtool: Handle different entry size " Tiezhu Yang
2025-02-11 14:19 ` [PATCH] objtool: remove duplicate case value R_PPC64_REL32 Kexy Biscuit
2025-02-11 23:34 ` Josh Poimboeuf
2024-12-17 1:08 ` [PATCH v6 3/9] objtool: Handle PC relative relocation type Tiezhu Yang
2024-12-17 1:09 ` [PATCH v6 4/9] objtool: Handle unreachable entry of rodata Tiezhu Yang
2025-02-10 21:17 ` Josh Poimboeuf
2024-12-17 1:09 ` [PATCH v6 5/9] objtool/LoongArch: Add support for switch table Tiezhu Yang
2024-12-17 1:09 ` [PATCH v6 6/9] objtool/LoongArch: Add support for goto table Tiezhu Yang
2024-12-17 1:09 ` [PATCH v6 7/9] LoongArch: Enable jump table for objtool Tiezhu Yang
2025-03-14 20:03 ` [tip: objtool/core] " tip-bot2 for Tiezhu Yang
2024-12-17 1:09 ` [PATCH v6 8/9] LoongArch: Convert unreachable() to BUG() Tiezhu Yang
2024-12-17 1:50 ` [PATCH v6 9/9] drm/amd/display: Mark dc_fixpt_from_fraction() noinline Tiezhu Yang
2024-12-18 14:36 ` Huacai Chen
2024-12-18 19:05 ` Josh Poimboeuf
2024-12-18 19:22 ` Alex Deucher
2024-12-20 5:02 ` Tiezhu Yang
2024-12-20 10:31 ` Peter Zijlstra
2024-12-20 22:34 ` Nathan Chancellor [this message]
2024-12-21 7:40 ` Xi Ruoyao
2024-12-22 4:27 ` Tiezhu Yang
2024-12-23 21:46 ` Nathan Chancellor
2024-12-25 9:43 ` Tiezhu Yang
2025-01-04 13:58 ` [PATCH v6 0/9] Add jump table support for objtool on LoongArch Huacai Chen
2025-01-11 6:57 ` Tiezhu Yang
2025-01-15 1:34 ` Josh Poimboeuf
2025-02-10 6:07 ` Tiezhu Yang
2025-02-10 21:26 ` Josh Poimboeuf
2025-02-11 11:59 ` Huacai Chen
2025-02-11 23:30 ` Josh Poimboeuf
2025-02-12 7:22 ` Huacai Chen
2025-02-13 2:51 ` Josh Poimboeuf
2025-02-17 3:13 ` Huacai Chen
2025-02-18 17:46 ` Josh Poimboeuf
2025-02-19 9:49 ` Huacai Chen
2025-02-20 21:33 ` Josh Poimboeuf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241220223403.GA2605890@ax162 \
--to=nathan@kernel.org \
--cc=alexdeucher@gmail.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=chenhuacai@kernel.org \
--cc=jpoimboe@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=loongarch@lists.linux.dev \
--cc=ndesaulniers@google.com \
--cc=peterz@infradead.org \
--cc=yangtiezhu@loongson.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.