This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, PR58805] Add missing check in stmt_local_def for tail-merge


On 22/10/13 20:50, Jeff Law wrote:
> On 10/22/13 03:58, Tom de Vries wrote:
>> Richard,
>>
>> This patch adds a missing check for gimple_vdef in stmt_local_def for the
>> tail-merge pass.
>>
>> Bootstrapped and reg-tested on x86_64.
>>
>> OK for trunk, gcc-4_8-branch?
>>
>> Thanks,
>> - Tom
>>
>> 2013-10-22  Tom de Vries  <tom@codesourcery.com>
>>
>> 	PR tree-optimization/58805
>> 	* tree-ssa-tail-merge.c (stmt_local_def): Add gimple_vdef check.
>>
>> 	* gcc.dg/pr58805.c: New test.
> Doesn't this test belong in an architecture specific directory?
> 

Jeff,

The test-case has i386 assembly inside the asm string, but since the test-case
only compiles, the assembly string is never used. I've made the string empty to
make that clear.

AFAIU the only requirement for this test-case is that the constraint matches the
operand. I'm not sure whether 'unsigned long' always matches 'r'. I've changed
this into 'void *' and 'p', which I think should always be true.

Committed as below.

Thanks,
- Tom

> jeff
> 

+++ b/gcc/testsuite/gcc.dg/pr58805.c
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */
+
+/* Type that matches the 'p' constraint.  */
+#define TYPE void *
+
+static inline
+void bar (TYPE *r)
+{
+  TYPE t;
+  __asm__ ("" : "=&p" (t), "=p" (*r));
+}
+
+void
+foo (int n, TYPE *x, TYPE *y)
+{
+  if (n == 0)
+    bar (x);
+  else
+    bar (y);
+}
+
+/* { dg-final { scan-tree-dump-times "__asm__" 2 "pre"} } */
+/* { dg-final { cleanup-tree-dump "pre" } } */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]