https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111591

--- Comment #32 from Kewen Lin <linkw at gcc dot gnu.org> ---
> case pass, but the original test case (#c1) can't pass with this, it can't
> pass with -fstack-reuse=none + -fno-strict-aliasing + -O2 either, I think
> the original case still suffers another latent bug.

Well, I spent some time to narrow down the remaining issue on #c1 and found the
test case reduction generated unexpected test source (uninitialized array which
is used for assert comparison), it locates at below lines 438 to line 439:

   428  struct TestSatWidenMulPairwiseAdd {
   429    template <typename TN, class DN> void operator()(TN, DN dn) {
   430      using TN_U = MakeUnsigned<TN>;
   431      using TW = MakeWide<TN>;
   432      RepartitionToWide<DN> dw;
   433      using VW = Vec<decltype(dw)>;
   434      using VN = Vec<decltype(dn)>;
   435      size_t NN = Lanes(dn), NW = Lanes(dw), kMaxLanesPerNBlock =
sizeof(TN),
   436             kMaxLanesPerWBlock = sizeof(TW);
   437      RebindToUnsigned<decltype(dn)> dn_u;
   438      VW f0;
   439      VN nf0, nf1 = Set(dn, TN{});
   440      AssertVecEqual(dw, f0, SatWidenMulPairwiseAdd(dw, BitCast(dn_u,
nf0), nf0),
   441                     "", 0);


The expected result is f0 while the one used for the following
SatWidenMulPairwiseAdd computation is nf0, both are not initialized.
I'd expect they are initialized, like:

  VW f0 = Set(dw, TW{});
  VN nf0 = Set(dn, TN{});

So IMHO #c1 test case is problematic, hi @Mathieu, could you have a double
check?

Reply via email to