source_filename = "test"
target datalayout = "e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"

@edi = internal unnamed_addr global i32 0, align 8

define i32 @function_0() local_unnamed_addr {
dec_label_pc_0:
  %eax.global-to-local = alloca i32, align 4
  %esi.global-to-local = alloca i32, align 4
  %fpu_stat_TOP.global-to-local = alloca i3, align 1
  %st6.global-to-local = alloca x86_fp80, align 4
  %xmm0.global-to-local = alloca i128, align 8
  %xmm3.global-to-local = alloca i128, align 8
  %tmp256 = call double @__decompiler_undefined_function_2()
  %stack_var_-24 = alloca double, align 8
  %v0_0 = load i32, i32* %esi.global-to-local, align 4
  %v1_0 = add i32 %v0_0, -120
  %v2_0 = inttoptr i32 %v1_0 to i128*
  %v3_0 = load i128, i128* %v2_0, align 4
  %v4_0 = call i128 @__asm_movupd(i128 %v3_0)
  store i128 %v4_0, i128* %xmm0.global-to-local, align 8
  %v1_5 = add i32 %v0_0, -104
  %v2_5 = inttoptr i32 %v1_5 to i64*
  %v3_5 = load i64, i64* %v2_5, align 4
  %v4_5 = call i128 @__asm_movsd(i64 %v3_5)
  %v1_a = load i32, i32* @edi, align 8
  %v2_a = add i32 %v1_a, -48
  %v3_a = inttoptr i32 %v2_a to i128*
  %v4_a = load i128, i128* %v3_a, align 4
  %v5_a = call i128 @__asm_mulpd(i128 %v4_0, i128 %v4_a)
  store i128 %v5_a, i128* %xmm0.global-to-local, align 8
  %v1_f = load i32, i32* @edi, align 8
  %v2_f = add i32 %v1_f, -48
  %v3_f = inttoptr i32 %v2_f to i64*
  %v4_f = load i64, i64* %v3_f, align 4
  %v5_f = call i128 @__asm_mulsd(i128 %v4_5, i64 %v4_f)
  %v1_14 = load i32, i32* @edi, align 8
  %v2_14 = add i32 %v1_14, -80
  %v3_14 = inttoptr i32 %v2_14 to i128*
  %v4_14 = load i128, i128* %v3_14, align 4
  %v5_14 = call i128 @__asm_addpd(i128 %v5_a, i128 %v4_14)
  store i128 %v5_14, i128* %xmm0.global-to-local, align 8
  %v1_19 = load i32, i32* @edi, align 8
  %v2_19 = add i32 %v1_19, -64
  %v3_19 = inttoptr i32 %v2_19 to i64*
  %v4_19 = load i64, i64* %v3_19, align 4
  %v5_19 = call i128 @__asm_addsd(i128 %v5_f, i64 %v4_19)
  %v0_1e = load i32, i32* @edi, align 8
  %v1_1e = add i32 %v0_1e, -96
  %v2_1e = inttoptr i32 %v1_1e to i32*
  %v3_1e = load i32, i32* %v2_1e, align 4
  %v10_1e = icmp eq i32 %v3_1e, 0
  br i1 %v10_1e, label %dec_label_pc_3d, label %dec_label_pc_24

dec_label_pc_24:                                  ; preds = %dec_label_pc_0
  %v0_24 = load i32, i32* %esi.global-to-local, align 4
  %v1_24 = add i32 %v0_24, 112
  %v2_24 = inttoptr i32 %v1_24 to i64*
  %v3_24 = load i64, i64* %v2_24, align 4
  %v4_24 = call i128 @__asm_movsd(i64 %v3_24)
  %v1_29 = load i32, i32* @edi, align 8
  %v2_29 = add i32 %v1_29, -48
  %v3_29 = inttoptr i32 %v2_29 to i64*
  %v4_29 = load i64, i64* %v3_29, align 4
  %v5_29 = call i128 @__asm_mulsd(i128 %v4_24, i64 %v4_29)
  %v0_2e = load i32, i32* %esi.global-to-local, align 4
  %v1_2e = add i32 %v0_2e, -120
  %v2_2e = inttoptr i32 %v1_2e to i128*
  %v3_2e = load i128, i128* %v2_2e, align 4
  %v4_2e = load i128, i128* %xmm0.global-to-local, align 8
  call void @__asm_movupd.1(i128 %v3_2e, i128 %v4_2e)
  %v1_33 = call i32 @__asm_movsd.2(i128 %v5_19)
  %v2_33 = load i32, i32* %esi.global-to-local, align 4
  %v3_33 = add i32 %v2_33, -104
  %v4_33 = sext i32 %v1_33 to i64
  %v5_33 = inttoptr i32 %v3_33 to i64*
  store i64 %v4_33, i64* %v5_33, align 4
  %v1_38 = call i32 @__asm_movsd.2(i128 %v5_29)
  %v3_38 = add i32 %v2_33, 112
  %v4_38 = sext i32 %v1_38 to i64
  %v5_38 = inttoptr i32 %v3_38 to i64*
  store i64 %v4_38, i64* %v5_38, align 4
  %v0_3d.pre = load i32, i32* @edi, align 8
  br label %dec_label_pc_3d

dec_label_pc_3d:                                  ; preds = %dec_label_pc_24, %dec_label_pc_0
  %v0_3d = phi i32 [ %v0_3d.pre, %dec_label_pc_24 ], [ %v0_1e, %dec_label_pc_0 ]
  %v1_3d = add i32 %v0_3d, -92
  %v2_3d = inttoptr i32 %v1_3d to i32*
  %v3_3d = load i32, i32* %v2_3d, align 4
  %v10_3d = icmp eq i32 %v3_3d, 0
  br i1 %v10_3d, label %dec_label_pc_80, label %dec_label_pc_43

dec_label_pc_43:                                  ; preds = %dec_label_pc_3d
  %v2_46 = load double, double* %stack_var_-24, align 8
  %v3_46 = fptrunc double %v2_46 to float
  %v4_46 = bitcast float %v3_46 to i32
  %v5_46 = sext i32 %v4_46 to i128
  %v6_46 = load i128, i128* %xmm0.global-to-local, align 8
  call void @__asm_movupd.1(i128 %v5_46, i128 %v6_46)
  %v1_4b = call i32 @__asm_movsd.2(i128 %v5_19)
  %v4_4b = sext i32 %v1_4b to i64
  %v6_4b = bitcast i64 %v4_4b to double
  %v0_51 = load i3, i3* %fpu_stat_TOP.global-to-local, align 1
  %v1_51 = load i32, i32* @edi, align 8
  %v2_51 = add i32 %v1_51, -92
  %v3_51 = inttoptr i32 %v2_51 to float*
  %v4_51 = load float, float* %v3_51, align 4
  %v5_51 = fpext float %v4_51 to x86_fp80
  %v6_51 = add i3 %v0_51, -1
  store i3 %v6_51, i3* %fpu_stat_TOP.global-to-local, align 1
  %v8_54 = fpext double %v6_4b to x86_fp80
  %v9_54 = fmul x86_fp80 %v8_54, %v5_51
  %v2_58 = call x86_fp80 @llvm.fabs.f80(x86_fp80 %v9_54)
  %v3_58 = fcmp olt x86_fp80 %v2_58, 0xK403E8000000000000000
  br i1 %v3_58, label %bb, label %dec_label_pc_43._crit_edge

dec_label_pc_43._crit_edge:                       ; preds = %dec_label_pc_43
  %v3_67.pre = load x86_fp80, x86_fp80* %st6.global-to-local, align 4
  br label %bb261

bb:                                               ; preds = %dec_label_pc_43
  %v4_58 = call x86_fp80 @llvm.sin.f80(x86_fp80 %v9_54)
  %v7_58 = call x86_fp80 @llvm.cos.f80(x86_fp80 %v9_54)
  %v8_58 = add i3 %v0_51, -2
  store i3 %v8_58, i3* %fpu_stat_TOP.global-to-local, align 1
  store x86_fp80 %v7_58, x86_fp80* %st6.global-to-local, align 4
  br label %bb261

bb261:                                            ; preds = %dec_label_pc_43._crit_edge, %bb
  %v3_6e = phi x86_fp80 [ %v3_67.pre, %dec_label_pc_43._crit_edge ], [ %v7_58, %bb ]
  %v3_70 = phi x86_fp80 [ %v9_54, %dec_label_pc_43._crit_edge ], [ %v4_58, %bb ]
  %v0_5a = phi i3 [ %v6_51, %dec_label_pc_43._crit_edge ], [ %v8_58, %bb ]
  %v5_5a = fpext double %tmp256 to x86_fp80
  %v3_5e = load double, double* %stack_var_-24, align 8
  %v8_5e = fpext double %v3_5e to x86_fp80
  %v4_63 = fmul x86_fp80 %v3_70, %v8_5e
  %v4_67 = fmul x86_fp80 %v3_6e, %v5_5a
  %v4_69 = fadd x86_fp80 %v4_67, %v4_63
  %tmp262 = fptrunc x86_fp80 %v4_69 to double
  store double %tmp262, double* %stack_var_-24, align 8
  %v4_6e = fmul x86_fp80 %v3_6e, %v8_5e
  store x86_fp80 %v4_6e, x86_fp80* %st6.global-to-local, align 4
  %v6_74 = add i3 %v0_5a, 2
  store i3 %v6_74, i3* %fpu_stat_TOP.global-to-local, align 1
  %tmp263 = fptrunc x86_fp80 %v4_69 to float
  %v4_78 = bitcast float %tmp263 to i32
  %v5_78 = sext i32 %v4_78 to i128
  %v6_78 = call i128 @__asm_movupd(i128 %v5_78)
  store i128 %v6_78, i128* %xmm0.global-to-local, align 8
  br label %dec_label_pc_80

dec_label_pc_80:                                  ; preds = %bb261, %dec_label_pc_3d
  %v0_80 = load i128, i128* %xmm3.global-to-local, align 8
  %v2_80 = call i128 @__asm_movsd.3(i128 %v0_80, i128 %v5_19)
  store i128 %v2_80, i128* %xmm3.global-to-local, align 8
  %v0_84 = load i128, i128* %xmm0.global-to-local, align 8
  %v3_84 = load i128, i128* bitcast (i32* @edi to i128*), align 8
  %v4_84 = call i128 @__asm_andpd(i128 %v0_84, i128 %v3_84)
  store i128 %v4_84, i128* %xmm0.global-to-local, align 8
  %v3_88 = load i128, i128* bitcast (i32* @edi to i128*), align 8
  %v4_88 = call i128 @__asm_andpd(i128 %v5_19, i128 %v3_88)
  %v1_8c = load i32, i32* @edi, align 8
  %v2_8c = add i32 %v1_8c, -88
  %v3_8c = inttoptr i32 %v2_8c to i64*
  %v4_8c = load i64, i64* %v3_8c, align 4
  %v5_8c = call i128 @__asm_mulsd(i128 %v2_80, i64 %v4_8c)
  store i128 %v5_8c, i128* %xmm3.global-to-local, align 8
  %v1_91 = load i32, i32* @edi, align 8
  %v2_91 = add i32 %v1_91, -32
  %v3_91 = inttoptr i32 %v2_91 to i128*
  %v4_91 = load i128, i128* %v3_91, align 4
  %v5_91 = call i128 @__asm_subpd(i128 %v4_84, i128 %v4_91)
  store i128 %v5_91, i128* %xmm0.global-to-local, align 8
  %v1_96 = load i32, i32* @edi, align 8
  %v2_96 = add i32 %v1_96, -16
  %v3_96 = inttoptr i32 %v2_96 to i64*
  %v4_96 = load i64, i64* %v3_96, align 4
  %v5_96 = call i128 @__asm_subsd(i128 %v4_88, i64 %v4_96)
  %v2_9b = call i128 @__asm_subsd.4(i128 %v5_91, i128 %v5_8c)
  store i128 %v2_9b, i128* %xmm0.global-to-local, align 8
  %v2_9f = call i128 @__asm_maxsd(i128 %v5_96, i128 %v2_9b)
  %v2_a3 = call i128 @__asm_unpckhpd(i128 %v2_9b, i128 %v2_9b)
  store i128 %v2_a3, i128* %xmm0.global-to-local, align 8
  %v2_a7 = call i128 @__asm_maxsd(i128 %v2_9f, i128 %v2_a3)
  %v0_ab = load i32, i32* @edi, align 8
  %v1_ab = add i32 %v0_ab, -96
  %v2_ab = inttoptr i32 %v1_ab to i32*
  %v3_ab = load i32, i32* %v2_ab, align 4
  %v10_ab = icmp eq i32 %v3_ab, 0
  %v1_af = icmp eq i1 %v10_ab, false
  br i1 %v1_af, label %dec_label_pc_b6, label %dec_label_pc_b1

dec_label_pc_b1:                                  ; preds = %dec_label_pc_80
  %v2_b1 = add i32 %v0_ab, -48
  %v3_b1 = inttoptr i32 %v2_b1 to i64*
  %v4_b1 = load i64, i64* %v3_b1, align 4
  %v5_b1 = call i128 @__asm_divsd(i128 %v2_a7, i64 %v4_b1)
  %v0_b6.pre = load i32, i32* @edi, align 8
  br label %dec_label_pc_b6

dec_label_pc_b6:                                  ; preds = %dec_label_pc_b1, %dec_label_pc_80
  %v0_b9 = phi i128 [ %v5_b1, %dec_label_pc_b1 ], [ %v2_a7, %dec_label_pc_80 ]
  %v0_b6 = phi i32 [ %v0_b6.pre, %dec_label_pc_b1 ], [ %v0_ab, %dec_label_pc_80 ]
  %v1_b6 = add i32 %v0_b6, -100
  %v2_b6 = inttoptr i32 %v1_b6 to i32*
  %v3_b6 = load i32, i32* %v2_b6, align 4
  store i32 %v3_b6, i32* %eax.global-to-local, align 4
  %v1_b9 = call i32 @__asm_movsd.2(i128 %v0_b9)
  %v2_b9 = load i32, i32* %esi.global-to-local, align 4
  %v3_b9 = add i32 %v2_b9, -32
  %v4_b9 = sext i32 %v1_b9 to i64
  %v5_b9 = inttoptr i32 %v3_b9 to i64*
  store i64 %v4_b9, i64* %v5_b9, align 4
  %v0_be = load i32, i32* %eax.global-to-local, align 4
  %v1_be = urem i32 %v0_be, 4
  store i32 %v1_be, i32* %eax.global-to-local, align 4
  %v3_c1 = mul i32 %v1_be, 8
  %v4_c1 = or i32 %v3_c1, -128
  %v5_c1 = add i32 %v4_c1, %v2_b9
  %v6_c1 = inttoptr i32 %v5_c1 to double*
  %v7_c1 = load double, double* %v6_c1, align 4
  %v8_c1 = fpext double %v7_c1 to x86_fp80
  %v2_c5 = load i32, i32* @edi, align 8
  %v3_c5 = add i32 %v2_c5, -108
  %v4_c5 = inttoptr i32 %v3_c5 to float*
  %v5_c5 = load float, float* %v4_c5, align 4
  %v6_c5 = fpext float %v5_c5 to x86_fp80
  %v7_c5 = fmul x86_fp80 %v8_c1, %v6_c5
  %v3_c8 = add i32 %v2_c5, -104
  %v4_c8 = inttoptr i32 %v3_c8 to float*
  %v5_c8 = load float, float* %v4_c8, align 4
  %v6_c8 = fpext float %v5_c8 to x86_fp80
  %v7_c8 = fadd x86_fp80 %v7_c5, %v6_c8
  %v3_cb = add i32 %v2_b9, 128
  %v4_cb = fptrunc x86_fp80 %v7_c8 to double
  %v5_cb = inttoptr i32 %v3_cb to double*
  store double %v4_cb, double* %v5_cb, align 4
  ret i32 %v1_be
}

declare i128 @__asm_movupd(i128) local_unnamed_addr

declare i128 @__asm_movsd(i64) local_unnamed_addr

declare i128 @__asm_mulpd(i128, i128) local_unnamed_addr

declare i128 @__asm_mulsd(i128, i64) local_unnamed_addr

declare i128 @__asm_addpd(i128, i128) local_unnamed_addr

declare i128 @__asm_addsd(i128, i64) local_unnamed_addr

declare void @__asm_movupd.1(i128, i128) local_unnamed_addr

declare i32 @__asm_movsd.2(i128) local_unnamed_addr

; Function Attrs: nounwind readnone speculatable
declare x86_fp80 @llvm.fabs.f80(x86_fp80) #0

; Function Attrs: nounwind readnone speculatable
declare x86_fp80 @llvm.sin.f80(x86_fp80) #0

; Function Attrs: nounwind readnone speculatable
declare x86_fp80 @llvm.cos.f80(x86_fp80) #0

declare i128 @__asm_movsd.3(i128, i128) local_unnamed_addr

declare i128 @__asm_andpd(i128, i128) local_unnamed_addr

declare i128 @__asm_subpd(i128, i128) local_unnamed_addr

declare i128 @__asm_subsd(i128, i64) local_unnamed_addr

declare i128 @__asm_subsd.4(i128, i128) local_unnamed_addr

declare i128 @__asm_maxsd(i128, i128) local_unnamed_addr

declare i128 @__asm_unpckhpd(i128, i128) local_unnamed_addr

declare i128 @__asm_divsd(i128, i64) local_unnamed_addr

declare double @__decompiler_undefined_function_2() local_unnamed_addr

attributes #0 = { nounwind readnone speculatable }
