#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int uint64_t;

/* Variables and functions */
void sha3_keccakf(uint64_t st[25]) {
  const uint64_t keccakf_rndc[24] = {
      0x0000000000000001, 0x0000000000008082, 0x800000000000808a,
      0x8000000080008000, 0x000000000000808b, 0x0000000080000001,
      0x8000000080008081, 0x8000000000008009, 0x000000000000008a,
      0x0000000000000088, 0x0000000080008009, 0x000000008000000a,
      0x000000008000808b, 0x800000000000008b, 0x8000000000008089,
      0x8000000000008003, 0x8000000000008002, 0x8000000000000080,
      0x000000000000800a, 0x800000008000000a, 0x8000000080008081,
      0x8000000000008080, 0x0000000080000001, 0x8000000080008008};
  const int keccakf_rotc[24] = {1,  3,  6,  10, 15, 21, 28, 36, 45, 55, 2,  14,
                                27, 41, 56, 8,  25, 43, 62, 18, 39, 61, 20, 44};
  const int keccakf_piln[24] = {10, 7,  11, 17, 18, 3, 5,  16, 8,  21, 24, 4,
                                15, 23, 19, 13, 12, 2, 20, 14, 22, 9,  6,  1};
  int i, j, r;
  uint64_t t, bc[5];
  for (r = 0; r < 24; r++) {
    for (i = 0; i < 5; i++)
      bc[i] = st[i] ^ st[i + 5] ^ st[i + 10] ^ st[i + 15] ^ st[i + 20];
    for (i = 0; i < 5; i++) {
      t = bc[(i + 4) % 5] ^
          (((bc[(i + 1) % 5]) << (1)) | ((bc[(i + 1) % 5]) >> (64 - (1))));
      for (j = 0; j < 25; j += 5)
        st[j + i] ^= t;
    }
    t = st[1];
    for (i = 0; i < 24; i++) {
      j = keccakf_piln[i];
      bc[0] = st[j];
      st[j] = (((t) << (keccakf_rotc[i])) | ((t) >> (64 - (keccakf_rotc[i]))));
      t = bc[0];
    }
    for (j = 0; j < 25; j += 5) {
      for (i = 0; i < 5; i++)
        bc[i] = st[j + i];
      for (i = 0; i < 5; i++)
        st[j + i] ^= (~bc[(i + 1) % 5]) & bc[(i + 2) % 5];
    }
    st[0] ^= keccakf_rndc[r];
  }
}


