This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/81679] New: use attribute unused on function arguments as an optimization hint
- From: "msebor at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 02 Aug 2017 22:10:13 +0000
- Subject: [Bug tree-optimization/81679] New: use attribute unused on function arguments as an optimization hint
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81679
Bug ID: 81679
Summary: use attribute unused on function arguments as an
optimization hint
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
This is a proposal for an enhancement to attribute unused in two ways:
1) When attribute unused is specified on a function argument of pointer type in
a declaration of a function, GCC could use that as an indication that the
argument is, in fact, not used by the implementation of the function and assume
that the object the pointer points to is unchanged by the function call.
2) In addition, the attribute could also be used to issue a -Wunused-variable
warning when the variable whose address is passed to a function decorated with
it is otherwise unused.
The test case below shows examples where the possible improvements could be
made:
$ cat b.c && gcc -O2 -S -Wall -Wextra -fdump-tree-optimized=/dev/stdout b.c
void f (void* __attribute__ ((unused)));
void g (void)
{
int i = 1; // issue -Wunused-variable here
f (&i);
}
void h (void)
{
int i = 1;
f (&i);
if (i != 1) // assume this can not be true
__builtin_abort ();
}
;; Function g (g, funcdef_no=0, decl_uid=1817, cgraph_uid=0, symbol_order=0)
g ()
{
int i;
<bb 2> [100.00%] [count: INV]:
i = 1;
f (&i);
i ={v} {CLOBBER};
return;
}
;; Function h (h, funcdef_no=1, decl_uid=1821, cgraph_uid=1, symbol_order=1)
h ()
{
int i;
int i.0_1;
<bb 2> [100.00%] [count: INV]:
i = 1;
f (&i);
i.0_1 = i;
if (i.0_1 != 1)
goto <bb 3>; [0.04%] [count: 0]
else
goto <bb 4>; [99.96%] [count: INV]
<bb 3> [0.04%] [count: 0]:
__builtin_abort ();
<bb 4> [99.96%] [count: INV]:
i ={v} {CLOBBER};
return;
}