From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 128723 invoked by alias); 11 Dec 2015 14:20:12 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 128713 invoked by uid 89); 11 Dec 2015 14:20:12 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: e06smtp16.uk.ibm.com Received: from e06smtp16.uk.ibm.com (HELO e06smtp16.uk.ibm.com) (195.75.94.112) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Fri, 11 Dec 2015 14:20:10 +0000 Received: from localhost by e06smtp16.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 11 Dec 2015 14:20:06 -0000 Received: from d06dlp03.portsmouth.uk.ibm.com (9.149.20.15) by e06smtp16.uk.ibm.com (192.168.101.146) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 11 Dec 2015 14:20:04 -0000 X-IBM-Helo: d06dlp03.portsmouth.uk.ibm.com X-IBM-MailFrom: vogt@linux.vnet.ibm.com X-IBM-RcptTo: gcc-patches@gcc.gnu.org Received: from b06cxnps4076.portsmouth.uk.ibm.com (d06relay13.portsmouth.uk.ibm.com [9.149.109.198]) by d06dlp03.portsmouth.uk.ibm.com (Postfix) with ESMTP id CF6BD1B08067 for ; Fri, 11 Dec 2015 14:20:33 +0000 (GMT) Received: from d06av08.portsmouth.uk.ibm.com (d06av08.portsmouth.uk.ibm.com [9.149.37.249]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id tBBEK3099896204 for ; Fri, 11 Dec 2015 14:20:03 GMT Received: from d06av08.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av08.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id tBBEK3tQ012788 for ; Fri, 11 Dec 2015 07:20:03 -0700 Received: from bl3ahm9f.de.ibm.com (sig-9-84-2-96.evts.de.ibm.com [9.84.2.96]) by d06av08.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id tBBEK2Bd012737; Fri, 11 Dec 2015 07:20:03 -0700 Received: from dvogt by bl3ahm9f.de.ibm.com with local (Exim 4.76) (envelope-from ) id 1a7OYC-0000Vg-RW; Fri, 11 Dec 2015 15:20:00 +0100 Date: Fri, 11 Dec 2015 14:20:00 -0000 From: Dominik Vogt To: gcc-patches@gcc.gnu.org Cc: Ulrich Weigand , Andreas Krebbel Subject: [PATCH] S/390: Wide int support. Message-ID: <20151211142000.GA1474@linux.vnet.ibm.com> Reply-To: vogt@linux.vnet.ibm.com Mail-Followup-To: gcc-patches@gcc.gnu.org, Ulrich Weigand , Andreas Krebbel MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="sdtB3X0nJg68CQEu" Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15121114-0025-0000-0000-00000845190E X-SW-Source: 2015-12/txt/msg01266.txt.bz2 --sdtB3X0nJg68CQEu Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 257 The attached patch introduces wide int support to S/390 in order to resolve a test case failure in gcc.dg/pr68129_1.c that is caused by an assertion in simplify-rtx.c:simplify_const_binary_operation(). Ciao Dominik ^_^ ^_^ -- Dominik Vogt IBM Germany --sdtB3X0nJg68CQEu Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=0001-ChangeLog Content-length: 448 gcc/ChangeLog * config/s390/s390.c (s390_rtx_costs) (s390_cannot_force_const_mem, legitimate_pic_operand_p) (s390_preferred_reload_class, s390_reload_symref_address) (legitimate_reload_constant_p, print_operand): Wide int support. * config/s390/predicates.md ("const0_operand", "constm1_operand") ("consttable_operand"): Likewise. ("larl_operand"): Add a comment. * config/s390/s390.h (TARGET_SUPPORTS_WIDE_INT): Enable wide int support. --sdtB3X0nJg68CQEu Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0001-S-390-Wide-int-support.patch" Content-length: 6280 >From a2909e33789375d0217957defd335491d341918b Mon Sep 17 00:00:00 2001 From: Dominik Vogt Date: Thu, 10 Dec 2015 11:51:08 +0100 Subject: [PATCH] S/390: Wide int support. This fixes the assertion in simplify-rtx.c:simplify_const_binary_operation() triggered by gcc.dg/pr68129_1.c. --- gcc/config/s390/predicates.md | 9 ++++++--- gcc/config/s390/s390.c | 26 ++++++++++++++++---------- gcc/config/s390/s390.h | 2 ++ 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/gcc/config/s390/predicates.md b/gcc/config/s390/predicates.md index 6a5ebbb..75cecf0 100644 --- a/gcc/config/s390/predicates.md +++ b/gcc/config/s390/predicates.md @@ -26,12 +26,12 @@ ;; Return true if OP a const 0 operand (int/float/vector). (define_predicate "const0_operand" - (and (match_code "const_int,const_double,const_vector") + (and (match_code "const_int,const_wide_int,const_double,const_vector") (match_test "op == CONST0_RTX (mode)"))) ;; Return true if OP an all ones operand (int/float/vector). (define_predicate "constm1_operand" - (and (match_code "const_int, const_double,const_vector") + (and (match_code "const_int,const_wide_int,const_double,const_vector") (match_test "op == CONSTM1_RTX (mode)"))) ;; Return true if OP is a 4 bit mask operand @@ -42,7 +42,7 @@ ;; Return true if OP is constant. (define_special_predicate "consttable_operand" - (and (match_code "symbol_ref, label_ref, const, const_int, const_double, const_vector") + (and (match_code "symbol_ref, label_ref, const, const_int, const_wide_int, const_double, const_vector") (match_test "CONSTANT_P (op)"))) ;; Return true if OP is a valid S-type operand. @@ -121,6 +121,9 @@ ;; Return true if OP a valid operand for the LARL instruction. (define_predicate "larl_operand" +; Note: Although CONST_INT and CONST_DOUBLE are not handled in this predicate, +; at least one of them needs to appear or otherwise safe_predicate_mode will +; assume that a DImode LABEL_REF is not accepted either (see genrecog.c). (match_code "label_ref, symbol_ref, const, const_int, const_double") { /* Allow labels and local symbols. */ diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index f8928b9..bed58d8 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -1323,7 +1323,7 @@ s390_tm_ccmode (rtx op1, rtx op2, bool mixed) { int bit0, bit1; - /* ??? Fixme: should work on CONST_DOUBLE as well. */ + /* ??? Fixme: should work on CONST_WIDE_INT as well. */ if (GET_CODE (op1) != CONST_INT || GET_CODE (op2) != CONST_INT) return VOIDmode; @@ -3355,6 +3355,7 @@ s390_rtx_costs (rtx x, machine_mode mode, int outer_code, case LABEL_REF: case SYMBOL_REF: case CONST_DOUBLE: + case CONST_WIDE_INT: case MEM: *total = 0; return true; @@ -3662,7 +3663,7 @@ tls_symbolic_reference_mentioned_p (rtx op) /* Return true if OP is a legitimate general operand when generating PIC code. It is given that flag_pic is on - and that OP satisfies CONSTANT_P or is a CONST_DOUBLE. */ + and that OP satisfies CONSTANT_P. */ int legitimate_pic_operand_p (rtx op) @@ -3677,7 +3678,7 @@ legitimate_pic_operand_p (rtx op) } /* Returns true if the constant value OP is a legitimate general operand. - It is given that OP satisfies CONSTANT_P or is a CONST_DOUBLE. */ + It is given that OP satisfies CONSTANT_P. */ static bool s390_legitimate_constant_p (machine_mode mode, rtx op) @@ -3731,6 +3732,7 @@ s390_cannot_force_const_mem (machine_mode mode, rtx x) { case CONST_INT: case CONST_DOUBLE: + case CONST_WIDE_INT: case CONST_VECTOR: /* Accept all non-symbolic constants. */ return false; @@ -3831,8 +3833,9 @@ legitimate_reload_constant_p (rtx op) return true; /* Accept double-word operands that can be split. */ - if (GET_CODE (op) == CONST_INT - && trunc_int_for_mode (INTVAL (op), word_mode) != INTVAL (op)) + if (GET_CODE (op) == CONST_WIDE_INT + || (GET_CODE (op) == CONST_INT + && trunc_int_for_mode (INTVAL (op), word_mode) != INTVAL (op))) { machine_mode dword_mode = word_mode == SImode ? DImode : TImode; rtx hi = operand_subword (op, 0, 0, dword_mode); @@ -3896,6 +3899,7 @@ s390_preferred_reload_class (rtx op, reg_class_t rclass) case CONST_VECTOR: case CONST_DOUBLE: case CONST_INT: + case CONST_WIDE_INT: if (reg_class_subset_p (GENERAL_REGS, rclass) && legitimate_reload_constant_p (op)) return GENERAL_REGS; @@ -4047,6 +4051,7 @@ s390_reload_symref_address (rtx reg, rtx mem, rtx scratch, bool tomem) /* Reload might have pulled a constant out of the literal pool. Force it back in. */ if (CONST_INT_P (mem) || GET_CODE (mem) == CONST_DOUBLE + || GET_CODE (mem) == CONST_WIDE_INT || GET_CODE (mem) == CONST_VECTOR || GET_CODE (mem) == CONST) mem = force_const_mem (GET_MODE (reg), mem); @@ -7233,15 +7238,16 @@ print_operand (FILE *file, rtx x, int code) fprintf (file, HOST_WIDE_INT_PRINT_DEC, ival); break; - case CONST_DOUBLE: - gcc_assert (GET_MODE (x) == VOIDmode); + case CONST_WIDE_INT: if (code == 'b') - fprintf (file, HOST_WIDE_INT_PRINT_DEC, CONST_DOUBLE_LOW (x) & 0xff); + fprintf (file, HOST_WIDE_INT_PRINT_DEC, + CONST_WIDE_INT_ELT (x, 0) & 0xff); else if (code == 'x') - fprintf (file, HOST_WIDE_INT_PRINT_DEC, CONST_DOUBLE_LOW (x) & 0xffff); + fprintf (file, HOST_WIDE_INT_PRINT_DEC, + CONST_WIDE_INT_ELT (x, 0) & 0xffff); else if (code == 'h') fprintf (file, HOST_WIDE_INT_PRINT_DEC, - ((CONST_DOUBLE_LOW (x) & 0xffff) ^ 0x8000) - 0x8000); + ((CONST_WIDE_INT_ELT (x, 0) & 0xffff) ^ 0x8000) - 0x8000); else { if (code == 0) diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h index b96549e..52ed7a4 100644 --- a/gcc/config/s390/s390.h +++ b/gcc/config/s390/s390.h @@ -155,6 +155,8 @@ enum processor_flags #define SWITCHABLE_TARGET 1 #endif +#define TARGET_SUPPORTS_WIDE_INT 1 + /* Use the ABI introduced with IBM z13: - pass vector arguments <= 16 bytes in VRs - align *all* vector types to 8 bytes */ -- 2.3.0 --sdtB3X0nJg68CQEu--