Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Undubb'd tanh analysis fails #52

Closed
wsmoses opened this issue Feb 20, 2021 · 0 comments
Closed

Undubb'd tanh analysis fails #52

wsmoses opened this issue Feb 20, 2021 · 0 comments
Assignees

Comments

@wsmoses
Copy link
Member

wsmoses commented Feb 20, 2021

define internal fastcc double @preprocess_julia_tanh_1253(double) unnamed_addr !dbg !109 {
top:
  %1 = call %jl_value_t*** @julia.ptls_states()
  %2 = fcmp ord double %0, 0.000000e+00, !dbg !110
  br i1 %2, label %L4, label %L3, !dbg !112

L3:                                               ; preds = %L22, %top
  ret double %0, !dbg !113

L4:                                               ; preds = %top
  %3 = fsub double %0, %0, !dbg !114
  %4 = fcmp oeq double %3, 0.000000e+00, !dbg !118
  br i1 %4, label %L19, label %L17, !dbg !117

L17:                                              ; preds = %L4
  %5 = bitcast double %0 to i64, !dbg !120
  %6 = and i64 %5, -9223372036854775808, !dbg !120
  %7 = or i64 %6, 4607182418800017408, !dbg !120
  %8 = bitcast i64 %7 to double, !dbg !121
  ret double %8, !dbg !121

L19:                                              ; preds = %L4
  %9 = call double @llvm.fabs.f64(double %0), !dbg !122
  %10 = fcmp uge double %9, 2.200000e+01, !dbg !124
  br i1 %10, label %L42, label %L22, !dbg !125

L22:                                              ; preds = %L19
  %11 = fcmp uge double %9, 0x3E30000000000000, !dbg !126
  br i1 %11, label %L26, label %L3, !dbg !127

L26:                                              ; preds = %L22
  %12 = fcmp ult double %9, 1.000000e+00, !dbg !128
  br i1 %12, label %L34, label %L28, !dbg !130

L28:                                              ; preds = %L26
  %13 = fmul double %9, 2.000000e+00, !dbg !131
  %14 = call cc37 nonnull %jl_value_t addrspace(10)* bitcast (%jl_value_t addrspace(10)* (%jl_value_t addrspace(10)*, %jl_value_t addrspace(10)**, i32)* @jl_f_tuple to %jl_value_t addrspace(10)* (%jl_value_t addrspace(10)*, %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)*)*)(%jl_value_t addrspace(10)* addrspacecast (%jl_value_t* null to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 139873808773664 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 139873788832384 to %jl_value_t*) to %jl_value_t addrspace(10)*)), !dbg !133
  %15 = call %jl_value_t addrspace(10)* @julia.typeof(%jl_value_t addrspace(10)* nonnull %14), !dbg !133
  %16 = call %jl_value_t addrspace(10)* @julia.typeof(%jl_value_t addrspace(10)* nonnull %15), !dbg !133
  %17 = icmp eq %jl_value_t addrspace(10)* %16, addrspacecast (%jl_value_t* inttoptr (i64 139873741882160 to %jl_value_t*) to %jl_value_t addrspace(10)*), !dbg !133
  br i1 %17, label %pass, label %fail, !dbg !133

L34:                                              ; preds = %L26
  %18 = fmul double %9, -2.000000e+00, !dbg !134
  %19 = call cc37 nonnull %jl_value_t addrspace(10)* bitcast (%jl_value_t addrspace(10)* (%jl_value_t addrspace(10)*, %jl_value_t addrspace(10)**, i32)* @jl_f_tuple to %jl_value_t addrspace(10)* (%jl_value_t addrspace(10)*, %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)*)*)(%jl_value_t addrspace(10)* addrspacecast (%jl_value_t* null to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 139873808773664 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 139873788832384 to %jl_value_t*) to %jl_value_t addrspace(10)*)), !dbg !136
  %20 = call %jl_value_t addrspace(10)* @julia.typeof(%jl_value_t addrspace(10)* nonnull %19), !dbg !136
  %21 = call %jl_value_t addrspace(10)* @julia.typeof(%jl_value_t addrspace(10)* nonnull %20), !dbg !136
  %22 = icmp eq %jl_value_t addrspace(10)* %21, addrspacecast (%jl_value_t* inttoptr (i64 139873741882160 to %jl_value_t*) to %jl_value_t addrspace(10)*), !dbg !136
  br i1 %22, label %pass7, label %fail6, !dbg !136

L42:                                              ; preds = %pass11, %pass4, %L19
  %value_phi5 = phi double [ %43, %pass4 ], [ %58, %pass11 ], [ 1.000000e+00, %L19 ]
  %23 = bitcast double %value_phi5 to i64, !dbg !137
  %24 = bitcast double %0 to i64, !dbg !137
  %25 = and i64 %24, -9223372036854775808, !dbg !137
  %26 = and i64 %23, 9223372036854775807, !dbg !137
  %27 = or i64 %26, %25, !dbg !137
  %28 = bitcast i64 %27 to double, !dbg !138
  ret double %28, !dbg !138

