#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 uint32_t;

/* Variables and functions */
int /*<<< orphan*/ assert(int /*<<< orphan*/);
int handle_xform(int, unsigned long *, unsigned long *);
int handle_xform_masked(int, unsigned long *, int, unsigned long *);
bool extended_31(uint32_t insn, unsigned long *gprs, unsigned long *addr,
                 unsigned long *size) {
  int subopc = (((insn) >> (32 - (21) - (10))) & ((1 << (10)) - 1));
  switch (subopc) {
  case 7:
  case 135:
    *size = 1;
    return handle_xform(insn, gprs, addr);
  case 39:
  case 167:
    *size = 2;
    return handle_xform_masked(insn, gprs, ~0x1, addr);
  case 71:
  case 199:
    *size = 4;
    return handle_xform_masked(insn, gprs, ~0x3, addr);
  case 103:
  case 231:
  case 359:
  case 487:
    *size = 16;
    return handle_xform_masked(insn, gprs, ~0xf, addr);
  case 269:
  case 301:
  case 397:
  case 429:
    *size = (gprs[(((insn) >> (32 - (16) - (5))) & ((1 << (5)) - 1))] >> 56);
    if (*size > 16)
      *size = 16;
    *addr = 0;
    if ((((insn) >> (32 - (11) - (5))) & ((1 << (5)) - 1)) != 0)
      *addr = gprs[(((insn) >> (32 - (11) - (5))) & ((1 << (5)) - 1))];
    return true;
  case 781:
  case 909:
    *size = 1;
    return handle_xform(insn, gprs, addr);
  case 813:
  case 941:
    *size = 2;
    return handle_xform(insn, gprs, addr);
  case 12:
  case 76:
  case 140:
  case 364:
  case 524:
  case 652:
    *size = 4;
    return handle_xform(insn, gprs, addr);
  case 332:
  case 588:
  case 716:
    *size = 8;
    return handle_xform(insn, gprs, addr);
  case 268:
  case 396:
  case 780:
  case 908:
  case 812:
  case 940:
  case 844:
  case 972:
  case 876:
  case 1004:
    *size = 16;
    return handle_xform(insn, gprs, addr);
  case 52:
  case 694:
  case 87:
  case 119:
  case 215:
  case 247:
  case 853:
  case 981:
    *size = 1;
    return handle_xform(insn, gprs, addr);
  case 116:
  case 726:
  case 279:
  case 311:
  case 343:
  case 375:
  case 407:
  case 439:
  case 790:
  case 918:
  case 821:
  case 949:
    *size = 2;
    return handle_xform(insn, gprs, addr);
  case 20:
  case 150:
  case 23:
  case 151:
  case 55:
  case 341:
  case 373:
  case 183:
  case 534:
  case 662:
  case 789:
  case 917:
    *size = 4;
    return handle_xform(insn, gprs, addr);
  case 84:
  case 214:
  case 21:
  case 149:
  case 53:
  case 181:
  case 532:
  case 660:
  case 885:
  case 1013:
  case 309:
    *size = 8;
    return handle_xform(insn, gprs, addr);
  case 276:
  case 182:
    *size = 16;
    return handle_xform(insn, gprs, addr);
  case 535:
  case 567:
  case 663:
  case 695:
  case 855:
  case 887:
  case 983:
    *size = 4;
    return handle_xform(insn, gprs, addr);
  case 599:
  case 631:
  case 727:
  case 759:
    *size = 8;
    return handle_xform(insn, gprs, addr);
  case 791:
  case 919:
    *size = 16;
    return handle_xform(insn, gprs, addr);
  case 22:
  case 54:
  case 86:
  case 246:
  case 278:
  case 982:
  case 1014:
    *size = 128;
    return handle_xform_masked(insn, gprs, ~(128 - 1), addr);
  case 533:
  case 661:
  case 597:
  case 725:
    assert(0);
    break;
  case 582:
  case 710:
    assert(0);
    break;
  case 614:
  case 742:
    assert(0);
    break;
  case 774:
  case 902:
    *size = 128;
    return handle_xform(insn, gprs, addr);
  }
  return false;
}


