Is this a missed (simple) optimization?

I think this is a missed optimization, but maybe I'm missing some significant
piece of knowledge(!) as to why this might not be optimizable :slight_smile: Test
case...

   int A; // some global
   int B; // some global

   void Test(int *Out)
   {
      *Out = A; // Can't this be optimized away?
      *Out = B;
   };

The LLVM backend (tested 3.1 and 3.0 online demo) doesn't optimize away the
first store, even with O3 level compiling in clang. Is there some valid
reason for this?

Any insight appreciated. Thanks.

Hi,

If the function was called Test(&B) then the first store would affect
the second load.

Tim.

Argh.... quite right! I knew I was missing something obvious...

Many thanks.

If the function was called Test(&B) then the first store would affect
the second load.

You can use the "restrict" qualifier ("noalias" in LLVM) to tell the optimizers
that this kind of aliasing doesn't occur.

Ciao, Duncan.