[Bug c++/55726] assignment of a scalar to a vector

2012-12-22 Thread glisse at gcc dot gnu.org

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)
 templatetypename 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.


[Bug c++/55726] assignment of a scalar to a vector

2012-12-19 Thread vincenzo.innocente at cern dot ch

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

templatetypename 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


[Bug c++/55726] assignment of a scalar to a vector

2012-12-18 Thread rguenth at gcc dot gnu.org


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?


[Bug c++/55726] assignment of a scalar to a vector

2012-12-18 Thread vincenzo.innocente at cern dot ch

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;


[Bug c++/55726] assignment of a scalar to a vector

2012-12-18 Thread glisse at gcc dot gnu.org


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.