public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/43247] [4.3/4.4 Regression] Incorrect optimization while declaring array[1]
       [not found] <bug-43247-4@http.gcc.gnu.org/bugzilla/>
@ 2010-12-22 10:35 ` thiago at kde dot org
  2010-12-22 17:49 ` pinskia at gcc dot gnu.org
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 5+ messages in thread
From: thiago at kde dot org @ 2010-12-22 10:35 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43247

--- Comment #10 from Thiago Macieira <thiago at kde dot org> 2010-12-22 10:35:23 UTC ---
This is still not fixed. I can reproduce now with a different testcase, in
4.5.1. However, this time, the same code works fine in 4.4. The reason is again
accessing an array out-of-bounds for elements that we know to be there. Pay
attention to the way operator== is implemented in the following code.

If I compile it with -O1, it prints "true" as it should. If I compile it with
-O2, it prints "false". If I compile it with -O1 -finline-small-functions
-finline -findirect-inlining -fstrict-overflow and compare the disassembly with
-O2 and a suitable list of -fno-*, the code is exactly identical, except for
some instructions that should perform the copy of half of m1's data into m3. So
in the end the comparison fails due to comparing to garbage.

=== code ===
#include <stdio.h>

template <int N, int M, typename T>
class QGenericMatrix
{
public:
    QGenericMatrix();
    QGenericMatrix(const QGenericMatrix<N, M, T>& other);
    explicit QGenericMatrix(const T *values);

    bool operator==(const QGenericMatrix<N, M, T>& other) const;
private:
    T m[N][M];    // Column-major order to match OpenGL.

    QGenericMatrix(int) {}       // Construct without initializing identity
matrix
};

template <int N, int M, typename T>
QGenericMatrix<N, M, T>::QGenericMatrix(const QGenericMatrix<N, M, T>& other)
{
    for (int col = 0; col < N; ++col)
        for (int row = 0; row < M; ++row)
            m[col][row] = other.m[col][row];
}

template <int N, int M, typename T>
QGenericMatrix<N, M, T>::QGenericMatrix(const T *values)
{
    for (int col = 0; col < N; ++col)
        for (int row = 0; row < M; ++row)
            m[col][row] = values[row * N + col];
}

template <int N, int M, typename T>
bool QGenericMatrix<N, M, T>::operator==(const QGenericMatrix<N, M, T>& other)
const
{
    for (int index = 0; index < N * M; ++index) {
        if (m[0][index] != other.m[0][index])
            return false;
    }
    return true;
}

typedef double qreal;
typedef QGenericMatrix<2, 2, qreal> QMatrix2x2;

int main(int , char**)
{
    qreal m1Data[] = {0.0, 0.0, 0.0, 0.0};
    QMatrix2x2 m1(m1Data);

    QMatrix2x2 m3 = m1;
    puts((m1 == m3) ? "true" : "false");
}
=== code ===

common args: -fno-exceptions -fno-rtti -fverbose-asm -march=core2 -mfpmath=sse
(though x87 math also shows the same problem)

prints "true" with: -O1 -finline-small-functions -finline -findirect-inlining
-fstrict-overflow

