openfimg: Disable subroutines and indirect addressing in shaders

It is additional burden in the compiler and does not seem to be required
for targetted API (GLES 2.0).

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Sort out allocation methods

Allocation of numerous little objects are now happening from memory
pools (either slab or heap) to facilitate clean-up after completion.

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Add reg type for colored variable

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Implement register coloring

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Add copying push operation to of_stack

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Mark copy MOV instructions with special flag

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Handle variables without interferences correctly

They do not have interference bitmask allocated at all.

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Workaround duplicate variables in constraints

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Fix component mask initialization in coloring loop

u_bit_scan() destroys the mask, so it needs to be reinitialized every
iteration.

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Add pass to propagate variable copies to operands

After live range splitting, any subsequent uses of original variables
need to be replaced with uses of introduced copies.

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Fix copy direction in live range splitting

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Use forward iteration for live range splitting

There doesn't seem to be any reason to use less cache friendly reverse
iteration.

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Move vector constraint creating to separate pass

It needs to have copies already propagated.

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
openfimg: compiler: Add pass to eliminate copies

After register assignment, there might be a number of copy operations
with the same register used as source and destination, another pass is
needed to remove them.

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>