If a variable has initializer, codegen tries to build its value. It
causes strange behavior from user viewpoint: compilation of huge zero
initialized arrays like:
int char data_1[2147483648u] = { 0 };
consumes enormous amount of time and memory.
With this change compiler recognizes more patterns when variable is
initialized with zeros and elementwise treatment can be avoided.
You should have a comment here clarifying that this is checking whether the initializer is equivalent to a C++ zero initialization, not checking whether the initializer produces a zero bit-pattern.