prints "false" with: -O2 -fno-align-functions -fno-align-jumps
-fno-align-labels -fno-caller-saves -fno-tree-switch-conversion -fno-tree-vrp
-fno-crossjumping -fno-cse-follow-jumps -fno-expensive-optimizations -fno-gcse
-fno-ipa-cp -fno-ipa-sra -fno-optimize-register-move
-fno-optimize-sibling-calls -fno-peephole2 -fno-regmove -fno-reorder-blocks
-fno-reorder-functions -fno-rerun-cse-after-loop -fno-schedule-insns2
-fno-strict-aliasing -fno-strict-aliasing -fno-thread-jumps
-fno-tree-builtin-call-dce -fno-tree-pre


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/43247] [4.3/4.4 Regression] Incorrect optimization while declaring array[1]
       [not found] <bug-43247-4@http.gcc.gnu.org/bugzilla/>
  2010-12-22 10:35 ` [Bug tree-optimization/43247] [4.3/4.4 Regression] Incorrect optimization while declaring array[1] thiago at kde dot org
@ 2010-12-22 17:49 ` pinskia at gcc dot gnu.org
  2010-12-22 19:55 ` thiago at kde dot org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2010-12-22 17:49 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43247

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to work|                            |
      Known to fail|                            |

--- Comment #11 from Andrew Pinski <pinskia at gcc dot gnu.org> 2010-12-22 17:48:55 UTC ---
>The reason is again accessing an array out-of-bounds for elements that we know to be there.

No that is undefined and different from the original testcase.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/43247] [4.3/4.4 Regression] Incorrect optimization while declaring array[1]
       [not found] <bug-43247-4@http.gcc.gnu.org/bugzilla/>
  2010-12-22 10:35 ` [Bug tree-optimization/43247] [4.3/4.4 Regression] Incorrect optimization while declaring array[1] thiago at kde dot org
  2010-12-22 17:49 ` pinskia at gcc dot gnu.org
@ 2010-12-22 19:55 ` thiago at kde dot org
  2011-06-27 14:31 ` rguenth at gcc dot gnu.org
  2012-03-13 16:45 ` [Bug tree-optimization/43247] [4.4 " jakub at gcc dot gnu.org
  4 siblings, 0 replies; 5+ messages in thread
From: thiago at kde dot org @ 2010-12-22 19:55 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43247

--- Comment #12 from Thiago Macieira <thiago at kde dot org> 2010-12-22 19:55:38 UTC ---
(In reply to comment #11)
> >The reason is again accessing an array out-of-bounds for elements that we know to be there.
> 
> No that is undefined and different from the original testcase.

Ok. Shall I open a new report with the new information?


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/43247] [4.3/4.4 Regression] Incorrect optimization while declaring array[1]
       [not found] <bug-43247-4@http.gcc.gnu.org/bugzilla/>
                   ` (2 preceding siblings ...)
  2010-12-22 19:55 ` thiago at kde dot org
@ 2011-06-27 14:31 ` rguenth at gcc dot gnu.org
  2012-03-13 16:45 ` [Bug tree-optimization/43247] [4.4 " jakub at gcc dot gnu.org
  4 siblings, 0 replies; 5+ messages in thread
From: rguenth at gcc dot gnu.org @ 2011-06-27 14:31 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43247

Richard Guenther <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|4.3.6                       |4.4.7

--- Comment #13 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-06-27 12:14:08 UTC ---
4.3 branch is being closed, moving to 4.4.7 target.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/43247] [4.4 Regression] Incorrect optimization while declaring array[1]
       [not found] <bug-43247-4@http.gcc.gnu.org/bugzilla/>
                   ` (3 preceding siblings ...)
  2011-06-27 14:31 ` rguenth at gcc dot gnu.org
@ 2012-03-13 16:45 ` jakub at gcc dot gnu.org
  4 siblings, 0 replies; 5+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-03-13 16:45 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43247

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED
   Target Milestone|4.4.7                       |4.5.0

--- Comment #14 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-03-13 13:04:33 UTC ---
Fixed in 4.5+, 4.4 is no longer supported.


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-03-13 16:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <bug-43247-4@http.gcc.gnu.org/bugzilla/>
2010-12-22 10:35 ` [Bug tree-optimization/43247] [4.3/4.4 Regression] Incorrect optimization while declaring array[1] thiago at kde dot org
2010-12-22 17:49 ` pinskia at gcc dot gnu.org
2010-12-22 19:55 ` thiago at kde dot org
2011-06-27 14:31 ` rguenth at gcc dot gnu.org
2012-03-13 16:45 ` [Bug tree-optimization/43247] [4.4 " jakub at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).