#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 */

/* Variables and functions */
int /*<<< orphan*/ abort();
unsigned long long constant_shift(unsigned long long x, int i) {
  switch (i) {
  case 0:
    x = x >> 0;
    break;
  case 1:
    x = x >> 1;
    break;
  case 2:
    x = x >> 2;
    break;
  case 3:
    x = x >> 3;
    break;
  case 4:
    x = x >> 4;
    break;
  case 5:
    x = x >> 5;
    break;
  case 6:
    x = x >> 6;
    break;
  case 7:
    x = x >> 7;
    break;
  case 8:
    x = x >> 8;
    break;
  case 9:
    x = x >> 9;
    break;
  case 10:
    x = x >> 10;
    break;
  case 11:
    x = x >> 11;
    break;
  case 12:
    x = x >> 12;
    break;
  case 13:
    x = x >> 13;
    break;
  case 14:
    x = x >> 14;
    break;
  case 15:
    x = x >> 15;
    break;
  case 16:
    x = x >> 16;
    break;
  case 17:
    x = x >> 17;
    break;
  case 18:
    x = x >> 18;
    break;
  case 19:
    x = x >> 19;
    break;
  case 20:
    x = x >> 20;
    break;
  case 21:
    x = x >> 21;
    break;
  case 22:
    x = x >> 22;
    break;
  case 23:
    x = x >> 23;
    break;
  case 24:
    x = x >> 24;
    break;
  case 25:
    x = x >> 25;
    break;
  case 26:
    x = x >> 26;
    break;
  case 27:
    x = x >> 27;
    break;
  case 28:
    x = x >> 28;
    break;
  case 29:
    x = x >> 29;
    break;
  case 30:
    x = x >> 30;
    break;
  case 31:
    x = x >> 31;
    break;
  case 32:
    x = x >> 32;
    break;
  case 33:
    x = x >> 33;
    break;
  case 34:
    x = x >> 34;
    break;
  case 35:
    x = x >> 35;
    break;
  case 36:
    x = x >> 36;
    break;
  case 37:
    x = x >> 37;
    break;
  case 38:
    x = x >> 38;
    break;
  case 39:
    x = x >> 39;
    break;
  case 40:
    x = x >> 40;
    break;
  case 41:
    x = x >> 41;
    break;
  case 42:
    x = x >> 42;
    break;
  case 43:
    x = x >> 43;
    break;
  case 44:
    x = x >> 44;
    break;
  case 45:
    x = x >> 45;
    break;
  case 46:
    x = x >> 46;
    break;
  case 47:
    x = x >> 47;
    break;
  case 48:
    x = x >> 48;
    break;
  case 49:
    x = x >> 49;
    break;
  case 50:
    x = x >> 50;
    break;
  case 51:
    x = x >> 51;
    break;
  case 52:
    x = x >> 52;
    break;
  case 53:
    x = x >> 53;
    break;
  case 54:
    x = x >> 54;
    break;
  case 55:
    x = x >> 55;
    break;
  case 56:
    x = x >> 56;
    break;
  case 57:
    x = x >> 57;
    break;
  case 58:
    x = x >> 58;
    break;
  case 59:
    x = x >> 59;
    break;
  case 60:
    x = x >> 60;
    break;
  case 61:
    x = x >> 61;
    break;
  case 62:
    x = x >> 62;
    break;
  case 63:
    x = x >> 63;
    break;
  default:
    abort();
  }
  return x;
}


