From patchwork Thu Aug 16 04:49:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dimitar Dimitrov X-Patchwork-Id: 958092 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-483754-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dinux.eu Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="OMyiRVD0"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=dinux.eu header.i=@dinux.eu header.b="Rlf15hQj"; 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 41rYmm2t9sz9s4c for ; Thu, 16 Aug 2018 14:50:30 +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:from :to:cc:subject:date:message-id; q=dns; s=default; b=sY0ab+MlRWgL kCLEsLAF7mGil93pITQLS6G+6FC5nGvmQFJLHO1Gh0kJ2Fd8dn+oPQYhXxe38E2L G2kljlIropB6Eng03erk3TrjL/V0ntqNxFnL60HtTi3hQBdFlIPIwJ6HAu0DAJXj LEe1g1VZlntcuzwrSH1GBHQHmRtvneE= 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:from :to:cc:subject:date:message-id; s=default; bh=UMLQRSkwH1ivntF31v l+11l4/L4=; b=OMyiRVD02MFV2Cf6Gn5hELdGhYbJNtHwrsT5B3XgkWaMBUDNN/ GY9TcE60Av0B/c1zahdMn6f4UN1Q0+cezJzd8ea4oXNHH1F7QLUvpoyvxtnrnQsN SPHG6FiBDRYGUK3jgW4oRu/QDvYcVxGdRlsIv2APGgYpYljziBOVrsZb4= Received: (qmail 97298 invoked by alias); 16 Aug 2018 04:50:22 -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 97286 invoked by uid 89); 16 Aug 2018 04:50:21 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-6.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_3, KAM_EU, KAM_SHORT, SPF_PASS autolearn=ham version=3.3.2 spammy=UD:eu, H*F:D*eu, H*Ad:D*eu, HX-OutGoing-Spam-Status:score X-HELO: smtp-out1.superhosting.bg Received: from smtp-out1.superhosting.bg (HELO smtp-out1.superhosting.bg) (91.196.127.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 16 Aug 2018 04:50:14 +0000 Received: from server28.superhosting.bg ([193.107.36.199]) by smtp-out1.superhosting.bg with esmtps (TLSv1:AES256-SHA:256) (Exim 4.63) (envelope-from ) id 1fqAEc-0004c3-BT for gcc-patches@gcc.gnu.org; Thu, 16 Aug 2018 07:50:10 +0300 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=dinux.eu; s=default; h=Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:MIME-Version :Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=qN9YF07pK63AxtvKSRS8Ei43T9kvgJ4dLFLUFqLPbpQ=; b=Rlf15hQjlAK1D9blm/HvxAxoXL 4OSoVTkmxQvHHHdWfVWN4bPQ/CxdNI+N7vSHpe59jDUvQ4tOADkA1GCYkwfRWHjS0KvtrWjDKhC7A EOUZBdiTwre6e8Z8pjSQ3vzX0xbXlA0928tGS9btFdv8zBLN6N9f2+Nmcl4zMDhzfXLQublxXN4gR tr9uPR0AhFJzxnDNdProf191B/Oxb3LSYjnlf+UwbxcExT6JPQCRu1vZgucTX+itx4Q4HEMG/WA55 NOZz2sKSe6sNkis63v5IZpeAdRa0yQWakEm7fOhByQ8KRqcADUF8goKf3Qwzk1Go7qbIiB10N1PVT shECAygg==; Received: from [95.87.234.74] (port=43018 helo=localhost.localdomain) by server28.superhosting.bg with esmtpsa (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.91) (envelope-from ) id 1fqAEZ-0004j3-Gm; Thu, 16 Aug 2018 07:50:10 +0300 From: Dimitar Dimitrov To: gcc-patches@gcc.gnu.org Cc: Dimitar Dimitrov Subject: [PATCH v3 00/10] New backend for the TI PRU processor Date: Thu, 16 Aug 2018 07:49:49 +0300 Message-Id: <20180816044959.12320-1-dimitar@dinux.eu> X-OutGoing-Spam-Status: No, score=-0.5 X-IsSubscribed: yes This patch series adds support for the TI PRU I/O processor to GCC. All comments from v1 [1] and v2 [2] should be addressed in this third patch revision. Test results can be downloaded from here: http://dinux.eu/gnupru/testresults/20180816-b7bb5264/ Changes since patch series v2 [2]: - Minor fixes in documentation. - Set TARGET_HAVE_SPECULATION_SAFE_VALUE for PRU. Changes since patch series v1 [1]: - Simplified the load/store_multiple pattern. Replaced the numerous machine-generated patterns with a single generic one. - Removed the patch for MAX_MAX_OPERANDS increase. - Generalized testsuite checks for availability of large return values and function pointers. - A few rtx -> rtx_insn fixes. - Fixed function declaration formatting. - Added missing function comments. - Fixed diagnostics string format. - Removed unneeded dbxelf.h reference. - Removed flag_unwind_tables check. - Removed the workaround with subreg from machine description. Looks like core has meanwhile fixed the rootcause. - Added PRU regression tests for LRA framepointer fragmentation issue. - Added a new patch to skip two builtin_apply tests for PRU. [1] http://gcc.gnu.org/ml/gcc-patches/2018-06/msg00775.html [2] http://gcc.gnu.org/ml/gcc-patches/2018-07/msg01779.html Dimitar Dimitrov (10): Initial TI PRU GCC port Initial TI PRU libgcc port testsuite: Add PRU tests testsuite: Add check for overflowed IMEM region to testsuite testsuite: Add check for unsupported TI ABI PRU features to testsuite testsuite: Remove PRU from test cases requiring hosted environment testsuite: Define PRU stack usage testsuite: Mark that PRU has one-cycle jumps testsuite: Mark that PRU uses all function pointer bits testsuite: Mark testsuite that PRU has different calling convention configure.ac | 7 + gcc/common/config/pru/pru-common.c | 36 + gcc/config.gcc | 9 + gcc/config/pru/alu-zext.md | 178 ++ gcc/config/pru/constraints.md | 88 + gcc/config/pru/predicates.md | 224 ++ gcc/config/pru/pru-opts.h | 31 + gcc/config/pru/pru-passes.c | 234 ++ gcc/config/pru/pru-pragma.c | 90 + gcc/config/pru/pru-protos.h | 72 + gcc/config/pru/pru.c | 3001 ++++++++++++++++++++ gcc/config/pru/pru.h | 551 ++++ gcc/config/pru/pru.md | 956 +++++++ gcc/config/pru/pru.opt | 53 + gcc/config/pru/t-pru | 31 + gcc/doc/extend.texi | 21 + gcc/doc/invoke.texi | 55 + gcc/doc/md.texi | 22 + gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C | 2 +- gcc/testsuite/gcc.c-torture/execute/20101011-1.c | 3 + gcc/testsuite/gcc.dg/20020312-2.c | 2 + gcc/testsuite/gcc.dg/builtin-apply2.c | 2 +- gcc/testsuite/gcc.dg/stack-usage-1.c | 2 + .../gcc.dg/torture/stackalign/builtin-apply-2.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/reassoc-33.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/reassoc-34.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/reassoc-35.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/reassoc-36.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-14.c | 2 +- gcc/testsuite/gcc.target/pru/abi-arg-struct.c | 164 ++ gcc/testsuite/gcc.target/pru/ashiftrt.c | 13 + gcc/testsuite/gcc.target/pru/builtins-1.c | 12 + gcc/testsuite/gcc.target/pru/builtins-error.c | 6 + gcc/testsuite/gcc.target/pru/clearbit.c | 13 + gcc/testsuite/gcc.target/pru/loop-asm.c | 19 + gcc/testsuite/gcc.target/pru/loop-dowhile.c | 45 + gcc/testsuite/gcc.target/pru/loop-hi-1.c | 38 + gcc/testsuite/gcc.target/pru/loop-hi-2.c | 17 + gcc/testsuite/gcc.target/pru/loop-qi-1.c | 38 + gcc/testsuite/gcc.target/pru/loop-qi-2.c | 17 + gcc/testsuite/gcc.target/pru/loop-short-1.c | 53 + gcc/testsuite/gcc.target/pru/loop-short-2.c | 21 + gcc/testsuite/gcc.target/pru/loop-si-1.c | 41 + gcc/testsuite/gcc.target/pru/loop-si-2.c | 20 + .../gcc.target/pru/loop-u8_pcrel_overflow.c | 42 + gcc/testsuite/gcc.target/pru/loop-ubyte-1.c | 30 + gcc/testsuite/gcc.target/pru/loop-ubyte-2.c | 18 + .../pru/lra-framepointer-fragmentation-1.c | 33 + .../pru/lra-framepointer-fragmentation-2.c | 61 + gcc/testsuite/gcc.target/pru/mabi-ti-1.c | 10 + gcc/testsuite/gcc.target/pru/mabi-ti-2.c | 15 + gcc/testsuite/gcc.target/pru/mabi-ti-3.c | 12 + gcc/testsuite/gcc.target/pru/mabi-ti-4.c | 14 + gcc/testsuite/gcc.target/pru/mabi-ti-5.c | 33 + gcc/testsuite/gcc.target/pru/mabi-ti-6.c | 12 + gcc/testsuite/gcc.target/pru/mabi-ti-7.c | 21 + gcc/testsuite/gcc.target/pru/pr64366.c | 128 + gcc/testsuite/gcc.target/pru/pragma-ctable_entry.c | 22 + gcc/testsuite/gcc.target/pru/pru.exp | 41 + gcc/testsuite/gcc.target/pru/qbbc-1.c | 29 + gcc/testsuite/gcc.target/pru/qbbc-2.c | 15 + gcc/testsuite/gcc.target/pru/qbbc-3.c | 15 + gcc/testsuite/gcc.target/pru/qbbs-1.c | 29 + gcc/testsuite/gcc.target/pru/qbbs-2.c | 15 + gcc/testsuite/gcc.target/pru/setbit.c | 13 + .../gcc.target/pru/zero_extend-and-hisi.c | 16 + .../gcc.target/pru/zero_extend-and-qihi.c | 16 + .../gcc.target/pru/zero_extend-and-qisi.c | 16 + gcc/testsuite/gcc.target/pru/zero_extend-hisi.c | 43 + gcc/testsuite/gcc.target/pru/zero_extend-qihi.c | 43 + gcc/testsuite/gcc.target/pru/zero_extend-qisi.c | 43 + gcc/testsuite/lib/gcc-dg.exp | 16 + gcc/testsuite/lib/target-supports.exp | 38 +- gcc/testsuite/lib/target-utils.exp | 12 + libgcc/config.host | 7 + libgcc/config/pru/asri.c | 33 + libgcc/config/pru/eqd.c | 45 + libgcc/config/pru/eqf.c | 45 + libgcc/config/pru/ged.c | 45 + libgcc/config/pru/gef.c | 45 + libgcc/config/pru/gtd.c | 45 + libgcc/config/pru/gtf.c | 45 + libgcc/config/pru/led.c | 45 + libgcc/config/pru/lef.c | 45 + libgcc/config/pru/lib2bitcountHI.c | 43 + libgcc/config/pru/lib2divHI.c | 42 + libgcc/config/pru/lib2divQI.c | 42 + libgcc/config/pru/lib2divSI.c | 48 + libgcc/config/pru/libgcc-eabi.ver | 88 + libgcc/config/pru/ltd.c | 45 + libgcc/config/pru/ltf.c | 45 + libgcc/config/pru/mpyll.S | 57 + libgcc/config/pru/pru-abi.h | 109 + libgcc/config/pru/pru-asm.h | 35 + libgcc/config/pru/pru-divmod.h | 117 + libgcc/config/pru/sfp-machine.h | 125 + libgcc/config/pru/t-pru | 50 + 98 files changed, 8287 insertions(+), 11 deletions(-) create mode 100644 gcc/common/config/pru/pru-common.c create mode 100644 gcc/config/pru/alu-zext.md create mode 100644 gcc/config/pru/constraints.md create mode 100644 gcc/config/pru/predicates.md create mode 100644 gcc/config/pru/pru-opts.h create mode 100644 gcc/config/pru/pru-passes.c create mode 100644 gcc/config/pru/pru-pragma.c create mode 100644 gcc/config/pru/pru-protos.h create mode 100644 gcc/config/pru/pru.c create mode 100644 gcc/config/pru/pru.h create mode 100644 gcc/config/pru/pru.md create mode 100644 gcc/config/pru/pru.opt create mode 100644 gcc/config/pru/t-pru create mode 100644 gcc/testsuite/gcc.target/pru/abi-arg-struct.c create mode 100644 gcc/testsuite/gcc.target/pru/ashiftrt.c create mode 100644 gcc/testsuite/gcc.target/pru/builtins-1.c create mode 100644 gcc/testsuite/gcc.target/pru/builtins-error.c create mode 100644 gcc/testsuite/gcc.target/pru/clearbit.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-asm.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-dowhile.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-hi-1.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-hi-2.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-qi-1.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-qi-2.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-short-1.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-short-2.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-si-1.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-si-2.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-u8_pcrel_overflow.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-ubyte-1.c create mode 100644 gcc/testsuite/gcc.target/pru/loop-ubyte-2.c create mode 100644 gcc/testsuite/gcc.target/pru/lra-framepointer-fragmentation-1.c create mode 100644 gcc/testsuite/gcc.target/pru/lra-framepointer-fragmentation-2.c create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-1.c create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-2.c create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-3.c create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-4.c create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-5.c create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-6.c create mode 100644 gcc/testsuite/gcc.target/pru/mabi-ti-7.c create mode 100644 gcc/testsuite/gcc.target/pru/pr64366.c create mode 100644 gcc/testsuite/gcc.target/pru/pragma-ctable_entry.c create mode 100644 gcc/testsuite/gcc.target/pru/pru.exp create mode 100644 gcc/testsuite/gcc.target/pru/qbbc-1.c create mode 100644 gcc/testsuite/gcc.target/pru/qbbc-2.c create mode 100644 gcc/testsuite/gcc.target/pru/qbbc-3.c create mode 100644 gcc/testsuite/gcc.target/pru/qbbs-1.c create mode 100644 gcc/testsuite/gcc.target/pru/qbbs-2.c create mode 100644 gcc/testsuite/gcc.target/pru/setbit.c create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-and-hisi.c create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-and-qihi.c create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-and-qisi.c create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-hisi.c create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-qihi.c create mode 100644 gcc/testsuite/gcc.target/pru/zero_extend-qisi.c create mode 100644 libgcc/config/pru/asri.c create mode 100644 libgcc/config/pru/eqd.c create mode 100644 libgcc/config/pru/eqf.c create mode 100644 libgcc/config/pru/ged.c create mode 100644 libgcc/config/pru/gef.c create mode 100644 libgcc/config/pru/gtd.c create mode 100644 libgcc/config/pru/gtf.c create mode 100644 libgcc/config/pru/led.c create mode 100644 libgcc/config/pru/lef.c create mode 100644 libgcc/config/pru/lib2bitcountHI.c create mode 100644 libgcc/config/pru/lib2divHI.c create mode 100644 libgcc/config/pru/lib2divQI.c create mode 100644 libgcc/config/pru/lib2divSI.c create mode 100644 libgcc/config/pru/libgcc-eabi.ver create mode 100644 libgcc/config/pru/ltd.c create mode 100644 libgcc/config/pru/ltf.c create mode 100644 libgcc/config/pru/mpyll.S create mode 100644 libgcc/config/pru/pru-abi.h create mode 100644 libgcc/config/pru/pru-asm.h create mode 100644 libgcc/config/pru/pru-divmod.h create mode 100644 libgcc/config/pru/sfp-machine.h create mode 100644 libgcc/config/pru/t-pru