fail:                                             ; preds = %L28
  %29 = addrspacecast %jl_value_t addrspace(10)* %15 to %jl_value_t addrspace(12)*, !dbg !133
  call void @jl_type_error(i8* nonnull inttoptr (i64 41541232 to i8*), %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 139873741882160 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(12)* %29), !dbg !133
  unreachable, !dbg !133

pass:                                             ; preds = %L28
  %30 = addrspacecast %jl_value_t addrspace(10)* %15 to %jl_value_t addrspace(11)*, !dbg !133
  %31 = bitcast %jl_value_t addrspace(11)* %30 to %jl_value_t addrspace(10)* addrspace(11)*, !dbg !133
  %32 = load %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %31, align 8, !dbg !133, !tbaa !86, !invariant.load !4
  %33 = addrspacecast %jl_value_t addrspace(10)* %32 to %jl_value_t addrspace(12)*, !dbg !133
  %34 = icmp eq %jl_value_t addrspace(12)* %33, addrspacecast (%jl_value_t* inttoptr (i64 139873742360480 to %jl_value_t*) to %jl_value_t addrspace(12)*), !dbg !133
  br i1 %34, label %pass2, label %fail1, !dbg !133

fail1:                                            ; preds = %pass
  %35 = addrspacecast %jl_value_t addrspace(10)* %14 to %jl_value_t addrspace(12)*, !dbg !133
  call void @jl_type_error(i8* nonnull inttoptr (i64 41541232 to i8*), %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 139873742360560 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(12)* %35), !dbg !133
  unreachable, !dbg !133

pass2:                                            ; preds = %pass
  %36 = bitcast %jl_value_t addrspace(10)* %14 to i64 addrspace(10)*, !dbg !133
  %37 = load i64, i64 addrspace(10)* %36, align 8, !dbg !133, !tbaa !90
  %38 = icmp eq i64 %37, 0, !dbg !133
  br i1 %38, label %fail3, label %pass4, !dbg !133

fail3:                                            ; preds = %pass2
  call void @jl_throw(%jl_value_t addrspace(12)* addrspacecast (%jl_value_t* inttoptr (i64 139873749195808 to %jl_value_t*) to %jl_value_t addrspace(12)*)), !dbg !133
  unreachable, !dbg !133

pass4:                                            ; preds = %pass2
  %39 = inttoptr i64 %37 to double (double)*, !dbg !133
  %40 = call double %39(double %13), !dbg !133
  %41 = fadd double %40, 2.000000e+00, !dbg !139
  %42 = fdiv double 2.000000e+00, %41, !dbg !141
  %43 = fsub double 1.000000e+00, %42, !dbg !142
  br label %L42, !dbg !140

fail6:                                            ; preds = %L34
  %44 = addrspacecast %jl_value_t addrspace(10)* %20 to %jl_value_t addrspace(12)*, !dbg !136
  call void @jl_type_error(i8* nonnull inttoptr (i64 41541232 to i8*), %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 139873741882160 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(12)* %44), !dbg !136
  unreachable, !dbg !136

pass7:                                            ; preds = %L34
  %45 = addrspacecast %jl_value_t addrspace(10)* %20 to %jl_value_t addrspace(11)*, !dbg !136
  %46 = bitcast %jl_value_t addrspace(11)* %45 to %jl_value_t addrspace(10)* addrspace(11)*, !dbg !136
  %47 = load %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %46, align 8, !dbg !136, !tbaa !86, !invariant.load !4
  %48 = addrspacecast %jl_value_t addrspace(10)* %47 to %jl_value_t addrspace(12)*, !dbg !136
  %49 = icmp eq %jl_value_t addrspace(12)* %48, addrspacecast (%jl_value_t* inttoptr (i64 139873742360480 to %jl_value_t*) to %jl_value_t addrspace(12)*), !dbg !136
  br i1 %49, label %pass9, label %fail8, !dbg !136

fail8:                                            ; preds = %pass7
  %50 = addrspacecast %jl_value_t addrspace(10)* %19 to %jl_value_t addrspace(12)*, !dbg !136
  call void @jl_type_error(i8* nonnull inttoptr (i64 41541232 to i8*), %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 139873742360560 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(12)* %50), !dbg !136
  unreachable, !dbg !136

pass9:                                            ; preds = %pass7
  %51 = bitcast %jl_value_t addrspace(10)* %19 to i64 addrspace(10)*, !dbg !136
  %52 = load i64, i64 addrspace(10)* %51, align 8, !dbg !136, !tbaa !90
  %53 = icmp eq i64 %52, 0, !dbg !136
  br i1 %53, label %fail10, label %pass11, !dbg !136

fail10:                                           ; preds = %pass9
  call void @jl_throw(%jl_value_t addrspace(12)* addrspacecast (%jl_value_t* inttoptr (i64 139873749195808 to %jl_value_t*) to %jl_value_t addrspace(12)*)), !dbg !136
  unreachable, !dbg !136

