public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/55726] New: assignment of a scalar to a vector
@ 2012-12-18  7:17 vincenzo.innocente at cern dot ch
  2012-12-18 11:36 ` [Bug c++/55726] " rguenth at gcc dot gnu.org
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: vincenzo.innocente at cern dot ch @ 2012-12-18  7:17 UTC (permalink / raw)
  To: gcc-bugs


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

             Bug #: 55726
           Summary: assignment of a scalar to a vector
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: vincenzo.innocente@cern.ch
                CC: marc.glisse@ens.fr


given that the following code is valid and correct

typedef float __attribute__( ( vector_size( 16 ) ) ) float32x4_t;
typedef int __attribute__( ( vector_size( 16 ) ) ) int32x4_t;

#include<cassert>
int main() {

  float a = 3.14f;
  float32x4_t va = float32x4_t{} + a;
  // float32x4_t va =  a;
  int32x4_t t = va==a;

  for (int i=0; i!=4;++i) {
    assert(va[i]==a);
    assert(t[i]!=0);
  }

  return 0;
}

I think that the assignment 
float32x4_t va =  a;
is syntactically and semantically unambiguous and therefore should be
supported.
At the moment produces

++ -std=c++11 -Ofast -march=corei7 assign.cpp 
assign.cpp: In function ‘int main()’:
assign.cpp:9:21: error: cannot convert ‘float’ to ‘float32x4_t {aka __vector(4)
float}’ in initialization
   float32x4_t va =  a;


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

* [Bug c++/55726] assignment of a scalar to a vector
  2012-12-18  7:17 [Bug c++/55726] New: assignment of a scalar to a vector vincenzo.innocente at cern dot ch
@ 2012-12-18 11:36 ` rguenth at gcc dot gnu.org
  2012-12-18 11:39 ` vincenzo.innocente at cern dot ch
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-12-18 11:36 UTC (permalink / raw)
  To: gcc-bugs


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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2012-12-18
     Ever Confirmed|0                           |1
           Severity|normal                      |enhancement

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> 2012-12-18 11:35:43 UTC ---
Confirmed.  Does it work with C?


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

* [Bug c++/55726] assignment of a scalar to a vector
  2012-12-18  7:17 [Bug c++/55726] New: assignment of a scalar to a vector vincenzo.innocente at cern dot ch
  2012-12-18 11:36 ` [Bug c++/55726] " rguenth at gcc dot gnu.org
@ 2012-12-18 11:39 ` vincenzo.innocente at cern dot ch
  2012-12-18 20:54 ` glisse at gcc dot gnu.org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: vincenzo.innocente at cern dot ch @ 2012-12-18 11:39 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #2 from vincenzo Innocente <vincenzo.innocente at cern dot ch> 2012-12-18 11:39:22 UTC ---
no

gcc -Ofast -march=corei7 assign.c  -std=c99
assign.c: In function ‘main’:
assign.c:9:21: error: incompatible types when initializing type ‘float32x4_t’
using type ‘float’
   float32x4_t va =  a;


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

* [Bug c++/55726] assignment of a scalar to a vector
  2012-12-18  7:17 [Bug c++/55726] New: assignment of a scalar to a vector vincenzo.innocente at cern dot ch
  2012-12-18 11:36 ` [Bug c++/55726] " rguenth at gcc dot gnu.org
  2012-12-18 11:39 ` vincenzo.innocente at cern dot ch