x86 assembly (clang, -O0):
<extended_31>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x8(%rbp),%eax
shr    %eax
and    $0x3ff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
add    $0xfffffff9,%eax
mov    %eax,%ecx
mov    %rcx,-0x30(%rbp)
sub    $0x3ef,%eax
ja     14cc <extended_31+0x39c>
mov    -0x30(%rbp),%rax
lea    0xe8a(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x20(%rbp),%rax
movq   $0x1,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x2,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rcx
mov    $0xfffffffe,%edx
call   1030 <handle_xform_masked@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x4,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rcx
mov    $0xfffffffc,%edx
call   1030 <handle_xform_masked@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x10,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rcx
mov    $0xfffffff0,%edx
call   1030 <handle_xform_masked@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%ecx
sar    $0xb,%ecx
and    $0x1f,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rcx
shr    $0x38,%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
cmpq   $0x10,(%rax)
jbe    1252 <extended_31+0x122>
mov    -0x20(%rbp),%rax
movq   $0x10,(%rax)
mov    -0x18(%rbp),%rax
movq   $0x0,(%rax)
mov    -0x8(%rbp),%eax
sar    $0x10,%eax
and    $0x1f,%eax
cmp    $0x0,%eax
je     128a <extended_31+0x15a>
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%ecx
sar    $0x10,%ecx
and    $0x1f,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x1,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x2,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x4,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x8,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x10,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x1,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x2,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x4,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x8,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x10,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x4,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x8,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x10,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
mov    -0x20(%rbp),%rax
movq   $0x80,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rcx
mov    $0xffffff80,%edx
call   1030 <handle_xform_masked@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
xor    %edi,%edi
call   1040 <assert@plt>
jmp    14cc <extended_31+0x39c>
xor    %edi,%edi
call   1040 <assert@plt>
jmp    14cc <extended_31+0x39c>
xor    %edi,%edi
call   1040 <assert@plt>
jmp    14cc <extended_31+0x39c>
mov    -0x20(%rbp),%rax
movq   $0x80,(%rax)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
call   1050 <handle_xform@plt>
mov    %eax,-0x4(%rbp)
jmp    14d3 <extended_31+0x3a3>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<extended_31>:
push   %rbx
mov    %rdx,%r8
mov    %edi,%edx
shr    %edx
and    $0x3ff,%edx
xor    %ebx,%ebx
add    $0xfffffff9,%edx
cmp    $0x3ef,%edx
ja     11f6 <extended_31+0xc6>
lea    0xeaa(%rip),%rax
movslq (%rax,%rdx,4),%rdx
add    %rax,%rdx
jmp    *%rdx
movq   $0x4,(%rcx)
jmp    118a <extended_31+0x5a>
movq   $0x8,(%rcx)
jmp    118a <extended_31+0x5a>
movq   $0x10,(%rcx)
jmp    118a <extended_31+0x5a>
movq   $0x2,(%rcx)
jmp    118a <extended_31+0x5a>
movq   $0x1,(%rcx)
mov    %r8,%rdx
pop    %rbx
jmp    1050 <handle_xform@plt>
xor    %ebx,%ebx
xor    %edi,%edi
call   1040 <assert@plt>
jmp    11f6 <extended_31+0xc6>
movq   $0x80,(%rcx)
mov    $0xffffff80,%edx
jmp    1214 <extended_31+0xe4>
movq   $0x10,(%rcx)
mov    $0xfffffff0,%edx
jmp    1214 <extended_31+0xe4>
mov    %edi,%eax
shr    $0xb,%eax
and    $0x1f,%eax
mov    (%rsi,%rax,8),%rax
shr    $0x38,%rax
cmp    $0x11,%eax
mov    $0x10,%edx
cmovb  %rax,%rdx
mov    %rdx,(%rcx)
movq   $0x0,(%r8)
shr    $0x10,%edi
mov    $0x1,%ebx
and    $0x1f,%edi
je     11f6 <extended_31+0xc6>
mov    %edi,%eax
mov    (%rsi,%rax,8),%rax
mov    %rax,(%r8)
mov    %ebx,%eax
pop    %rbx
ret
movq   $0x2,(%rcx)
mov    $0xfffffffe,%edx
jmp    1214 <extended_31+0xe4>
movq   $0x4,(%rcx)
mov    $0xfffffffc,%edx
mov    %r8,%rcx
pop    %rbx
jmp    1030 <handle_xform_masked@plt>
movq   $0x80,(%rcx)
jmp    118a <extended_31+0x5a>

LLVM IR (-O0):
define i32 @extended_31(i32 %0, i64* %1, i64* %2, i64* %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca i64*
%8 = alloca i64*
%9 = alloca i64*
%10 = alloca i32
store i32 %0, i32* %6
store i64* %1, i64** %7
store i64* %2, i64** %8
store i64* %3, i64** %9
%11 = load i32, i32* %6
%12 = ashr i32 %11, 1
%13 = and i32 %12, 1023
store i32 %13, i32* %10
%14 = load i32, i32* %10
switch i32 %14, label %166 [
i32 7, label %15
i32 135, label %15
i32 39, label %21
i32 167, label %21
i32 71, label %27
i32 199, label %27
i32 103, label %33
i32 231, label %33
i32 359, label %33
i32 487, label %33
i32 269, label %39
i32 301, label %39
i32 397, label %39
i32 429, label %39
i32 781, label %70
i32 909, label %70
i32 813, label %76
i32 941, label %76
i32 12, label %82
i32 76, label %82
i32 140, label %82
i32 364, label %82
i32 524, label %82
i32 652, label %82
i32 332, label %88
i32 588, label %88
i32 716, label %88
i32 268, label %94
i32 396, label %94
i32 780, label %94
i32 908, label %94
i32 812, label %94
i32 940, label %94
i32 844, label %94
i32 972, label %94
i32 876, label %94
i32 1004, label %94
i32 52, label %100
i32 694, label %100
i32 87, label %100
i32 119, label %100
i32 215, label %100
i32 247, label %100
i32 853, label %100
i32 981, label %100
i32 116, label %106
i32 726, label %106
i32 279, label %106
i32 311, label %106
i32 343, label %106
i32 375, label %106
i32 407, label %106
i32 439, label %106
i32 790, label %106
i32 918, label %106
i32 821, label %106
i32 949, label %106
i32 20, label %112
i32 150, label %112
i32 23, label %112
i32 151, label %112
i32 55, label %112
i32 341, label %112
i32 373, label %112
i32 183, label %112
i32 534, label %112
i32 662, label %112
i32 789, label %112
i32 917, label %112
i32 84, label %118
i32 214, label %118
i32 21, label %118
i32 149, label %118
i32 53, label %118
i32 181, label %118
i32 532, label %118
i32 660, label %118
i32 885, label %118
i32 1013, label %118
i32 309, label %118
i32 276, label %124
i32 182, label %124
i32 535, label %130
i32 567, label %130
i32 663, label %130
i32 695, label %130
i32 855, label %130
i32 887, label %130
i32 983, label %130
i32 599, label %136
i32 631, label %136
i32 727, label %136
i32 759, label %136
i32 791, label %142
i32 919, label %142
i32 22, label %148
i32 54, label %148
i32 86, label %148
i32 246, label %148
i32 278, label %148
i32 982, label %148
i32 1014, label %148
i32 533, label %154
i32 661, label %154
i32 597, label %154
i32 725, label %154
i32 582, label %156
i32 710, label %156
i32 614, label %158
i32 742, label %158
i32 774, label %160
i32 902, label %160
]
15: ; preds = %4, %4
%16 = load i64*, i64** %9
store i64 1, i64* %16
%17 = load i32, i32* %6
%18 = load i64*, i64** %7
%19 = load i64*, i64** %8
%20 = call i32 @handle_xform(i32 %17, i64* %18, i64* %19)
store i32 %20, i32* %5
br label %167
21: ; preds = %4, %4
%22 = load i64*, i64** %9
store i64 2, i64* %22
%23 = load i32, i32* %6
%24 = load i64*, i64** %7
%25 = load i64*, i64** %8
%26 = call i32 @handle_xform_masked(i32 %23, i64* %24, i32 -2, i64* %25)
store i32 %26, i32* %5
br label %167
27: ; preds = %4, %4
%28 = load i64*, i64** %9
store i64 4, i64* %28
%29 = load i32, i32* %6
%30 = load i64*, i64** %7
%31 = load i64*, i64** %8
%32 = call i32 @handle_xform_masked(i32 %29, i64* %30, i32 -4, i64* %31)
store i32 %32, i32* %5
br label %167
33: ; preds = %4, %4, %4, %4
%34 = load i64*, i64** %9
store i64 16, i64* %34
%35 = load i32, i32* %6
%36 = load i64*, i64** %7
%37 = load i64*, i64** %8
%38 = call i32 @handle_xform_masked(i32 %35, i64* %36, i32 -16, i64* %37)
store i32 %38, i32* %5
br label %167
39: ; preds = %4, %4, %4, %4
%40 = load i64*, i64** %7
%41 = load i32, i32* %6
%42 = ashr i32 %41, 11
%43 = and i32 %42, 31
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i64, i64* %40, i64 %44
%46 = load i64, i64* %45
%47 = lshr i64 %46, 56
%48 = load i64*, i64** %9
store i64 %47, i64* %48
%49 = load i64*, i64** %9
%50 = load i64, i64* %49
%51 = icmp ugt i64 %50, 16
br i1 %51, label %52, label %54
52: ; preds = %39
%53 = load i64*, i64** %9
store i64 16, i64* %53
br label %54
54: ; preds = %52, %39
%55 = load i64*, i64** %8
store i64 0, i64* %55
%56 = load i32, i32* %6
%57 = ashr i32 %56, 16
%58 = and i32 %57, 31
%59 = icmp ne i32 %58, 0
br i1 %59, label %60, label %69
60: ; preds = %54
%61 = load i64*, i64** %7
%62 = load i32, i32* %6
%63 = ashr i32 %62, 16
%64 = and i32 %63, 31
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds i64, i64* %61, i64 %65
%67 = load i64, i64* %66
%68 = load i64*, i64** %8
store i64 %67, i64* %68
br label %69
69: ; preds = %60, %54
store i32 1, i32* %5
br label %167
70: ; preds = %4, %4
%71 = load i64*, i64** %9
store i64 1, i64* %71
%72 = load i32, i32* %6
%73 = load i64*, i64** %7
%74 = load i64*, i64** %8
%75 = call i32 @handle_xform(i32 %72, i64* %73, i64* %74)
store i32 %75, i32* %5
br label %167
76: ; preds = %4, %4
%77 = load i64*, i64** %9
store i64 2, i64* %77
%78 = load i32, i32* %6
%79 = load i64*, i64** %7
%80 = load i64*, i64** %8
%81 = call i32 @handle_xform(i32 %78, i64* %79, i64* %80)
store i32 %81, i32* %5
br label %167
82: ; preds = %4, %4, %4, %4, %4, %4
%83 = load i64*, i64** %9
store i64 4, i64* %83
%84 = load i32, i32* %6
%85 = load i64*, i64** %7
%86 = load i64*, i64** %8
%87 = call i32 @handle_xform(i32 %84, i64* %85, i64* %86)
store i32 %87, i32* %5
br label %167
88: ; preds = %4, %4, %4
%89 = load i64*, i64** %9
store i64 8, i64* %89
%90 = load i32, i32* %6
%91 = load i64*, i64** %7
%92 = load i64*, i64** %8
%93 = call i32 @handle_xform(i32 %90, i64* %91, i64* %92)
store i32 %93, i32* %5
br label %167
94: ; preds = %4, %4, %4, %4, %4, %4, %4, %4, %4, %4
%95 = load i64*, i64** %9
store i64 16, i64* %95
%96 = load i32, i32* %6
%97 = load i64*, i64** %7
%98 = load i64*, i64** %8
%99 = call i32 @handle_xform(i32 %96, i64* %97, i64* %98)
store i32 %99, i32* %5
br label %167
100: ; preds = %4, %4, %4, %4, %4, %4, %4, %4
%101 = load i64*, i64** %9
store i64 1, i64* %101
%102 = load i32, i32* %6
%103 = load i64*, i64** %7
%104 = load i64*, i64** %8
%105 = call i32 @handle_xform(i32 %102, i64* %103, i64* %104)
store i32 %105, i32* %5
br label %167
106: ; preds = %4, %4, %4, %4, %4, %4, %4, %4, %4, %4, %4, %4
%107 = load i64*, i64** %9
store i64 2, i64* %107
%108 = load i32, i32* %6
%109 = load i64*, i64** %7
%110 = load i64*, i64** %8
%111 = call i32 @handle_xform(i32 %108, i64* %109, i64* %110)
store i32 %111, i32* %5
br label %167
112: ; preds = %4, %4, %4, %4, %4, %4, %4, %4, %4, %4, %4, %4
%113 = load i64*, i64** %9
store i64 4, i64* %113
%114 = load i32, i32* %6
%115 = load i64*, i64** %7
%116 = load i64*, i64** %8
%117 = call i32 @handle_xform(i32 %114, i64* %115, i64* %116)
store i32 %117, i32* %5
br label %167
118: ; preds = %4, %4, %4, %4, %4, %4, %4, %4, %4, %4, %4
%119 = load i64*, i64** %9
store i64 8, i64* %119
%120 = load i32, i32* %6
%121 = load i64*, i64** %7
%122 = load i64*, i64** %8
%123 = call i32 @handle_xform(i32 %120, i64* %121, i64* %122)
store i32 %123, i32* %5
br label %167
124: ; preds = %4, %4
%125 = load i64*, i64** %9
store i64 16, i64* %125
%126 = load i32, i32* %6
%127 = load i64*, i64** %7
%128 = load i64*, i64** %8
%129 = call i32 @handle_xform(i32 %126, i64* %127, i64* %128)
store i32 %129, i32* %5
br label %167
130: ; preds = %4, %4, %4, %4, %4, %4, %4
%131 = load i64*, i64** %9
store i64 4, i64* %131
%132 = load i32, i32* %6
%133 = load i64*, i64** %7
%134 = load i64*, i64** %8
%135 = call i32 @handle_xform(i32 %132, i64* %133, i64* %134)
store i32 %135, i32* %5
br label %167
136: ; preds = %4, %4, %4, %4
%137 = load i64*, i64** %9
store i64 8, i64* %137
%138 = load i32, i32* %6
%139 = load i64*, i64** %7
%140 = load i64*, i64** %8
%141 = call i32 @handle_xform(i32 %138, i64* %139, i64* %140)
store i32 %141, i32* %5
br label %167
142: ; preds = %4, %4
%143 = load i64*, i64** %9
store i64 16, i64* %143
%144 = load i32, i32* %6
%145 = load i64*, i64** %7
%146 = load i64*, i64** %8
%147 = call i32 @handle_xform(i32 %144, i64* %145, i64* %146)
store i32 %147, i32* %5
br label %167
148: ; preds = %4, %4, %4, %4, %4, %4, %4
%149 = load i64*, i64** %9
store i64 128, i64* %149
%150 = load i32, i32* %6
%151 = load i64*, i64** %7
%152 = load i64*, i64** %8
%153 = call i32 @handle_xform_masked(i32 %150, i64* %151, i32 -128, i64* %152)
store i32 %153, i32* %5
br label %167
154: ; preds = %4, %4, %4, %4
%155 = call i32 @assert(i32 0)
br label %166
156: ; preds = %4, %4
%157 = call i32 @assert(i32 0)
br label %166
158: ; preds = %4, %4
%159 = call i32 @assert(i32 0)
br label %166
160: ; preds = %4, %4
%161 = load i64*, i64** %9
store i64 128, i64* %161
%162 = load i32, i32* %6
%163 = load i64*, i64** %7
%164 = load i64*, i64** %8
%165 = call i32 @handle_xform(i32 %162, i64* %163, i64* %164)
store i32 %165, i32* %5
br label %167
166: ; preds = %4, %158, %156, %154
store i32 0, i32* %5
br label %167
167: ; preds = %166, %160, %148, %142, %136, %130, %124, %118, %112, %106, %100, %94, %88, %82, %76, %70, %69, %33, %27, %21, %15
%168 = load i32, i32* %5
ret i32 %168
}

LLVM IR (-O2):
define i32 @extended_31(i32 %0, i64* %1, i64* %2, i64* nocapture writeonly %3) {
%5 = lshr i32 %0, 1
%6 = and i32 %5, 1023
switch i32 %6, label %67 [
i32 7, label %7
i32 135, label %7
i32 39, label %9
i32 167, label %9
i32 71, label %11
i32 199, label %11
i32 103, label %13
i32 231, label %13
i32 359, label %13
i32 487, label %13
i32 269, label %15
i32 301, label %15
i32 397, label %15
i32 429, label %15
i32 781, label %31
i32 909, label %31
i32 813, label %33
i32 941, label %33
i32 12, label %35
i32 76, label %35
i32 140, label %35
i32 364, label %35
i32 524, label %35
i32 652, label %35
i32 332, label %37
i32 588, label %37
i32 716, label %37
i32 268, label %39
i32 396, label %39
i32 780, label %39
i32 908, label %39
i32 812, label %39
i32 940, label %39
i32 844, label %39
i32 972, label %39
i32 876, label %39
i32 1004, label %39
i32 52, label %41
i32 694, label %41
i32 87, label %41
i32 119, label %41
i32 215, label %41
i32 247, label %41
i32 853, label %41
i32 981, label %41
i32 116, label %43
i32 726, label %43
i32 279, label %43
i32 311, label %43
i32 343, label %43
i32 375, label %43
i32 407, label %43
i32 439, label %43
i32 790, label %43
i32 918, label %43
i32 821, label %43
i32 949, label %43
i32 20, label %45
i32 150, label %45
i32 23, label %45
i32 151, label %45
i32 55, label %45
i32 341, label %45
i32 373, label %45
i32 183, label %45
i32 534, label %45
i32 662, label %45
i32 789, label %45
i32 917, label %45
i32 84, label %47
i32 214, label %47
i32 21, label %47
i32 149, label %47
i32 53, label %47
i32 181, label %47
i32 532, label %47
i32 660, label %47
i32 885, label %47
i32 1013, label %47
i32 309, label %47
i32 276, label %49
i32 182, label %49
i32 535, label %51
i32 567, label %51
i32 663, label %51
i32 695, label %51
i32 855, label %51
i32 887, label %51
i32 983, label %51
i32 599, label %53
i32 631, label %53
i32 727, label %53
i32 759, label %53
i32 791, label %55
i32 919, label %55
i32 22, label %57
i32 54, label %57
i32 86, label %57
i32 246, label %57
i32 278, label %57
i32 982, label %57
i32 1014, label %57
i32 533, label %59
i32 661, label %59
i32 597, label %59
i32 725, label %59
i32 582, label %61
i32 710, label %61
i32 614, label %63
i32 742, label %63
i32 774, label %65
i32 902, label %65
]
7: ; preds = %4, %4
store i64 1, i64* %3
%8 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
9: ; preds = %4, %4
store i64 2, i64* %3
%10 = tail call i32 @handle_xform_masked(i32 %0, i64* %1, i32 -2, i64* %2)
br label %67
11: ; preds = %4, %4
store i64 4, i64* %3
%12 = tail call i32 @handle_xform_masked(i32 %0, i64* %1, i32 -4, i64* %2)
br label %67
13: ; preds = %4, %4, %4, %4
store i64 16, i64* %3
%14 = tail call i32 @handle_xform_masked(i32 %0, i64* %1, i32 -16, i64* %2)
br label %67
15: ; preds = %4, %4, %4, %4
%16 = lshr i32 %0, 11
%17 = and i32 %16, 31
%18 = zext i32 %17 to i64
%19 = getelementptr inbounds i64, i64* %1, i64 %18
%20 = load i64, i64* %19
%21 = lshr i64 %20, 56
%22 = icmp ugt i64 %20, 1224979098644774911
%23 = select i1 %22, i64 16, i64 %21
store i64 %23, i64* %3
store i64 0, i64* %2
%24 = lshr i32 %0, 16
%25 = and i32 %24, 31
%26 = icmp eq i32 %25, 0
br i1 %26, label %67, label %27
27: ; preds = %15
%28 = zext i32 %25 to i64
%29 = getelementptr inbounds i64, i64* %1, i64 %28
%30 = load i64, i64* %29
store i64 %30, i64* %2
br label %67
31: ; preds = %4, %4
store i64 1, i64* %3
%32 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
33: ; preds = %4, %4
store i64 2, i64* %3
%34 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
35: ; preds = %4, %4, %4, %4, %4, %4
store i64 4, i64* %3
%36 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
37: ; preds = %4, %4, %4
store i64 8, i64* %3
%38 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
39: ; preds = %4, %4, %4, %4, %4, %4, %4, %4, %4, %4
store i64 16, i64* %3
%40 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
41: ; preds = %4, %4, %4, %4, %4, %4, %4, %4
store i64 1, i64* %3
%42 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
43: ; preds = %4, %4, %4, %4, %4, %4, %4, %4, %4, %4, %4, %4
store i64 2, i64* %3
%44 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
45: ; preds = %4, %4, %4, %4, %4, %4, %4, %4, %4, %4, %4, %4
store i64 4, i64* %3
%46 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
47: ; preds = %4, %4, %4, %4, %4, %4, %4, %4, %4, %4, %4
store i64 8, i64* %3
%48 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
49: ; preds = %4, %4
store i64 16, i64* %3
%50 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
51: ; preds = %4, %4, %4, %4, %4, %4, %4
store i64 4, i64* %3
%52 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
53: ; preds = %4, %4, %4, %4
store i64 8, i64* %3
%54 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
55: ; preds = %4, %4
store i64 16, i64* %3
%56 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
57: ; preds = %4, %4, %4, %4, %4, %4, %4
store i64 128, i64* %3
%58 = tail call i32 @handle_xform_masked(i32 %0, i64* %1, i32 -128, i64* %2)
br label %67
59: ; preds = %4, %4, %4, %4
%60 = tail call i32 @assert(i32 0)
br label %67
61: ; preds = %4, %4
%62 = tail call i32 @assert(i32 0)
br label %67
63: ; preds = %4, %4
%64 = tail call i32 @assert(i32 0)
br label %67
65: ; preds = %4, %4
store i64 128, i64* %3
%66 = tail call i32 @handle_xform(i32 %0, i64* %1, i64* %2)
br label %67
67: ; preds = %59, %61, %63, %4, %15, %27, %65, %57, %55, %53, %51, %49, %47, %45, %43, %41, %39, %37, %35, %33, %31, %13, %11, %9, %7
%68 = phi i32 [ %66, %65 ], [ %58, %57 ], [ %56, %55 ], [ %54, %53 ], [ %52, %51 ], [ %50, %49 ], [ %48, %47 ], [ %46, %45 ], [ %44, %43 ], [ %42, %41 ], [ %40, %39 ], [ %38, %37 ], [ %36, %35 ], [ %34, %33 ], [ %32, %31 ], [ %14, %13 ], [ %12, %11 ], [ %10, %9 ], [ %8, %7 ], [ 1, %27 ], [ 1, %15 ], [ 0, %4 ], [ 0, %63 ], [ 0, %61 ], [ 0, %59 ]
ret i32 %68
}