https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91534

            Bug ID: 91534
           Summary: some defined builtins are not usable
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pc at gcc dot gnu.org
  Target Milestone: ---

On a ppc64le system, some builtins which appear to have the beginnings of
support are not usable at compilation time.

Example from gcc/config/rs6000/rs6000-builtin.def:
BU_VSX_X (XSMADDMDP,          "xsmaddmdp",      FP)

$ cat xsmaddmdp.c
#include <stdio.h>
#include <altivec.h>
double foo(double a, double b, double c) {
        double d = __builtin_vsx_xsmaddmdp (2.0, 3.0, 11.0);
        return d;
}

$ /opt/at12.0/bin/gcc --version
gcc (GCC) 8.2.1 20180813 (Advance-Toolchain-at12.0) [revision 263510]

$ /opt/at12.0/bin/gcc -c xsmaddmdp.c -mcpu=power9
xsmaddmdp.c: In function ‘foo’:
xsmaddmdp.c:4:13: warning: implicit declaration of function
‘__builtin_vsx_xsmaddmdp’; did you mean ‘__builtin_vsx_xvmadddp’?
[-Wimplicit-function-declaration]

Unscientifically, I took all of the __builtin_{altivec,vmx,vsx,vec} strings
from /opt/at12.0/libexec/gcc/powerpc64le-linux-gnu/8.2.1/cc1, and the following
builtins exhibit the same issue:
implicit declaration of function ‘__builtin_altivec_mask_for_store’             
implicit declaration of function ‘__builtin_altivec_vec_init_v4si’              
implicit declaration of function ‘__builtin_altivec_vec_init_v8hi’
implicit declaration of function ‘__builtin_altivec_vec_init_v16qi’
implicit declaration of function ‘__builtin_altivec_vec_init_v4sf’              
implicit declaration of function ‘__builtin_altivec_vec_set_v4si’
implicit declaration of function ‘__builtin_altivec_vec_set_v8hi’
implicit declaration of function ‘__builtin_altivec_vec_set_v16qi’
implicit declaration of function ‘__builtin_altivec_vec_set_v4sf’
implicit declaration of function ‘__builtin_altivec_vec_ext_v4si’
implicit declaration of function ‘__builtin_altivec_vec_ext_v8hi’
implicit declaration of function ‘__builtin_altivec_vec_ext_v16qi’
implicit declaration of function ‘__builtin_altivec_vec_ext_v4sf’
implicit declaration of function ‘__builtin_vec_sldw’
implicit declaration of function ‘__builtin_vsx_lxsdx’
implicit declaration of function ‘__builtin_vsx_lxvdsx’
implicit declaration of function ‘__builtin_vsx_stxsdx’
implicit declaration of function ‘__builtin_vsx_xsabsdp’
implicit declaration of function ‘__builtin_vsx_xsadddp’
implicit declaration of function ‘__builtin_vsx_xscmpodp’
implicit declaration of function ‘__builtin_vsx_xscmpudp’
implicit declaration of function ‘__builtin_vsx_xscvdpsxds’
implicit declaration of function ‘__builtin_vsx_xscvdpsxws’
implicit declaration of function ‘__builtin_vsx_xscvdpuxds’
implicit declaration of function ‘__builtin_vsx_xscvdpuxws’
implicit declaration of function ‘__builtin_vsx_xscvsxddp’
implicit declaration of function ‘__builtin_vsx_xscvuxddp’
implicit declaration of function ‘__builtin_vsx_xsdivdp’
implicit declaration of function ‘__builtin_vsx_xsmaddadp’
implicit declaration of function ‘__builtin_vsx_xsmaddmdp’
implicit declaration of function ‘__builtin_vsx_xsmovdp’
implicit declaration of function ‘__builtin_vsx_xsmsubadp’
implicit declaration of function ‘__builtin_vsx_xsmsubmdp’
implicit declaration of function ‘__builtin_vsx_xsmuldp’
implicit declaration of function ‘__builtin_vsx_xsnabsdp’
implicit declaration of function ‘__builtin_vsx_xsnegdp’
implicit declaration of function ‘__builtin_vsx_xsnmaddadp’
implicit declaration of function ‘__builtin_vsx_xsnmaddmdp’
implicit declaration of function ‘__builtin_vsx_xsnmsubadp’
implicit declaration of function ‘__builtin_vsx_xsnmsubmdp’
implicit declaration of function ‘__builtin_vsx_xssubdp’
implicit declaration of function ‘__builtin_vsx_vec_init_v1ti’
implicit declaration of function ‘__builtin_vsx_vec_init_v2df’
implicit declaration of function ‘__builtin_vsx_vec_init_v2di’
implicit declaration of function ‘__builtin_vsx_vec_set_v1ti’
implicit declaration of function ‘__builtin_vsx_vec_set_v2df’
implicit declaration of function ‘__builtin_vsx_vec_set_v2di’
implicit declaration of function ‘__builtin_vsx_vec_ext_v1ti’
implicit declaration of function ‘__builtin_vsx_vec_ext_v2df’
implicit declaration of function ‘__builtin_vsx_vec_ext_v2di’
implicit declaration of function ‘__builtin_altivec_xst_len_r’

...that is certainly not a complete set, because it excludes all of the form
__builtin_<instruction>.

Reply via email to