From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47107) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VLqEW-0004sS-Iv for qemu-devel@nongnu.org; Tue, 17 Sep 2013 04:02:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VLqEQ-0005oa-Es for qemu-devel@nongnu.org; Tue, 17 Sep 2013 04:02:04 -0400 Received: from lhrrgout.huawei.com ([194.213.3.17]:53361) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VLqEQ-0005oQ-64 for qemu-devel@nongnu.org; Tue, 17 Sep 2013 04:01:58 -0400 Message-ID: <52380C53.5060003@huawei.com> Date: Tue, 17 Sep 2013 10:01:23 +0200 From: Claudio Fontana MIME-Version: 1.0 References: <1379195690-6509-1-git-send-email-rth@twiddle.net> <1379195690-6509-5-git-send-email-rth@twiddle.net> <5236B659.5090608@huawei.com> <52372FD0.7040700@twiddle.net> In-Reply-To: <52372FD0.7040700@twiddle.net> Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v4 04/33] tcg-aarch64: Hoist common argument loads in tcg_out_op List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Richard Henderson Cc: peter.maydell@linaro.org, qemu-devel@nongnu.org On 16.09.2013 18:20, Richard Henderson wrote: > On 09/16/2013 12:42 AM, Claudio Fontana wrote: >>> + /* Hoist the loads of the most common arguments. */ >>>> + TCGArg a0 = args[0]; >>>> + TCGArg a1 = args[1]; >>>> + TCGArg a2 = args[2]; >>>> + int c2 = const_args[2]; >>>> + >> Either all or none (add c0, c1), I would expect the compiler not to >> generate code for the paths that don't use C[n]. > > I chose the most common. Those used in 90% of all of the cases. What you did is clear, does not change the fact that the mixing of use of the variables and args[] is confusing. So either we add int c0 and int c1, and use the hoisted variables exclusively later, or we don't do it. >> Btw, if the compiler generates bloated code without this, we should notify >> the projects working on gcc for aarch64. > > It's not the compiler's fault. After parameter decomposition, the arrays > become pointers, and the compiler can't tell that it's always safe to perform > the loads. So in general it can't hoist the loads higher than the first > explicit reference that proves the pointers must be non-null. > > Now that I think about it, we might actually do better, generically, to package > all of these arguments up into a struct. The compiler can more easily reason > about the collective safety of structure access... I don't have anything against it in principle, but just adding c0 and c1, which iirc should cover all uses, would be fine by me. Claudio