x86 assembly (clang, -O0):
<sha3_keccakf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x170,%rsp
mov    %rdi,-0x8(%rbp)
lea    -0x70(%rbp),%rdi
lea    0xed6(%rip),%rsi
mov    $0x60,%edx
call   1030 <memcpy@plt>
lea    -0xd0(%rbp),%rdi
lea    0xf1e(%rip),%rsi
mov    $0x60,%edx
call   1030 <memcpy@plt>
lea    -0x130(%rbp),%rdi
lea    0xf66(%rip),%rsi
mov    $0x60,%edx
call   1030 <memcpy@plt>
movl   $0x0,-0x13c(%rbp)
cmpl   $0x18,-0x13c(%rbp)
jge    14e2 <sha3_keccakf+0x3d2>
movl   $0x0,-0x134(%rbp)
cmpl   $0x5,-0x134(%rbp)
jge    120e <sha3_keccakf+0xfe>
mov    -0x8(%rbp),%rax
movslq -0x134(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x8(%rbp),%rax
mov    -0x134(%rbp),%edx
add    $0x5,%edx
movslq %edx,%rdx
xor    (%rax,%rdx,4),%ecx
mov    -0x8(%rbp),%rax
mov    -0x134(%rbp),%edx
add    $0xa,%edx
movslq %edx,%rdx
xor    (%rax,%rdx,4),%ecx
mov    -0x8(%rbp),%rax
mov    -0x134(%rbp),%edx
add    $0xf,%edx
movslq %edx,%rdx
xor    (%rax,%rdx,4),%ecx
mov    -0x8(%rbp),%rax
mov    -0x134(%rbp),%edx
add    $0x14,%edx
movslq %edx,%rdx
xor    (%rax,%rdx,4),%ecx
movslq -0x134(%rbp),%rax
mov    %ecx,-0x160(%rbp,%rax,4)
mov    -0x134(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x134(%rbp)
jmp    1185 <sha3_keccakf+0x75>
movl   $0x0,-0x134(%rbp)
cmpl   $0x5,-0x134(%rbp)
jge    1305 <sha3_keccakf+0x1f5>
mov    -0x134(%rbp),%eax
add    $0x4,%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
movslq %edx,%rax
mov    -0x160(%rbp,%rax,4),%eax
mov    %eax,-0x168(%rbp)
mov    -0x134(%rbp),%eax
add    $0x1,%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
movslq %edx,%rax
mov    -0x160(%rbp,%rax,4),%eax
shl    $0x1,%eax
mov    %eax,-0x164(%rbp)
mov    -0x134(%rbp),%eax
add    $0x1,%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
mov    -0x168(%rbp),%eax
movslq %edx,%rcx
mov    -0x160(%rbp,%rcx,4),%edx
mov    $0x3f,%ecx
sar    %cl,%edx
mov    -0x164(%rbp),%ecx
or     %edx,%ecx
xor    %ecx,%eax
mov    %eax,-0x140(%rbp)
movl   $0x0,-0x138(%rbp)
cmpl   $0x19,-0x138(%rbp)
jge    12ec <sha3_keccakf+0x1dc>
mov    -0x140(%rbp),%edx
mov    -0x8(%rbp),%rax
mov    -0x138(%rbp),%ecx
add    -0x134(%rbp),%ecx
movslq %ecx,%rcx
xor    (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x138(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x138(%rbp)
jmp    12ac <sha3_keccakf+0x19c>
jmp    12f1 <sha3_keccakf+0x1e1>
mov    -0x134(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x134(%rbp)
jmp    1218 <sha3_keccakf+0x108>
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x140(%rbp)
movl   $0x0,-0x134(%rbp)
cmpl   $0x18,-0x134(%rbp)
jge    13b2 <sha3_keccakf+0x2a2>
movslq -0x134(%rbp),%rax
mov    -0x130(%rbp,%rax,4),%eax
mov    %eax,-0x138(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x138(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x160(%rbp)
mov    -0x140(%rbp),%edx
movslq -0x134(%rbp),%rax
mov    -0xd0(%rbp,%rax,4),%ecx
shl    %cl,%edx
mov    -0x140(%rbp),%eax
movslq -0x134(%rbp),%rsi
mov    $0x40,%ecx
sub    -0xd0(%rbp,%rsi,4),%ecx
sar    %cl,%eax
or     %eax,%edx
mov    -0x8(%rbp),%rax
movslq -0x138(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x160(%rbp),%eax
mov    %eax,-0x140(%rbp)
mov    -0x134(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x134(%rbp)
jmp    131c <sha3_keccakf+0x20c>
movl   $0x0,-0x138(%rbp)
cmpl   $0x19,-0x138(%rbp)
jge    14bb <sha3_keccakf+0x3ab>
movl   $0x0,-0x134(%rbp)
cmpl   $0x5,-0x134(%rbp)
jge    1418 <sha3_keccakf+0x308>
mov    -0x8(%rbp),%rax
mov    -0x138(%rbp),%ecx
add    -0x134(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%ecx
movslq -0x134(%rbp),%rax
mov    %ecx,-0x160(%rbp,%rax,4)
mov    -0x134(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x134(%rbp)
jmp    13d3 <sha3_keccakf+0x2c3>
movl   $0x0,-0x134(%rbp)
cmpl   $0x5,-0x134(%rbp)
jge    14a2 <sha3_keccakf+0x392>
mov    -0x134(%rbp),%eax
add    $0x1,%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
movslq %edx,%rax
mov    -0x160(%rbp,%rax,4),%eax
xor    $0xffffffff,%eax
mov    %eax,-0x16c(%rbp)
mov    -0x134(%rbp),%eax
add    $0x2,%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
mov    -0x16c(%rbp),%edx
cltq
and    -0x160(%rbp,%rax,4),%edx
mov    -0x8(%rbp),%rax
mov    -0x138(%rbp),%ecx
add    -0x134(%rbp),%ecx
movslq %ecx,%rcx
xor    (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x134(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x134(%rbp)
jmp    1422 <sha3_keccakf+0x312>
jmp    14a7 <sha3_keccakf+0x397>
mov    -0x138(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x138(%rbp)
jmp    13bc <sha3_keccakf+0x2ac>
movslq -0x13c(%rbp),%rax
mov    -0x70(%rbp,%rax,4),%ecx
mov    -0x8(%rbp),%rax
xor    (%rax),%ecx
mov    %ecx,(%rax)
mov    -0x13c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x13c(%rbp)
jmp    116e <sha3_keccakf+0x5e>
add    $0x170,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sha3_keccakf>:
push   %rbp
push   %rbx
xor    %r9d,%r9d
lea    0xfb4(%rip),%r10
lea    0xf4d(%rip),%r11
lea    0xee6(%rip),%r8
nopw   0x0(%rax,%rax,1)
mov    0x4(%rdi),%edx
mov    $0x1,%eax
nopl   0x0(%rax,%rax,1)
movslq -0x4(%r10,%rax,4),%rsi
mov    (%rdi,%rsi,4),%ebx
movzbl -0x4(%r11,%rax,4),%ecx
mov    %edx,%ebp
shl    %cl,%ebp
neg    %cl
sar    %cl,%edx
movzbl (%r11,%rax,4),%ecx
or     %ebp,%edx
mov    %edx,(%rdi,%rsi,4)
movslq (%r10,%rax,4),%rsi
mov    (%rdi,%rsi,4),%edx
mov    %ebx,%ebp
shl    %cl,%ebp
neg    %cl
sar    %cl,%ebx
or     %ebp,%ebx
mov    %ebx,(%rdi,%rsi,4)
add    $0x2,%rax
cmp    $0x19,%rax
jne    1130 <sha3_keccakf+0x30>
mov    (%rdi),%eax
movd   %eax,%xmm0
movups (%rdi),%xmm1
movups 0x4(%rdi),%xmm2
movups 0x14(%rdi),%xmm3
shufps $0xf4,%xmm2,%xmm0
movaps %xmm2,%xmm4
shufps $0x29,%xmm0,%xmm4
movd   %xmm2,%ecx
andnps %xmm4,%xmm2
xorps  %xmm1,%xmm2
movups %xmm2,(%rdi)
not    %eax
and    %ecx,%eax
xor    %eax,0x10(%rdi)
mov    0x14(%rdi),%eax
movups 0x18(%rdi),%xmm0
movd   %eax,%xmm1
shufps $0xf4,%xmm0,%xmm1
movaps %xmm0,%xmm2
shufps $0x29,%xmm1,%xmm2
movd   %xmm0,%ecx
andnps %xmm2,%xmm0
xorps  %xmm3,%xmm0
movups %xmm0,0x14(%rdi)
not    %eax
and    %ecx,%eax
xor    %eax,0x24(%rdi)
mov    0x28(%rdi),%eax
movups 0x2c(%rdi),%xmm0
movd   %eax,%xmm1
shufps $0xf4,%xmm0,%xmm1
movaps %xmm0,%xmm2
shufps $0x29,%xmm1,%xmm2
movd   %xmm0,%ecx
andnps %xmm2,%xmm0
movups 0x28(%rdi),%xmm1
xorps  %xmm0,%xmm1
movups %xmm1,0x28(%rdi)
not    %eax
and    %ecx,%eax
xor    %eax,0x38(%rdi)
mov    0x3c(%rdi),%eax
movups 0x3c(%rdi),%xmm0
movups 0x40(%rdi),%xmm1
movd   %eax,%xmm2
shufps $0xf4,%xmm1,%xmm2
movaps %xmm1,%xmm3
shufps $0x29,%xmm2,%xmm3
movd   %xmm1,%ecx
andnps %xmm3,%xmm1
xorps  %xmm0,%xmm1
movups %xmm1,0x3c(%rdi)
not    %eax
and    %ecx,%eax
xor    %eax,0x4c(%rdi)
mov    0x50(%rdi),%eax
movups 0x50(%rdi),%xmm0
movups 0x54(%rdi),%xmm1
movd   %eax,%xmm2
shufps $0xf4,%xmm1,%xmm2
movaps %xmm1,%xmm3
shufps $0x29,%xmm2,%xmm3
movd   %xmm1,%ecx
andnps %xmm3,%xmm1
xorps  %xmm0,%xmm1
movups %xmm1,0x50(%rdi)
not    %eax
and    %ecx,%eax
xor    %eax,0x60(%rdi)
mov    (%r8,%r9,4),%eax
xor    %eax,(%rdi)
add    $0x1,%r9
cmp    $0x18,%r9
jne    1120 <sha3_keccakf+0x20>
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
@__const.sha3_keccakf.keccakf_rndc = [24 x i32] [i32 1, i32 32898, i32 32906, i32 -2147450880, i32 32907, i32 -2147483647, i32 -2147450751, i32 32777, i32 138, i32 136, i32 -2147450871, i32 -2147483638, i32 -2147450741, i32 139, i32 32905, i32 32771, i32 32770, i32 128, i32 32778, i32 -2147483638, i32 -2147450751, i32 32896, i32 -2147483647, i32 -2147450872]
@__const.sha3_keccakf.keccakf_rotc = [24 x i32] [i32 1, i32 3, i32 6, i32 10, i32 15, i32 21, i32 28, i32 36, i32 45, i32 55, i32 2, i32 14, i32 27, i32 41, i32 56, i32 8, i32 25, i32 43, i32 62, i32 18, i32 39, i32 61, i32 20, i32 44]
@__const.sha3_keccakf.keccakf_piln = [24 x i32] [i32 10, i32 7, i32 11, i32 17, i32 18, i32 3, i32 5, i32 16, i32 8, i32 21, i32 24, i32 4, i32 15, i32 23, i32 19, i32 13, i32 12, i32 2, i32 20, i32 14, i32 22, i32 9, i32 6, i32 1]
define void @sha3_keccakf(i32* %0) {
%2 = alloca i32*
%3 = alloca [24 x i32]
%4 = alloca [24 x i32]
%5 = alloca [24 x i32]
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca [5 x i32]
store i32* %0, i32** %2
%11 = bitcast [24 x i32]* %3 to i8*
%12 = bitcast [24 x i32]* %4 to i8*
%13 = bitcast [24 x i32]* %5 to i8*
store i32 0, i32* %8
br label %14
14: ; preds = %214, %1
%15 = load i32, i32* %8
%16 = icmp slt i32 %15, 24
br i1 %16, label %17, label %217
17: ; preds = %14
store i32 0, i32* %6
br label %18
18: ; preds = %58, %17
%19 = load i32, i32* %6
%20 = icmp slt i32 %19, 5
br i1 %20, label %21, label %61
21: ; preds = %18
%22 = load i32*, i32** %2
%23 = load i32, i32* %6
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds i32, i32* %22, i64 %24
%26 = load i32, i32* %25
%27 = load i32*, i32** %2
%28 = load i32, i32* %6
%29 = add nsw i32 %28, 5
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds i32, i32* %27, i64 %30
%32 = load i32, i32* %31
%33 = xor i32 %26, %32
%34 = load i32*, i32** %2
%35 = load i32, i32* %6
%36 = add nsw i32 %35, 10
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i32, i32* %34, i64 %37
%39 = load i32, i32* %38
%40 = xor i32 %33, %39
%41 = load i32*, i32** %2
%42 = load i32, i32* %6
%43 = add nsw i32 %42, 15
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i32, i32* %41, i64 %44
%46 = load i32, i32* %45
%47 = xor i32 %40, %46
%48 = load i32*, i32** %2
%49 = load i32, i32* %6
%50 = add nsw i32 %49, 20
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds i32, i32* %48, i64 %51
%53 = load i32, i32* %52
%54 = xor i32 %47, %53
%55 = load i32, i32* %6
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [5 x i32], [5 x i32]* %10, i64 0, i64 %56
store i32 %54, i32* %57
br label %58
58: ; preds = %21
%59 = load i32, i32* %6
%60 = add nsw i32 %59, 1
store i32 %60, i32* %6
br label %18
61: ; preds = %18
store i32 0, i32* %6
br label %62
62: ; preds = %105, %61
%63 = load i32, i32* %6
%64 = icmp slt i32 %63, 5
br i1 %64, label %65, label %108
65: ; preds = %62
%66 = load i32, i32* %6
%67 = add nsw i32 %66, 4
%68 = srem i32 %67, 5
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds [5 x i32], [5 x i32]* %10, i64 0, i64 %69
%71 = load i32, i32* %70
%72 = load i32, i32* %6
%73 = add nsw i32 %72, 1
%74 = srem i32 %73, 5
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds [5 x i32], [5 x i32]* %10, i64 0, i64 %75
%77 = load i32, i32* %76
%78 = shl i32 %77, 1
%79 = load i32, i32* %6
%80 = add nsw i32 %79, 1
%81 = srem i32 %80, 5
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds [5 x i32], [5 x i32]* %10, i64 0, i64 %82
%84 = load i32, i32* %83
%85 = ashr i32 %84, 63
%86 = or i32 %78, %85
%87 = xor i32 %71, %86
store i32 %87, i32* %9
store i32 0, i32* %7
br label %88
88: ; preds = %101, %65
%89 = load i32, i32* %7
%90 = icmp slt i32 %89, 25
br i1 %90, label %91, label %104
91: ; preds = %88
%92 = load i32, i32* %9
%93 = load i32*, i32** %2
%94 = load i32, i32* %7
%95 = load i32, i32* %6
%96 = add nsw i32 %94, %95
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds i32, i32* %93, i64 %97
%99 = load i32, i32* %98
%100 = xor i32 %99, %92
store i32 %100, i32* %98
br label %101
101: ; preds = %91
%102 = load i32, i32* %7
%103 = add nsw i32 %102, 5
store i32 %103, i32* %7
br label %88
104: ; preds = %88
br label %105
105: ; preds = %104
%106 = load i32, i32* %6
%107 = add nsw i32 %106, 1
store i32 %107, i32* %6
br label %62
108: ; preds = %62
%109 = load i32*, i32** %2
%110 = getelementptr inbounds i32, i32* %109, i64 1
%111 = load i32, i32* %110
store i32 %111, i32* %9
store i32 0, i32* %6
br label %112
112: ; preds = %146, %108
%113 = load i32, i32* %6
%114 = icmp slt i32 %113, 24
br i1 %114, label %115, label %149
115: ; preds = %112
%116 = load i32, i32* %6
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds [24 x i32], [24 x i32]* %5, i64 0, i64 %117
%119 = load i32, i32* %118
store i32 %119, i32* %7
%120 = load i32*, i32** %2
%121 = load i32, i32* %7
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i32, i32* %120, i64 %122
%124 = load i32, i32* %123
%125 = getelementptr inbounds [5 x i32], [5 x i32]* %10, i64 0, i64 0
store i32 %124, i32* %125
%126 = load i32, i32* %9
%127 = load i32, i32* %6
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds [24 x i32], [24 x i32]* %4, i64 0, i64 %128
%130 = load i32, i32* %129
%131 = shl i32 %126, %130
%132 = load i32, i32* %9
%133 = load i32, i32* %6
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds [24 x i32], [24 x i32]* %4, i64 0, i64 %134
%136 = load i32, i32* %135
%137 = sub nsw i32 64, %136
%138 = ashr i32 %132, %137
%139 = or i32 %131, %138
%140 = load i32*, i32** %2
%141 = load i32, i32* %7
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds i32, i32* %140, i64 %142
store i32 %139, i32* %143
%144 = getelementptr inbounds [5 x i32], [5 x i32]* %10, i64 0, i64 0
%145 = load i32, i32* %144
store i32 %145, i32* %9
br label %146
146: ; preds = %115
%147 = load i32, i32* %6
%148 = add nsw i32 %147, 1
store i32 %148, i32* %6
br label %112
149: ; preds = %112
store i32 0, i32* %7
br label %150
150: ; preds = %202, %149
%151 = load i32, i32* %7
%152 = icmp slt i32 %151, 25
br i1 %152, label %153, label %205
153: ; preds = %150
store i32 0, i32* %6
br label %154
154: ; preds = %168, %153
%155 = load i32, i32* %6
%156 = icmp slt i32 %155, 5
br i1 %156, label %157, label %171
157: ; preds = %154
%158 = load i32*, i32** %2
%159 = load i32, i32* %7
%160 = load i32, i32* %6
%161 = add nsw i32 %159, %160
%162 = sext i32 %161 to i64
%163 = getelementptr inbounds i32, i32* %158, i64 %162
%164 = load i32, i32* %163
%165 = load i32, i32* %6
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds [5 x i32], [5 x i32]* %10, i64 0, i64 %166
store i32 %164, i32* %167
br label %168
168: ; preds = %157
%169 = load i32, i32* %6
%170 = add nsw i32 %169, 1
store i32 %170, i32* %6
br label %154
171: ; preds = %154
store i32 0, i32* %6
br label %172
172: ; preds = %198, %171
%173 = load i32, i32* %6
%174 = icmp slt i32 %173, 5
br i1 %174, label %175, label %201
175: ; preds = %172
%176 = load i32, i32* %6
%177 = add nsw i32 %176, 1
%178 = srem i32 %177, 5
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds [5 x i32], [5 x i32]* %10, i64 0, i64 %179
%181 = load i32, i32* %180
%182 = xor i32 %181, -1
%183 = load i32, i32* %6
%184 = add nsw i32 %183, 2
%185 = srem i32 %184, 5
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds [5 x i32], [5 x i32]* %10, i64 0, i64 %186
%188 = load i32, i32* %187
%189 = and i32 %182, %188
%190 = load i32*, i32** %2
%191 = load i32, i32* %7
%192 = load i32, i32* %6
%193 = add nsw i32 %191, %192
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds i32, i32* %190, i64 %194
%196 = load i32, i32* %195
%197 = xor i32 %196, %189
store i32 %197, i32* %195
br label %198
198: ; preds = %175
%199 = load i32, i32* %6
%200 = add nsw i32 %199, 1
store i32 %200, i32* %6
br label %172
201: ; preds = %172
br label %202
202: ; preds = %201
%203 = load i32, i32* %7
%204 = add nsw i32 %203, 5
store i32 %204, i32* %7
br label %150
205: ; preds = %150
%206 = load i32, i32* %8
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds [24 x i32], [24 x i32]* %3, i64 0, i64 %207
%209 = load i32, i32* %208
%210 = load i32*, i32** %2
%211 = getelementptr inbounds i32, i32* %210, i64 0
%212 = load i32, i32* %211
%213 = xor i32 %212, %209
store i32 %213, i32* %211
br label %214
214: ; preds = %205
%215 = load i32, i32* %8
%216 = add nsw i32 %215, 1
store i32 %216, i32* %8
br label %14
217: ; preds = %14
ret void
}

LLVM IR (-O2):
@__const.sha3_keccakf.keccakf_rndc = [24 x i32] [i32 1, i32 32898, i32 32906, i32 -2147450880, i32 32907, i32 -2147483647, i32 -2147450751, i32 32777, i32 138, i32 136, i32 -2147450871, i32 -2147483638, i32 -2147450741, i32 139, i32 32905, i32 32771, i32 32770, i32 128, i32 32778, i32 -2147483638, i32 -2147450751, i32 32896, i32 -2147483647, i32 -2147450872]
@__const.sha3_keccakf.keccakf_rotc = [24 x i32] [i32 1, i32 3, i32 6, i32 10, i32 15, i32 21, i32 28, i32 36, i32 45, i32 55, i32 2, i32 14, i32 27, i32 41, i32 56, i32 8, i32 25, i32 43, i32 62, i32 18, i32 39, i32 61, i32 20, i32 44]
@__const.sha3_keccakf.keccakf_piln = [24 x i32] [i32 10, i32 7, i32 11, i32 17, i32 18, i32 3, i32 5, i32 16, i32 8, i32 21, i32 24, i32 4, i32 15, i32 23, i32 19, i32 13, i32 12, i32 2, i32 20, i32 14, i32 22, i32 9, i32 6, i32 1]
define void @sha3_keccakf(i32* nocapture %0) {
%2 = getelementptr inbounds i32, i32* %0, i64 1
%3 = getelementptr inbounds i32, i32* %0, i64 1
%4 = bitcast i32* %3 to <4 x i32>*
%5 = bitcast i32* %0 to <4 x i32>*
%6 = bitcast i32* %0 to <4 x i32>*
%7 = getelementptr inbounds i32, i32* %0, i64 4
%8 = getelementptr i32, i32* %0, i64 5
%9 = getelementptr i32, i32* %0, i64 6
%10 = bitcast i32* %9 to <4 x i32>*
%11 = getelementptr inbounds i32, i32* %0, i64 5
%12 = bitcast i32* %11 to <4 x i32>*
%13 = bitcast i32* %11 to <4 x i32>*
%14 = getelementptr inbounds i32, i32* %0, i64 9
%15 = getelementptr i32, i32* %0, i64 10
%16 = getelementptr i32, i32* %0, i64 11
%17 = bitcast i32* %16 to <4 x i32>*
%18 = getelementptr inbounds i32, i32* %0, i64 10
%19 = bitcast i32* %18 to <4 x i32>*
%20 = bitcast i32* %18 to <4 x i32>*
%21 = getelementptr inbounds i32, i32* %0, i64 14
%22 = getelementptr i32, i32* %0, i64 15
%23 = getelementptr i32, i32* %0, i64 16
%24 = bitcast i32* %23 to <4 x i32>*
%25 = getelementptr inbounds i32, i32* %0, i64 15
%26 = bitcast i32* %25 to <4 x i32>*
%27 = bitcast i32* %25 to <4 x i32>*
%28 = getelementptr inbounds i32, i32* %0, i64 19
%29 = getelementptr i32, i32* %0, i64 20
%30 = getelementptr i32, i32* %0, i64 21
%31 = bitcast i32* %30 to <4 x i32>*
%32 = getelementptr inbounds i32, i32* %0, i64 20
%33 = bitcast i32* %32 to <4 x i32>*
%34 = bitcast i32* %32 to <4 x i32>*
%35 = getelementptr inbounds i32, i32* %0, i64 24
br label %36
36: ; preds = %1, %67
%37 = phi i64 [ 0, %1 ], [ %162, %67 ]
%38 = load i32, i32* %2
br label %39
39: ; preds = %39, %36
%40 = phi i64 [ 0, %36 ], [ %65, %39 ]
%41 = phi i32 [ %38, %36 ], [ %58, %39 ]
%42 = getelementptr inbounds [24 x i32], [24 x i32]* @__const.sha3_keccakf.keccakf_piln, i64 0, i64 %40
%43 = load i32, i32* %42
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i32, i32* %0, i64 %44
%46 = load i32, i32* %45
%47 = getelementptr inbounds [24 x i32], [24 x i32]* @__const.sha3_keccakf.keccakf_rotc, i64 0, i64 %40
%48 = load i32, i32* %47
%49 = shl i32 %41, %48
%50 = sub nsw i32 64, %48
%51 = ashr i32 %41, %50
%52 = or i32 %51, %49
store i32 %52, i32* %45
%53 = or i64 %40, 1
%54 = getelementptr inbounds [24 x i32], [24 x i32]* @__const.sha3_keccakf.keccakf_piln, i64 0, i64 %53
%55 = load i32, i32* %54
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds i32, i32* %0, i64 %56
%58 = load i32, i32* %57
%59 = getelementptr inbounds [24 x i32], [24 x i32]* @__const.sha3_keccakf.keccakf_rotc, i64 0, i64 %53
%60 = load i32, i32* %59
%61 = shl i32 %46, %60
%62 = sub nsw i32 64, %60
%63 = ashr i32 %46, %62
%64 = or i32 %63, %61
store i32 %64, i32* %57
%65 = add nuw nsw i64 %40, 2
%66 = icmp eq i64 %65, 24
br i1 %66, label %67, label %39
67: ; preds = %39
%68 = load i32, i32* %0
%69 = load <4 x i32>, <4 x i32>* %4
%70 = xor <4 x i32> %69, <i32 -1, i32 -1, i32 -1, i32 -1>
%71 = extractelement <4 x i32> %69, i64 1
%72 = insertelement <4 x i32> poison, i32 %71, i64 0
%73 = extractelement <4 x i32> %69, i64 2
%74 = insertelement <4 x i32> %72, i32 %73, i64 1
%75 = extractelement <4 x i32> %69, i64 3
%76 = insertelement <4 x i32> %74, i32 %75, i64 2
%77 = insertelement <4 x i32> %76, i32 %68, i64 3
%78 = and <4 x i32> %77, %70
%79 = load <4 x i32>, <4 x i32>* %5
%80 = xor <4 x i32> %79, %78
store <4 x i32> %80, <4 x i32>* %6
%81 = xor i32 %68, -1
%82 = extractelement <4 x i32> %69, i64 0
%83 = and i32 %82, %81
%84 = load i32, i32* %7
%85 = xor i32 %84, %83
store i32 %85, i32* %7
%86 = load i32, i32* %8
%87 = load <4 x i32>, <4 x i32>* %10
%88 = xor <4 x i32> %87, <i32 -1, i32 -1, i32 -1, i32 -1>
%89 = extractelement <4 x i32> %87, i64 1
%90 = insertelement <4 x i32> poison, i32 %89, i64 0
%91 = extractelement <4 x i32> %87, i64 2
%92 = insertelement <4 x i32> %90, i32 %91, i64 1
%93 = extractelement <4 x i32> %87, i64 3
%94 = insertelement <4 x i32> %92, i32 %93, i64 2
%95 = insertelement <4 x i32> %94, i32 %86, i64 3
%96 = and <4 x i32> %95, %88
%97 = load <4 x i32>, <4 x i32>* %12
%98 = xor <4 x i32> %97, %96
store <4 x i32> %98, <4 x i32>* %13
%99 = xor i32 %86, -1
%100 = extractelement <4 x i32> %87, i64 0
%101 = and i32 %100, %99
%102 = load i32, i32* %14
%103 = xor i32 %102, %101
store i32 %103, i32* %14
%104 = load i32, i32* %15
%105 = load <4 x i32>, <4 x i32>* %17
%106 = xor <4 x i32> %105, <i32 -1, i32 -1, i32 -1, i32 -1>
%107 = extractelement <4 x i32> %105, i64 1
%108 = insertelement <4 x i32> poison, i32 %107, i64 0
%109 = extractelement <4 x i32> %105, i64 2
%110 = insertelement <4 x i32> %108, i32 %109, i64 1
%111 = extractelement <4 x i32> %105, i64 3
%112 = insertelement <4 x i32> %110, i32 %111, i64 2
%113 = insertelement <4 x i32> %112, i32 %104, i64 3
%114 = and <4 x i32> %113, %106
%115 = load <4 x i32>, <4 x i32>* %19
%116 = xor <4 x i32> %115, %114
store <4 x i32> %116, <4 x i32>* %20
%117 = xor i32 %104, -1
%118 = extractelement <4 x i32> %105, i64 0
%119 = and i32 %118, %117
%120 = load i32, i32* %21
%121 = xor i32 %120, %119
store i32 %121, i32* %21
%122 = load i32, i32* %22
%123 = load <4 x i32>, <4 x i32>* %24
%124 = xor <4 x i32> %123, <i32 -1, i32 -1, i32 -1, i32 -1>
%125 = extractelement <4 x i32> %123, i64 1
%126 = insertelement <4 x i32> poison, i32 %125, i64 0
%127 = extractelement <4 x i32> %123, i64 2
%128 = insertelement <4 x i32> %126, i32 %127, i64 1
%129 = extractelement <4 x i32> %123, i64 3
%130 = insertelement <4 x i32> %128, i32 %129, i64 2
%131 = insertelement <4 x i32> %130, i32 %122, i64 3
%132 = and <4 x i32> %131, %124
%133 = load <4 x i32>, <4 x i32>* %26
%134 = xor <4 x i32> %133, %132
store <4 x i32> %134, <4 x i32>* %27
%135 = xor i32 %122, -1
%136 = extractelement <4 x i32> %123, i64 0
%137 = and i32 %136, %135
%138 = load i32, i32* %28
%139 = xor i32 %138, %137
store i32 %139, i32* %28
%140 = load i32, i32* %29
%141 = load <4 x i32>, <4 x i32>* %31
%142 = xor <4 x i32> %141, <i32 -1, i32 -1, i32 -1, i32 -1>
%143 = extractelement <4 x i32> %141, i64 1
%144 = insertelement <4 x i32> poison, i32 %143, i64 0
%145 = extractelement <4 x i32> %141, i64 2
%146 = insertelement <4 x i32> %144, i32 %145, i64 1
%147 = extractelement <4 x i32> %141, i64 3
%148 = insertelement <4 x i32> %146, i32 %147, i64 2
%149 = insertelement <4 x i32> %148, i32 %140, i64 3
%150 = and <4 x i32> %149, %142
%151 = load <4 x i32>, <4 x i32>* %33
%152 = xor <4 x i32> %151, %150
store <4 x i32> %152, <4 x i32>* %34
%153 = xor i32 %140, -1
%154 = extractelement <4 x i32> %141, i64 0
%155 = and i32 %154, %153
%156 = load i32, i32* %35
%157 = xor i32 %156, %155
store i32 %157, i32* %35
%158 = getelementptr inbounds [24 x i32], [24 x i32]* @__const.sha3_keccakf.keccakf_rndc, i64 0, i64 %37
%159 = load i32, i32* %158
%160 = load i32, i32* %0
%161 = xor i32 %160, %159
store i32 %161, i32* %0
%162 = add nuw nsw i64 %37, 1
%163 = icmp eq i64 %162, 24
br i1 %163, label %164, label %36
164: ; preds = %67
ret void
}