This is the mail archive of the gcc-bugs@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]

[Bug tree-optimization/19831] Missing DSE/malloc/free optimization


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19831

--- Comment #17 from Marc Glisse <glisse at gcc dot gnu.org> ---
void f (double * __restrict a) {
  int * __restrict p = (int*) __builtin_malloc (sizeof (int));
  *p = 42;
  __builtin_free (p);
  ++*a; // Breaks the optimization!
}

Normally, gcc now manages to remove unused malloc+write+free sequences.
However, it seems that completely unrelated operations, even after free, can
prevent this optimization (it is the detection that *p=42 is dead that fails).
That limits the effect in real-world code...

(funny that if I remove the line with free(p), gcc does manage to optimize)


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