x86 assembly (clang, -O0):
<constant_shift>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %rax,-0x18(%rbp)
sub    $0x3f,%rax
ja     1584 <constant_shift+0x474>
mov    -0x18(%rbp),%rax
lea    0xec5(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x8(%rbp),%rax
shr    $0x0,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x3,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x5,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x6,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x7,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x8,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x9,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0xa,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0xb,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0xc,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0xd,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0xe,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0xf,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x10,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x11,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x12,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x13,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x14,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x15,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x16,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x17,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x18,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x19,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x1a,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x1b,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x1c,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x1d,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x1e,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x1f,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x20,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x21,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x22,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x23,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x24,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x25,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x26,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x27,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x28,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x29,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x2a,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x2b,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x2c,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x2d,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x2e,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x2f,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x30,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x31,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x32,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x33,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x34,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x35,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x36,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x37,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x38,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x39,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x3a,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x3b,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x3c,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x3d,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x3e,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    -0x8(%rbp),%rax
shr    $0x3f,%rax
mov    %rax,-0x8(%rbp)
jmp    158b <constant_shift+0x47b>
mov    $0x0,%al
call   1030 <abort@plt>
mov    -0x8(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<constant_shift>:
push   %rax
cmp    $0x3f,%esi
ja     12a8 <constant_shift+0x198>
mov    %rdi,%rax
mov    %esi,%ecx
lea    0xeda(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
shr    %rax
pop    %rcx
ret
shr    $0x2,%rax
pop    %rcx
ret
shr    $0x3,%rax
pop    %rcx
ret
shr    $0x4,%rax
pop    %rcx
ret
shr    $0x5,%rax
pop    %rcx
ret
shr    $0x6,%rax
pop    %rcx
ret
shr    $0x7,%rax
pop    %rcx
ret
shr    $0x8,%rax
pop    %rcx
ret
shr    $0x9,%rax
pop    %rcx
ret
shr    $0xa,%rax
pop    %rcx
ret
shr    $0xb,%rax
pop    %rcx
ret
shr    $0xc,%rax
pop    %rcx
ret
shr    $0xd,%rax
pop    %rcx
ret
shr    $0xe,%rax
pop    %rcx
ret
shr    $0xf,%rax
pop    %rcx
ret
shr    $0x10,%rax
pop    %rcx
ret
shr    $0x11,%rax
pop    %rcx
ret
shr    $0x12,%rax
pop    %rcx
ret
shr    $0x13,%rax
pop    %rcx
ret
shr    $0x14,%rax
pop    %rcx
ret
shr    $0x15,%rax
pop    %rcx
ret
shr    $0x16,%rax
pop    %rcx
ret
shr    $0x17,%rax
pop    %rcx
ret
shr    $0x18,%rax
pop    %rcx
ret
shr    $0x19,%rax
pop    %rcx
ret
shr    $0x1a,%rax
pop    %rcx
ret
shr    $0x1b,%rax
pop    %rcx
ret
shr    $0x1c,%rax
pop    %rcx
ret
shr    $0x1d,%rax
pop    %rcx
ret
shr    $0x1e,%rax
pop    %rcx
ret
shr    $0x1f,%rax
pop    %rcx
ret
shr    $0x20,%rax
pop    %rcx
ret
shr    $0x21,%rax
pop    %rcx
ret
shr    $0x22,%rax
pop    %rcx
ret
shr    $0x23,%rax
pop    %rcx
ret
shr    $0x24,%rax
pop    %rcx
ret
shr    $0x25,%rax
pop    %rcx
ret
shr    $0x26,%rax
pop    %rcx
ret
shr    $0x27,%rax
pop    %rcx
ret
shr    $0x28,%rax
pop    %rcx
ret
shr    $0x29,%rax
pop    %rcx
ret
shr    $0x2a,%rax
pop    %rcx
ret
shr    $0x2b,%rax
pop    %rcx
ret
shr    $0x2c,%rax
pop    %rcx
ret
shr    $0x2d,%rax
pop    %rcx
ret
shr    $0x2e,%rax
pop    %rcx
ret
shr    $0x2f,%rax
pop    %rcx
ret
shr    $0x30,%rax
pop    %rcx
ret
shr    $0x31,%rax
pop    %rcx
ret
shr    $0x32,%rax
pop    %rcx
ret
shr    $0x33,%rax
pop    %rcx
ret
shr    $0x34,%rax
pop    %rcx
ret
shr    $0x35,%rax
pop    %rcx
ret
shr    $0x36,%rax
pop    %rcx
ret
shr    $0x37,%rax
pop    %rcx
ret
shr    $0x38,%rax
pop    %rcx
ret
shr    $0x39,%rax
pop    %rcx
ret
shr    $0x3a,%rax
pop    %rcx
ret
shr    $0x3b,%rax
pop    %rcx
ret
shr    $0x3c,%rax
pop    %rcx
ret
shr    $0x3d,%rax
pop    %rcx
ret
shr    $0x3e,%rax
pop    %rcx
ret
shr    $0x3f,%rax
pop    %rcx
ret
xor    %eax,%eax
call   1030 <abort@plt>

LLVM IR (-O0):
define i64 @constant_shift(i64 %0, i32 %1) {
%3 = alloca i64
%4 = alloca i32
store i64 %0, i64* %3
store i32 %1, i32* %4
%5 = load i32, i32* %4
switch i32 %5, label %198 [
i32 0, label %6
i32 1, label %9
i32 2, label %12
i32 3, label %15
i32 4, label %18
i32 5, label %21
i32 6, label %24
i32 7, label %27
i32 8, label %30
i32 9, label %33
i32 10, label %36
i32 11, label %39
i32 12, label %42
i32 13, label %45
i32 14, label %48
i32 15, label %51
i32 16, label %54
i32 17, label %57
i32 18, label %60
i32 19, label %63
i32 20, label %66
i32 21, label %69
i32 22, label %72
i32 23, label %75
i32 24, label %78
i32 25, label %81
i32 26, label %84
i32 27, label %87
i32 28, label %90
i32 29, label %93
i32 30, label %96
i32 31, label %99
i32 32, label %102
i32 33, label %105
i32 34, label %108
i32 35, label %111
i32 36, label %114
i32 37, label %117
i32 38, label %120
i32 39, label %123
i32 40, label %126
i32 41, label %129
i32 42, label %132
i32 43, label %135
i32 44, label %138
i32 45, label %141
i32 46, label %144
i32 47, label %147
i32 48, label %150
i32 49, label %153
i32 50, label %156
i32 51, label %159
i32 52, label %162
i32 53, label %165
i32 54, label %168
i32 55, label %171
i32 56, label %174
i32 57, label %177
i32 58, label %180
i32 59, label %183
i32 60, label %186
i32 61, label %189
i32 62, label %192
i32 63, label %195
]
6: ; preds = %2
%7 = load i64, i64* %3
%8 = lshr i64 %7, 0
store i64 %8, i64* %3
br label %200
9: ; preds = %2
%10 = load i64, i64* %3
%11 = lshr i64 %10, 1
store i64 %11, i64* %3
br label %200
12: ; preds = %2
%13 = load i64, i64* %3
%14 = lshr i64 %13, 2
store i64 %14, i64* %3
br label %200
15: ; preds = %2
%16 = load i64, i64* %3
%17 = lshr i64 %16, 3
store i64 %17, i64* %3
br label %200
18: ; preds = %2
%19 = load i64, i64* %3
%20 = lshr i64 %19, 4
store i64 %20, i64* %3
br label %200
21: ; preds = %2
%22 = load i64, i64* %3
%23 = lshr i64 %22, 5
store i64 %23, i64* %3
br label %200
24: ; preds = %2
%25 = load i64, i64* %3
%26 = lshr i64 %25, 6
store i64 %26, i64* %3
br label %200
27: ; preds = %2
%28 = load i64, i64* %3
%29 = lshr i64 %28, 7
store i64 %29, i64* %3
br label %200
30: ; preds = %2
%31 = load i64, i64* %3
%32 = lshr i64 %31, 8
store i64 %32, i64* %3
br label %200
33: ; preds = %2
%34 = load i64, i64* %3
%35 = lshr i64 %34, 9
store i64 %35, i64* %3
br label %200
36: ; preds = %2
%37 = load i64, i64* %3
%38 = lshr i64 %37, 10
store i64 %38, i64* %3
br label %200
39: ; preds = %2
%40 = load i64, i64* %3
%41 = lshr i64 %40, 11
store i64 %41, i64* %3
br label %200
42: ; preds = %2
%43 = load i64, i64* %3
%44 = lshr i64 %43, 12
store i64 %44, i64* %3
br label %200
45: ; preds = %2
%46 = load i64, i64* %3
%47 = lshr i64 %46, 13
store i64 %47, i64* %3
br label %200
48: ; preds = %2
%49 = load i64, i64* %3
%50 = lshr i64 %49, 14
store i64 %50, i64* %3
br label %200
51: ; preds = %2
%52 = load i64, i64* %3
%53 = lshr i64 %52, 15
store i64 %53, i64* %3
br label %200
54: ; preds = %2
%55 = load i64, i64* %3
%56 = lshr i64 %55, 16
store i64 %56, i64* %3
br label %200
57: ; preds = %2
%58 = load i64, i64* %3
%59 = lshr i64 %58, 17
store i64 %59, i64* %3
br label %200
60: ; preds = %2
%61 = load i64, i64* %3
%62 = lshr i64 %61, 18
store i64 %62, i64* %3
br label %200
63: ; preds = %2
%64 = load i64, i64* %3
%65 = lshr i64 %64, 19
store i64 %65, i64* %3
br label %200
66: ; preds = %2
%67 = load i64, i64* %3
%68 = lshr i64 %67, 20
store i64 %68, i64* %3
br label %200
69: ; preds = %2
%70 = load i64, i64* %3
%71 = lshr i64 %70, 21
store i64 %71, i64* %3
br label %200
72: ; preds = %2
%73 = load i64, i64* %3
%74 = lshr i64 %73, 22
store i64 %74, i64* %3
br label %200
75: ; preds = %2
%76 = load i64, i64* %3
%77 = lshr i64 %76, 23
store i64 %77, i64* %3
br label %200
78: ; preds = %2
%79 = load i64, i64* %3
%80 = lshr i64 %79, 24
store i64 %80, i64* %3
br label %200
81: ; preds = %2
%82 = load i64, i64* %3
%83 = lshr i64 %82, 25
store i64 %83, i64* %3
br label %200
84: ; preds = %2
%85 = load i64, i64* %3
%86 = lshr i64 %85, 26
store i64 %86, i64* %3
br label %200
87: ; preds = %2
%88 = load i64, i64* %3
%89 = lshr i64 %88, 27
store i64 %89, i64* %3
br label %200
90: ; preds = %2
%91 = load i64, i64* %3
%92 = lshr i64 %91, 28
store i64 %92, i64* %3
br label %200
93: ; preds = %2
%94 = load i64, i64* %3
%95 = lshr i64 %94, 29
store i64 %95, i64* %3
br label %200
96: ; preds = %2
%97 = load i64, i64* %3
%98 = lshr i64 %97, 30
store i64 %98, i64* %3
br label %200
99: ; preds = %2
%100 = load i64, i64* %3
%101 = lshr i64 %100, 31
store i64 %101, i64* %3
br label %200
102: ; preds = %2
%103 = load i64, i64* %3
%104 = lshr i64 %103, 32
store i64 %104, i64* %3
br label %200
105: ; preds = %2
%106 = load i64, i64* %3
%107 = lshr i64 %106, 33
store i64 %107, i64* %3
br label %200
108: ; preds = %2
%109 = load i64, i64* %3
%110 = lshr i64 %109, 34
store i64 %110, i64* %3
br label %200
111: ; preds = %2
%112 = load i64, i64* %3
%113 = lshr i64 %112, 35
store i64 %113, i64* %3
br label %200
114: ; preds = %2
%115 = load i64, i64* %3
%116 = lshr i64 %115, 36
store i64 %116, i64* %3
br label %200
117: ; preds = %2
%118 = load i64, i64* %3
%119 = lshr i64 %118, 37
store i64 %119, i64* %3
br label %200
120: ; preds = %2
%121 = load i64, i64* %3
%122 = lshr i64 %121, 38
store i64 %122, i64* %3
br label %200
123: ; preds = %2
%124 = load i64, i64* %3
%125 = lshr i64 %124, 39
store i64 %125, i64* %3
br label %200
126: ; preds = %2
%127 = load i64, i64* %3
%128 = lshr i64 %127, 40
store i64 %128, i64* %3
br label %200
129: ; preds = %2
%130 = load i64, i64* %3
%131 = lshr i64 %130, 41
store i64 %131, i64* %3
br label %200
132: ; preds = %2
%133 = load i64, i64* %3
%134 = lshr i64 %133, 42
store i64 %134, i64* %3
br label %200
135: ; preds = %2
%136 = load i64, i64* %3
%137 = lshr i64 %136, 43
store i64 %137, i64* %3
br label %200
138: ; preds = %2
%139 = load i64, i64* %3
%140 = lshr i64 %139, 44
store i64 %140, i64* %3
br label %200
141: ; preds = %2
%142 = load i64, i64* %3
%143 = lshr i64 %142, 45
store i64 %143, i64* %3
br label %200
144: ; preds = %2
%145 = load i64, i64* %3
%146 = lshr i64 %145, 46
store i64 %146, i64* %3
br label %200
147: ; preds = %2
%148 = load i64, i64* %3
%149 = lshr i64 %148, 47
store i64 %149, i64* %3
br label %200
150: ; preds = %2
%151 = load i64, i64* %3
%152 = lshr i64 %151, 48
store i64 %152, i64* %3
br label %200
153: ; preds = %2
%154 = load i64, i64* %3
%155 = lshr i64 %154, 49
store i64 %155, i64* %3
br label %200
156: ; preds = %2
%157 = load i64, i64* %3
%158 = lshr i64 %157, 50
store i64 %158, i64* %3
br label %200
159: ; preds = %2
%160 = load i64, i64* %3
%161 = lshr i64 %160, 51
store i64 %161, i64* %3
br label %200
162: ; preds = %2
%163 = load i64, i64* %3
%164 = lshr i64 %163, 52
store i64 %164, i64* %3
br label %200
165: ; preds = %2
%166 = load i64, i64* %3
%167 = lshr i64 %166, 53
store i64 %167, i64* %3
br label %200
168: ; preds = %2
%169 = load i64, i64* %3
%170 = lshr i64 %169, 54
store i64 %170, i64* %3
br label %200
171: ; preds = %2
%172 = load i64, i64* %3
%173 = lshr i64 %172, 55
store i64 %173, i64* %3
br label %200
174: ; preds = %2
%175 = load i64, i64* %3
%176 = lshr i64 %175, 56
store i64 %176, i64* %3
br label %200
177: ; preds = %2
%178 = load i64, i64* %3
%179 = lshr i64 %178, 57
store i64 %179, i64* %3
br label %200
180: ; preds = %2
%181 = load i64, i64* %3
%182 = lshr i64 %181, 58
store i64 %182, i64* %3
br label %200
183: ; preds = %2
%184 = load i64, i64* %3
%185 = lshr i64 %184, 59
store i64 %185, i64* %3
br label %200
186: ; preds = %2
%187 = load i64, i64* %3
%188 = lshr i64 %187, 60
store i64 %188, i64* %3
br label %200
189: ; preds = %2
%190 = load i64, i64* %3
%191 = lshr i64 %190, 61
store i64 %191, i64* %3
br label %200
192: ; preds = %2
%193 = load i64, i64* %3
%194 = lshr i64 %193, 62
store i64 %194, i64* %3
br label %200
195: ; preds = %2
%196 = load i64, i64* %3
%197 = lshr i64 %196, 63
store i64 %197, i64* %3
br label %200
198: ; preds = %2
%199 = call i32 (...) @abort()
unreachable
200: ; preds = %195, %192, %189, %186, %183, %180, %177, %174, %171, %168, %165, %162, %159, %156, %153, %150, %147, %144, %141, %138, %135, %132, %129, %126, %123, %120, %117, %114, %111, %108, %105, %102, %99, %96, %93, %90, %87, %84, %81, %78, %75, %72, %69, %66, %63, %60, %57, %54, %51, %48, %45, %42, %39, %36, %33, %30, %27, %24, %21, %18, %15, %12, %9, %6
%201 = load i64, i64* %3
ret i64 %201
}

LLVM IR (-O2):
define i64 @constant_shift(i64 %0, i32 %1) {
switch i32 %1, label %129 [
i32 0, label %131
i32 1, label %3
i32 2, label %5
i32 3, label %7
i32 4, label %9
i32 5, label %11
i32 6, label %13
i32 7, label %15
i32 8, label %17
i32 9, label %19
i32 10, label %21
i32 11, label %23
i32 12, label %25
i32 13, label %27
i32 14, label %29
i32 15, label %31
i32 16, label %33
i32 17, label %35
i32 18, label %37
i32 19, label %39
i32 20, label %41
i32 21, label %43
i32 22, label %45
i32 23, label %47
i32 24, label %49
i32 25, label %51
i32 26, label %53
i32 27, label %55
i32 28, label %57
i32 29, label %59
i32 30, label %61
i32 31, label %63
i32 32, label %65
i32 33, label %67
i32 34, label %69
i32 35, label %71
i32 36, label %73
i32 37, label %75
i32 38, label %77
i32 39, label %79
i32 40, label %81
i32 41, label %83
i32 42, label %85
i32 43, label %87
i32 44, label %89
i32 45, label %91
i32 46, label %93
i32 47, label %95
i32 48, label %97
i32 49, label %99
i32 50, label %101
i32 51, label %103
i32 52, label %105
i32 53, label %107
i32 54, label %109
i32 55, label %111
i32 56, label %113
i32 57, label %115
i32 58, label %117
i32 59, label %119
i32 60, label %121
i32 61, label %123
i32 62, label %125
i32 63, label %127
]
3: ; preds = %2
%4 = lshr i64 %0, 1
br label %131
5: ; preds = %2
%6 = lshr i64 %0, 2
br label %131
7: ; preds = %2
%8 = lshr i64 %0, 3
br label %131
9: ; preds = %2
%10 = lshr i64 %0, 4
br label %131
11: ; preds = %2
%12 = lshr i64 %0, 5
br label %131
13: ; preds = %2
%14 = lshr i64 %0, 6
br label %131
15: ; preds = %2
%16 = lshr i64 %0, 7
br label %131
17: ; preds = %2
%18 = lshr i64 %0, 8
br label %131
19: ; preds = %2
%20 = lshr i64 %0, 9
br label %131
21: ; preds = %2
%22 = lshr i64 %0, 10
br label %131
23: ; preds = %2
%24 = lshr i64 %0, 11
br label %131
25: ; preds = %2
%26 = lshr i64 %0, 12
br label %131
27: ; preds = %2
%28 = lshr i64 %0, 13
br label %131
29: ; preds = %2
%30 = lshr i64 %0, 14
br label %131
31: ; preds = %2
%32 = lshr i64 %0, 15
br label %131
33: ; preds = %2
%34 = lshr i64 %0, 16
br label %131
35: ; preds = %2
%36 = lshr i64 %0, 17
br label %131
37: ; preds = %2
%38 = lshr i64 %0, 18
br label %131
39: ; preds = %2
%40 = lshr i64 %0, 19
br label %131
41: ; preds = %2
%42 = lshr i64 %0, 20
br label %131
43: ; preds = %2
%44 = lshr i64 %0, 21
br label %131
45: ; preds = %2
%46 = lshr i64 %0, 22
br label %131
47: ; preds = %2
%48 = lshr i64 %0, 23
br label %131
49: ; preds = %2
%50 = lshr i64 %0, 24
br label %131
51: ; preds = %2
%52 = lshr i64 %0, 25
br label %131
53: ; preds = %2
%54 = lshr i64 %0, 26
br label %131
55: ; preds = %2
%56 = lshr i64 %0, 27
br label %131
57: ; preds = %2
%58 = lshr i64 %0, 28
br label %131
59: ; preds = %2
%60 = lshr i64 %0, 29
br label %131
61: ; preds = %2
%62 = lshr i64 %0, 30
br label %131
63: ; preds = %2
%64 = lshr i64 %0, 31
br label %131
65: ; preds = %2
%66 = lshr i64 %0, 32
br label %131
67: ; preds = %2
%68 = lshr i64 %0, 33
br label %131
69: ; preds = %2
%70 = lshr i64 %0, 34
br label %131
71: ; preds = %2
%72 = lshr i64 %0, 35
br label %131
73: ; preds = %2
%74 = lshr i64 %0, 36
br label %131
75: ; preds = %2
%76 = lshr i64 %0, 37
br label %131
77: ; preds = %2
%78 = lshr i64 %0, 38
br label %131
79: ; preds = %2
%80 = lshr i64 %0, 39
br label %131
81: ; preds = %2
%82 = lshr i64 %0, 40
br label %131
83: ; preds = %2
%84 = lshr i64 %0, 41
br label %131
85: ; preds = %2
%86 = lshr i64 %0, 42
br label %131
87: ; preds = %2
%88 = lshr i64 %0, 43
br label %131
89: ; preds = %2
%90 = lshr i64 %0, 44
br label %131
91: ; preds = %2
%92 = lshr i64 %0, 45
br label %131
93: ; preds = %2
%94 = lshr i64 %0, 46
br label %131
95: ; preds = %2
%96 = lshr i64 %0, 47
br label %131
97: ; preds = %2
%98 = lshr i64 %0, 48
br label %131
99: ; preds = %2
%100 = lshr i64 %0, 49
br label %131
101: ; preds = %2
%102 = lshr i64 %0, 50
br label %131
103: ; preds = %2
%104 = lshr i64 %0, 51
br label %131
105: ; preds = %2
%106 = lshr i64 %0, 52
br label %131
107: ; preds = %2
%108 = lshr i64 %0, 53
br label %131
109: ; preds = %2
%110 = lshr i64 %0, 54
br label %131
111: ; preds = %2
%112 = lshr i64 %0, 55
br label %131
113: ; preds = %2
%114 = lshr i64 %0, 56
br label %131
115: ; preds = %2
%116 = lshr i64 %0, 57
br label %131
117: ; preds = %2
%118 = lshr i64 %0, 58
br label %131
119: ; preds = %2
%120 = lshr i64 %0, 59
br label %131
121: ; preds = %2
%122 = lshr i64 %0, 60
br label %131
123: ; preds = %2
%124 = lshr i64 %0, 61
br label %131
125: ; preds = %2
%126 = lshr i64 %0, 62
br label %131
127: ; preds = %2
%128 = lshr i64 %0, 63
br label %131
129: ; preds = %2
%130 = tail call i32 (...) @abort()
unreachable
131: ; preds = %2, %127, %125, %123, %121, %119, %117, %115, %113, %111, %109, %107, %105, %103, %101, %99, %97, %95, %93, %91, %89, %87, %85, %83, %81, %79, %77, %75, %73, %71, %69, %67, %65, %63, %61, %59, %57, %55, %53, %51, %49, %47, %45, %43, %41, %39, %37, %35, %33, %31, %29, %27, %25, %23, %21, %19, %17, %15, %13, %11, %9, %7, %5, %3
%132 = phi i64 [ %128, %127 ], [ %126, %125 ], [ %124, %123 ], [ %122, %121 ], [ %120, %119 ], [ %118, %117 ], [ %116, %115 ], [ %114, %113 ], [ %112, %111 ], [ %110, %109 ], [ %108, %107 ], [ %106, %105 ], [ %104, %103 ], [ %102, %101 ], [ %100, %99 ], [ %98, %97 ], [ %96, %95 ], [ %94, %93 ], [ %92, %91 ], [ %90, %89 ], [ %88, %87 ], [ %86, %85 ], [ %84, %83 ], [ %82, %81 ], [ %80, %79 ], [ %78, %77 ], [ %76, %75 ], [ %74, %73 ], [ %72, %71 ], [ %70, %69 ], [ %68, %67 ], [ %66, %65 ], [ %64, %63 ], [ %62, %61 ], [ %60, %59 ], [ %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 ], [ %30, %29 ], [ %28, %27 ], [ %26, %25 ], [ %24, %23 ], [ %22, %21 ], [ %20, %19 ], [ %18, %17 ], [ %16, %15 ], [ %14, %13 ], [ %12, %11 ], [ %10, %9 ], [ %8, %7 ], [ %6, %5 ], [ %4, %3 ], [ %0, %2 ]
ret i64 %132
}