@ 2012-12-18 20:54 ` glisse at gcc dot gnu.org
  2012-12-19 13:25 ` vincenzo.innocente at cern dot ch
  2012-12-22  8:57 ` glisse at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: glisse at gcc dot gnu.org @ 2012-12-18 20:54 UTC (permalink / raw)
  To: gcc-bugs


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

Marc Glisse <glisse at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|marc.glisse at ens dot fr   |glisse at gcc dot gnu.org

--- Comment #3 from Marc Glisse <glisse at gcc dot gnu.org> 2012-12-18 20:53:52 UTC ---
If I have:
void f(double);
void f(float32x4_t);
float a;
what should f(a) do? Not sure that's the right question (I am sick this week,
so I have an excuse for posting nonsense), but hopefully you see the point,
adding implicit conversions has a lot of consequences, which might be good but
need to be considered.


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

* [Bug c++/55726] assignment of a scalar to a vector
  2012-12-18  7:17 [Bug c++/55726] New: assignment of a scalar to a vector vincenzo.innocente at cern dot ch
                   ` (2 preceding siblings ...)
  2012-12-18 20:54 ` glisse at gcc dot gnu.org
@ 2012-12-19 13:25 ` vincenzo.innocente at cern dot ch
  2012-12-22  8:57 ` glisse at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: vincenzo.innocente at cern dot ch @ 2012-12-19 13:25 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #4 from vincenzo Innocente <vincenzo.innocente at cern dot ch> 2012-12-19 13:25:16 UTC ---
I understand your concern, Marc.

I think that the compiler shall either prefer double or produce
"error: call of overloaded 'f(float&)' is ambiguous"
I'm even more worried of
void f(float32x4_t);
void f(float32x8_t);

what about some sort of c++ "explicit"?

I must say that my immediate need come from template functions
that could accept any arithmetic AND vector type 
such as

template<typename Float>
inline
Float atan(Float t) {
  constexpr float PIO4F = 0.7853981633974483096f;
  constexpr Float zero = {0};
  Float ret = ( t > 0.4142135623730950f ) ? zero+PIO4F : zero;
…
}

where at the moment I need to perform a quite "unnatural" syntactic gymnastic
to assign
a scalar to either another scalar or to a vector of unknown length.


btw I think that altivec supports the assignment of a scalar: I've never tried
myself though
vector int vi1 = (vector int)(1);    // vi1 will be (1, 1, 1, 1).
vector int vi2 = (vector int){1};    // vi2 will be (1, 0, 0, 0).
vector int vi3 = (vector int)(1, 2); // error
vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0).
vector int vi5 = (vector int)(1, 2, 3, 4);


In any case I find  all these "exercises" quite useful to try to converge to a
unique vector syntax to propose as standard


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

* [Bug c++/55726] assignment of a scalar to a vector
  2012-12-18  7:17 [Bug c++/55726] New: assignment of a scalar to a vector vincenzo.innocente at cern dot ch
                   ` (3 preceding siblings ...)
  2012-12-19 13:25 ` vincenzo.innocente at cern dot ch
@ 2012-12-22  8:57 ` glisse at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: glisse at gcc dot gnu.org @ 2012-12-22  8:57 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #5 from Marc Glisse <glisse at gcc dot gnu.org> 2012-12-22 08:57:14 UTC ---
(In reply to comment #4)
> template<typename Float>
> inline
> Float atan(Float t) {
>   constexpr float PIO4F = 0.7853981633974483096f;
>   constexpr Float zero = {0};
>   Float ret = ( t > 0.4142135623730950f ) ? zero+PIO4F : zero;
> …
> }

Minor remark: I think you can just write PIO4F instead of zero+PIO4F. Since the
other alternative in ?: is a vector, it should convert the scalar
automatically.

I am actually planning for later that you can even replace zero with 0: when
the condition in ?: is a vector, the result has to be a vector, even if the 2
alternatives are scalars, so it could guess the return type based on the types
of the scalars and the size / number of elements of the condition. But that's
for a distant future.


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

end of thread, other threads:[~2012-12-22  8:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-18  7:17 [Bug c++/55726] New: assignment of a scalar to a vector vincenzo.innocente at cern dot ch
2012-12-18 11:36 ` [Bug c++/55726] " rguenth at gcc dot gnu.org
2012-12-18 11:39 ` vincenzo.innocente at cern dot ch
2012-12-18 20:54 ` glisse at gcc dot gnu.org
2012-12-19 13:25 ` vincenzo.innocente at cern dot ch
2012-12-22  8:57 ` glisse 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).