[cfe-dev] C/C++ operator meaning is different between gcc generic vector type and altivec type

Bill Schmidt via cfe-dev cfe-dev at lists.llvm.org
Thu Oct 18 14:09:32 PDT 2018


Hi Hubert,

Yeah, that is some very badly written text.  We'll have to try to rewrite
that for clarity.

Thanks!

-- Bill

Bill Schmidt, Ph.D.
STSM, Toolchain Architect for Linux on POWER
IBM Linux Technology Center
wschmidt at us.ibm.com   (507) 319-6873




From:	Hubert Tong/Toronto/IBM
To:	Jinsong Ji/Jacksonville/IBM at IBMUS
Cc:	Zi Xuan CW Wu/China/IBM at IBMCN, cfe-dev at lists.llvm.org, Nemanja
            Ivanovic/Toronto/IBM at IBMCA, Bill Schmidt/Rochester/IBM at IBMUS
Date:	10/18/2018 03:51 PM
Subject:	Re: C/C++ operator meaning is different between gcc generic
            vector type and altivec type


Sorry, yes. I got confused over the very loose term of "do all" and the
intrinsic of vec_all_le being named with "all".
The ABI does clearly say:
The result of binary operators is the same type as the type of the input
operands.

-- HT




From:	Jinsong Ji/Jacksonville/IBM
To:	Hubert Tong/Toronto/IBM at IBMCA
Cc:	Zi Xuan CW Wu/China/IBM at IBMCN, cfe-dev at lists.llvm.org, Nemanja
            Ivanovic/Toronto/IBM at IBMCA, Bill Schmidt/Rochester/IBM at IBMUS
Date:	18-10-2018 03:53 p.m.
Subject:	Re: C/C++ operator meaning is different between gcc generic
            vector type and altivec type


Hi Hubert:

Looks like the interpretation of ABI should be the opposite of your
understanding.

"The ABI (as cited by Hubert) clearly means that all of the operators
described there are to operate independently on each lane.  Vector binary
addition is not "sum across", so why should vector <= mean vec_all_le (or
vec_any_le, for that matter)?  The result of <= should be a vector of
booleans."



Best,

Jinsong Ji (¼Í½ðËÉ), PhD.

XL C/C++, XL Fortran Compiler Development
E-mail: jji at us.ibm.com




From:	Hubert Tong/Toronto/IBM
To:	Zi Xuan CW Wu/China/IBM at IBMCN
Cc:	cfe-dev at lists.llvm.org, Jinsong Ji/Jacksonville/IBM at IBMUS,
            Nemanja Ivanovic/Toronto/IBM at IBMCA
Date:	10/18/2018 10:03 AM
Subject:	Re: C/C++ operator meaning is different between gcc generic
            vector type and altivec type


The OpenPOWER ABI for Linux Supplement for the Power Architecture 64-bit
ELF V2 ABI documents the following under Section 6.2. "Vector Operators":

The traditional C/C++ operators are defined on vector types with ¡°do all¡±
semantics for unary and binary +, unary and binary ¨C, binary *, binary %,
and binary / as well as the unary and binary shift, logical and comparison
operators, and the ternary ?: operator.

So the answer is the the two kinds of vectors have separate semantics and
Clang is right.

-- HT




From:	Zi Xuan CW Wu/China/IBM
To:	cfe-dev at lists.llvm.org
Cc:	Jinsong Ji/Jacksonville/IBM at IBMUS, Nemanja
            Ivanovic/Toronto/IBM at IBMCA, Hubert Tong/Toronto/IBM at IBMCA
Date:	18-10-2018 02:18 a.m.
Subject:	C/C++ operator meaning is different between gcc generic vector
            type and altivec type



Hi, all.

I find the meaning of C/C++ language operator '<=' is different between
different vector kind type. For example, a legal clang code as following.
But it's ill-formed in GCC.
     typedef int v4 __attribute((vector_size(16)));

     int main(){
       v4 va;
       v4 vb;
       vector int a;
       vector int b;

       int c = a<=b;
       v4 vc = va<=vb;

     }

     g++ a.C
     a.C: In function 'int main()':
     a.C:9:14: error: cannot convert '__vector(4) int' to 'int' in
     initialization
        int c = a<=b;


The return type of '<=' operator of Altivec kind vector is not same as
generic gcc kind vector. One is int, the other one is vector. But in GCC,
it's same return type and meaning, which is described at
https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html

So my question is what it is we would like relational and equality
operators to do with vectors? We make the meaning of two kind vectors
consistent or separate? Or which document is standard rule to implement the
semantic meaning?


Regards,


Zixuan Wu (Zeson)

XL C/C++ Compiler Developer
IBM Systems, z System
E-mail: wuzish at cn.ibm.com
Tel: 86-21-60928420

Compiler : The Art of Lowering





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20181018/9e0c8448/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graycol.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20181018/9e0c8448/attachment.gif>


More information about the cfe-dev mailing list