[cfe-dev] C/C++ operator meaning is different between gcc generic vector type and altivec type
Jinsong Ji via cfe-dev
cfe-dev at lists.llvm.org
Thu Oct 18 12:53:32 PDT 2018
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/5ee5f2ef/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/5ee5f2ef/attachment.gif>
More information about the cfe-dev
mailing list