float loadPhonemeGains(int index0, int index1) {
  static float phonemeGains[32][2] = {
      {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0},
      {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0},
      {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0}, {0.0, 0.7}, {0.0, 0.7},
      {0.0, 0.7}, {0.0, 0.7}, {0.0, 0.7}, {0.0, 0.1}, {0.0, 0.1}, {0.0, 0.1},
      {1.0, 0.1}, {1.0, 0.1}, {1.0, 0.1}, {1.0, 0.1}, {1.0, 1.0}, {1.0, 1.0},
      {1.0, 1.0}, {1.0, 1.0}};
  return phonemeGains[index0][index1];
}


x86 assembly (clang, -O0):
<loadPhonemeGains>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
movslq -0x4(%rbp),%rcx
lea    0x2f1b(%rip),%rax
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x8(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<loadPhonemeGains>:
movslq %edi,%rax
movslq %esi,%rcx
lea    0xef3(%rip),%rdx
lea    (%rdx,%rax,8),%rax
movss  (%rax,%rcx,4),%xmm0
ret

LLVM IR (-O0):
@loadPhonemeGains.phonemeGains = internal global [32 x [2 x float]] [[2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 0.000000e+00, float 0x3FE6666660000000], [2 x float] [float 0.000000e+00, float 0x3FE6666660000000], [2 x float] [float 0.000000e+00, float 0x3FE6666660000000], [2 x float] [float 0.000000e+00, float 0x3FE6666660000000], [2 x float] [float 0.000000e+00, float 0x3FE6666660000000], [2 x float] [float 0.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 0.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 0.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 1.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 1.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 1.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 1.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 1.000000e+00, float 1.000000e+00], [2 x float] [float 1.000000e+00, float 1.000000e+00], [2 x float] [float 1.000000e+00, float 1.000000e+00], [2 x float] [float 1.000000e+00, float 1.000000e+00]]
define float @loadPhonemeGains(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
store i32 %0, i32* %3
store i32 %1, i32* %4
%5 = load i32, i32* %3
%6 = sext i32 %5 to i64
%7 = getelementptr inbounds [32 x [2 x float]], [32 x [2 x float]]* @loadPhonemeGains.phonemeGains, i64 0, i64 %6
%8 = load i32, i32* %4
%9 = sext i32 %8 to i64
%10 = getelementptr inbounds [2 x float], [2 x float]* %7, i64 0, i64 %9
%11 = load float, float* %10
ret float %11
}

LLVM IR (-O2):
@loadPhonemeGains.phonemeGains = internal unnamed_addr constant [32 x [2 x float]] [[2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 1.000000e+00, float 0.000000e+00], [2 x float] [float 0.000000e+00, float 0x3FE6666660000000], [2 x float] [float 0.000000e+00, float 0x3FE6666660000000], [2 x float] [float 0.000000e+00, float 0x3FE6666660000000], [2 x float] [float 0.000000e+00, float 0x3FE6666660000000], [2 x float] [float 0.000000e+00, float 0x3FE6666660000000], [2 x float] [float 0.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 0.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 0.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 1.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 1.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 1.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 1.000000e+00, float 0x3FB99999A0000000], [2 x float] [float 1.000000e+00, float 1.000000e+00], [2 x float] [float 1.000000e+00, float 1.000000e+00], [2 x float] [float 1.000000e+00, float 1.000000e+00], [2 x float] [float 1.000000e+00, float 1.000000e+00]]
define float @loadPhonemeGains(i32 %0, i32 %1) {
%3 = sext i32 %0 to i64
%4 = sext i32 %1 to i64
%5 = getelementptr inbounds [32 x [2 x float]], [32 x [2 x float]]* @loadPhonemeGains.phonemeGains, i64 0, i64 %3, i64 %4
%6 = load float, float* %5
ret float %6
}