From patchwork Fri Apr 13 20:15:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Kelvin Nilsen X-Patchwork-Id: 898089 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-476367-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="M6dvACqF"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40N8Dj4ckCz9s0t for ; Sat, 14 Apr 2018 06:16:18 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to:cc :from:subject:date:mime-version:content-type :content-transfer-encoding:message-id; q=dns; s=default; b=RrOhq fuGOUfzvecG2bKvFVYdgOPdhut6dn8CwxOD5EK7cJ8EIznL8LWYXxkjirDlLQv7F 4uaIAdkqbCpR5xNUOBQv9XOoRtyUKlEfizcjvFGbOwtZKEtA65Yn3jA5t7yqm4qz u3YT8TlglKSOlYK4IxS0HnKx9T63DVFD+Cvdig= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to:cc :from:subject:date:mime-version:content-type :content-transfer-encoding:message-id; s=default; bh=+iQO5ILXABC pUkXt+ve2NYQRUbs=; b=M6dvACqFdEQvKJNZ68kB22OMb/EBBESCjRiEElqkUWg 2MQhosH6CUaiNeQAJXrkIjDZXkQ3AtlOwXDaPDHmJSTDq+ZdV5fOCWRMKe7zjyJq 1LvV+wX14enSHlzrzZXFVE8+qzi70QpD4sDLDOglp1THQwlrmGc2MGxmJleOVbbA = Received: (qmail 119841 invoked by alias); 13 Apr 2018 20:15:25 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 119774 invoked by uid 89); 13 Apr 2018 20:15:23 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.9 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, KAM_NUMSUBJECT, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=UD:scalar-extract-exp-5.c, UD:scalar-test-neg-4.c, UD:scalar-test-data-class-10.c, UD:scalar-test-data-class-9.c X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0b-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.158.5) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 13 Apr 2018 20:15:21 +0000 Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w3DKAceH137553 for ; Fri, 13 Apr 2018 16:15:13 -0400 Received: from e14.ny.us.ibm.com (e14.ny.us.ibm.com [129.33.205.204]) by mx0b-001b2d01.pphosted.com with ESMTP id 2hb0tppcec-1 (version=TLSv1.2 cipher=AES256-SHA256 bits=256 verify=NOT) for ; Fri, 13 Apr 2018 16:15:13 -0400 Received: from localhost by e14.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 13 Apr 2018 16:15:12 -0400 Received: from b01cxnp22034.gho.pok.ibm.com (9.57.198.24) by e14.ny.us.ibm.com (146.89.104.201) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 13 Apr 2018 16:15:10 -0400 Received: from b01ledav005.gho.pok.ibm.com (b01ledav005.gho.pok.ibm.com [9.57.199.110]) by b01cxnp22034.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w3DKFAiT53936182; Fri, 13 Apr 2018 20:15:10 GMT Received: from b01ledav005.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7760BAE051; Fri, 13 Apr 2018 16:16:55 -0400 (EDT) Received: from kelvins-mbp-2.rchland.ibm.com (unknown [9.10.86.22]) by b01ledav005.gho.pok.ibm.com (Postfix) with ESMTP id 3E8CEAE03C; Fri, 13 Apr 2018 16:16:55 -0400 (EDT) To: gcc-patches@gcc.gnu.org Cc: segher@gcc.gnu.org From: Kelvin Nilsen Subject: [PATCH, rs6000] Fix tests that are failing in gcc.target/powerpc/bfp with -m32 Date: Fri, 13 Apr 2018 15:15:09 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 X-TM-AS-GCONF: 00 x-cbid: 18041320-0052-0000-0000-000002DAB167 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00008851; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000257; SDB=6.01017446; UDB=6.00518915; IPR=6.00796684; MB=3.00020564; MTD=3.00000008; XFM=3.00000015; UTC=2018-04-13 20:15:11 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18041320-0053-0000-0000-00005C5232B6 Message-Id: <3090c1c4-41e1-d37b-c029-2775b2deb3d6@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2018-04-13_11:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1804130187 Twelve failures have been occuring in the bfp test directory during -m32 regression testing. The cause of these failures was two-fold: 1. Patches added subsequent to development of the tests caused new error messages to be emitted that are different than the error messages expected in the dejagnu patterns. These new patches also changed which built-in functions are legal when compiling with the -m32 command-line option. 2. The implementation of overloaded built-in functions maps overloaded function names to non-overloaded names.  Depending on the stage at which an error is recognized, error messages may refer either to the overloaded built-in function name or the non-overloaded name. This patch: 1. Changes the expected error messages in certain test programs. 2. Disables certain test programs from being exercised on 32-bit targets. 3. Adds a "note" error message to explain the mapping from overloaded built-in functions to non-overloaded built-in functions. This patch has bootstrapped and tested without regressions on both powerpc64le-unknown-linux (P8) and on powerpc-linux (P7 big-endian, with both -m32 and -m64 target options). Is this ok for trunk? gcc/ChangeLog: 2018-04-13  Kelvin Nilsen      * config/rs6000/rs6000-protos.h (rs6000_builtin_is_supported_p):     New prototype.     * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):     Add note to error message to explain internal mapping of overloaded     built-in function name to non-overloaded built-in function name.     * config/rs6000/rs6000.c (rs6000_builtin_is_supported_p): New     function. gcc/testsuite/ChangeLog: 2018-04-13  Kelvin Nilsen      * gcc.target/powerpc/bfp/scalar-extract-sig-5.c: Simplify to     prevent cascading of errors and change expected error message.     * gcc.target/powerpc/bfp/scalar-test-neg-4.c: Restrict this test     to 64-bit targets.     * gcc.target/powerpc/bfp/scalar-test-data-class-8.c: Likewise.     * gcc.target/powerpc/bfp/scalar-test-data-class-9.c: Likewise.     * gcc.target/powerpc/bfp/scalar-test-data-class-10.c: Likewise.     * gcc.target/powerpc/bfp/scalar-insert-exp-11.c: Change expected     error message.     * gcc.target/powerpc/bfp/scalar-extract-exp-5.c: Likewise. Index: gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-5.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-5.c    (revision 259316) +++ gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-5.c    (working copy) @@ -8,10 +8,10 @@     error because the builtin requires 64 bits.  */  #include   -unsigned __int128 /* { dg-error "'__int128' is not supported on this target" } */ +unsigned long long int  get_significand (__ieee128 *p)  {    __ieee128 source = *p;   -  return __builtin_vec_scalar_extract_sig (source); /* { dg-error "builtin function '__builtin_vec_scalar_extract_sig' not supported in this compiler configuration" } */ +  return (long long int) __builtin_vec_scalar_extract_sig (source); /* { dg-error "requires ISA 3.0 IEEE 128-bit floating point" } */  } Index: gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-4.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-4.c    (revision 259316) +++ gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-4.c    (working copy) @@ -1,5 +1,6 @@  /* { dg-do compile { target { powerpc*-*-* } } } */  /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ +/* { dg-require-effective-target lp64 } */  /* { dg-require-effective-target powerpc_p9vector_ok } */  /* { dg-options "-mcpu=power9" } */   @@ -11,6 +12,8 @@  {    __ieee128 source = *p;   +  /* IEEE 128-bit floating point operations are only supported +     on 64-bit targets.  */    return scalar_test_neg (source);  }   Index: gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-8.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-8.c    (revision 259316) +++ gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-8.c    (working copy) @@ -1,5 +1,6 @@  /* { dg-do compile { target { powerpc*-*-* } } } */  /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ +/* { dg-require-effective-target lp64 } */  /* { dg-require-effective-target powerpc_p9vector_ok } */  /* { dg-options "-mcpu=power9" } */   @@ -11,6 +12,8 @@  {    __ieee128 source = *p;   +  /* IEEE 128-bit floating point operations are only supported +     on 64-bit targets.  */    return scalar_test_data_class (source, 3);  }   Index: gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-11.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-11.c    (revision 259316) +++ gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-11.c    (working copy) @@ -17,5 +17,5 @@    __ieee128 significand = *significand_p;    unsigned long long int exponent = *exponent_p;   -  return scalar_insert_exp (significand, exponent); /* { dg-error "builtin function '__builtin_vec_scalar_insert_exp' not supported in this compiler configuration" } */ +  return scalar_insert_exp (significand, exponent); /* { dg-error "requires ISA 3.0 IEEE 128-bit floating point" } */  } Index: gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-9.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-9.c    (revision 259316) +++ gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-9.c    (working copy) @@ -1,5 +1,6 @@  /* { dg-do compile { target { powerpc*-*-* } } } */  /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ +/* { dg-require-effective-target lp64 } */  /* { dg-require-effective-target powerpc_p9vector_ok } */  /* { dg-options "-mcpu=power9" } */   @@ -11,6 +12,8 @@  {    __ieee128 source = *p;   +  /* IEEE 128-bit floating point operations are only supported +     on 64-bit targets.  */    return scalar_test_data_class (source, 256);    /* { dg-error "argument 2 must be a 7-bit unsigned literal" } */  }   Index: gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-5.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-5.c    (revision 259316) +++ gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-5.c    (working copy) @@ -15,7 +15,7 @@  {    __ieee128 source = *p;   -  return scalar_extract_exp (source);    /* { dg-error "builtin function '__builtin_vec_scalar_extract_exp' not supported in this compiler configuration" } */ +  return scalar_extract_exp (source);    /* { dg-error "requires ISA 3.0 IEEE 128-bit floating point" } */  }     Index: gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-10.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-10.c    (revision 259316) +++ gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-10.c    (working copy) @@ -1,5 +1,8 @@  /* { dg-do compile { target { powerpc*-*-* } } } */  /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ +/* Require 64-bit target to select expected error message below.  32-bit +   target produces different error message.  */ +/* { dg-require-effective-target lp64 } */  /* { dg-require-effective-target powerpc_p9vector_ok } */  /* { dg-options "-mcpu=power9" } */ Index: gcc/config/rs6000/rs6000-protos.h =================================================================== --- gcc/config/rs6000/rs6000-protos.h    (revision 259316) +++ gcc/config/rs6000/rs6000-protos.h    (working copy) @@ -212,6 +212,7 @@  extern void rs6000_aix_asm_output_dwarf_table_ref (char *);  extern void get_ppc476_thunk_name (char name[32]);  extern bool rs6000_overloaded_builtin_p (enum rs6000_builtins); +extern bool rs6000_builtin_is_supported_p (enum rs6000_builtins);  extern const char *rs6000_overloaded_builtin_name (enum rs6000_builtins);  extern int rs6000_store_data_bypass_p (rtx_insn *, rtx_insn *);  extern HOST_WIDE_INT rs6000_builtin_mask_calculate (void); Index: gcc/config/rs6000/rs6000-c.c =================================================================== --- gcc/config/rs6000/rs6000-c.c    (revision 259316) +++ gcc/config/rs6000/rs6000-c.c    (working copy) @@ -6885,6 +6885,8 @@      {      bool unsupported_builtin = false; +    enum rs6000_builtins overloaded_code; +    tree result = NULL;      for (desc = altivec_overloaded_builtins;       desc->code && desc->code != fcode; desc++)        continue; @@ -6897,7 +6899,6 @@         discrimination between the desired forms of the function.  */      if (fcode == P6_OV_BUILTIN_CMPB)        { -    int overloaded_code;      machine_mode arg1_mode = TYPE_MODE (types[0]);      machine_mode arg2_mode = TYPE_MODE (types[1]);   @@ -6932,14 +6933,20 @@          && rs6000_builtin_type_compatible (types[1], desc->op2))        {          if (rs6000_builtin_decls[desc->overloaded_code] != NULL_TREE) -          return altivec_build_resolved_builtin (args, n, desc); +          { +        result = altivec_build_resolved_builtin (args, n, desc); +        /* overloaded_code is set above */ +        if (!rs6000_builtin_is_supported_p (overloaded_code)) +          unsupported_builtin = true; +        else +          return result; +          }          else            unsupported_builtin = true;        }        }      else if (fcode == P9V_BUILTIN_VEC_VSIEDP)        { -    int overloaded_code;      machine_mode arg1_mode = TYPE_MODE (types[0]);        if (nargs != 2) @@ -6974,12 +6981,20 @@      while (desc->code && desc->code == fcode             && desc->overloaded_code != overloaded_code)        desc++; +      if (desc->code && (desc->code == fcode)          && rs6000_builtin_type_compatible (types[0], desc->op1)          && rs6000_builtin_type_compatible (types[1], desc->op2))        {          if (rs6000_builtin_decls[desc->overloaded_code] != NULL_TREE) -          return altivec_build_resolved_builtin (args, n, desc); +          { +        result = altivec_build_resolved_builtin (args, n, desc); +        /* overloaded_code is set above.  */ +        if (!rs6000_builtin_is_supported_p (overloaded_code)) +          unsupported_builtin = true; +        else +          return result; +          }          else            unsupported_builtin = true;        } @@ -6998,7 +7013,18 @@              || rs6000_builtin_type_compatible (types[2], desc->op3)))            {          if (rs6000_builtin_decls[desc->overloaded_code] != NULL_TREE) -          return altivec_build_resolved_builtin (args, n, desc); +          { +            result = altivec_build_resolved_builtin (args, n, desc); +            if (!rs6000_builtin_is_supported_p (desc->overloaded_code)) +              { +            /* Allow loop to continue in case a different +               definition is supported.  */ +            overloaded_code = desc->overloaded_code; +            unsupported_builtin = true; +              } +            else +              return result; +          }          else            unsupported_builtin = true;            } @@ -7008,9 +7034,24 @@      if (unsupported_builtin)        {      const char *name = rs6000_overloaded_builtin_name (fcode); -    error ("builtin function %qs not supported in this compiler " -           "configuration", name); -    return error_mark_node; +    if (result != NULL) +      { +        const char *internal_name +          = rs6000_overloaded_builtin_name (overloaded_code); +        /* An error message making reference to the name of the +           non-overloaded function has already been issued.  Add +           clarification of the previous message.  */ +        rich_location richloc (line_table, input_location); +        inform (&richloc, "builtin %qs requires builtin %qs", +            name, internal_name); +      } +    else +      /* on 64-bit, i seem to end up here */ +      error ("builtin function %qs not supported in this compiler " +         "configuration", name); +    /* If an error-representing  result tree was returned from +       altivec_build_resolved_builtin above, use it.  */ +    return (result != NULL)? result: error_mark_node;        }    }   bad: Index: gcc/config/rs6000/rs6000.c =================================================================== --- gcc/config/rs6000/rs6000.c    (revision 259316) +++ gcc/config/rs6000/rs6000.c    (working copy) @@ -15897,6 +15897,18 @@    return target;  }   +/* Check whether a builtin function is supported in this target +   configuration.  */ +bool +rs6000_builtin_is_supported_p (enum rs6000_builtins fncode) +{ +  HOST_WIDE_INT fnmask = rs6000_builtin_info[fncode].mask; +  if ((fnmask & rs6000_builtin_mask) != fnmask) +    return false; +  else +    return true; +} +  /* Raise an error message for a builtin function that is called without the     appropriate target options being set.  */