pass11:                                           ; preds = %pass9
  %54 = inttoptr i64 %52 to double (double)*, !dbg !136
  %55 = call double %54(double %18), !dbg !136
  %56 = fsub double -0.000000e+00, %55, !dbg !143
  %57 = fadd double %55, 2.000000e+00, !dbg !145
  %58 = fdiv double %56, %57, !dbg !146
  br label %L42, !dbg !146
}
@code_llvm tanh(2.0)

;  @ special/hyperbolic.jl:138 within `tanh'
define double @julia_tanh_135(double) {
top:
;  @ special/hyperbolic.jl:151 within `tanh'
; ┌ @ float.jl:536 within `isnan'
; │┌ @ float.jl:456 within `!='
    %1 = fcmp ord double %0, 0.000000e+00
; └└
  br i1 %1, label %L4, label %L3

L3:                                               ; preds = %L22, %top
;  @ special/hyperbolic.jl:152 within `tanh'
  ret double %0

L4:                                               ; preds = %top
;  @ special/hyperbolic.jl:153 within `tanh'
; ┌ @ float.jl:564 within `isinf'
; │┌ @ float.jl:554 within `isfinite'
; ││┌ @ float.jl:403 within `-'
     %2 = fsub double %0, %0
; ││└
; ││┌ @ float.jl:488 within `==' @ float.jl:454
     %3 = fcmp oeq double %2, 0.000000e+00
; └└└
  br i1 %3, label %L19, label %L17

L17:                                              ; preds = %L4
;  @ special/hyperbolic.jl:154 within `tanh'
; ┌ @ floatfuncs.jl:5 within `copysign'
   %4 = bitcast double %0 to i64
   %5 = and i64 %4, -9223372036854775808
   %6 = or i64 %5, 4607182418800017408
; └
  %7 = bitcast i64 %6 to double
  ret double %7

L19:                                              ; preds = %L4
;  @ special/hyperbolic.jl:157 within `tanh'
; ┌ @ float.jl:528 within `abs'
   %8 = call double @llvm.fabs.f64(double %0)
; └
;  @ special/hyperbolic.jl:158 within `tanh'
; ┌ @ float.jl:458 within `<'
   %9 = fcmp uge double %8, 2.200000e+01
; └
  br i1 %9, label %L42, label %L22

L22:                                              ; preds = %L19
;  @ special/hyperbolic.jl:160 within `tanh'
; ┌ @ float.jl:458 within `<'
   %10 = fcmp uge double %8, 0x3E30000000000000
; └
  br i1 %10, label %L26, label %L3

L26:                                              ; preds = %L22
;  @ special/hyperbolic.jl:163 within `tanh'
; ┌ @ operators.jl:350 within `>='
; │┌ @ float.jl:460 within `<='
    %11 = fcmp ult double %8, 1.000000e+00
; └└
  br i1 %11, label %L34, label %L28

L28:                                              ; preds = %L26
;  @ special/hyperbolic.jl:165 within `tanh'
; ┌ @ float.jl:405 within `*'
   %12 = fmul double %8, 2.000000e+00
; └
; ┌ @ math.jl:366 within `expm1'
   %13 = call double inttoptr (i64 140691799529184 to double (double)*)(double %12)
; └
;  @ special/hyperbolic.jl:166 within `tanh'
; ┌ @ float.jl:401 within `+'
   %14 = fadd double %13, 2.000000e+00
; └
; ┌ @ float.jl:407 within `/'
   %15 = fdiv double 2.000000e+00, %14
; └
; ┌ @ float.jl:403 within `-'
   %16 = fsub double 1.000000e+00, %15
; └
  br label %L42

L34:                                              ; preds = %L26
;  @ special/hyperbolic.jl:169 within `tanh'
; ┌ @ float.jl:405 within `*'
   %17 = fmul double %8, -2.000000e+00
; └
; ┌ @ math.jl:366 within `expm1'
   %18 = call double inttoptr (i64 140691799529184 to double (double)*)(double %17)
; └
;  @ special/hyperbolic.jl:170 within `tanh'
; ┌ @ float.jl:393 within `-'
   %19 = fsub double -0.000000e+00, %18
; └
; ┌ @ float.jl:401 within `+'
   %20 = fadd double %18, 2.000000e+00
; └
; ┌ @ float.jl:407 within `/'
   %21 = fdiv double %19, %20
   br label %L42

L42:                                              ; preds = %L34, %L28, %L19
   %value_phi1 = phi double [ %16, %L28 ], [ %21, %L34 ], [ 1.000000e+00, %L19 ]
; └
;  @ special/hyperbolic.jl:176 within `tanh'
; ┌ @ floatfuncs.jl:5 within `copysign'
   %22 = bitcast double %value_phi1 to i64
   %23 = bitcast double %0 to i64
   %24 = and i64 %23, -9223372036854775808
   %25 = and i64 %22, 9223372036854775807
   %26 = or i64 %25, %24
; └
  %27 = bitcast i64 %26 to double
  ret double %27
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants