From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27691 invoked by alias); 16 Jan 2009 12:43:05 -0000 Received: (qmail 26671 invoked by uid 48); 16 Jan 2009 12:42:54 -0000 Date: Fri, 16 Jan 2009 12:43:00 -0000 Message-ID: <20090116124254.26670.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug tree-optimization/38789] [4.4 Regression] __builtin_constant_p appears to evaluate to true for non-constant arguments. In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "jakub at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2009-01/txt/msg01746.txt.bz2 ------- Comment #7 from jakub at gcc dot gnu dot org 2009-01-16 12:42 ------- The correct testcase is IMHO: void baz (int v) { unsigned a = (v == 1) ? 1 : 2; if (__builtin_constant_p (a)) asm volatile ("# constant %0" :: "i" (a)); else asm volatile ("# register %0" :: "r" (a)); } For non-constant a using "i" constraint is wrong. This fails since http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=134833 I guess handling BUILT_IN_CONSTANT_P the same as BUILT_IN_OBJECT_SIZE in record_temporary_equivalences_from_stmts_at_dest could do the trick. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38789