From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.93]) by sourceware.org (Postfix) with ESMTPS id A30543858C39 for ; Thu, 24 Aug 2023 09:03:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A30543858C39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1692867818; x=1724403818; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=SO3uIFRLKKhDbtFG3zu9ZmfSt2GOHI1crbGK4ypTaC4=; b=ft5nS08bGm2MmJbSSWp/sVlKTW1oJDSs4PkCkdhUq9it12iOrcGMLkQ8 oXMqoUIWUVuXUS2PEk+LfeTb1Lc/AZ5Lu2gndQLpdmczIn95pnRJxqZc2 Xr/fKcXh5LUZTE9NPxC/k0Zo95mStF/qnupAF5fEERAwHLMEIWpLmf4Rs Q1qZx2oS4v8Gmf4OcuQxsY/YoL4mEl4QjpjWrxAFIdG6qOildoiW9a9wy PNvAovoOB8YXrfkbbnLNkbKPNjDynJZRcSQFQhq40dxXA4NtVReS+EY+7 vAPw0DdH7vodphueXl8Cq75kQDwJKq5Jmvac9s+rWWGVb4oR+O8c+4TwK w==; X-IronPort-AV: E=McAfee;i="6600,9927,10811"; a="371793589" X-IronPort-AV: E=Sophos;i="6.01,195,1684825200"; d="scan'208";a="371793589" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Aug 2023 02:03:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10811"; a="766468097" X-IronPort-AV: E=Sophos;i="6.01,195,1684825200"; d="scan'208";a="766468097" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga008.jf.intel.com with ESMTP; 24 Aug 2023 02:03:33 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Thu, 24 Aug 2023 02:03:32 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Thu, 24 Aug 2023 02:03:32 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.171) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Thu, 24 Aug 2023 02:03:32 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dzSiSWwcQ57HEszgTswZ10RUvBg4QSwNIOfwt6VuKsetg82tOlWbr75bWWMI2JqanLnlIczjDM6qQtyJSxKuao7Gcapv8d2gIby1UCRGlhoeiECWkQMwEUZsgoQB062ELGjcUzHrBngbBEf1MzT4rRrftR0kHch18jCO1C88EtGb0IIWudu1LtCc1Gk/GH0j0q/Up6NBngWfWugaXnE8hzungmcE4fkBiO4KPQ81fRKB2TvQEoh9WTWAjPI1ONVj/+17mRkw/Gnkpf3+UIDcuzqc7twJ8JgpsbhINSz8AfZlAnemo0N1P5fo/M5GlAUYD/iRkjIjpiUEGowfgd43Tw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=pDy9ZgYNva0QLO6P7ow/PD7Zf4VPGJh753fvSYyCVJk=; b=MZuu9H7nnaqDMm1Nv/ImAvkodENlcR1d0DFdpRQbkr0mbIjCVnSJ7psKYE8jDZsiKoacchl9nIKxJ0tJSYjImkfL7p/kkNAqelpGll8ljRYaIOdGfD4aCnBdsoyJZl+WQ+iVKMKgjicYKPJFaWlMxtb+Kdu+BDR7jDmylpjSCRbz8VylQNo8PRwk9OiSz4kLsXVNCjlK4axuYo6Vez5bDjmPK7X17cNUOkvZZjBnRATv2f4f92yMjUZWUcjwQmFevy68rYfHXNdcily4SFw1BsnxrW2+UMap7WcL6GMAT6zTINpdMs6I0SFfFbjUzhSwHK4u9EMCDm/ZnOE+6sRqsQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MW5PR11MB5908.namprd11.prod.outlook.com (2603:10b6:303:194::10) by DS0PR11MB7631.namprd11.prod.outlook.com (2603:10b6:8:14e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.24; Thu, 24 Aug 2023 09:03:30 +0000 Received: from MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::6ff9:5a3d:4981:3476]) by MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::6ff9:5a3d:4981:3476%5]) with mapi id 15.20.6699.027; Thu, 24 Aug 2023 09:03:30 +0000 From: "Li, Pan2" To: Richard Biener , Juzhe-Zhong CC: "gcc-patches@gcc.gnu.org" , "richard.sandiford@arm.com" Subject: RE: [PATCH] VECT: Apply LEN_FOLD_EXTRACT_LAST into loop vectorizer Thread-Topic: [PATCH] VECT: Apply LEN_FOLD_EXTRACT_LAST into loop vectorizer Thread-Index: AQHZ1jAJFtY9u0lkh0SufJx1rgOK1K/4/wwAgAAoF5A= Date: Thu, 24 Aug 2023 09:03:30 +0000 Message-ID: References: <20230824020836.48335-1-juzhe.zhong@rivai.ai> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW5PR11MB5908:EE_|DS0PR11MB7631:EE_ x-ms-office365-filtering-correlation-id: 79453e74-ac20-4fdd-6a66-08dba480fc94 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Nk+9q0Q7/ygJg91bAPH3tyE7dyF38cDF4HDUjwSPd0xGYrjjf/paQMzLOJnkjfNkIPDG0KU8FuP656lzDV0fSggcxCPfAm+GibFuG8omZPPha9lCprnnKznltGTGdOgpbR5qPAk1ZAq+lJ55xm54Lnspkj+D+Ge75ggjSDXj0CAigrErC1ob2yuHrKqdMEfmtXzDaBG+5PqYMFp+dN3C2ttOEZV/uz2eTd66gKuiDybISIe7xQRqxDSuh/UK+DgDSwC6+ZRc9qxqx1Rzv7dvc/pvRLNZoFxyy8F/HOhMD8opHqfpRIvDScQdoxgBHgm3oe1Hlk703UFuz+Jt2vnHypeJMqpfSQXg4dfxjJMo4GSxlKi53ofkRiUJpxC9wMAzjVL1rgUMf1b5aDs3Q2nk/mouzbIxbFmKf14u5wky8Br2DrGY1sDJ1ariS9KIhwCxWZ3vWlYXbMW1Cq9Bbuz4pkyuQzbXmObyq8gTvqrpoVvKcDCbgti2CDC9vhd3ny2tQR/z/E9CbqikoPzEEOcQCCBtVKEPZ+LqX/eZLEDAp98tggVjYnxyX9eOh3QMXSqdlPlHo6oRbQo5pyMMPBT/g7icZta2rPvElmPqrQboOKoPOrAV2vE2ANLiWLNw5yt0 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW5PR11MB5908.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(396003)(136003)(346002)(376002)(366004)(39860400002)(451199024)(186009)(1800799009)(64756008)(54906003)(66446008)(66946007)(76116006)(66476007)(66556008)(316002)(82960400001)(122000001)(478600001)(110136005)(55016003)(26005)(38100700002)(38070700005)(71200400001)(41300700001)(86362001)(7696005)(9686003)(6506007)(2906002)(53546011)(4326008)(8676002)(8936002)(52536014)(5660300002)(83380400001)(33656002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?XYeuRYCNts2VD1SKoh29Pur3go8RNwc9bIetwsMgW+X5iTig+7hPt6jcxQuO?= =?us-ascii?Q?Wm5D/Z2MWCReDbsT7z7aRvkY/HYyk9P8+B/CCKcJAy0z7g0d3LtjBj6BpNRw?= =?us-ascii?Q?2pyeACY24TpX/X58w3Bj4miBEhkGmvtXd7Ehpa4qmayhS7dkHicnPHuEHVRs?= =?us-ascii?Q?OQ2h6MjHcaVn88x8XrVswZ1iOYXNs7uIP45gtGeI15oJxec9HhD3BinABU8q?= =?us-ascii?Q?DtQKhBt7M4n6rIF7oAAXZEhEMm1ZqiT2h5DJ/aWQP5aWSp4Aix+Q6W9EKKkH?= =?us-ascii?Q?xXXagENX0wrXF+zuwTiTYWkqDoszqf0dku78wRi1eo+rX7tA8xH69A6a3L8I?= =?us-ascii?Q?arPjdI5n3qCF5nCA1FTiLlTojcfCJCmkohPhYPxWwRqvP8sWq4/jY+zdb85a?= =?us-ascii?Q?LkUT2KjpIqOU1RsdJcel0VgsfUIqnjqwZxHCfTg0DIilwmweXrIQ6bIL/b5V?= =?us-ascii?Q?h9by7mJsP2REPxMiqY0xl5D8UBGhI87lpSb01mNq3qEq8YNyyAztEkrL0Gfp?= =?us-ascii?Q?kPXLlKU9VJF/H5/yrC+fQFT0X3KETivOJh+UftCpQ6vvmEr3bPljYptKW6xg?= =?us-ascii?Q?Anwsjey+tUDhDRVVqK5Lq04OlFt93fmzoAs9t8HEEz5LySGeAIBE0NUR2WBp?= =?us-ascii?Q?Tr0w21MOAGFQA0QWeA4LrIe7BqPX9GAGSQwoVjaTM7nd5aSq5cQJdZYxWi+l?= =?us-ascii?Q?RvuVwzpGx31T8dufE5MlwWJaNwVXi1HYSK3PkmaXERaBljeWLz1y8PjkOjcV?= =?us-ascii?Q?VDqjvZsMv93UWOmpuWJ1lw9Zk7I2p82Xa8DotQEBps5cdmknjpEIdN6VQTA7?= =?us-ascii?Q?hxwu3UgMI6QY80jJZBQrbh0u9+Se4innTUrnnvUu1YI+9oc+GPEmIMDV+xxg?= =?us-ascii?Q?CDRpRVmLDKv6vRbhR3gItEAiiO8hC+Hh5SAWDPq+SHMaOlOAkv1JwGMIGmZN?= =?us-ascii?Q?x8JCCZ0lfqrNxEz0sHMpoxsjdoSy7yBXxl0r9IDCtMzrv0TDzudziSyEF5UY?= =?us-ascii?Q?5g4Yev9pLRjxNCoMUg1xB/Obu7P09Z/+JLX5XwzEoqq/6cPdXoiI57ghvZyT?= =?us-ascii?Q?AcwhiCII2VkTUBpvq06YABAhsyqXEFuJP8QkUKF6tLsd+JDkNuu0ulm2wK3I?= =?us-ascii?Q?JidnTBwG5hyd08cAyhZBtfvlftkRa6TVHf7caVIVQoNusJOWYyab2GK4RS4Q?= =?us-ascii?Q?4SdPlr6AtVN0PL2f70ZU/KjLigtUr2R349BR52OeFlAL3HMKLhEljSNpKfuI?= =?us-ascii?Q?nHydYp8+JoERdsrOOPmS7Dny1KNrIBcIl2FstDfV3QQclxiqc55fhnhNWzwm?= =?us-ascii?Q?qu55WXEaTW5gnkUlAuPgtj6e81uDX+YwHkPIWnTiCj1JtTFfz0ZQvmccO5Uk?= =?us-ascii?Q?Pl834+McyfbJqm1/Y1ylFYwA7u7o4q/cuHW4vpz00y9tWEGXonOfneT/MA/7?= =?us-ascii?Q?JYlIIgIsXvxGS8d9nuLCvCcHqLmI2Z+v8AiPO6N119SbWhACGFIOjMPTtITD?= =?us-ascii?Q?sjhLY89+yAm6cxv4vZOcS5utXXd9cHAu/UBJl+IkcWRAhfWIkeFwAw8GkhzN?= =?us-ascii?Q?UY2ar4c8f9yICYKcG2U=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW5PR11MB5908.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 79453e74-ac20-4fdd-6a66-08dba480fc94 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Aug 2023 09:03:30.3229 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: dUzNkoEmRD1m9Mvwhd1076cbloQbJ8x8R8rXP6DCezavP02pRj5kG9d3hOgGNN79oDCif4Q7BSghVVTEi4nX+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR11MB7631 X-OriginatorOrg: intel.com X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Committed, thanks Richard. Pan -----Original Message----- From: Gcc-patches On = Behalf Of Richard Biener via Gcc-patches Sent: Thursday, August 24, 2023 2:39 PM To: Juzhe-Zhong Cc: gcc-patches@gcc.gnu.org; richard.sandiford@arm.com Subject: Re: [PATCH] VECT: Apply LEN_FOLD_EXTRACT_LAST into loop vectorizer On Thu, 24 Aug 2023, Juzhe-Zhong wrote: > Hi. >=20 > This patch is apply LEN_FOLD_EXTRACT_LAST into loop vectorizer. >=20 > Consider this following case: > #include >=20 > #define N 32 >=20 > /* Simple condition reduction. */ >=20 > int __attribute__ ((noinline, noclone)) > condition_reduction (int *a, int min_v) > { > int last =3D 66; /* High start value. */ >=20 > for (int i =3D 0; i < N; i++) > if (a[i] < min_v) > last =3D i; >=20 > return last; > } >=20 > With this patch, we can generate this following IR: >=20 > _44 =3D .SELECT_VL (ivtmp_42, POLY_INT_CST [4, 4]); > _34 =3D vect_vec_iv_.5_33 + { POLY_INT_CST [4, 4], ... }; > ivtmp_36 =3D _44 * 4; > vect__4.8_39 =3D .MASK_LEN_LOAD (vectp_a.6_37, 32B, { -1, ... }, _44, 0= ); >=20 > mask__11.9_41 =3D vect__4.8_39 < vect_cst__40; > last_5 =3D .LEN_FOLD_EXTRACT_LAST (last_14, mask__11.9_41, vect_vec_iv_= .5_33, _44, 0); > ... LGTM. Thanks, Richard. > gcc/ChangeLog: >=20 > * tree-vect-loop.cc (vectorizable_reduction): Apply LEN_FOLD_EXTR= ACT_LAST. > * tree-vect-stmts.cc (vectorizable_condition): Ditto. >=20 > --- > gcc/tree-vect-loop.cc | 7 ++++-- > gcc/tree-vect-stmts.cc | 52 ++++++++++++++++++++++++++++++++++++------ > 2 files changed, 50 insertions(+), 9 deletions(-) >=20 > diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc > index 1cd6c291377..ebee8037e02 100644 > --- a/gcc/tree-vect-loop.cc > +++ b/gcc/tree-vect-loop.cc > @@ -7494,8 +7494,11 @@ vectorizable_reduction (loop_vec_info loop_vinfo, > } > =20 > if (reduc_chain_length =3D=3D 1 > - && direct_internal_fn_supported_p (IFN_FOLD_EXTRACT_LAST, > - vectype_in, OPTIMIZE_FOR_SPEED)) > + && (direct_internal_fn_supported_p (IFN_FOLD_EXTRACT_LAST, vectype_in= , > + OPTIMIZE_FOR_SPEED) > + || direct_internal_fn_supported_p (IFN_LEN_FOLD_EXTRACT_LAST, > + vectype_in, > + OPTIMIZE_FOR_SPEED))) > { > if (dump_enabled_p ()) > dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, > diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc > index 413a88750d6..be9f3a280bd 100644 > --- a/gcc/tree-vect-stmts.cc > +++ b/gcc/tree-vect-stmts.cc > @@ -11740,8 +11740,17 @@ vectorizable_condition (vec_info *vinfo, > && LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo)) > { > if (reduction_type =3D=3D EXTRACT_LAST_REDUCTION) > - vect_record_loop_mask (loop_vinfo, &LOOP_VINFO_MASKS (loop_vinfo), > - ncopies * vec_num, vectype, NULL); > + { > + if (direct_internal_fn_supported_p (IFN_LEN_FOLD_EXTRACT_LAST, > + vectype, OPTIMIZE_FOR_SPEED)) > + vect_record_loop_len (loop_vinfo, > + &LOOP_VINFO_LENS (loop_vinfo), > + ncopies * vec_num, vectype, 1); > + else > + vect_record_loop_mask (loop_vinfo, > + &LOOP_VINFO_MASKS (loop_vinfo), > + ncopies * vec_num, vectype, NULL); > + } > /* Extra inactive lanes should be safe for vect_nested_cycle. */ > else if (STMT_VINFO_DEF_TYPE (reduc_info) !=3D vect_nested_cycle) > { > @@ -11772,7 +11781,13 @@ vectorizable_condition (vec_info *vinfo, > mask to the condition, or to its inverse. */ > =20 > vec_loop_masks *masks =3D NULL; > - if (loop_vinfo && LOOP_VINFO_FULLY_MASKED_P (loop_vinfo)) > + vec_loop_lens *lens =3D NULL; > + if (loop_vinfo && LOOP_VINFO_FULLY_WITH_LENGTH_P (loop_vinfo)) > + { > + if (reduction_type =3D=3D EXTRACT_LAST_REDUCTION) > + lens =3D &LOOP_VINFO_LENS (loop_vinfo); > + } > + else if (loop_vinfo && LOOP_VINFO_FULLY_MASKED_P (loop_vinfo)) > { > if (reduction_type =3D=3D EXTRACT_LAST_REDUCTION) > masks =3D &LOOP_VINFO_MASKS (loop_vinfo); > @@ -11910,7 +11925,8 @@ vectorizable_condition (vec_info *vinfo, > /* Force vec_compare to be an SSA_NAME rather than a comparison, > in cases where that's necessary. */ > =20 > - if (masks || reduction_type =3D=3D EXTRACT_LAST_REDUCTION) > + tree len =3D NULL_TREE, bias =3D NULL_TREE; > + if (masks || lens || reduction_type =3D=3D EXTRACT_LAST_REDUCTION) > { > if (!is_gimple_val (vec_compare)) > { > @@ -11931,6 +11947,23 @@ vectorizable_condition (vec_info *vinfo, > vec_compare =3D vec_compare_name; > } > =20 > + if (direct_internal_fn_supported_p (IFN_LEN_FOLD_EXTRACT_LAST, > + vectype, OPTIMIZE_FOR_SPEED)) > + { > + if (lens) > + { > + len =3D vect_get_loop_len (loop_vinfo, gsi, lens, > + vec_num * ncopies, vectype, i, 1); > + signed char biasval > + =3D LOOP_VINFO_PARTIAL_LOAD_STORE_BIAS (loop_vinfo); > + bias =3D build_int_cst (intQI_type_node, biasval); > + } > + else > + { > + len =3D size_int (TYPE_VECTOR_SUBPARTS (vectype)); > + bias =3D build_int_cst (intQI_type_node, 0); > + } > + } > if (masks) > { > tree loop_mask > @@ -11950,9 +11983,14 @@ vectorizable_condition (vec_info *vinfo, > { > gimple *old_stmt =3D vect_orig_stmt (stmt_info)->stmt; > tree lhs =3D gimple_get_lhs (old_stmt); > - new_stmt =3D gimple_build_call_internal > - (IFN_FOLD_EXTRACT_LAST, 3, else_clause, vec_compare, > - vec_then_clause); > + if (len) > + new_stmt =3D gimple_build_call_internal > + (IFN_LEN_FOLD_EXTRACT_LAST, 5, else_clause, vec_compare, > + vec_then_clause, len, bias); > + else > + new_stmt =3D gimple_build_call_internal > + (IFN_FOLD_EXTRACT_LAST, 3, else_clause, vec_compare, > + vec_then_clause); > gimple_call_set_lhs (new_stmt, lhs); > SSA_NAME_DEF_STMT (lhs) =3D new_stmt; > if (old_stmt =3D=3D gsi_stmt (*gsi)) >=20 --=20 Richard Biener SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)