https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109057

            Bug ID: 109057
           Summary: Does GCC interpret assembly when deciding to optimize
                    away a variable?
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hbucher at gmail dot com
  Target Milestone: ---

I'm trying to figure out why GCC optimizes away a uint8_value that is passed
into assembly, basically discarding it. This is in context of Google
benchmarks. 

#include <stdint.h>
inline void DoNotOptimize( uint8_t value) {
  asm volatile("" : : "r,m"(value) : "memory");
}
static const uint8_t LUT[8] = {1,5,3,0,2,7,1,2};
void func1(uint8_t val) {
    DoNotOptimize(LUT[val]); 
}

In this case Gcc generates

func1(unsigned char):
        movzbl  %dil, %edi
        ret

More importantly, the entire static array LUT was optimized away from the
object file. 

https://godbolt.org/z/Tab5T84dM

Is this the correct behavior in your understanding?

Reply via email to