From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 97019 invoked by alias); 8 Jul 2015 20:02:14 -0000 Mailing-List: contact jit-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Subscribe: Sender: jit-owner@gcc.gnu.org Received: (qmail 96617 invoked by uid 89); 8 Jul 2015 20:02:09 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.98.7 on sourceware.org X-Virus-Found: No X-HELO: mx1.redhat.com Message-ID: <1436385256.24803.107.camel@surprise> Subject: Re: Filed PR jit/66812 for the code generation issue From: David Malcolm To: Dibyendu Majumdar Cc: jit@gcc.gnu.org Date: Thu, 01 Jan 2015 00:00:00 -0000 In-Reply-To: References: <1436365266.24803.65.camel@surprise> <1436367926.24803.71.camel@surprise> <1436369443.24803.75.camel@surprise> <1436377619.24803.97.camel@surprise> <1436382217.24803.101.camel@surprise> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-SW-Source: 2015-q3/txt/msg00040.txt.bz2 On Wed, 2015-07-08 at 20:36 +0100, Dibyendu Majumdar wrote: > On 8 July 2015 at 20:03, David Malcolm wrote: > > On Wed, 2015-07-08 at 20:01 +0100, Dibyendu Majumdar wrote: > >> On 8 July 2015 at 18:46, David Malcolm wrote: > >> > Dibyendu: what Lua code generated the reproducer? What is the code > >> > meant to be doing? > >> > > >> > >> Hi Dave - the Lua test is this: > >> > >> function x() > >> local IX > >> if ((10 or true) and false) then > >> IX = true > >> end; > >> return ((10 or true) and false) > >> end > >> assert(x() == false) > >> > >> In the original test IX is an upvalue - i.e. a variable in outer > >> scope. This is my standalone version of the test. The original test is > >> generated as part of the Lua test suite - its purpose is to test > >> various permutations of boolean operators. > >> > >> The original test compares IX and the function return. > >> > >> The issue is that this test should return false - if you see the > >> return statement. However when -O2 or -O3 is enabled it returns true. > >> > >> The if statement is indeed redundant in this cut down version as IX is > >> a local variable. But the return statement is not redundant. > > > > Thanks. What does this look like as bytecodes? > > > > Ok the bug is still there - I was running the test incorrectly. I have > attached the standalone replication and the output. > Note that if I remove the redundant if statement then it works correctly. Thanks. BTW, are Lua/Ravi constants truly constant? If so, then I'd believe you'd get a performance win by implementing LOADK by emitting code to write the specific tt and value_ directly, rather than code that copies a value from the table. This would enable the optimizer to "know" the tt and value_, and optimize accordingly. For example, in this case, I believe it would allow the function to be optimized away down to the equivalent of just a "return false;". Obviously won't help much for a function without a loop, but if it saves instructions inside a loop, that's probably a win. (...though maybe not before we track down this issue)