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

atan double argument form errors #459

Closed
jgreener64 opened this issue Sep 28, 2022 · 1 comment · Fixed by #461
Closed

atan double argument form errors #459

jgreener64 opened this issue Sep 28, 2022 · 1 comment · Fixed by #461

Comments

@jgreener64
Copy link
Contributor

I am on Julia 1.8.1 and Enzyme main (5c03dab). The single argument form of atan works:

using Enzyme
f1(x) = atan(x)
autodiff(f1, Active(0.3))
(0.9174311926605503,)

but the double argument form errors:

f2(x, y) = atan(x, y)
autodiff(f2, Active(0.3), Active(0.5))

Error truncated for the GitHub issue limit.

ERROR: Enzyme compilation failed.
Current scope: 
; Function Attrs: mustprogress nosync readnone willreturn
define internal fastcc double @preprocess_julia_atan_3496(double %0, double %1) unnamed_addr #6 !dbg !241 {
top:
  %2 = call {}*** @julia.get_pgcstack() #8
  %3 = fcmp ord double %1, 0.000000e+00, !dbg !242
  %4 = fcmp ord double %0, 0.000000e+00
  %or.cond = select i1 %3, i1 %4, i1 false, !dbg !244
  br i1 %or.cond, label %L7, label %common.ret, !dbg !244

L7:                                               ; preds = %top
  %5 = fcmp une double %1, 1.000000e+00, !dbg !245
  br i1 %5, label %L11, label %L9, !dbg !246

common.ret.fold.split:                            ; preds = %L24
  br label %common.ret, !dbg !247

common.ret.fold.split16:                          ; preds = %L24
  br label %common.ret, !dbg !247

common.ret.fold.split17:                          ; preds = %L63
  br label %common.ret, !dbg !247

common.ret.fold.split18:                          ; preds = %L63
  br label %common.ret, !dbg !247

common.ret.fold.split19:                          ; preds = %L63
  br label %common.ret, !dbg !247

common.ret.fold.split20:                          ; preds = %L76
  br label %common.ret, !dbg !247

common.ret.fold.split21:                          ; preds = %L76
  br label %common.ret, !dbg !247

common.ret.fold.split22:                          ; preds = %L76
  br label %common.ret, !dbg !247

common.ret:                                       ; preds = %L151, %L148, %L144, %L137, %L97, %L76, %L63, %L40, %L24, %L24, %L9, %common.ret.fold.split22, %common.ret.fold.split21, %common.ret.fold.split20, %common.ret.fold.split19, %common.ret.fold.split18, %common.ret.fold.split17, %common.ret.fold.split16, %common.ret.fold.split, %top
  %common.ret.op = phi double [ %6, %L9 ], [ %16, %L40 ], [ %23, %L97 ], [ %37, %L144 ], [ %39, %L148 ], [ %41, %L151 ], [ %0, %L24 ], [ 0x3FE921FB54442D18, %L63 ], [ 0.000000e+00, %L76 ], [ %value_phi, %L137 ], [ 0x7FF8000000000000, %top ], [ %0, %L24 ], [ 0x400921FB54442D18, %common.ret.fold.split ], [ 0xC00921FB54442D18, %common.ret.fold.split16 ], [ 0xBFE921FB54442D18, %common.ret.fold.split17 ], [ 0x4002D97C7F3321D2, %common.ret.fold.split18 ], [ 0xC002D97C7F3321D2, %common.ret.fold.split19 ], [ -0.000000e+00, %common.ret.fold.split20 ], [ 0x400921FB54442D18, %common.ret.fold.split21 ], [ 0xC00921FB54442D18, %common.ret.fold.split22 ]
  ret double %common.ret.op, !dbg !247

L9:                                               ; preds = %L7
  %6 = call fastcc double @julia_atan_3500(double %0) #5, !dbg !248
  br label %common.ret

L11:                                              ; preds = %L7
  %7 = bitcast double %1 to i64, !dbg !249
  %8 = lshr i64 %7, 62, !dbg !251
  %9 = and i64 %8, 2, !dbg !251
  %10 = bitcast double %0 to i64, !dbg !249
  %.lobit = lshr i64 %10, 63, !dbg !253
  %11 = or i64 %9, %.lobit, !dbg !258
  %12 = fcmp une double %0, 0.000000e+00, !dbg !259
  br i1 %12, label %L38, label %L24, !dbg !261

L24:                                              ; preds = %L11
  switch i64 %11, label %L4524 [
    i64 0, label %common.ret
    i64 1, label %common.ret
    i64 2, label %common.ret.fold.split
    i64 3, label %common.ret.fold.split16
  ], !dbg !262

L38:                                              ; preds = %L11
  %13 = fcmp une double %1, 0.000000e+00, !dbg !263
  br i1 %13, label %L45, label %L40, !dbg !265

L40:                                              ; preds = %L38
  %14 = and i64 %10, -9223372036854775808, !dbg !266
  %15 = or i64 %14, 4609753056924675352, !dbg !266
  %16 = bitcast i64 %15 to double, !dbg !266
  br label %common.ret

L4524:                                            ; preds = %L24
  unreachable

L45:                                              ; preds = %L38
  %17 = fsub double %1, %1, !dbg !268
  %18 = fcmp oeq double %17, 0.000000e+00, !dbg !272
  br i1 %18, label %L88, label %L54, !dbg !271

L54:                                              ; preds = %L45
  %19 = fsub double %0, %0, !dbg !274
  %20 = fcmp oeq double %19, 0.000000e+00, !dbg !278
  br i1 %20, label %L76, label %L63, !dbg !277

L63:                                              ; preds = %L54
  switch i64 %11, label %L8825 [
    i64 0, label %common.ret
    i64 1, label %common.ret.fold.split17
    i64 2, label %common.ret.fold.split18
    i64 3, label %common.ret.fold.split19
  ], !dbg !280

L76:                                              ; preds = %L54
  switch i64 %11, label %L8826 [
    i64 0, label %common.ret
    i64 1, label %common.ret.fold.split20
    i64 2, label %common.ret.fold.split21
    i64 3, label %common.ret.fold.split22
  ], !dbg !281

L8825:                                            ; preds = %L63
  unreachable

L8826:                                            ; preds = %L76
  unreachable

L88:                                              ; preds = %L45
  %21 = fsub double %0, %0, !dbg !282
  %22 = fcmp oeq double %21, 0.000000e+00, !dbg !286
  br i1 %22, label %L99, label %L97, !dbg !285

L97:                                              ; preds = %L88
  %23 = call double @llvm.copysign.f64(double noundef 0x3FF921FB54442D18, double %0) #8, !dbg !288
  br label %common.ret

L99:                                              ; preds = %L88
  %24 = lshr i64 %10, 32, !dbg !289
  %25 = trunc i64 %24 to i32, !dbg !295
  %26 = and i32 %25, 2147483647, !dbg !296
  %27 = lshr i64 %7, 32, !dbg !297
  %28 = trunc i64 %27 to i32, !dbg !303
  %29 = and i32 %28, 2147483647, !dbg !304
  %30 = sub nsw i32 %26, %29, !dbg !305
  %31 = icmp slt i32 %30, 63963136, !dbg !307
  br i1 %31, label %L124, label %L137, !dbg !310

L124:                                             ; preds = %L99
  %32 = fcmp uge double %1, 0.000000e+00, !dbg !311
  %33 = icmp sgt i32 %30, -62914561
  %or.cond23 = select i1 %32, i1 true, i1 %33, !dbg !313
  br i1 %or.cond23, label %L134, label %L137, !dbg !313

L134:                                             ; preds = %L124
  %34 = fdiv double %0, %1, !dbg !314
  %35 = call double @llvm.fabs.f64(double %34) #8, !dbg !316
  %36 = call fastcc double @julia_atan_3500(double %35) #5, !dbg !315
  br label %L137, !dbg !315

L137:                                             ; preds = %L134, %L124, %L99
  %value_phi = phi double [ %36, %L134 ], [ 0x3FF921FB54442D18, %L99 ], [ 0.000000e+00, %L124 ]
  %value_phi1 = phi i64 [ %11, %L134 ], [ %.lobit, %L99 ], [ %11, %L124 ]
  switch i64 %value_phi1, label %L151 [
    i64 0, label %common.ret
    i64 1, label %L144
    i64 2, label %L148
  ], !dbg !317

L144:                                             ; preds = %L137
  %37 = fneg double %value_phi, !dbg !318
  br label %common.ret

L148:                                             ; preds = %L137
  %38 = fadd double %value_phi, 0xBCA1A62633145C07, !dbg !320
  %39 = fsub double 0x400921FB54442D18, %38, !dbg !320
  br label %common.ret

L151:                                             ; preds = %L137
  %40 = fadd double %value_phi, 0xBCA1A62633145C07, !dbg !322
  %41 = fadd double %40, 0xC00921FB54442D18, !dbg !322
  br label %common.ret
}

; ModuleID = 'text'
source_filename = "text"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:10:11:12:13"
target triple = "x86_64-linux-gnu"

; Function Attrs: nosync readnone
define internal fastcc double @julia_atan_3500(double %0) unnamed_addr #0 !dbg !8 {
top:
  %1 = call {}*** @julia.get_pgcstack()
  %2 = call double @llvm.fabs.f64(double %0), !dbg !10
  %3 = fcmp ult double %2, 0x4410000000000000, !dbg !14
  br i1 %3, label %L6, label %L4, !dbg !19

common.ret:                                       ; preds = %L8, %L58, %L11, %L4
  %common.ret.op = phi double [ %4, %L4 ], [ %31, %L11 ], [ %78, %L58 ], [ %0, %L8 ]
  ret double %common.ret.op, !dbg !20

L4:                                               ; preds = %top
  %4 = call double @llvm.copysign.f64(double noundef 0x3FF921FB54442D18, double %0), !dbg !21
  br label %common.ret

L6:                                               ; preds = %top
  %5 = fcmp uge double %2, 4.375000e-01, !dbg !25
  br i1 %5, label %L28, label %L8, !dbg !27

L8:                                               ; preds = %L6
  %6 = fcmp uge double %2, 0x3E40000000000000, !dbg !28
  br i1 %6, label %L11, label %common.ret, !dbg !29

L11:                                              ; preds = %L8
  %7 = fmul double %0, %0, !dbg !30
  %8 = fmul double %7, %7, !dbg !35
  %9 = fmul contract double %8, 0x3F90AD3AE322DA11, !dbg !37
  %10 = fadd contract double %9, 0x3FA97B4B24760DEB, !dbg !37
  %11 = fmul contract double %8, %10, !dbg !37
  %12 = fadd contract double %11, 0x3FB10D66A0D03D51, !dbg !37
  %13 = fmul contract double %8, %12, !dbg !37
  %14 = fadd contract double %13, 0x3FB745CDC54C206E, !dbg !37
  %15 = fmul contract double %8, %14, !dbg !37
  %16 = fadd contract double %15, 0x3FC24924920083FF, !dbg !37
  %17 = fmul contract double %8, %16, !dbg !37
  %18 = fadd contract double %17, 0x3FD555555555550D, !dbg !37
  %19 = fmul double %7, %18, !dbg !47
  %20 = fmul contract double %8, 0x3FA2B4442C6A6C2F, !dbg !48
  %21 = fsub contract double 0xBFADDE2D52DEFD9A, %20, !dbg !48
  %22 = fmul contract double %8, %21, !dbg !48
  %23 = fadd contract double %22, 0xBFB3B0F2AF749A6D, !dbg !48
  %24 = fmul contract double %8, %23, !dbg !48
  %25 = fadd contract double %24, 0xBFBC71C6FE231671, !dbg !48
  %26 = fmul contract double %8, %25, !dbg !48
  %27 = fadd contract double %26, 0xBFC999999998EBC4, !dbg !48
  %28 = fmul double %8, %27, !dbg !53
  %29 = fadd double %28, %19, !dbg !54
  %30 = fmul double %29, %0, !dbg !57
  %31 = fsub double %0, %30, !dbg !58
  br label %common.ret

L28:                                              ; preds = %L6
  %32 = fcmp uge double %0, 0.000000e+00, !dbg !60
  %33 = fcmp ule double %0, 0.000000e+00, !dbg !65
  %34 = select i1 %33, double %0, double 1.000000e+00, !dbg !68
  %35 = select i1 %32, double %34, double -1.000000e+00, !dbg !68
  %36 = fcmp uge double %2, 1.187500e+00, !dbg !71
  br i1 %36, label %L50, label %L36, !dbg !72

L36:                                              ; preds = %L28
  %37 = fcmp uge double %2, 6.875000e-01, !dbg !73
  br i1 %37, label %L43, label %L38, !dbg !74

L38:                                              ; preds = %L36
  %38 = fmul double %2, 2.000000e+00, !dbg !75
  %39 = fadd double %38, -1.000000e+00, !dbg !77
  %40 = fadd double %2, 2.000000e+00, !dbg !78
  %41 = fdiv double %39, %40, !dbg !79
  br label %L58, !dbg !76

L43:                                              ; preds = %L36
  %42 = fadd double %2, -1.000000e+00, !dbg !81
  %43 = fadd double %2, 1.000000e+00, !dbg !83
  %44 = fdiv double %42, %43, !dbg !84
  br label %L58, !dbg !84

L50:                                              ; preds = %L28
  %45 = fcmp uge double %2, 2.437500e+00, !dbg !85
  br i1 %45, label %L57, label %L52, !dbg !86

L52:                                              ; preds = %L50
  %46 = fadd double %2, -1.500000e+00, !dbg !87
  %47 = fmul double %2, 1.500000e+00, !dbg !89
  %48 = fadd double %47, 1.000000e+00, !dbg !90
  %49 = fdiv double %46, %48, !dbg !91
  br label %L58, !dbg !88

L57:                                              ; preds = %L50
  %50 = fdiv double -1.000000e+00, %2, !dbg !92
  br label %L58, !dbg !92

L58:                                              ; preds = %L38, %L43, %L57, %L52
  %value_phi3 = phi double [ 0x3C7007887AF0CBBD, %L52 ], [ 0x3C91A62633145C07, %L57 ], [ 0x3C7A2B7F222F65E2, %L38 ], [ 0x3C81A62633145C07, %L43 ]
  %value_phi4 = phi double [ 0x3FEF730BD281F69B, %L52 ], [ 0x3FF921FB54442D18, %L57 ], [ 0x3FDDAC670561BB4F, %L38 ], [ 0x3FE921FB54442D18, %L43 ]
  %value_phi5 = phi double [ %49, %L52 ], [ %50, %L57 ], [ %41, %L38 ], [ %44, %L43 ]
  %51 = fmul double %value_phi5, %value_phi5, !dbg !94
  %52 = fmul double %51, %51, !dbg !97
  %53 = fmul contract double %52, 0x3F90AD3AE322DA11, !dbg !99
  %54 = fadd contract double %53, 0x3FA97B4B24760DEB, !dbg !99
  %55 = fmul contract double %52, %54, !dbg !99
  %56 = fadd contract double %55, 0x3FB10D66A0D03D51, !dbg !99
  %57 = fmul contract double %52, %56, !dbg !99
  %58 = fadd contract double %57, 0x3FB745CDC54C206E, !dbg !99
  %59 = fmul contract double %52, %58, !dbg !99
  %60 = fadd contract double %59, 0x3FC24924920083FF, !dbg !99
  %61 = fmul contract double %52, %60, !dbg !99
  %62 = fadd contract double %61, 0x3FD555555555550D, !dbg !99
  %63 = fmul double %51, %62, !dbg !104
  %64 = fmul contract double %52, 0x3FA2B4442C6A6C2F, !dbg !105
  %65 = fsub contract double 0xBFADDE2D52DEFD9A, %64, !dbg !105
  %66 = fmul contract double %52, %65, !dbg !105
  %67 = fadd contract double %66, 0xBFB3B0F2AF749A6D, !dbg !105
  %68 = fmul contract double %52, %67, !dbg !105
  %69 = fadd contract double %68, 0xBFBC71C6FE231671, !dbg !105
  %70 = fmul contract double %52, %69, !dbg !105
  %71 = fadd contract double %70, 0xBFC999999998EBC4, !dbg !105
  %72 = fmul double %52, %71, !dbg !109
  %73 = fadd double %72, %63, !dbg !110
  %74 = fmul double %value_phi5, %73, !dbg !112
  %75 = fsub double %74, %value_phi3, !dbg !113
  %76 = fsub double %75, %value_phi5, !dbg !113
  %77 = fsub double %value_phi4, %76, !dbg !113
  %78 = call double @llvm.copysign.f64(double %77, double %35), !dbg !114
  br label %common.ret
}

; Function Attrs: readnone
declare {}*** @julia.get_pgcstack() local_unnamed_addr #1

; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare double @llvm.fabs.f64(double) #2

; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare double @llvm.copysign.f64(double, double) #2

; Function Attrs: nosync readnone
define internal fastcc double @julia_atan_3496(double %0, double %1) unnamed_addr #3 !dbg !116 {
top:
  %2 = call {}*** @julia.get_pgcstack()
  %3 = fcmp ord double %1, 0.000000e+00, !dbg !117
  %4 = fcmp ord double %0, 0.000000e+00
  %or.cond = select i1 %3, i1 %4, i1 false, !dbg !121
  br i1 %or.cond, label %L7, label %common.ret, !dbg !121

L7:                                               ; preds = %top
  %5 = fcmp une double %1, 1.000000e+00, !dbg !122
  br i1 %5, label %L11, label %L9, !dbg !124

common.ret.fold.split:                            ; preds = %L24
  br label %common.ret, !dbg !125

common.ret.fold.split16:                          ; preds = %L24
  br label %common.ret, !dbg !125

common.ret.fold.split17:                          ; preds = %L63
  br label %common.ret, !dbg !125

common.ret.fold.split18:                          ; preds = %L63
  br label %common.ret, !dbg !125

common.ret.fold.split19:                          ; preds = %L63
  br label %common.ret, !dbg !125

common.ret.fold.split20:                          ; preds = %L76
  br label %common.ret, !dbg !125

common.ret.fold.split21:                          ; preds = %L76
  br label %common.ret, !dbg !125

common.ret.fold.split22:                          ; preds = %L76
  br label %common.ret, !dbg !125

common.ret:                                       ; preds = %L137, %L76, %common.ret.fold.split22, %common.ret.fold.split21, %common.ret.fold.split20, %L63, %common.ret.fold.split19, %common.ret.fold.split18, %common.ret.fold.split17, %L24, %L24, %common.ret.fold.split16, %common.ret.fold.split, %top, %L151, %L148, %L144, %L97, %L40, %L9
  %common.ret.op = phi double [ %6, %L9 ], [ %16, %L40 ], [ %23, %L97 ], [ %37, %L144 ], [ %39, %L148 ], [ %41, %L151 ], [ %0, %L24 ], [ 0x3FE921FB54442D18, %L63 ], [ 0.000000e+00, %L76 ], [ %value_phi, %L137 ], [ 0x7FF8000000000000, %top ], [ %0, %L24 ], [ 0x400921FB54442D18, %common.ret.fold.split ], [ 0xC00921FB54442D18, %common.ret.fold.split16 ], [ 0xBFE921FB54442D18, %common.ret.fold.split17 ], [ 0x4002D97C7F3321D2, %common.ret.fold.split18 ], [ 0xC002D97C7F3321D2, %common.ret.fold.split19 ], [ -0.000000e+00, %common.ret.fold.split20 ], [ 0x400921FB54442D18, %common.ret.fold.split21 ], [ 0xC00921FB54442D18, %common.ret.fold.split22 ]
  ret double %common.ret.op, !dbg !125

L9:                                               ; preds = %L7
  %6 = call fastcc double @julia_atan_3500(double %0) #4, !dbg !126
  br label %common.ret

L11:                                              ; preds = %L7
  %7 = bitcast double %1 to i64, !dbg !127
  %8 = lshr i64 %7, 62, !dbg !130
  %9 = and i64 %8, 2, !dbg !130
  %10 = bitcast double %0 to i64, !dbg !127
  %.lobit = lshr i64 %10, 63, !dbg !134
  %11 = or i64 %9, %.lobit, !dbg !144
  %12 = fcmp une double %0, 0.000000e+00, !dbg !146
  br i1 %12, label %L38, label %L24, !dbg !149

L24:                                              ; preds = %L11
  switch i64 %11, label %L4524 [
    i64 0, label %common.ret
    i64 1, label %common.ret
    i64 2, label %common.ret.fold.split
    i64 3, label %common.ret.fold.split16
  ], !dbg !150

L38:                                              ; preds = %L11
  %13 = fcmp une double %1, 0.000000e+00, !dbg !151
  br i1 %13, label %L45, label %L40, !dbg !153

L40:                                              ; preds = %L38
  %14 = and i64 %10, -9223372036854775808, !dbg !154
  %15 = or i64 %14, 4609753056924675352, !dbg !154
  %16 = bitcast i64 %15 to double, !dbg !154
  br label %common.ret

L4524:                                            ; preds = %L24
  unreachable

L45:                                              ; preds = %L38
  %17 = fsub double %1, %1, !dbg !157
  %18 = fcmp oeq double %17, 0.000000e+00, !dbg !164
  br i1 %18, label %L88, label %L54, !dbg !163

L54:                                              ; preds = %L45
  %19 = fsub double %0, %0, !dbg !166
  %20 = fcmp oeq double %19, 0.000000e+00, !dbg !170
  br i1 %20, label %L76, label %L63, !dbg !169

L63:                                              ; preds = %L54
  switch i64 %11, label %L8825 [
    i64 0, label %common.ret
    i64 1, label %common.ret.fold.split17
    i64 2, label %common.ret.fold.split18
    i64 3, label %common.ret.fold.split19
  ], !dbg !172

L76:                                              ; preds = %L54
  switch i64 %11, label %L8826 [
    i64 0, label %common.ret
    i64 1, label %common.ret.fold.split20
    i64 2, label %common.ret.fold.split21
    i64 3, label %common.ret.fold.split22
  ], !dbg !173

L8825:                                            ; preds = %L63
  unreachable

L8826:                                            ; preds = %L76
  unreachable

L88:                                              ; preds = %L45
  %21 = fsub double %0, %0, !dbg !174
  %22 = fcmp oeq double %21, 0.000000e+00, !dbg !178
  br i1 %22, label %L99, label %L97, !dbg !177

L97:                                              ; preds = %L88
  %23 = call double @llvm.copysign.f64(double noundef 0x3FF921FB54442D18, double %0), !dbg !180
  br label %common.ret

L99:                                              ; preds = %L88
  %24 = lshr i64 %10, 32, !dbg !182
  %25 = trunc i64 %24 to i32, !dbg !191
  %26 = and i32 %25, 2147483647, !dbg !192
  %27 = lshr i64 %7, 32, !dbg !194
  %28 = trunc i64 %27 to i32, !dbg !200
  %29 = and i32 %28, 2147483647, !dbg !201
  %30 = sub nsw i32 %26, %29, !dbg !202
  %31 = icmp slt i32 %30, 63963136, !dbg !205
  br i1 %31, label %L124, label %L137, !dbg !212

L124:                                             ; preds = %L99
  %32 = fcmp uge double %1, 0.000000e+00, !dbg !213
  %33 = icmp sgt i32 %30, -62914561
  %or.cond23 = select i1 %32, i1 true, i1 %33, !dbg !216
  br i1 %or.cond23, label %L134, label %L137, !dbg !216

L134:                                             ; preds = %L124
  %34 = fdiv double %0, %1, !dbg !217
  %35 = call double @llvm.fabs.f64(double %34), !dbg !220
  %36 = call fastcc double @julia_atan_3500(double %35) #4, !dbg !219
  br label %L137, !dbg !219

L137:                                             ; preds = %L124, %L99, %L134
  %value_phi = phi double [ %36, %L134 ], [ 0x3FF921FB54442D18, %L99 ], [ 0.000000e+00, %L124 ]
  %value_phi1 = phi i64 [ %11, %L134 ], [ %.lobit, %L99 ], [ %11, %L124 ]
  switch i64 %value_phi1, label %L151 [
    i64 0, label %common.ret
    i64 1, label %L144
    i64 2, label %L148
  ], !dbg !222

L144:                                             ; preds = %L137
  %37 = fneg double %value_phi, !dbg !223
  br label %common.ret

L148:                                             ; preds = %L137
  %38 = fadd double %value_phi, 0xBCA1A62633145C07, !dbg !225
  %39 = fsub double 0x400921FB54442D18, %38, !dbg !225
  br label %common.ret

L151:                                             ; preds = %L137
  %40 = fadd double %value_phi, 0xBCA1A62633145C07, !dbg !227
  %41 = fadd double %40, 0xC00921FB54442D18, !dbg !227
  br label %common.ret
}

; Function Attrs: nosync readnone
define double @julia_f2_3493_inner.1(double %0, double %1) local_unnamed_addr #4 !dbg !229 {
entry:
  %2 = call {}*** @julia.get_pgcstack()
  %3 = call fastcc double @julia_atan_3496(double %0, double %1) #4, !dbg !230
  ret double %3, !dbg !232
}

; Function Attrs: mustprogress nosync readnone willreturn
define double @preprocess_julia_f2_3493_inner.1(double %0, double %1) local_unnamed_addr #5 !dbg !233 {
entry:
  %2 = call {}*** @julia.get_pgcstack() #8
  %3 = call fastcc double @julia_atan_3496(double %0, double %1) #5, !dbg !234
  ret double %3, !dbg !236
}

; Function Attrs: mustprogress nosync readnone willreturn
define internal { double, double } @diffejulia_f2_3493_inner.1(double %0, double %1, double %differeturn) local_unnamed_addr #5 !dbg !237 {
entry:
  %2 = call {}*** @julia.get_pgcstack() #8
  %3 = call fastcc double @julia_atan_3496(double %0, double %1) #5, !dbg !238
  br label %invertentry, !dbg !240

allocsForInversion:                               ; No predecessors!
  %"'de" = alloca double, align 8
  store double 0.000000e+00, double* %"'de", align 8

invertentry:                                      ; preds = %entry
  store double %differeturn, double* %"'de", align 8
}

; Function Attrs: mustprogress nosync readnone willreturn
define internal fastcc double @preprocess_julia_atan_3496(double %0, double %1) unnamed_addr #6 !dbg !241 {
top:
  %2 = call {}*** @julia.get_pgcstack() #8
  %3 = fcmp ord double %1, 0.000000e+00, !dbg !242
  %4 = fcmp ord double %0, 0.000000e+00
  %or.cond = select i1 %3, i1 %4, i1 false, !dbg !244
  br i1 %or.cond, label %L7, label %common.ret, !dbg !244

L7:                                               ; preds = %top
  %5 = fcmp une double %1, 1.000000e+00, !dbg !245
  br i1 %5, label %L11, label %L9, !dbg !246

common.ret.fold.split:                            ; preds = %L24
  br label %common.ret, !dbg !247

common.ret.fold.split16:                          ; preds = %L24
  br label %common.ret, !dbg !247

common.ret.fold.split17:                          ; preds = %L63
  br label %common.ret, !dbg !247

common.ret.fold.split18:                          ; preds = %L63
  br label %common.ret, !dbg !247

common.ret.fold.split19:                          ; preds = %L63
  br label %common.ret, !dbg !247

common.ret.fold.split20:                          ; preds = %L76
  br label %common.ret, !dbg !247

common.ret.fold.split21:                          ; preds = %L76
  br label %common.ret, !dbg !247

common.ret.fold.split22:                          ; preds = %L76
  br label %common.ret, !dbg !247

common.ret:                                       ; preds = %L151, %L148, %L144, %L137, %L97, %L76, %L63, %L40, %L24, %L24, %L9, %common.ret.fold.split22, %common.ret.fold.split21, %common.ret.fold.split20, %common.ret.fold.split19, %common.ret.fold.split18, %common.ret.fold.split17, %common.ret.fold.split16, %common.ret.fold.split, %top
  %common.ret.op = phi double [ %6, %L9 ], [ %16, %L40 ], [ %23, %L97 ], [ %37, %L144 ], [ %39, %L148 ], [ %41, %L151 ], [ %0, %L24 ], [ 0x3FE921FB54442D18, %L63 ], [ 0.000000e+00, %L76 ], [ %value_phi, %L137 ], [ 0x7FF8000000000000, %top ], [ %0, %L24 ], [ 0x400921FB54442D18, %common.ret.fold.split ], [ 0xC00921FB54442D18, %common.ret.fold.split16 ], [ 0xBFE921FB54442D18, %common.ret.fold.split17 ], [ 0x4002D97C7F3321D2, %common.ret.fold.split18 ], [ 0xC002D97C7F3321D2, %common.ret.fold.split19 ], [ -0.000000e+00, %common.ret.fold.split20 ], [ 0x400921FB54442D18, %common.ret.fold.split21 ], [ 0xC00921FB54442D18, %common.ret.fold.split22 ]
  ret double %common.ret.op, !dbg !247

L9:                                               ; preds = %L7
  %6 = call fastcc double @julia_atan_3500(double %0) #5, !dbg !248
  br label %common.ret

L11:                                              ; preds = %L7
  %7 = bitcast double %1 to i64, !dbg !249
  %8 = lshr i64 %7, 62, !dbg !251
  %9 = and i64 %8, 2, !dbg !251
  %10 = bitcast double %0 to i64, !dbg !249
  %.lobit = lshr i64 %10, 63, !dbg !253
  %11 = or i64 %9, %.lobit, !dbg !258
  %12 = fcmp une double %0, 0.000000e+00, !dbg !259
  br i1 %12, label %L38, label %L24, !dbg !261

L24:                                              ; preds = %L11
  switch i64 %11, label %L4524 [
    i64 0, label %common.ret
    i64 1, label %common.ret
    i64 2, label %common.ret.fold.split
    i64 3, label %common.ret.fold.split16
  ], !dbg !262

L38:                                              ; preds = %L11
  %13 = fcmp une double %1, 0.000000e+00, !dbg !263
  br i1 %13, label %L45, label %L40, !dbg !265

L40:                                              ; preds = %L38
  %14 = and i64 %10, -9223372036854775808, !dbg !266
  %15 = or i64 %14, 4609753056924675352, !dbg !266
  %16 = bitcast i64 %15 to double, !dbg !266
  br label %common.ret

L4524:                                            ; preds = %L24
  unreachable

L45:                                              ; preds = %L38
  %17 = fsub double %1, %1, !dbg !268
  %18 = fcmp oeq double %17, 0.000000e+00, !dbg !272
  br i1 %18, label %L88, label %L54, !dbg !271

L54:                                              ; preds = %L45
  %19 = fsub double %0, %0, !dbg !274
  %20 = fcmp oeq double %19, 0.000000e+00, !dbg !278
  br i1 %20, label %L76, label %L63, !dbg !277

L63:                                              ; preds = %L54
  switch i64 %11, label %L8825 [
    i64 0, label %common.ret
    i64 1, label %common.ret.fold.split17
    i64 2, label %common.ret.fold.split18
    i64 3, label %common.ret.fold.split19
  ], !dbg !280

L76:                                              ; preds = %L54
  switch i64 %11, label %L8826 [
    i64 0, label %common.ret
    i64 1, label %common.ret.fold.split20
    i64 2, label %common.ret.fold.split21
    i64 3, label %common.ret.fold.split22
  ], !dbg !281

L8825:                                            ; preds = %L63
  unreachable

L8826:                                            ; preds = %L76
  unreachable

L88:                                              ; preds = %L45
  %21 = fsub double %0, %0, !dbg !282
  %22 = fcmp oeq double %21, 0.000000e+00, !dbg !286
  br i1 %22, label %L99, label %L97, !dbg !285

L97:                                              ; preds = %L88
  %23 = call double @llvm.copysign.f64(double noundef 0x3FF921FB54442D18, double %0) #8, !dbg !288
  br label %common.ret

L99:                                              ; preds = %L88
  %24 = lshr i64 %10, 32, !dbg !289
  %25 = trunc i64 %24 to i32, !dbg !295
  %26 = and i32 %25, 2147483647, !dbg !296
  %27 = lshr i64 %7, 32, !dbg !297
  %28 = trunc i64 %27 to i32, !dbg !303
  %29 = and i32 %28, 2147483647, !dbg !304
  %30 = sub nsw i32 %26, %29, !dbg !305
  %31 = icmp slt i32 %30, 63963136, !dbg !307
  br i1 %31, label %L124, label %L137, !dbg !310

L124:                                             ; preds = %L99
  %32 = fcmp uge double %1, 0.000000e+00, !dbg !311
  %33 = icmp sgt i32 %30, -62914561
  %or.cond23 = select i1 %32, i1 true, i1 %33, !dbg !313
  br i1 %or.cond23, label %L134, label %L137, !dbg !313

L134:                                             ; preds = %L124
  %34 = fdiv double %0, %1, !dbg !314
  %35 = call double @llvm.fabs.f64(double %34) #8, !dbg !316
  %36 = call fastcc double @julia_atan_3500(double %35) #5, !dbg !315
  br label %L137, !dbg !315

L137:                                             ; preds = %L134, %L124, %L99
  %value_phi = phi double [ %36, %L134 ], [ 0x3FF921FB54442D18, %L99 ], [ 0.000000e+00, %L124 ]
  %value_phi1 = phi i64 [ %11, %L134 ], [ %.lobit, %L99 ], [ %11, %L124 ]
  switch i64 %value_phi1, label %L151 [
    i64 0, label %common.ret
    i64 1, label %L144
    i64 2, label %L148
  ], !dbg !317

L144:                                             ; preds = %L137
  %37 = fneg double %value_phi, !dbg !318
  br label %common.ret

L148:                                             ; preds = %L137
  %38 = fadd double %value_phi, 0xBCA1A62633145C07, !dbg !320
  %39 = fsub double 0x400921FB54442D18, %38, !dbg !320
  br label %common.ret

L151:                                             ; preds = %L137
  %40 = fadd double %value_phi, 0xBCA1A62633145C07, !dbg !322
  %41 = fadd double %40, 0xC00921FB54442D18, !dbg !322
  br label %common.ret
}

; Function Attrs: mustprogress nosync readnone willreturn
define internal fastcc { double, double } @diffejulia_atan_3496(double %0, double %1, double %differeturn) unnamed_addr #6 !dbg !324 {
top:
  %_replacementA = phi {}*** 
  %2 = fcmp ord double %1, 0.000000e+00, !dbg !325
  %3 = fcmp ord double %0, 0.000000e+00
  %or.cond = select i1 %2, i1 %3, i1 false, !dbg !327
  store i8 5, i8* %_cache, align 1, !dbg !327, !invariant.group !328
  store i8 4, i8* %_cache13, align 1, !dbg !327, !invariant.group !329
  br i1 %or.cond, label %L7, label %common.ret, !dbg !327

L7:                                               ; preds = %top
  %4 = fcmp une double %1, 1.000000e+00, !dbg !330
  br i1 %4, label %L11, label %L9, !dbg !331

common.ret.fold.split:                            ; preds = %L24
  store i8 5, i8* %_cache, align 1, !dbg !332, !invariant.group !328
  store i8 12, i8* %_cache13, align 1, !dbg !332, !invariant.group !329
  br label %common.ret, !dbg !332

common.ret.fold.split16:                          ; preds = %L24
  store i8 5, i8* %_cache, align 1, !dbg !332, !invariant.group !328
  store i8 13, i8* %_cache13, align 1, !dbg !332, !invariant.group !329
  br label %common.ret, !dbg !332

common.ret.fold.split17:                          ; preds = %L63
  store i8 5, i8* %_cache, align 1, !dbg !332, !invariant.group !328
  store i8 3, i8* %_cache13, align 1, !dbg !332, !invariant.group !329
  br label %common.ret, !dbg !332

common.ret.fold.split18:                          ; preds = %L63
  store i8 5, i8* %_cache, align 1, !dbg !332, !invariant.group !328
  store i8 17, i8* %_cache13, align 1, !dbg !332, !invariant.group !329
  br label %common.ret, !dbg !332

common.ret.fold.split19:                          ; preds = %L63
  store i8 5, i8* %_cache, align 1, !dbg !332, !invariant.group !328
  store i8 7, i8* %_cache13, align 1, !dbg !332, !invariant.group !329
  br label %common.ret, !dbg !332

common.ret.fold.split20:                          ; preds = %L76
  store i8 5, i8* %_cache, align 1, !dbg !332, !invariant.group !328
  store i8 8, i8* %_cache13, align 1, !dbg !332, !invariant.group !329
  br label %common.ret, !dbg !332

common.ret.fold.split21:                          ; preds = %L76
  store i8 5, i8* %_cache, align 1, !dbg !332, !invariant.group !328
  store i8 11, i8* %_cache13, align 1, !dbg !332, !invariant.group !329
  br label %common.ret, !dbg !332

common.ret.fold.split22:                          ; preds = %L76
  store i8 5, i8* %_cache, align 1, !dbg !332, !invariant.group !328
  store i8 9, i8* %_cache13, align 1, !dbg !332, !invariant.group !329
  br label %common.ret, !dbg !332

common.ret:                                       ; preds = %L151, %L148, %L144, %L137, %L97, %L76, %L63, %L40, %L24, %L24, %L9, %common.ret.fold.split22, %common.ret.fold.split21, %common.ret.fold.split20, %common.ret.fold.split19, %common.ret.fold.split18, %common.ret.fold.split17, %common.ret.fold.split16, %common.ret.fold.split, %top
  %common.ret.op_replacementA = phi double 
  br label %invertcommon.ret, !dbg !332

L9:                                               ; preds = %L7
  %_replacementA14 = phi double , !dbg !333
  store i8 3, i8* %_cache, align 1, !invariant.group !328
  store i8 18, i8* %_cache13, align 1, !invariant.group !329
  br label %common.ret

L11:                                              ; preds = %L7
  %5 = bitcast double %1 to i64, !dbg !334
  %6 = lshr i64 %5, 62, !dbg !336
  %7 = and i64 %6, 2, !dbg !336
  %8 = bitcast double %0 to i64, !dbg !334
  %.lobit = lshr i64 %8, 63, !dbg !338
  %9 = or i64 %7, %.lobit, !dbg !343
  %10 = fcmp une double %0, 0.000000e+00, !dbg !344
  br i1 %10, label %L38, label %L24, !dbg !346

L24:                                              ; preds = %L11
  store i8 4, i8* %_cache, align 1, !dbg !347, !invariant.group !328
  store i8 2, i8* %_cache13, align 1, !dbg !347, !invariant.group !329
  switch i64 %9, label %L4524 [
    i64 0, label %common.ret
    i64 1, label %common.ret
    i64 2, label %common.ret.fold.split
    i64 3, label %common.ret.fold.split16
  ], !dbg !347

L38:                                              ; preds = %L11
  %11 = fcmp une double %1, 0.000000e+00, !dbg !348
  br i1 %11, label %L45, label %L40, !dbg !350

L40:                                              ; preds = %L38
  %12 = and i64 %8, -9223372036854775808, !dbg !351
  %_replacementA18 = phi i64 , !dbg !351
  %_replacementA16 = phi double , !dbg !351
  store i8 7, i8* %_cache, align 1, !invariant.group !328
  store i8 10, i8* %_cache13, align 1, !invariant.group !329
  br label %common.ret

L4524:                                            ; preds = %L24
  unreachable

L45:                                              ; preds = %L38
  %13 = fsub double %1, %1, !dbg !353
  %14 = fcmp oeq double %13, 0.000000e+00, !dbg !357
  br i1 %14, label %L88, label %L54, !dbg !356

L54:                                              ; preds = %L45
  %15 = fsub double %0, %0, !dbg !359
  %16 = fcmp oeq double %15, 0.000000e+00, !dbg !363
  br i1 %16, label %L76, label %L63, !dbg !362

L63:                                              ; preds = %L54
  store i8 5, i8* %_cache, align 1, !dbg !365, !invariant.group !328
  store i8 0, i8* %_cache13, align 1, !dbg !365, !invariant.group !329
  switch i64 %9, label %L8825 [
    i64 0, label %common.ret
    i64 1, label %common.ret.fold.split17
    i64 2, label %common.ret.fold.split18
    i64 3, label %common.ret.fold.split19
  ], !dbg !365

L76:                                              ; preds = %L54
  store i8 5, i8* %_cache, align 1, !dbg !366, !invariant.group !328
  store i8 1, i8* %_cache13, align 1, !dbg !366, !invariant.group !329
  switch i64 %9, label %L8826 [
    i64 0, label %common.ret
    i64 1, label %common.ret.fold.split20
    i64 2, label %common.ret.fold.split21
    i64 3, label %common.ret.fold.split22
  ], !dbg !366

L8825:                                            ; preds = %L63
  unreachable

L8826:                                            ; preds = %L76
  unreachable

L88:                                              ; preds = %L45
  %17 = fsub double %0, %0, !dbg !367
  %18 = fcmp oeq double %17, 0.000000e+00, !dbg !371
  br i1 %18, label %L99, label %L97, !dbg !370

L97:                                              ; preds = %L88
  %19 = call double @llvm.copysign.f64(double noundef 0x3FF921FB54442D18, double %0) #8, !dbg !373
  store i8 5, i8* %_cache, align 1, !invariant.group !328
  store i8 5, i8* %_cache13, align 1, !invariant.group !329
  br label %common.ret

L99:                                              ; preds = %L88
  %20 = lshr i64 %8, 32, !dbg !374
  %21 = trunc i64 %20 to i32, !dbg !380
  %22 = and i32 %21, 2147483647, !dbg !381
  %23 = lshr i64 %5, 32, !dbg !382
  %24 = trunc i64 %23 to i32, !dbg !388
  %25 = and i32 %24, 2147483647, !dbg !389
  %26 = sub nsw i32 %22, %25, !dbg !390
  %27 = icmp slt i32 %26, 63963136, !dbg !392
  br i1 %27, label %L124, label %L137, !dbg !395

L124:                                             ; preds = %L99
  %28 = fcmp uge double %1, 0.000000e+00, !dbg !396
  %29 = icmp sgt i32 %26, -62914561
  %or.cond23 = select i1 %28, i1 true, i1 %29, !dbg !398
  br i1 %or.cond23, label %L134, label %L137, !dbg !398

L134:                                             ; preds = %L124
  %30 = fdiv double %0, %1, !dbg !399
  %31 = call double @llvm.fabs.f64(double %30) #8, !dbg !401
  %32 = call fastcc double @julia_atan_3500(double %31) #5, !dbg !400
  br label %L137, !dbg !400

L137:                                             ; preds = %L134, %L124, %L99
  %value_phi = phi double [ %32, %L134 ], [ 0x3FF921FB54442D18, %L99 ], [ 0.000000e+00, %L124 ]
  %value_phi1 = phi i64 [ %9, %L134 ], [ %.lobit, %L99 ], [ %9, %L124 ]
  store i8 6, i8* %_cache, align 1, !dbg !402, !invariant.group !328
  store i8 14, i8* %_cache13, align 1, !dbg !402, !invariant.group !329
  switch i64 %value_phi1, label %L151 [
    i64 0, label %common.ret
    i64 1, label %L144
    i64 2, label %L148
  ], !dbg !402

L144:                                             ; preds = %L137
  %33 = fneg double %value_phi, !dbg !403
  store i8 0, i8* %_cache, align 1, !invariant.group !328
  store i8 15, i8* %_cache13, align 1, !invariant.group !329
  br label %common.ret

L148:                                             ; preds = %L137
  %34 = fadd double %value_phi, 0xBCA1A62633145C07, !dbg !405
  %35 = fsub double 0x400921FB54442D18, %34, !dbg !405
  store i8 1, i8* %_cache, align 1, !invariant.group !328
  store i8 16, i8* %_cache13, align 1, !invariant.group !329
  br label %common.ret

L151:                                             ; preds = %L137
  %36 = fadd double %value_phi, 0xBCA1A62633145C07, !dbg !407
  %37 = fadd double %36, 0xC00921FB54442D18, !dbg !407
  store i8 2, i8* %_cache, align 1, !invariant.group !328
  store i8 6, i8* %_cache13, align 1, !invariant.group !329
  br label %common.ret

allocsForInversion:                               ; No predecessors!
  %"common.ret.op'de" = alloca double, align 8
  store double 0.000000e+00, double* %"common.ret.op'de", align 8
  %"'de" = alloca double, align 8
  store double 0.000000e+00, double* %"'de", align 8
  %"'de1" = alloca double, align 8
  store double 0.000000e+00, double* %"'de1", align 8
  %"'de2" = alloca double, align 8
  store double 0.000000e+00, double* %"'de2", align 8
  %"'de4" = alloca double, align 8
  store double 0.000000e+00, double* %"'de4", align 8
  %"'de6" = alloca double, align 8
  store double 0.000000e+00, double* %"'de6", align 8
  %"value_phi'de" = alloca double, align 8
  store double 0.000000e+00, double* %"value_phi'de", align 8
  %"'de9" = alloca double, align 8
  store double 0.000000e+00, double* %"'de9", align 8
  %"'de12" = alloca double, align 8
  store double 0.000000e+00, double* %"'de12", align 8
  %_cache = alloca i8, align 1
  store i8 0, i8* %_cache, align 1
  %_cache13 = alloca i8, align 1
  store i8 0, i8* %_cache13, align 1
  %"'de15" = alloca i64, align 8
  store i64 0, i64* %"'de15", align 8
  %"'de17" = alloca i64, align 8
  store i64 0, i64* %"'de17", align 8

inverttop:                                        ; preds = %invertcommon.ret, %invertL7
  %38 = load double, double* %"'de", align 8
  %39 = load double, double* %"'de1", align 8
  %40 = insertvalue { double, double } undef, double %38, 0
  %41 = insertvalue { double, double } %40, double %39, 1
  ret { double, double } %41

[...]

Stacktrace:
 [1] flipsign
   @ ./floatfuncs.jl:10
 [2] atan
   @ ./special/trig.jl:603

Stacktrace:
  [1] julia_error(cstr::Cstring, val::Ptr{LLVM.API.LLVMOpaqueValue}, errtype::Enzyme.API.ErrorType, data::Ptr{Nothing})
    @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:3132
  [2] EnzymeCreatePrimalAndGradient(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{Enzyme.API.CDIFFE_TYPE}, TA::Enzyme.TypeAnalysis, returnValue::Bool, dretUsed::Bool, mode::Enzyme.API.CDerivativeMode, width::Int64, additionalArg::Ptr{Nothing}, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{Bool}, augmented::Ptr{Nothing}, atomicAdd::Bool)
    @ Enzyme.API ~/.julia/dev/Enzyme/src/api.jl:118
  [3] enzyme!(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams, GPUCompiler.FunctionSpec{typeof(f2), Tuple{Float64, Float64}}}, mod::LLVM.Module, primalf::LLVM.Function, adjoint::GPUCompiler.FunctionSpec{typeof(f2), Tuple{Active{Float64}, Active{Float64}}}, mode::Enzyme.API.CDerivativeMode, width::Int64, parallel::Bool, actualRetType::Type, dupClosure::Bool, wrap::Bool, modifiedBetween::Bool, returnPrimal::Bool, jlrules::Vector{String})
    @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:4290
  [4] codegen(output::Symbol, job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams, GPUCompiler.FunctionSpec{typeof(f2), Tuple{Float64, Float64}}}; libraries::Bool, deferred_codegen::Bool, optimize::Bool, ctx::LLVM.Context, strip::Bool, validate::Bool, only_entry::Bool, parent_job::Nothing)
    @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:5276
  [5] _thunk
    @ ~/.julia/dev/Enzyme/src/compiler.jl:5749 [inlined]
  [6] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams, GPUCompiler.FunctionSpec{typeof(f2), Tuple{Float64, Float64}}})
    @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:5743
  [7] cached_compilation(job::GPUCompiler.CompilerJob, key::UInt64, specid::UInt64)
    @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:5787
  [8] #s814#139
    @ ~/.julia/dev/Enzyme/src/compiler.jl:5847 [inlined]
  [9] var"#s814#139"(F::Any, Fn::Any, DF::Any, A::Any, TT::Any, Mode::Any, ModifiedBetween::Any, width::Any, specid::Any, ReturnPrimal::Any, ::Any, #unused#::Type, f::Any, df::Any, #unused#::Type, tt::Any, #unused#::Type, #unused#::Type, #unused#::Type, #unused#::Type, #unused#::Any)
    @ Enzyme.Compiler ./none:0
 [10] (::Core.GeneratedFunctionStub)(::Any, ::Vararg{Any})
    @ Core ./boot.jl:582
 [11] thunk
    @ ~/.julia/dev/Enzyme/src/compiler.jl:5880 [inlined]
 [12] thunk (repeats 2 times)
    @ ~/.julia/dev/Enzyme/src/compiler.jl:5873 [inlined]
 [13] autodiff
    @ ~/.julia/dev/Enzyme/src/Enzyme.jl:296 [inlined]
 [14] autodiff
    @ ~/.julia/dev/Enzyme/src/Enzyme.jl:330 [inlined]
 [15] autodiff(::typeof(f2), ::Active{Float64}, ::Active{Float64})
    @ Enzyme ~/.julia/dev/Enzyme/src/Enzyme.jl:423
 [16] top-level scope
    @ REPL[5]:1
@wsmoses wsmoses mentioned this issue Sep 28, 2022
@jgreener64
Copy link
Contributor Author

This might need reopening, using Float32 fails for me on Enzyme d37ce72:

using Enzyme
f2(x, y) = atan(x, y)
autodiff(f2, Active(0.3f0), Active(0.5f0))
ERROR: Enzyme compilation failed.
Current scope: 
; Function Attrs: mustprogress nofree noinline nosync readnone willreturn
define dso_local float @preprocess_julia_atan_3286(float %0, float %1) local_unnamed_addr #6 !dbg !229 {
top:
  %2 = call {}*** @julia.get_pgcstack() #8
  %3 = fcmp ord float %1, 0.000000e+00, !dbg !230
  %4 = fcmp ord float %0, 0.000000e+00
  %or.cond = select i1 %3, i1 %4, i1 false, !dbg !232
  br i1 %or.cond, label %L7, label %common.ret, !dbg !232

L7:                                               ; preds = %top
  %5 = fcmp une float %1, 1.000000e+00, !dbg !233
  br i1 %5, label %L11, label %L9, !dbg !234

common.ret.fold.split:                            ; preds = %L26
  br label %common.ret, !dbg !235

common.ret.fold.split16:                          ; preds = %L26
  br label %common.ret, !dbg !235

common.ret.fold.split17:                          ; preds = %L65
  br label %common.ret, !dbg !235

common.ret.fold.split18:                          ; preds = %L65
  br label %common.ret, !dbg !235

common.ret.fold.split19:                          ; preds = %L65
  br label %common.ret, !dbg !235

common.ret.fold.split20:                          ; preds = %L78
  br label %common.ret, !dbg !235

common.ret.fold.split21:                          ; preds = %L78
  br label %common.ret, !dbg !235

common.ret.fold.split22:                          ; preds = %L78
  br label %common.ret, !dbg !235

common.ret:                                       ; preds = %L143, %L140, %L136, %L129, %L99, %L78, %L65, %L42, %L26, %L26, %L9, %common.ret.fold.split22, %common.ret.fold.split21, %common.ret.fold.split20, %common.ret.fold.split19, %common.ret.fold.split18, %common.ret.fold.split17, %common.ret.fold.split16, %common.ret.fold.split, %top
  %common.ret.op = phi float [ %6, %L9 ], [ %16, %L42 ], [ %23, %L99 ], [ %33, %L136 ], [ %35, %L140 ], [ %37, %L143 ], [ %0, %L26 ], [ 0x3FE921FB60000000, %L65 ], [ 0.000000e+00, %L78 ], [ %value_phi, %L129 ], [ 0x7FF8000000000000, %top ], [ %0, %L26 ], [ 0x400921FB60000000, %common.ret.fold.split ], [ 0xC00921FB60000000, %common.ret.fold.split16 ], [ 0xBFE921FB60000000, %common.ret.fold.split17 ], [ 0x4002D97C80000000, %common.ret.fold.split18 ], [ 0xC002D97C80000000, %common.ret.fold.split19 ], [ -0.000000e+00, %common.ret.fold.split20 ], [ 0x400921FB60000000, %common.ret.fold.split21 ], [ 0xC00921FB60000000, %common.ret.fold.split22 ]
  ret float %common.ret.op, !dbg !235

L9:                                               ; preds = %L7
  %6 = call fastcc float @julia_atan_3290(float %0) #5, !dbg !236
  br label %common.ret

L11:                                              ; preds = %L7
  %7 = bitcast float %1 to i32, !dbg !237
  %8 = lshr i32 %7, 30, !dbg !239
  %9 = and i32 %8, 2, !dbg !239
  %10 = bitcast float %0 to i32, !dbg !237
  %.lobit = lshr i32 %10, 31, !dbg !241
  %11 = or i32 %9, %.lobit, !dbg !246
  %12 = fcmp une float %0, 0.000000e+00, !dbg !247
  br i1 %12, label %L40, label %L26, !dbg !249

L26:                                              ; preds = %L11
  switch i32 %11, label %L4724 [
    i32 0, label %common.ret
    i32 1, label %common.ret
    i32 2, label %common.ret.fold.split
    i32 3, label %common.ret.fold.split16
  ], !dbg !250

L40:                                              ; preds = %L11
  %13 = fcmp une float %1, 0.000000e+00, !dbg !251
  br i1 %13, label %L47, label %L42, !dbg !253

L42:                                              ; preds = %L40
  %14 = and i32 %10, -2147483648, !dbg !254
  %15 = or i32 %14, 1070141403, !dbg !254
  %16 = bitcast i32 %15 to float, !dbg !254
  br label %common.ret

L4724:                                            ; preds = %L26
  unreachable

L47:                                              ; preds = %L40
  %17 = fsub float %1, %1, !dbg !256
  %18 = fcmp oeq float %17, 0.000000e+00, !dbg !260
  br i1 %18, label %L90, label %L56, !dbg !259

L56:                                              ; preds = %L47
  %19 = fsub float %0, %0, !dbg !262
  %20 = fcmp oeq float %19, 0.000000e+00, !dbg !266
  br i1 %20, label %L78, label %L65, !dbg !265

L65:                                              ; preds = %L56
  switch i32 %11, label %L9025 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split17
    i32 2, label %common.ret.fold.split18
    i32 3, label %common.ret.fold.split19
  ], !dbg !268

L78:                                              ; preds = %L56
  switch i32 %11, label %L9026 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split20
    i32 2, label %common.ret.fold.split21
    i32 3, label %common.ret.fold.split22
  ], !dbg !269

L9025:                                            ; preds = %L65
  unreachable

L9026:                                            ; preds = %L78
  unreachable

L90:                                              ; preds = %L47
  %21 = fsub float %0, %0, !dbg !270
  %22 = fcmp oeq float %21, 0.000000e+00, !dbg !274
  br i1 %22, label %L101, label %L99, !dbg !273

L99:                                              ; preds = %L90
  %23 = call float @llvm.copysign.f32(float noundef 0x3FF921FB60000000, float %0) #8, !dbg !276
  br label %common.ret

L101:                                             ; preds = %L90
  %24 = and i32 %10, 2147483647, !dbg !277
  %25 = and i32 %7, 2147483647, !dbg !280
  %26 = sub nsw i32 %24, %25, !dbg !283
  %27 = icmp slt i32 %26, 226492416, !dbg !285
  br i1 %27, label %L116, label %L129, !dbg !288

L116:                                             ; preds = %L101
  %28 = fcmp uge float %1, 0.000000e+00, !dbg !289
  %29 = icmp sgt i32 %26, -218103809
  %or.cond23 = select i1 %28, i1 true, i1 %29, !dbg !291
  br i1 %or.cond23, label %L126, label %L129, !dbg !291

L126:                                             ; preds = %L116
  %30 = fdiv float %0, %1, !dbg !292
  %31 = call float @llvm.fabs.f32(float %30) #8, !dbg !294
  %32 = call fastcc float @julia_atan_3290(float %31) #5, !dbg !293
  br label %L129, !dbg !293

L129:                                             ; preds = %L126, %L116, %L101
  %value_phi = phi float [ %32, %L126 ], [ 0.000000e+00, %L116 ], [ 0x3FF921FB60000000, %L101 ]
  %value_phi1 = phi i32 [ %11, %L126 ], [ %11, %L116 ], [ %.lobit, %L101 ]
  switch i32 %value_phi1, label %L143 [
    i32 0, label %common.ret
    i32 1, label %L136
    i32 2, label %L140
  ], !dbg !295

L136:                                             ; preds = %L129
  %33 = fneg float %value_phi, !dbg !296
  br label %common.ret

L140:                                             ; preds = %L129
  %34 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !298
  %35 = fsub float 0x400921FB60000000, %34, !dbg !298
  br label %common.ret

L143:                                             ; preds = %L129
  %36 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !300
  %37 = fadd float %36, 0xC00921FB60000000, !dbg !300
  br label %common.ret
}

; ModuleID = 'text'
source_filename = "text"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:10:11:12:13"
target triple = "x86_64-linux-gnu"

; Function Attrs: nofree noinline nosync readnone
define dso_local float @julia_atan_3286(float %0, float %1) local_unnamed_addr #0 !dbg !8 {
top:
  %2 = call {}*** @julia.get_pgcstack()
  %3 = fcmp ord float %1, 0.000000e+00, !dbg !10
  %4 = fcmp ord float %0, 0.000000e+00
  %or.cond = select i1 %3, i1 %4, i1 false, !dbg !15
  br i1 %or.cond, label %L7, label %common.ret, !dbg !15

L7:                                               ; preds = %top
  %5 = fcmp une float %1, 1.000000e+00, !dbg !16
  br i1 %5, label %L11, label %L9, !dbg !18

common.ret.fold.split:                            ; preds = %L26
  br label %common.ret, !dbg !19

common.ret.fold.split16:                          ; preds = %L26
  br label %common.ret, !dbg !19

common.ret.fold.split17:                          ; preds = %L65
  br label %common.ret, !dbg !19

common.ret.fold.split18:                          ; preds = %L65
  br label %common.ret, !dbg !19

common.ret.fold.split19:                          ; preds = %L65
  br label %common.ret, !dbg !19

common.ret.fold.split20:                          ; preds = %L78
  br label %common.ret, !dbg !19

common.ret.fold.split21:                          ; preds = %L78
  br label %common.ret, !dbg !19

common.ret.fold.split22:                          ; preds = %L78
  br label %common.ret, !dbg !19

common.ret:                                       ; preds = %L129, %L78, %common.ret.fold.split22, %common.ret.fold.split21, %common.ret.fold.split20, %L65, %common.ret.fold.split19, %common.ret.fold.split18, %common.ret.fold.split17, %L26, %L26, %common.ret.fold.split16, %common.ret.fold.split, %top, %L143, %L140, %L136, %L99, %L42, %L9
  %common.ret.op = phi float [ %6, %L9 ], [ %16, %L42 ], [ %23, %L99 ], [ %33, %L136 ], [ %35, %L140 ], [ %37, %L143 ], [ %0, %L26 ], [ 0x3FE921FB60000000, %L65 ], [ 0.000000e+00, %L78 ], [ %value_phi, %L129 ], [ 0x7FF8000000000000, %top ], [ %0, %L26 ], [ 0x400921FB60000000, %common.ret.fold.split ], [ 0xC00921FB60000000, %common.ret.fold.split16 ], [ 0xBFE921FB60000000, %common.ret.fold.split17 ], [ 0x4002D97C80000000, %common.ret.fold.split18 ], [ 0xC002D97C80000000, %common.ret.fold.split19 ], [ -0.000000e+00, %common.ret.fold.split20 ], [ 0x400921FB60000000, %common.ret.fold.split21 ], [ 0xC00921FB60000000, %common.ret.fold.split22 ]
  ret float %common.ret.op, !dbg !19

L9:                                               ; preds = %L7
  %6 = call fastcc float @julia_atan_3290(float %0) #4, !dbg !20
  br label %common.ret

L11:                                              ; preds = %L7
  %7 = bitcast float %1 to i32, !dbg !21
  %8 = lshr i32 %7, 30, !dbg !25
  %9 = and i32 %8, 2, !dbg !25
  %10 = bitcast float %0 to i32, !dbg !21
  %.lobit = lshr i32 %10, 31, !dbg !29
  %11 = or i32 %9, %.lobit, !dbg !40
  %12 = fcmp une float %0, 0.000000e+00, !dbg !42
  br i1 %12, label %L40, label %L26, !dbg !45

L26:                                              ; preds = %L11
  switch i32 %11, label %L4724 [
    i32 0, label %common.ret
    i32 1, label %common.ret
    i32 2, label %common.ret.fold.split
    i32 3, label %common.ret.fold.split16
  ], !dbg !46

L40:                                              ; preds = %L11
  %13 = fcmp une float %1, 0.000000e+00, !dbg !47
  br i1 %13, label %L47, label %L42, !dbg !49

L42:                                              ; preds = %L40
  %14 = and i32 %10, -2147483648, !dbg !50
  %15 = or i32 %14, 1070141403, !dbg !50
  %16 = bitcast i32 %15 to float, !dbg !50
  br label %common.ret

L4724:                                            ; preds = %L26
  unreachable

L47:                                              ; preds = %L40
  %17 = fsub float %1, %1, !dbg !53
  %18 = fcmp oeq float %17, 0.000000e+00, !dbg !60
  br i1 %18, label %L90, label %L56, !dbg !59

L56:                                              ; preds = %L47
  %19 = fsub float %0, %0, !dbg !62
  %20 = fcmp oeq float %19, 0.000000e+00, !dbg !66
  br i1 %20, label %L78, label %L65, !dbg !65

L65:                                              ; preds = %L56
  switch i32 %11, label %L9025 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split17
    i32 2, label %common.ret.fold.split18
    i32 3, label %common.ret.fold.split19
  ], !dbg !68

L78:                                              ; preds = %L56
  switch i32 %11, label %L9026 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split20
    i32 2, label %common.ret.fold.split21
    i32 3, label %common.ret.fold.split22
  ], !dbg !69

L9025:                                            ; preds = %L65
  unreachable

L9026:                                            ; preds = %L78
  unreachable

L90:                                              ; preds = %L47
  %21 = fsub float %0, %0, !dbg !70
  %22 = fcmp oeq float %21, 0.000000e+00, !dbg !74
  br i1 %22, label %L101, label %L99, !dbg !73

L99:                                              ; preds = %L90
  %23 = call float @llvm.copysign.f32(float noundef 0x3FF921FB60000000, float %0), !dbg !76
  br label %common.ret

L101:                                             ; preds = %L90
  %24 = and i32 %10, 2147483647, !dbg !78
  %25 = and i32 %7, 2147483647, !dbg !84
  %26 = sub nsw i32 %24, %25, !dbg !87
  %27 = icmp slt i32 %26, 226492416, !dbg !90
  br i1 %27, label %L116, label %L129, !dbg !98

L116:                                             ; preds = %L101
  %28 = fcmp uge float %1, 0.000000e+00, !dbg !99
  %29 = icmp sgt i32 %26, -218103809
  %or.cond23 = select i1 %28, i1 true, i1 %29, !dbg !102
  br i1 %or.cond23, label %L126, label %L129, !dbg !102

L126:                                             ; preds = %L116
  %30 = fdiv float %0, %1, !dbg !103
  %31 = call float @llvm.fabs.f32(float %30), !dbg !106
  %32 = call fastcc float @julia_atan_3290(float %31) #4, !dbg !105
  br label %L129, !dbg !105

L129:                                             ; preds = %L101, %L116, %L126
  %value_phi = phi float [ %32, %L126 ], [ 0.000000e+00, %L116 ], [ 0x3FF921FB60000000, %L101 ]
  %value_phi1 = phi i32 [ %11, %L126 ], [ %11, %L116 ], [ %.lobit, %L101 ]
  switch i32 %value_phi1, label %L143 [
    i32 0, label %common.ret
    i32 1, label %L136
    i32 2, label %L140
  ], !dbg !108

L136:                                             ; preds = %L129
  %33 = fneg float %value_phi, !dbg !109
  br label %common.ret

L140:                                             ; preds = %L129
  %34 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !111
  %35 = fsub float 0x400921FB60000000, %34, !dbg !111
  br label %common.ret

L143:                                             ; preds = %L129
  %36 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !113
  %37 = fadd float %36, 0xC00921FB60000000, !dbg !113
  br label %common.ret
}

; Function Attrs: nofree readnone
declare {}*** @julia.get_pgcstack() local_unnamed_addr #1

; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare float @llvm.copysign.f32(float, float) #2

; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare float @llvm.fabs.f32(float) #2

; Function Attrs: nofree nosync readnone
define internal fastcc float @julia_atan_3290(float %0) unnamed_addr #3 !dbg !115 {
top:
  %1 = call {}*** @julia.get_pgcstack()
  %2 = call float @llvm.fabs.f32(float %0), !dbg !116
  %3 = fcmp ult float %2, 0x4190000000000000, !dbg !119
  br i1 %3, label %L6, label %L4, !dbg !123

common.ret:                                       ; preds = %L8, %L52, %L11, %L4
  %common.ret.op = phi float [ %4, %L4 ], [ %19, %L11 ], [ %54, %L52 ], [ %0, %L8 ]
  ret float %common.ret.op, !dbg !124

L4:                                               ; preds = %top
  %4 = call float @llvm.copysign.f32(float noundef 0x3FF921FB60000000, float %0), !dbg !125
  br label %common.ret

L6:                                               ; preds = %top
  %5 = fcmp uge float %2, 4.375000e-01, !dbg !128
  br i1 %5, label %L22, label %L8, !dbg !130

L8:                                               ; preds = %L6
  %6 = fcmp uge float %2, 0x3F30000000000000, !dbg !131
  br i1 %6, label %L11, label %common.ret, !dbg !132

L11:                                              ; preds = %L8
  %7 = fmul float %0, %0, !dbg !133
  %8 = fmul float %7, %7, !dbg !138
  %9 = fmul contract float %8, 0x3FAF9584A0000000, !dbg !140
  %10 = fadd contract float %9, 0x3FC23EA1A0000000, !dbg !140
  %11 = fmul contract float %8, %10, !dbg !140
  %12 = fadd contract float %11, 0x3FD5555520000000, !dbg !140
  %13 = fmul float %7, %12, !dbg !149
  %14 = fmul contract float %8, 0x3FBB4248E0000000, !dbg !150
  %15 = fsub contract float 0xBFC9995300000000, %14, !dbg !150
  %16 = fmul float %8, %15, !dbg !155
  %17 = fadd float %16, %13, !dbg !156
  %18 = fmul float %17, %0, !dbg !159
  %19 = fsub float %0, %18, !dbg !160
  br label %common.ret

L22:                                              ; preds = %L6
  %20 = fcmp uge float %0, 0.000000e+00, !dbg !162
  %21 = fcmp ule float %0, 0.000000e+00, !dbg !166
  %22 = select i1 %21, float %0, float 1.000000e+00, !dbg !169
  %23 = select i1 %20, float %22, float -1.000000e+00, !dbg !169
  %24 = fcmp uge float %2, 1.187500e+00, !dbg !172
  br i1 %24, label %L44, label %L30, !dbg !173

L30:                                              ; preds = %L22
  %25 = fcmp uge float %2, 6.875000e-01, !dbg !174
  br i1 %25, label %L37, label %L32, !dbg !175

L32:                                              ; preds = %L30
  %26 = fmul float %2, 2.000000e+00, !dbg !176
  %27 = fadd float %26, -1.000000e+00, !dbg !178
  %28 = fadd float %2, 2.000000e+00, !dbg !179
  %29 = fdiv float %27, %28, !dbg !180
  br label %L52, !dbg !177

L37:                                              ; preds = %L30
  %30 = fadd float %2, -1.000000e+00, !dbg !182
  %31 = fadd float %2, 1.000000e+00, !dbg !184
  %32 = fdiv float %30, %31, !dbg !185
  br label %L52, !dbg !185

L44:                                              ; preds = %L22
  %33 = fcmp uge float %2, 2.437500e+00, !dbg !186
  br i1 %33, label %L51, label %L46, !dbg !187

L46:                                              ; preds = %L44
  %34 = fadd float %2, -1.500000e+00, !dbg !188
  %35 = fmul float %2, 1.500000e+00, !dbg !190
  %36 = fadd float %35, 1.000000e+00, !dbg !191
  %37 = fdiv float %34, %36, !dbg !192
  br label %L52, !dbg !189

L51:                                              ; preds = %L44
  %38 = fdiv float -1.000000e+00, %2, !dbg !193
  br label %L52, !dbg !193

L52:                                              ; preds = %L32, %L37, %L51, %L46
  %value_phi3 = phi float [ 0x3E6281F680000000, %L46 ], [ 0x3E74442D00000000, %L51 ], [ 0x3E3586ED20000000, %L32 ], [ 0x3E64442D00000000, %L37 ]
  %value_phi4 = phi float [ 0x3FEF730BC0000000, %L46 ], [ 0x3FF921FB40000000, %L51 ], [ 0x3FDDAC6700000000, %L32 ], [ 0x3FE921FB40000000, %L37 ]
  %value_phi5 = phi float [ %37, %L46 ], [ %38, %L51 ], [ %29, %L32 ], [ %32, %L37 ]
  %39 = fmul float %value_phi5, %value_phi5, !dbg !195
  %40 = fmul float %39, %39, !dbg !198
  %41 = fmul contract float %40, 0x3FAF9584A0000000, !dbg !200
  %42 = fadd contract float %41, 0x3FC23EA1A0000000, !dbg !200
  %43 = fmul contract float %40, %42, !dbg !200
  %44 = fadd contract float %43, 0x3FD5555520000000, !dbg !200
  %45 = fmul float %39, %44, !dbg !205
  %46 = fmul contract float %40, 0x3FBB4248E0000000, !dbg !206
  %47 = fsub contract float 0xBFC9995300000000, %46, !dbg !206
  %48 = fmul float %40, %47, !dbg !210
  %49 = fadd float %48, %45, !dbg !211
  %50 = fmul float %value_phi5, %49, !dbg !213
  %51 = fsub float %50, %value_phi3, !dbg !214
  %52 = fsub float %51, %value_phi5, !dbg !214
  %53 = fsub float %value_phi4, %52, !dbg !214
  %54 = call float @llvm.copysign.f32(float %53, float %23), !dbg !215
  br label %common.ret
}

; Function Attrs: nofree nosync readnone
define float @julia_f2_3283_inner.1(float %0, float %1) local_unnamed_addr #4 !dbg !217 {
entry:
  %2 = call {}*** @julia.get_pgcstack()
  %3 = call float @julia_atan_3286(float %0, float %1) #8, !dbg !218
  ret float %3, !dbg !220
}

; Function Attrs: mustprogress nofree nosync readnone willreturn
define float @preprocess_julia_f2_3283_inner.1(float %0, float %1) local_unnamed_addr #5 !dbg !221 {
entry:
  %2 = call {}*** @julia.get_pgcstack() #9
  %3 = call float @julia_atan_3286(float %0, float %1) #10, !dbg !222
  ret float %3, !dbg !224
}

; Function Attrs: mustprogress nofree nosync readnone willreturn
define internal { float, float } @diffejulia_f2_3283_inner.1(float %0, float %1, float %differeturn) local_unnamed_addr #5 !dbg !225 {
entry:
  %2 = call {}*** @julia.get_pgcstack() #9
  %3 = call float @julia_atan_3286(float %0, float %1) #10, !dbg !226
  br label %invertentry, !dbg !228

allocsForInversion:                               ; No predecessors!
  %"'de" = alloca float, align 4
  store float 0.000000e+00, float* %"'de", align 4

invertentry:                                      ; preds = %entry
  store float %differeturn, float* %"'de", align 4
}

; Function Attrs: mustprogress nofree noinline nosync readnone willreturn
define dso_local float @preprocess_julia_atan_3286(float %0, float %1) local_unnamed_addr #6 !dbg !229 {
top:
  %2 = call {}*** @julia.get_pgcstack() #9
  %3 = fcmp ord float %1, 0.000000e+00, !dbg !230
  %4 = fcmp ord float %0, 0.000000e+00
  %or.cond = select i1 %3, i1 %4, i1 false, !dbg !232
  br i1 %or.cond, label %L7, label %common.ret, !dbg !232

L7:                                               ; preds = %top
  %5 = fcmp une float %1, 1.000000e+00, !dbg !233
  br i1 %5, label %L11, label %L9, !dbg !234

common.ret.fold.split:                            ; preds = %L26
  br label %common.ret, !dbg !235

common.ret.fold.split16:                          ; preds = %L26
  br label %common.ret, !dbg !235

common.ret.fold.split17:                          ; preds = %L65
  br label %common.ret, !dbg !235

common.ret.fold.split18:                          ; preds = %L65
  br label %common.ret, !dbg !235

common.ret.fold.split19:                          ; preds = %L65
  br label %common.ret, !dbg !235

common.ret.fold.split20:                          ; preds = %L78
  br label %common.ret, !dbg !235

common.ret.fold.split21:                          ; preds = %L78
  br label %common.ret, !dbg !235

common.ret.fold.split22:                          ; preds = %L78
  br label %common.ret, !dbg !235

common.ret:                                       ; preds = %L143, %L140, %L136, %L129, %L99, %L78, %L65, %L42, %L26, %L26, %L9, %common.ret.fold.split22, %common.ret.fold.split21, %common.ret.fold.split20, %common.ret.fold.split19, %common.ret.fold.split18, %common.ret.fold.split17, %common.ret.fold.split16, %common.ret.fold.split, %top
  %common.ret.op = phi float [ %6, %L9 ], [ %16, %L42 ], [ %23, %L99 ], [ %33, %L136 ], [ %35, %L140 ], [ %37, %L143 ], [ %0, %L26 ], [ 0x3FE921FB60000000, %L65 ], [ 0.000000e+00, %L78 ], [ %value_phi, %L129 ], [ 0x7FF8000000000000, %top ], [ %0, %L26 ], [ 0x400921FB60000000, %common.ret.fold.split ], [ 0xC00921FB60000000, %common.ret.fold.split16 ], [ 0xBFE921FB60000000, %common.ret.fold.split17 ], [ 0x4002D97C80000000, %common.ret.fold.split18 ], [ 0xC002D97C80000000, %common.ret.fold.split19 ], [ -0.000000e+00, %common.ret.fold.split20 ], [ 0x400921FB60000000, %common.ret.fold.split21 ], [ 0xC00921FB60000000, %common.ret.fold.split22 ]
  ret float %common.ret.op, !dbg !235

L9:                                               ; preds = %L7
  %6 = call fastcc float @julia_atan_3290(float %0) #5, !dbg !236
  br label %common.ret

L11:                                              ; preds = %L7
  %7 = bitcast float %1 to i32, !dbg !237
  %8 = lshr i32 %7, 30, !dbg !239
  %9 = and i32 %8, 2, !dbg !239
  %10 = bitcast float %0 to i32, !dbg !237
  %.lobit = lshr i32 %10, 31, !dbg !241
  %11 = or i32 %9, %.lobit, !dbg !246
  %12 = fcmp une float %0, 0.000000e+00, !dbg !247
  br i1 %12, label %L40, label %L26, !dbg !249

L26:                                              ; preds = %L11
  switch i32 %11, label %L4724 [
    i32 0, label %common.ret
    i32 1, label %common.ret
    i32 2, label %common.ret.fold.split
    i32 3, label %common.ret.fold.split16
  ], !dbg !250

L40:                                              ; preds = %L11
  %13 = fcmp une float %1, 0.000000e+00, !dbg !251
  br i1 %13, label %L47, label %L42, !dbg !253

L42:                                              ; preds = %L40
  %14 = and i32 %10, -2147483648, !dbg !254
  %15 = or i32 %14, 1070141403, !dbg !254
  %16 = bitcast i32 %15 to float, !dbg !254
  br label %common.ret

L4724:                                            ; preds = %L26
  unreachable

L47:                                              ; preds = %L40
  %17 = fsub float %1, %1, !dbg !256
  %18 = fcmp oeq float %17, 0.000000e+00, !dbg !260
  br i1 %18, label %L90, label %L56, !dbg !259

L56:                                              ; preds = %L47
  %19 = fsub float %0, %0, !dbg !262
  %20 = fcmp oeq float %19, 0.000000e+00, !dbg !266
  br i1 %20, label %L78, label %L65, !dbg !265

L65:                                              ; preds = %L56
  switch i32 %11, label %L9025 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split17
    i32 2, label %common.ret.fold.split18
    i32 3, label %common.ret.fold.split19
  ], !dbg !268

L78:                                              ; preds = %L56
  switch i32 %11, label %L9026 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split20
    i32 2, label %common.ret.fold.split21
    i32 3, label %common.ret.fold.split22
  ], !dbg !269

L9025:                                            ; preds = %L65
  unreachable

L9026:                                            ; preds = %L78
  unreachable

L90:                                              ; preds = %L47
  %21 = fsub float %0, %0, !dbg !270
  %22 = fcmp oeq float %21, 0.000000e+00, !dbg !274
  br i1 %22, label %L101, label %L99, !dbg !273

L99:                                              ; preds = %L90
  %23 = call float @llvm.copysign.f32(float noundef 0x3FF921FB60000000, float %0) #9, !dbg !276
  br label %common.ret

L101:                                             ; preds = %L90
  %24 = and i32 %10, 2147483647, !dbg !277
  %25 = and i32 %7, 2147483647, !dbg !280
  %26 = sub nsw i32 %24, %25, !dbg !283
  %27 = icmp slt i32 %26, 226492416, !dbg !285
  br i1 %27, label %L116, label %L129, !dbg !288

L116:                                             ; preds = %L101
  %28 = fcmp uge float %1, 0.000000e+00, !dbg !289
  %29 = icmp sgt i32 %26, -218103809
  %or.cond23 = select i1 %28, i1 true, i1 %29, !dbg !291
  br i1 %or.cond23, label %L126, label %L129, !dbg !291

L126:                                             ; preds = %L116
  %30 = fdiv float %0, %1, !dbg !292
  %31 = call float @llvm.fabs.f32(float %30) #9, !dbg !294
  %32 = call fastcc float @julia_atan_3290(float %31) #5, !dbg !293
  br label %L129, !dbg !293

L129:                                             ; preds = %L126, %L116, %L101
  %value_phi = phi float [ %32, %L126 ], [ 0.000000e+00, %L116 ], [ 0x3FF921FB60000000, %L101 ]
  %value_phi1 = phi i32 [ %11, %L126 ], [ %11, %L116 ], [ %.lobit, %L101 ]
  switch i32 %value_phi1, label %L143 [
    i32 0, label %common.ret
    i32 1, label %L136
    i32 2, label %L140
  ], !dbg !295

L136:                                             ; preds = %L129
  %33 = fneg float %value_phi, !dbg !296
  br label %common.ret

L140:                                             ; preds = %L129
  %34 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !298
  %35 = fsub float 0x400921FB60000000, %34, !dbg !298
  br label %common.ret

L143:                                             ; preds = %L129
  %36 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !300
  %37 = fadd float %36, 0xC00921FB60000000, !dbg !300
  br label %common.ret
}

; Function Attrs: mustprogress nofree noinline nosync readnone willreturn
define internal { float, float } @diffejulia_atan_3286(float %0, float %1, float %differeturn) local_unnamed_addr #6 !dbg !302 {
top:
  %2 = call {}*** @julia.get_pgcstack() #9
  %3 = fcmp ord float %1, 0.000000e+00, !dbg !303
  %4 = fcmp ord float %0, 0.000000e+00
  %or.cond = select i1 %3, i1 %4, i1 false, !dbg !305
  store i8 7, i8* %_cache, align 1, !dbg !305, !invariant.group !306
  store i8 13, i8* %_cache13, align 1, !dbg !305, !invariant.group !307
  br i1 %or.cond, label %L7, label %common.ret, !dbg !305

L7:                                               ; preds = %top
  %5 = fcmp une float %1, 1.000000e+00, !dbg !308
  br i1 %5, label %L11, label %L9, !dbg !309

common.ret.fold.split:                            ; preds = %L26
  store i8 7, i8* %_cache, align 1, !dbg !310, !invariant.group !306
  store i8 9, i8* %_cache13, align 1, !dbg !310, !invariant.group !307
  br label %common.ret, !dbg !310

common.ret.fold.split16:                          ; preds = %L26
  store i8 7, i8* %_cache, align 1, !dbg !310, !invariant.group !306
  store i8 10, i8* %_cache13, align 1, !dbg !310, !invariant.group !307
  br label %common.ret, !dbg !310

common.ret.fold.split17:                          ; preds = %L65
  store i8 7, i8* %_cache, align 1, !dbg !310, !invariant.group !306
  store i8 17, i8* %_cache13, align 1, !dbg !310, !invariant.group !307
  br label %common.ret, !dbg !310

common.ret.fold.split18:                          ; preds = %L65
  store i8 7, i8* %_cache, align 1, !dbg !310, !invariant.group !306
  store i8 2, i8* %_cache13, align 1, !dbg !310, !invariant.group !307
  br label %common.ret, !dbg !310

common.ret.fold.split19:                          ; preds = %L65
  store i8 7, i8* %_cache, align 1, !dbg !310, !invariant.group !306
  store i8 12, i8* %_cache13, align 1, !dbg !310, !invariant.group !307
  br label %common.ret, !dbg !310

common.ret.fold.split20:                          ; preds = %L78
  store i8 7, i8* %_cache, align 1, !dbg !310, !invariant.group !306
  store i8 8, i8* %_cache13, align 1, !dbg !310, !invariant.group !307
  br label %common.ret, !dbg !310

common.ret.fold.split21:                          ; preds = %L78
  store i8 7, i8* %_cache, align 1, !dbg !310, !invariant.group !306
  store i8 3, i8* %_cache13, align 1, !dbg !310, !invariant.group !307
  br label %common.ret, !dbg !310

common.ret.fold.split22:                          ; preds = %L78
  store i8 7, i8* %_cache, align 1, !dbg !310, !invariant.group !306
  store i8 7, i8* %_cache13, align 1, !dbg !310, !invariant.group !307
  br label %common.ret, !dbg !310

common.ret:                                       ; preds = %L143, %L140, %L136, %L129, %L99, %L78, %L65, %L42, %L26, %L26, %L9, %common.ret.fold.split22, %common.ret.fold.split21, %common.ret.fold.split20, %common.ret.fold.split19, %common.ret.fold.split18, %common.ret.fold.split17, %common.ret.fold.split16, %common.ret.fold.split, %top
  %common.ret.op_replacementA = phi float 
  br label %invertcommon.ret, !dbg !310

L9:                                               ; preds = %L7
  %_replacementA = phi float , !dbg !311
  store i8 5, i8* %_cache, align 1, !invariant.group !306
  store i8 1, i8* %_cache13, align 1, !invariant.group !307
  br label %common.ret

L11:                                              ; preds = %L7
  %6 = bitcast float %1 to i32, !dbg !312
  %7 = lshr i32 %6, 30, !dbg !314
  %8 = and i32 %7, 2, !dbg !314
  %9 = bitcast float %0 to i32, !dbg !312
  %.lobit = lshr i32 %9, 31, !dbg !316
  %10 = or i32 %8, %.lobit, !dbg !321
  %11 = fcmp une float %0, 0.000000e+00, !dbg !322
  br i1 %11, label %L40, label %L26, !dbg !324

L26:                                              ; preds = %L11
  store i8 6, i8* %_cache, align 1, !dbg !325, !invariant.group !306
  store i8 14, i8* %_cache13, align 1, !dbg !325, !invariant.group !307
  switch i32 %10, label %L4724 [
    i32 0, label %common.ret
    i32 1, label %common.ret
    i32 2, label %common.ret.fold.split
    i32 3, label %common.ret.fold.split16
  ], !dbg !325

L40:                                              ; preds = %L11
  %12 = fcmp une float %1, 0.000000e+00, !dbg !326
  br i1 %12, label %L47, label %L42, !dbg !328

L42:                                              ; preds = %L40
  %13 = and i32 %9, -2147483648, !dbg !329
  %_replacementA17 = phi i32 , !dbg !329
  %_replacementA15 = phi float , !dbg !329
  store i8 2, i8* %_cache, align 1, !invariant.group !306
  store i8 0, i8* %_cache13, align 1, !invariant.group !307
  br label %common.ret

L4724:                                            ; preds = %L26
  unreachable

L47:                                              ; preds = %L40
  %14 = fsub float %1, %1, !dbg !331
  %15 = fcmp oeq float %14, 0.000000e+00, !dbg !335
  br i1 %15, label %L90, label %L56, !dbg !334

L56:                                              ; preds = %L47
  %16 = fsub float %0, %0, !dbg !337
  %17 = fcmp oeq float %16, 0.000000e+00, !dbg !341
  br i1 %17, label %L78, label %L65, !dbg !340

L65:                                              ; preds = %L56
  store i8 7, i8* %_cache, align 1, !dbg !343, !invariant.group !306
  store i8 15, i8* %_cache13, align 1, !dbg !343, !invariant.group !307
  switch i32 %10, label %L9025 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split17
    i32 2, label %common.ret.fold.split18
    i32 3, label %common.ret.fold.split19
  ], !dbg !343

L78:                                              ; preds = %L56
  store i8 7, i8* %_cache, align 1, !dbg !344, !invariant.group !306
  store i8 16, i8* %_cache13, align 1, !dbg !344, !invariant.group !307
  switch i32 %10, label %L9026 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split20
    i32 2, label %common.ret.fold.split21
    i32 3, label %common.ret.fold.split22
  ], !dbg !344

L9025:                                            ; preds = %L65
  unreachable

L9026:                                            ; preds = %L78
  unreachable

L90:                                              ; preds = %L47
  %18 = fsub float %0, %0, !dbg !345
  %19 = fcmp oeq float %18, 0.000000e+00, !dbg !349
  br i1 %19, label %L101, label %L99, !dbg !348

L99:                                              ; preds = %L90
  %20 = call float @llvm.copysign.f32(float noundef 0x3FF921FB60000000, float %0) #9, !dbg !351
  store i8 7, i8* %_cache, align 1, !invariant.group !306
  store i8 18, i8* %_cache13, align 1, !invariant.group !307
  br label %common.ret

L101:                                             ; preds = %L90
  %21 = and i32 %9, 2147483647, !dbg !352
  %22 = and i32 %6, 2147483647, !dbg !355
  %23 = sub nsw i32 %21, %22, !dbg !358
  %24 = icmp slt i32 %23, 226492416, !dbg !360
  br i1 %24, label %L116, label %L129, !dbg !363

L116:                                             ; preds = %L101
  %25 = fcmp uge float %1, 0.000000e+00, !dbg !364
  %26 = icmp sgt i32 %23, -218103809
  %or.cond23 = select i1 %25, i1 true, i1 %26, !dbg !366
  br i1 %or.cond23, label %L126, label %L129, !dbg !366

L126:                                             ; preds = %L116
  %27 = fdiv float %0, %1, !dbg !367
  %28 = call float @llvm.fabs.f32(float %27) #9, !dbg !369
  %29 = call fastcc float @julia_atan_3290(float %28) #5, !dbg !368
  br label %L129, !dbg !368

L129:                                             ; preds = %L126, %L116, %L101
  %value_phi = phi float [ %29, %L126 ], [ 0.000000e+00, %L116 ], [ 0x3FF921FB60000000, %L101 ]
  %value_phi1 = phi i32 [ %10, %L126 ], [ %10, %L116 ], [ %.lobit, %L101 ]
  store i8 1, i8* %_cache, align 1, !dbg !370, !invariant.group !306
  store i8 4, i8* %_cache13, align 1, !dbg !370, !invariant.group !307
  switch i32 %value_phi1, label %L143 [
    i32 0, label %common.ret
    i32 1, label %L136
    i32 2, label %L140
  ], !dbg !370

L136:                                             ; preds = %L129
  %30 = fneg float %value_phi, !dbg !371
  store i8 3, i8* %_cache, align 1, !invariant.group !306
  store i8 5, i8* %_cache13, align 1, !invariant.group !307
  br label %common.ret

L140:                                             ; preds = %L129
  %31 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !373
  %32 = fsub float 0x400921FB60000000, %31, !dbg !373
  store i8 4, i8* %_cache, align 1, !invariant.group !306
  store i8 6, i8* %_cache13, align 1, !invariant.group !307
  br label %common.ret

L143:                                             ; preds = %L129
  %33 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !375
  %34 = fadd float %33, 0xC00921FB60000000, !dbg !375
  store i8 0, i8* %_cache, align 1, !invariant.group !306
  store i8 11, i8* %_cache13, align 1, !invariant.group !307
  br label %common.ret

allocsForInversion:                               ; No predecessors!
  %"common.ret.op'de" = alloca float, align 4
  store float 0.000000e+00, float* %"common.ret.op'de", align 4
  %"'de" = alloca float, align 4
  store float 0.000000e+00, float* %"'de", align 4
  %"'de1" = alloca float, align 4
  store float 0.000000e+00, float* %"'de1", align 4
  %"'de2" = alloca float, align 4
  store float 0.000000e+00, float* %"'de2", align 4
  %"'de4" = alloca float, align 4
  store float 0.000000e+00, float* %"'de4", align 4
  %"'de6" = alloca float, align 4
  store float 0.000000e+00, float* %"'de6", align 4
  %"value_phi'de" = alloca float, align 4
  store float 0.000000e+00, float* %"value_phi'de", align 4
  %"'de9" = alloca float, align 4
  store float 0.000000e+00, float* %"'de9", align 4
  %"'de12" = alloca float, align 4
  store float 0.000000e+00, float* %"'de12", align 4
  %_cache = alloca i8, align 1
  store i8 0, i8* %_cache, align 1
  %_cache13 = alloca i8, align 1
  store i8 0, i8* %_cache13, align 1
  %"'de14" = alloca i32, align 4
  store i32 0, i32* %"'de14", align 4
  %"'de16" = alloca i32, align 4
  store i32 0, i32* %"'de16", align 4

inverttop:                                        ; preds = %invertcommon.ret, %invertL7
  %35 = load float, float* %"'de", align 4
  %36 = load float, float* %"'de1", align 4
  %37 = insertvalue { float, float } undef, float %35, 0
  %38 = insertvalue { float, float } %37, float %36, 1
  ret { float, float } %38

invertL7:                                         ; preds = %invertL11, %invertL9
  br label %inverttop

invertcommon.ret.fold.split:                      ; preds = %invertcommon.ret
  br label %invertL26

invertcommon.ret.fold.split16:                    ; preds = %invertcommon.ret
  br label %invertL26

invertcommon.ret.fold.split17:                    ; preds = %invertcommon.ret
  br label %invertL65

invertcommon.ret.fold.split18:                    ; preds = %invertcommon.ret
  br label %invertL65

invertcommon.ret.fold.split19:                    ; preds = %invertcommon.ret
  br label %invertL65

invertcommon.ret.fold.split20:                    ; preds = %invertcommon.ret
  br label %invertL78

invertcommon.ret.fold.split21:                    ; preds = %invertcommon.ret
  br label %invertL78

invertcommon.ret.fold.split22:                    ; preds = %invertcommon.ret
  br label %invertL78

invertcommon.ret:                                 ; preds = %common.ret
  store float %differeturn, float* %"common.ret.op'de", align 4
  %39 = load float, float* %"common.ret.op'de", align 4
  store float 0.000000e+00, float* %"common.ret.op'de", align 4
  %40 = load i8, i8* %_cache, align 1, !invariant.group !306
  %41 = icmp eq i8 0, %40
  %42 = icmp eq i8 1, %40
  %43 = icmp eq i8 2, %40
  %44 = icmp eq i8 3, %40
  %45 = icmp eq i8 4, %40
  %46 = icmp eq i8 5, %40
  %47 = icmp eq i8 6, %40
  %48 = select fast i1 %41, float %39, float 0.000000e+00
  %49 = load float, float* %"'de2", align 4
  %50 = fadd fast float %49, %39
  %51 = select fast i1 %41, float %50, float %49
  store float %51, float* %"'de2", align 4
  %52 = select fast i1 %45, float %39, float 0.000000e+00
  %53 = load float, float* %"'de4", align 4
  %54 = fadd fast float %53, %39
  %55 = select fast i1 %45, float %54, float %53
  store float %55, float* %"'de4", align 4
  %56 = select fast i1 %44, float %39, float 0.000000e+00
  %57 = load float, float* %"'de6", align 4
  %58 = fadd fast float %57, %39
  %59 = select fast i1 %44, float %58, float %57
  store float %59, float* %"'de6", align 4
  %60 = select fast i1 %42, float %39, float 0.000000e+00
  %61 = load float, float* %"value_phi'de", align 4
  %62 = fadd fast float %61, %39
  %63 = select fast i1 %42, float %62, float %61
  store float %63, float* %"value_phi'de", align 4
  %64 = select fast i1 %43, float %39, float 0.000000e+00
  %65 = load float, float* %"'de9", align 4
  %66 = fadd fast float %65, %39
  %67 = select fast i1 %43, float %66, float %65
  store float %67, float* %"'de9", align 4
  %68 = select fast i1 %47, float %39, float 0.000000e+00
  %69 = load float, float* %"'de", align 4
  %70 = fadd fast float %69, %39
  %71 = select fast i1 %47, float %70, float %69
  store float %71, float* %"'de", align 4
  %72 = select fast i1 %47, float %39, float 0.000000e+00
  %73 = load float, float* %"'de", align 4
  %74 = fadd fast float %73, %39
  %75 = select fast i1 %47, float %74, float %73
  store float %75, float* %"'de", align 4
  %76 = select fast i1 %46, float %39, float 0.000000e+00
  %77 = load float, float* %"'de12", align 4
  %78 = fadd fast float %77, %39
  %79 = select fast i1 %46, float %78, float %77
  store float %79, float* %"'de12", align 4
  %80 = load i8, i8* %_cache13, align 1, !invariant.group !307
  switch i8 %80, label %invertL99 [
    i8 0, label %invertL42
    i8 1, label %invertL9
    i8 2, label %invertcommon.ret.fold.split18
    i8 3, label %invertcommon.ret.fold.split21
    i8 4, label %invertL129
    i8 5, label %invertL136
    i8 6, label %invertL140
    i8 7, label %invertcommon.ret.fold.split22
    i8 8, label %invertcommon.ret.fold.split20
    i8 9, label %invertcommon.ret.fold.split
    i8 10, label %invertcommon.ret.fold.split16
    i8 11, label %invertL143
    i8 12, label %invertcommon.ret.fold.split19
    i8 13, label %inverttop
    i8 14, label %invertL26
    i8 15, label %invertL65
    i8 16, label %invertL78
    i8 17, label %invertcommon.ret.fold.split17
  ]

invertL9:                                         ; preds = %invertcommon.ret
  %81 = load float, float* %"'de12", align 4
  %82 = call fastcc { float } @diffejulia_atan_3290(float %0, float %81), !dbg !311
  %83 = extractvalue { float } %82, 0
  %84 = load float, float* %"'de", align 4
  %85 = fadd fast float %84, %83
  store float %85, float* %"'de", align 4
  store float 0.000000e+00, float* %"'de12", align 4
  br label %invertL7

invertL11:                                        ; preds = %invertL40, %invertL26
  %86 = load i32, i32* %"'de14", align 4
  %87 = bitcast i32 %86 to float
  %88 = load float, float* %"'de", align 4
  %89 = fadd fast float %88, %87
  store float %89, float* %"'de", align 4
  store i32 0, i32* %"'de14", align 4
  br label %invertL7

invertL26:                                        ; preds = %invertcommon.ret, %invertcommon.ret.fold.split16, %invertcommon.ret.fold.split
  br label %invertL11

invertL40:                                        ; No predecessors!
  br label %invertL11

invertL42:                                        ; preds = %invertcommon.ret
  %90 = load float, float* %"'de9", align 4
  %91 = bitcast float %90 to i32
  %92 = load i32, i32* %"'de16", align 4
  %93 = bitcast i32 %92 to float
  %94 = bitcast i32 %91 to float
  %95 = fadd fast float %93, %94
  %96 = bitcast float %95 to i32
  store i32 %96, i32* %"'de16", align 4
  store float 0.000000e+00, float* %"'de9", align 4
  %97 = load i32, i32* %"'de16", align 4

invertL4724:                                      ; No predecessors!

invertL47:                                        ; No predecessors!

invertL56:                                        ; No predecessors!

invertL65:                                        ; preds = %invertcommon.ret, %invertcommon.ret.fold.split19, %invertcommon.ret.fold.split18, %invertcommon.ret.fold.split17

invertL78:                                        ; preds = %invertcommon.ret, %invertcommon.ret.fold.split22, %invertcommon.ret.fold.split21, %invertcommon.ret.fold.split20

invertL9025:                                      ; No predecessors!

invertL9026:                                      ; No predecessors!

invertL90:                                        ; No predecessors!

invertL99:                                        ; preds = %invertcommon.ret

invertL101:                                       ; No predecessors!

invertL116:                                       ; No predecessors!

invertL126:                                       ; No predecessors!

invertL129:                                       ; preds = %invertcommon.ret

invertL136:                                       ; preds = %invertcommon.ret

invertL140:                                       ; preds = %invertcommon.ret

invertL143:                                       ; preds = %invertcommon.ret
}

; Function Attrs: mustprogress nofree nosync readnone willreturn
define internal fastcc float @preprocess_julia_atan_3290(float %0) unnamed_addr #7 !dbg !377 {
top:
  %1 = call {}*** @julia.get_pgcstack() #9
  %2 = call float @llvm.fabs.f32(float %0) #9, !dbg !378
  %3 = fcmp ult float %2, 0x4190000000000000, !dbg !380
  br i1 %3, label %L6, label %L4, !dbg !382

common.ret:                                       ; preds = %L52, %L11, %L8, %L4
  %common.ret.op = phi float [ %4, %L4 ], [ %19, %L11 ], [ %54, %L52 ], [ %0, %L8 ]
  ret float %common.ret.op, !dbg !383

L4:                                               ; preds = %top
  %4 = call float @llvm.copysign.f32(float noundef 0x3FF921FB60000000, float %0) #9, !dbg !384
  br label %common.ret

L6:                                               ; preds = %top
  %5 = fcmp uge float %2, 4.375000e-01, !dbg !386
  br i1 %5, label %L22, label %L8, !dbg !387

L8:                                               ; preds = %L6
  %6 = fcmp uge float %2, 0x3F30000000000000, !dbg !388
  br i1 %6, label %L11, label %common.ret, !dbg !389

L11:                                              ; preds = %L8
  %7 = fmul float %0, %0, !dbg !390
  %8 = fmul float %7, %7, !dbg !393
  %9 = fmul contract float %8, 0x3FAF9584A0000000, !dbg !395
  %10 = fadd contract float %9, 0x3FC23EA1A0000000, !dbg !395
  %11 = fmul contract float %8, %10, !dbg !395
  %12 = fadd contract float %11, 0x3FD5555520000000, !dbg !395
  %13 = fmul float %7, %12, !dbg !400
  %14 = fmul contract float %8, 0x3FBB4248E0000000, !dbg !401
  %15 = fsub contract float 0xBFC9995300000000, %14, !dbg !401
  %16 = fmul float %8, %15, !dbg !405
  %17 = fadd float %16, %13, !dbg !406
  %18 = fmul float %17, %0, !dbg !408
  %19 = fsub float %0, %18, !dbg !409
  br label %common.ret

L22:                                              ; preds = %L6
  %20 = fcmp uge float %0, 0.000000e+00, !dbg !410
  %21 = fcmp ule float %0, 0.000000e+00, !dbg !413
  %22 = select i1 %21, float %0, float 1.000000e+00, !dbg !415
  %23 = select i1 %20, float %22, float -1.000000e+00, !dbg !415
  %24 = fcmp uge float %2, 1.187500e+00, !dbg !416
  br i1 %24, label %L44, label %L30, !dbg !417

L30:                                              ; preds = %L22
  %25 = fcmp uge float %2, 6.875000e-01, !dbg !418
  br i1 %25, label %L37, label %L32, !dbg !419

L32:                                              ; preds = %L30
  %26 = fmul float %2, 2.000000e+00, !dbg !420
  %27 = fadd float %26, -1.000000e+00, !dbg !422
  %28 = fadd float %2, 2.000000e+00, !dbg !423
  %29 = fdiv float %27, %28, !dbg !424
  br label %L52, !dbg !421

L37:                                              ; preds = %L30
  %30 = fadd float %2, -1.000000e+00, !dbg !425
  %31 = fadd float %2, 1.000000e+00, !dbg !427
  %32 = fdiv float %30, %31, !dbg !428
  br label %L52, !dbg !428

L44:                                              ; preds = %L22
  %33 = fcmp uge float %2, 2.437500e+00, !dbg !429
  br i1 %33, label %L51, label %L46, !dbg !430

L46:                                              ; preds = %L44
  %34 = fadd float %2, -1.500000e+00, !dbg !431
  %35 = fmul float %2, 1.500000e+00, !dbg !433
  %36 = fadd float %35, 1.000000e+00, !dbg !434
  %37 = fdiv float %34, %36, !dbg !435
  br label %L52, !dbg !432

L51:                                              ; preds = %L44
  %38 = fdiv float -1.000000e+00, %2, !dbg !436
  br label %L52, !dbg !436

L52:                                              ; preds = %L51, %L46, %L37, %L32
  %value_phi3 = phi float [ 0x3E6281F680000000, %L46 ], [ 0x3E74442D00000000, %L51 ], [ 0x3E3586ED20000000, %L32 ], [ 0x3E64442D00000000, %L37 ]
  %value_phi4 = phi float [ 0x3FEF730BC0000000, %L46 ], [ 0x3FF921FB40000000, %L51 ], [ 0x3FDDAC6700000000, %L32 ], [ 0x3FE921FB40000000, %L37 ]
  %value_phi5 = phi float [ %37, %L46 ], [ %38, %L51 ], [ %29, %L32 ], [ %32, %L37 ]
  %39 = fmul float %value_phi5, %value_phi5, !dbg !438
  %40 = fmul float %39, %39, !dbg !441
  %41 = fmul contract float %40, 0x3FAF9584A0000000, !dbg !443
  %42 = fadd contract float %41, 0x3FC23EA1A0000000, !dbg !443
  %43 = fmul contract float %40, %42, !dbg !443
  %44 = fadd contract float %43, 0x3FD5555520000000, !dbg !443
  %45 = fmul float %39, %44, !dbg !448
  %46 = fmul contract float %40, 0x3FBB4248E0000000, !dbg !449
  %47 = fsub contract float 0xBFC9995300000000, %46, !dbg !449
  %48 = fmul float %40, %47, !dbg !453
  %49 = fadd float %48, %45, !dbg !454
  %50 = fmul float %value_phi5, %49, !dbg !456
  %51 = fsub float %50, %value_phi3, !dbg !457
  %52 = fsub float %51, %value_phi5, !dbg !457
  %53 = fsub float %value_phi4, %52, !dbg !457
  %54 = call float @llvm.copysign.f32(float %53, float %23) #9, !dbg !458
  br label %common.ret
}

; Function Attrs: mustprogress nofree nosync readnone willreturn
define internal fastcc { float } @diffejulia_atan_3290(float %0, float %differeturn) unnamed_addr #7 !dbg !460 {
top:
  %"common.ret.op'de" = alloca float, align 4
  store float 0.000000e+00, float* %"common.ret.op'de", align 4
  %"'de" = alloca float, align 4
  store float 0.000000e+00, float* %"'de", align 4
  %"'de1" = alloca float, align 4
  store float 0.000000e+00, float* %"'de1", align 4
  %"'de2" = alloca float, align 4
  store float 0.000000e+00, float* %"'de2", align 4
  %"'de4" = alloca float, align 4
  store float 0.000000e+00, float* %"'de4", align 4
  %_cache = alloca i8, align 1
  store i8 0, i8* %_cache, align 1
  %_cache6 = alloca i8, align 1
  store i8 0, i8* %_cache6, align 1
  %"'de8" = alloca float, align 4
  store float 0.000000e+00, float* %"'de8", align 4
  %"'de20" = alloca float, align 4
  store float 0.000000e+00, float* %"'de20", align 4
  %"'de21" = alloca float, align 4
  store float 0.000000e+00, float* %"'de21", align 4
  %"'de22" = alloca float, align 4
  store float 0.000000e+00, float* %"'de22", align 4
  %"'de25" = alloca float, align 4
  store float 0.000000e+00, float* %"'de25", align 4
  %"'de26" = alloca float, align 4
  store float 0.000000e+00, float* %"'de26", align 4
  %"'de27" = alloca float, align 4
  store float 0.000000e+00, float* %"'de27", align 4
  %"'de31" = alloca float, align 4
  store float 0.000000e+00, float* %"'de31", align 4
  %"'de32" = alloca float, align 4
  store float 0.000000e+00, float* %"'de32", align 4
  %"'de33" = alloca float, align 4
  store float 0.000000e+00, float* %"'de33", align 4
  %"'de36" = alloca float, align 4
  store float 0.000000e+00, float* %"'de36", align 4
  %"'de37" = alloca float, align 4
  store float 0.000000e+00, float* %"'de37", align 4
  %"'de43" = alloca float, align 4
  store float 0.000000e+00, float* %"'de43", align 4
  %"'de48" = alloca float, align 4
  store float 0.000000e+00, float* %"'de48", align 4
  %"'de49" = alloca float, align 4
  store float 0.000000e+00, float* %"'de49", align 4
  %"'de50" = alloca float, align 4
  store float 0.000000e+00, float* %"'de50", align 4
  %"'de52" = alloca float, align 4
  store float 0.000000e+00, float* %"'de52", align 4
  %"'de57" = alloca float, align 4
  store float 0.000000e+00, float* %"'de57", align 4
  %"'de58" = alloca float, align 4
  store float 0.000000e+00, float* %"'de58", align 4
  %"'de59" = alloca float, align 4
  store float 0.000000e+00, float* %"'de59", align 4
  %"'de65" = alloca float, align 4
  store float 0.000000e+00, float* %"'de65", align 4
  %"'de66" = alloca float, align 4
  store float 0.000000e+00, float* %"'de66", align 4
  %"'de67" = alloca float, align 4
  store float 0.000000e+00, float* %"'de67", align 4
  %"'de69" = alloca float, align 4
  store float 0.000000e+00, float* %"'de69", align 4
  %value_phi4_cache = alloca float, align 4
  store float 0.000000e+00, float* %value_phi4_cache, align 4
  %value_phi5_cache = alloca float, align 4
  store float 0.000000e+00, float* %value_phi5_cache, align 4
  %value_phi3_cache = alloca float, align 4
  store float 0.000000e+00, float* %value_phi3_cache, align 4
  %"'de90" = alloca float, align 4
  store float 0.000000e+00, float* %"'de90", align 4
  %"'de92" = alloca float, align 4
  store float 0.000000e+00, float* %"'de92", align 4
  %"'de93" = alloca float, align 4
  store float 0.000000e+00, float* %"'de93", align 4
  %"value_phi5'de" = alloca float, align 4
  store float 0.000000e+00, float* %"value_phi5'de", align 4
  %"'de94" = alloca float, align 4
  store float 0.000000e+00, float* %"'de94", align 4
  %"'de96" = alloca float, align 4
  store float 0.000000e+00, float* %"'de96", align 4
  %"'de97" = alloca float, align 4
  store float 0.000000e+00, float* %"'de97", align 4
  %"'de98" = alloca float, align 4
  store float 0.000000e+00, float* %"'de98", align 4
  %"'de101" = alloca float, align 4
  store float 0.000000e+00, float* %"'de101", align 4
  %"'de102" = alloca float, align 4
  store float 0.000000e+00, float* %"'de102", align 4
  %"'de103" = alloca float, align 4
  store float 0.000000e+00, float* %"'de103", align 4
  %"'de107" = alloca float, align 4
  store float 0.000000e+00, float* %"'de107", align 4
  %"'de108" = alloca float, align 4
  store float 0.000000e+00, float* %"'de108", align 4
  %"'de109" = alloca float, align 4
  store float 0.000000e+00, float* %"'de109", align 4
  %"'de112" = alloca float, align 4
  store float 0.000000e+00, float* %"'de112", align 4
  %"'de113" = alloca float, align 4
  store float 0.000000e+00, float* %"'de113", align 4
  %_cache121 = alloca i8, align 1
  store i8 0, i8* %_cache121, align 1
  %_cache122 = alloca i8, align 1
  store i8 0, i8* %_cache122, align 1
  %1 = call {}*** @julia.get_pgcstack() #9
  %2 = call float @llvm.fabs.f32(float %0) #9, !dbg !461
  %3 = fcmp ult float %2, 0x4190000000000000, !dbg !463
  br i1 %3, label %L6, label %L4, !dbg !465

common.ret:                                       ; preds = %L52, %L11, %L8, %L4
  br label %invertcommon.ret, !dbg !466

L4:                                               ; preds = %top
  store i8 0, i8* %_cache, align 1, !invariant.group !467
  store i8 3, i8* %_cache6, align 1, !invariant.group !468
  br label %common.ret

L6:                                               ; preds = %top
  %4 = fcmp uge float %2, 4.375000e-01, !dbg !469
  br i1 %4, label %L22, label %L8, !dbg !470

L8:                                               ; preds = %L6
  %5 = fcmp uge float %2, 0x3F30000000000000, !dbg !471
  store i8 1, i8* %_cache, align 1, !dbg !472, !invariant.group !467
  store i8 2, i8* %_cache6, align 1, !dbg !472, !invariant.group !468
  br i1 %5, label %L11, label %common.ret, !dbg !472

L11:                                              ; preds = %L8
  %6 = fmul float %0, %0, !dbg !473
  %7 = fmul float %6, %6, !dbg !476
  %8 = fmul contract float %7, 0x3FAF9584A0000000, !dbg !478
  %9 = fadd contract float %8, 0x3FC23EA1A0000000, !dbg !478
  %10 = fmul contract float %7, %9, !dbg !478
  %11 = fadd contract float %10, 0x3FD5555520000000, !dbg !478
  %12 = fmul float %6, %11, !dbg !483
  %13 = fmul contract float %7, 0x3FBB4248E0000000, !dbg !484
  %14 = fsub contract float 0xBFC9995300000000, %13, !dbg !484
  %15 = fmul float %7, %14, !dbg !488
  %16 = fadd float %15, %12, !dbg !489
  store i8 3, i8* %_cache, align 1, !invariant.group !467
  store i8 0, i8* %_cache6, align 1, !invariant.group !468
  br label %common.ret

L22:                                              ; preds = %L6
  %17 = fcmp uge float %0, 0.000000e+00, !dbg !491
  %18 = fcmp ule float %0, 0.000000e+00, !dbg !494
  %19 = select i1 %18, float %0, float 1.000000e+00, !dbg !496
  %20 = select i1 %17, float %19, float -1.000000e+00, !dbg !496
  %21 = fcmp uge float %2, 1.187500e+00, !dbg !497
  br i1 %21, label %L44, label %L30, !dbg !498

L30:                                              ; preds = %L22
  %22 = fcmp uge float %2, 6.875000e-01, !dbg !499
  br i1 %22, label %L37, label %L32, !dbg !500

L32:                                              ; preds = %L30
  %23 = fmul float %2, 2.000000e+00, !dbg !501
  %24 = fadd float %23, -1.000000e+00, !dbg !503
  %25 = fadd float %2, 2.000000e+00, !dbg !504
  %26 = fdiv float %24, %25, !dbg !505
  store i8 0, i8* %_cache121, align 1, !dbg !502, !invariant.group !506
  store i8 3, i8* %_cache122, align 1, !dbg !502, !invariant.group !507
  br label %L52, !dbg !502

L37:                                              ; preds = %L30
  %27 = fadd float %2, -1.000000e+00, !dbg !508
  %28 = fadd float %2, 1.000000e+00, !dbg !510
  %29 = fdiv float %27, %28, !dbg !511
  store i8 1, i8* %_cache121, align 1, !dbg !511, !invariant.group !506
  store i8 2, i8* %_cache122, align 1, !dbg !511, !invariant.group !507
  br label %L52, !dbg !511

L44:                                              ; preds = %L22
  %30 = fcmp uge float %2, 2.437500e+00, !dbg !512
  br i1 %30, label %L51, label %L46, !dbg !513

L46:                                              ; preds = %L44
  %31 = fadd float %2, -1.500000e+00, !dbg !514
  %32 = fmul float %2, 1.500000e+00, !dbg !516
  %33 = fadd float %32, 1.000000e+00, !dbg !517
  %34 = fdiv float %31, %33, !dbg !518
  store i8 2, i8* %_cache121, align 1, !dbg !515, !invariant.group !506
  store i8 1, i8* %_cache122, align 1, !dbg !515, !invariant.group !507
  br label %L52, !dbg !515

L51:                                              ; preds = %L44
  %35 = fdiv float -1.000000e+00, %2, !dbg !519
  store i8 3, i8* %_cache121, align 1, !dbg !519, !invariant.group !506
  store i8 0, i8* %_cache122, align 1, !dbg !519, !invariant.group !507
  br label %L52, !dbg !519

L52:                                              ; preds = %L51, %L46, %L37, %L32
  %value_phi3 = phi float [ 0x3E6281F680000000, %L46 ], [ 0x3E74442D00000000, %L51 ], [ 0x3E3586ED20000000, %L32 ], [ 0x3E64442D00000000, %L37 ]
  %value_phi4 = phi float [ 0x3FEF730BC0000000, %L46 ], [ 0x3FF921FB40000000, %L51 ], [ 0x3FDDAC6700000000, %L32 ], [ 0x3FE921FB40000000, %L37 ]
  %value_phi5 = phi float [ %34, %L46 ], [ %35, %L51 ], [ %26, %L32 ], [ %29, %L37 ]
  %36 = fmul float %value_phi5, %value_phi5, !dbg !521
  %37 = fmul float %36, %36, !dbg !524
  %38 = fmul contract float %37, 0x3FAF9584A0000000, !dbg !526
  %39 = fadd contract float %38, 0x3FC23EA1A0000000, !dbg !526
  %40 = fmul contract float %37, %39, !dbg !526
  %41 = fadd contract float %40, 0x3FD5555520000000, !dbg !526
  %42 = fmul float %36, %41, !dbg !531
  %43 = fmul contract float %37, 0x3FBB4248E0000000, !dbg !532
  %44 = fsub contract float 0xBFC9995300000000, %43, !dbg !532
  %45 = fmul float %37, %44, !dbg !536
  %46 = fadd float %45, %42, !dbg !537
  %47 = fmul float %value_phi5, %46, !dbg !539
  %48 = fsub float %47, %value_phi3, !dbg !540
  %49 = fsub float %48, %value_phi5, !dbg !540
  %50 = fsub float %value_phi4, %49, !dbg !540
  store i8 2, i8* %_cache, align 1, !invariant.group !467
  store float %value_phi3, float* %value_phi3_cache, align 4, !invariant.group !541
  store float %value_phi5, float* %value_phi5_cache, align 4, !invariant.group !542
  store float %value_phi4, float* %value_phi4_cache, align 4, !invariant.group !543
  store i8 1, i8* %_cache6, align 1, !invariant.group !468
  br label %common.ret

inverttop:                                        ; preds = %invertL6, %invertL4
  %51 = load float, float* %"'de", align 4
  store float 0.000000e+00, float* %"'de", align 4
  %52 = fcmp fast olt float %0, 0.000000e+00
  %53 = select fast i1 %52, float -1.000000e+00, float 1.000000e+00
  %54 = fmul fast float %53, %51
  %55 = load float, float* %"'de1", align 4
  %56 = fadd fast float %55, %54
  store float %56, float* %"'de1", align 4
  %57 = load float, float* %"'de1", align 4
  %58 = insertvalue { float } undef, float %57, 0
  ret { float } %58

invertcommon.ret:                                 ; preds = %common.ret
  store float %differeturn, float* %"common.ret.op'de", align 4
  %59 = load float, float* %"common.ret.op'de", align 4
  store float 0.000000e+00, float* %"common.ret.op'de", align 4
  %60 = load i8, i8* %_cache, align 1, !invariant.group !467
  %61 = icmp eq i8 1, %60
  %62 = icmp eq i8 2, %60
  %63 = icmp eq i8 3, %60
  %64 = select fast i1 %62, float %59, float 0.000000e+00
  %65 = load float, float* %"'de2", align 4
  %66 = fadd fast float %65, %59
  %67 = select fast i1 %62, float %66, float %65
  store float %67, float* %"'de2", align 4
  %68 = select fast i1 %63, float %59, float 0.000000e+00
  %69 = load float, float* %"'de4", align 4
  %70 = fadd fast float %69, %59
  %71 = select fast i1 %63, float %70, float %69
  store float %71, float* %"'de4", align 4
  %72 = select fast i1 %61, float %59, float 0.000000e+00
  %73 = load float, float* %"'de1", align 4
  %74 = fadd fast float %73, %59
  %75 = select fast i1 %61, float %74, float %73
  store float %75, float* %"'de1", align 4
  %76 = load i8, i8* %_cache6, align 1, !invariant.group !468
  switch i8 %76, label %invertL4 [
    i8 0, label %invertL11
    i8 1, label %invertL52
    i8 2, label %invertL8
  ]

invertL4:                                         ; preds = %invertcommon.ret
  br label %inverttop

invertL6:                                         ; preds = %invertL22, %invertL8
  br label %inverttop

invertL8:                                         ; preds = %invertL11, %invertcommon.ret
  br label %invertL6

invertL11:                                        ; preds = %invertcommon.ret
  %77 = load float, float* %"'de4", align 4
  %78 = fneg fast float %77
  store float 0.000000e+00, float* %"'de4", align 4
  %79 = load float, float* %"'de1", align 4
  %80 = fadd fast float %79, %77
  store float %80, float* %"'de1", align 4
  %81 = load float, float* %"'de8", align 4
  %82 = fadd fast float %81, %78
  store float %82, float* %"'de8", align 4
  %83 = load float, float* %"'de8", align 4
  %m0diffe = fmul fast float %83, %0
  %_unwrap = fmul float %0, %0
  %_unwrap10 = fmul float %_unwrap, %_unwrap
  %_unwrap11 = fmul contract float %_unwrap10, 0x3FBB4248E0000000
  %_unwrap12 = fsub contract float 0xBFC9995300000000, %_unwrap11
  %_unwrap13 = fmul float %_unwrap10, %_unwrap12
  %_unwrap14 = fmul contract float %_unwrap10, 0x3FAF9584A0000000
  %_unwrap15 = fadd contract float %_unwrap14, 0x3FC23EA1A0000000
  %_unwrap16 = fmul contract float %_unwrap10, %_unwrap15
  %_unwrap17 = fadd contract float %_unwrap16, 0x3FD5555520000000
  %_unwrap18 = fmul float %_unwrap, %_unwrap17
  %_unwrap19 = fadd float %_unwrap13, %_unwrap18
  %m1diffe = fmul fast float %83, %_unwrap19
  store float 0.000000e+00, float* %"'de8", align 4
  %84 = load float, float* %"'de20", align 4
  %85 = fadd fast float %84, %m0diffe
  store float %85, float* %"'de20", align 4
  %86 = load float, float* %"'de1", align 4
  %87 = fadd fast float %86, %m1diffe
  store float %87, float* %"'de1", align 4
  %88 = load float, float* %"'de20", align 4
  store float 0.000000e+00, float* %"'de20", align 4
  %89 = load float, float* %"'de21", align 4
  %90 = fadd fast float %89, %88
  store float %90, float* %"'de21", align 4
  %91 = load float, float* %"'de22", align 4
  %92 = fadd fast float %91, %88
  store float %92, float* %"'de22", align 4
  %93 = load float, float* %"'de21", align 4
  %m0diffe23 = fmul fast float %93, %_unwrap12
  %m1diffe24 = fmul fast float %93, %_unwrap10
  store float 0.000000e+00, float* %"'de21", align 4
  %94 = load float, float* %"'de25", align 4
  %95 = fadd fast float %94, %m0diffe23
  store float %95, float* %"'de25", align 4
  %96 = load float, float* %"'de26", align 4
  %97 = fadd fast float %96, %m1diffe24
  store float %97, float* %"'de26", align 4
  %98 = load float, float* %"'de26", align 4
  %99 = fneg fast float %98
  store float 0.000000e+00, float* %"'de26", align 4
  %100 = load float, float* %"'de27", align 4
  %101 = fadd fast float %100, %99
  store float %101, float* %"'de27", align 4
  %102 = load float, float* %"'de27", align 4
  %m0diffe28 = fmul fast float %102, 0x3FBB4248E0000000
  store float 0.000000e+00, float* %"'de27", align 4
  %103 = load float, float* %"'de25", align 4
  %104 = fadd fast float %103, %m0diffe28
  store float %104, float* %"'de25", align 4
  %105 = load float, float* %"'de22", align 4
  %m0diffe29 = fmul fast float %105, %_unwrap17
  %m1diffe30 = fmul fast float %105, %_unwrap
  store float 0.000000e+00, float* %"'de22", align 4
  %106 = load float, float* %"'de31", align 4
  %107 = fadd fast float %106, %m0diffe29
  store float %107, float* %"'de31", align 4
  %108 = load float, float* %"'de32", align 4
  %109 = fadd fast float %108, %m1diffe30
  store float %109, float* %"'de32", align 4
  %110 = load float, float* %"'de32", align 4
  store float 0.000000e+00, float* %"'de32", align 4
  %111 = load float, float* %"'de33", align 4
  %112 = fadd fast float %111, %110
  store float %112, float* %"'de33", align 4
  %113 = load float, float* %"'de33", align 4
  %m0diffe34 = fmul fast float %113, %_unwrap15
  %m1diffe35 = fmul fast float %113, %_unwrap10
  store float 0.000000e+00, float* %"'de33", align 4
  %114 = load float, float* %"'de25", align 4
  %115 = fadd fast float %114, %m0diffe34
  store float %115, float* %"'de25", align 4
  %116 = load float, float* %"'de36", align 4
  %117 = fadd fast float %116, %m1diffe35
  store float %117, float* %"'de36", align 4
  %118 = load float, float* %"'de36", align 4
  store float 0.000000e+00, float* %"'de36", align 4
  %119 = load float, float* %"'de37", align 4
  %120 = fadd fast float %119, %118
  store float %120, float* %"'de37", align 4
  %121 = load float, float* %"'de37", align 4
  %m0diffe38 = fmul fast float %121, 0x3FAF9584A0000000
  store float 0.000000e+00, float* %"'de37", align 4
  %122 = load float, float* %"'de25", align 4
  %123 = fadd fast float %122, %m0diffe38
  store float %123, float* %"'de25", align 4
  %124 = load float, float* %"'de25", align 4
  %m0diffe39 = fmul fast float %124, %_unwrap
  %m1diffe40 = fmul fast float %124, %_unwrap
  store float 0.000000e+00, float* %"'de25", align 4
  %125 = load float, float* %"'de31", align 4
  %126 = fadd fast float %125, %m0diffe39
  store float %126, float* %"'de31", align 4
  %127 = load float, float* %"'de31", align 4
  %128 = fadd fast float %127, %m1diffe40
  store float %128, float* %"'de31", align 4
  %129 = load float, float* %"'de31", align 4
  %m0diffe41 = fmul fast float %129, %0
  %m1diffe42 = fmul fast float %129, %0
  store float 0.000000e+00, float* %"'de31", align 4
  %130 = load float, float* %"'de1", align 4
  %131 = fadd fast float %130, %m0diffe41
  store float %131, float* %"'de1", align 4
  %132 = load float, float* %"'de1", align 4
  %133 = fadd fast float %132, %m1diffe42
  store float %133, float* %"'de1", align 4
  br label %invertL8

invertL22:                                        ; preds = %invertL44, %invertL30
  br label %invertL6

invertL30:                                        ; preds = %invertL37, %invertL32
  br label %invertL22

invertL32:                                        ; preds = %invertL52
  %134 = load float, float* %"'de43", align 4
  %_unwrap44 = fadd float %2, 2.000000e+00
  %d0diffe = fdiv fast float %134, %_unwrap44
  %_unwrap45 = fmul float %2, 2.000000e+00
  %_unwrap46 = fadd float %_unwrap45, -1.000000e+00
  %_unwrap47 = fdiv float %_unwrap46, %_unwrap44
  %135 = fdiv fast float %134, %_unwrap44
  %136 = fmul fast float %_unwrap47, %135
  %137 = fneg fast float %136
  store float 0.000000e+00, float* %"'de43", align 4
  %138 = load float, float* %"'de48", align 4
  %139 = fadd fast float %138, %d0diffe
  store float %139, float* %"'de48", align 4
  %140 = load float, float* %"'de49", align 4
  %141 = fadd fast float %140, %137
  store float %141, float* %"'de49", align 4
  %142 = load float, float* %"'de49", align 4
  store float 0.000000e+00, float* %"'de49", align 4
  %143 = load float, float* %"'de", align 4
  %144 = fadd fast float %143, %142
  store float %144, float* %"'de", align 4
  %145 = load float, float* %"'de48", align 4
  store float 0.000000e+00, float* %"'de48", align 4
  %146 = load float, float* %"'de50", align 4
  %147 = fadd fast float %146, %145
  store float %147, float* %"'de50", align 4
  %148 = load float, float* %"'de50", align 4
  %m0diffe51 = fmul fast float %148, 2.000000e+00
  store float 0.000000e+00, float* %"'de50", align 4
  %149 = load float, float* %"'de", align 4
  %150 = fadd fast float %149, %m0diffe51
  store float %150, float* %"'de", align 4
  br label %invertL30

invertL37:                                        ; preds = %invertL52
  %151 = load float, float* %"'de52", align 4
  %_unwrap53 = fadd float %2, 1.000000e+00
  %d0diffe54 = fdiv fast float %151, %_unwrap53
  %_unwrap55 = fadd float %2, -1.000000e+00
  %_unwrap56 = fdiv float %_unwrap55, %_unwrap53
  %152 = fdiv fast float %151, %_unwrap53
  %153 = fmul fast float %_unwrap56, %152
  %154 = fneg fast float %153
  store float 0.000000e+00, float* %"'de52", align 4
  %155 = load float, float* %"'de57", align 4
  %156 = fadd fast float %155, %d0diffe54
  store float %156, float* %"'de57", align 4
  %157 = load float, float* %"'de58", align 4
  %158 = fadd fast float %157, %154
  store float %158, float* %"'de58", align 4
  %159 = load float, float* %"'de58", align 4
  store float 0.000000e+00, float* %"'de58", align 4
  %160 = load float, float* %"'de", align 4
  %161 = fadd fast float %160, %159
  store float %161, float* %"'de", align 4
  %162 = load float, float* %"'de57", align 4
  store float 0.000000e+00, float* %"'de57", align 4
  %163 = load float, float* %"'de", align 4
  %164 = fadd fast float %163, %162
  store float %164, float* %"'de", align 4
  br label %invertL30

invertL44:                                        ; preds = %invertL51, %invertL46
  br label %invertL22

invertL46:                                        ; preds = %invertL52
  %165 = load float, float* %"'de59", align 4
  %_unwrap60 = fmul float %2, 1.500000e+00
  %_unwrap61 = fadd float %_unwrap60, 1.000000e+00
  %d0diffe62 = fdiv fast float %165, %_unwrap61
  %_unwrap63 = fadd float %2, -1.500000e+00
  %_unwrap64 = fdiv float %_unwrap63, %_unwrap61
  %166 = fdiv fast float %165, %_unwrap61
  %167 = fmul fast float %_unwrap64, %166
  %168 = fneg fast float %167
  store float 0.000000e+00, float* %"'de59", align 4
  %169 = load float, float* %"'de65", align 4
  %170 = fadd fast float %169, %d0diffe62
  store float %170, float* %"'de65", align 4
  %171 = load float, float* %"'de66", align 4
  %172 = fadd fast float %171, %168
  store float %172, float* %"'de66", align 4
  %173 = load float, float* %"'de66", align 4
  store float 0.000000e+00, float* %"'de66", align 4
  %174 = load float, float* %"'de67", align 4
  %175 = fadd fast float %174, %173
  store float %175, float* %"'de67", align 4
  %176 = load float, float* %"'de67", align 4
  %m0diffe68 = fmul fast float %176, 1.500000e+00
  store float 0.000000e+00, float* %"'de67", align 4
  %177 = load float, float* %"'de", align 4
  %178 = fadd fast float %177, %m0diffe68
  store float %178, float* %"'de", align 4
  %179 = load float, float* %"'de65", align 4
  store float 0.000000e+00, float* %"'de65", align 4
  %180 = load float, float* %"'de", align 4
  %181 = fadd fast float %180, %179
  store float %181, float* %"'de", align 4
  br label %invertL44

invertL51:                                        ; preds = %invertL52
  %182 = load float, float* %"'de69", align 4
  %_unwrap70 = fdiv float -1.000000e+00, %2
  %183 = fdiv fast float %182, %2
  %184 = fmul fast float %_unwrap70, %183
  %185 = fneg fast float %184
  store float 0.000000e+00, float* %"'de69", align 4
  %186 = load float, float* %"'de", align 4
  %187 = fadd fast float %186, %185
  store float %187, float* %"'de", align 4
  br label %invertL44

invertL52:                                        ; preds = %invertcommon.ret
  %188 = load float, float* %"'de2", align 4
  store float 0.000000e+00, float* %"'de2", align 4
  %189 = load float, float* %value_phi4_cache, align 4, !invariant.group !543
  %190 = load float, float* %value_phi5_cache, align 4, !invariant.group !542
  %_unwrap71 = fmul float %190, %190
  %_unwrap72 = fmul float %_unwrap71, %_unwrap71
  %_unwrap73 = fmul contract float %_unwrap72, 0x3FBB4248E0000000
  %_unwrap74 = fsub contract float 0xBFC9995300000000, %_unwrap73
  %_unwrap75 = fmul float %_unwrap72, %_unwrap74
  %_unwrap76 = fmul contract float %_unwrap72, 0x3FAF9584A0000000
  %_unwrap77 = fadd contract float %_unwrap76, 0x3FC23EA1A0000000
  %_unwrap78 = fmul contract float %_unwrap72, %_unwrap77
  %_unwrap79 = fadd contract float %_unwrap78, 0x3FD5555520000000
  %_unwrap80 = fmul float %_unwrap71, %_unwrap79
  %_unwrap81 = fadd float %_unwrap75, %_unwrap80
  %_unwrap82 = fmul float %190, %_unwrap81
  %191 = load float, float* %value_phi3_cache, align 4, !invariant.group !541
  %_unwrap83 = fsub float %_unwrap82, %191
  %_unwrap84 = fsub float %_unwrap83, %190
  %_unwrap85 = fsub float %189, %_unwrap84
  %192 = call fast float @llvm.copysign.f32(float 1.000000e+00, float %_unwrap85), !dbg !544
  %_unwrap86 = fcmp uge float %0, 0.000000e+00
  %_unwrap87 = fcmp ule float %0, 0.000000e+00
  %_unwrap88 = select i1 %_unwrap87, float %0, float 1.000000e+00
  %_unwrap89 = select i1 %_unwrap86, float %_unwrap88, float -1.000000e+00
  %193 = call fast float @llvm.copysign.f32(float 1.000000e+00, float %_unwrap89), !dbg !544
  %194 = fmul fast float %192, %193
  %195 = fmul fast float %194, %188
  %196 = load float, float* %"'de90", align 4
  %197 = fadd fast float %196, %195
  store float %197, float* %"'de90", align 4
  %198 = load float, float* %"'de90", align 4
  %199 = fneg fast float %198
  store float 0.000000e+00, float* %"'de90", align 4
  %200 = load float, float* %"'de92", align 4
  %201 = fadd fast float %200, %199
  store float %201, float* %"'de92", align 4
  %202 = load float, float* %"'de92", align 4
  %203 = fneg fast float %202
  store float 0.000000e+00, float* %"'de92", align 4
  %204 = load float, float* %"'de93", align 4
  %205 = fadd fast float %204, %202
  store float %205, float* %"'de93", align 4
  %206 = load float, float* %"value_phi5'de", align 4
  %207 = fadd fast float %206, %203
  store float %207, float* %"value_phi5'de", align 4
  %208 = load float, float* %"'de93", align 4
  store float 0.000000e+00, float* %"'de93", align 4
  %209 = load float, float* %"'de94", align 4
  %210 = fadd fast float %209, %208
  store float %210, float* %"'de94", align 4
  %211 = load float, float* %"'de94", align 4
  %m0diffevalue_phi5 = fmul fast float %211, %_unwrap81
  %m1diffe95 = fmul fast float %211, %190
  store float 0.000000e+00, float* %"'de94", align 4
  %212 = load float, float* %"value_phi5'de", align 4
  %213 = fadd fast float %212, %m0diffevalue_phi5
  store float %213, float* %"value_phi5'de", align 4
  %214 = load float, float* %"'de96", align 4
  %215 = fadd fast float %214, %m1diffe95
  store float %215, float* %"'de96", align 4
  %216 = load float, float* %"'de96", align 4
  store float 0.000000e+00, float* %"'de96", align 4
  %217 = load float, float* %"'de97", align 4
  %218 = fadd fast float %217, %216
  store float %218, float* %"'de97", align 4
  %219 = load float, float* %"'de98", align 4
  %220 = fadd fast float %219, %216
  store float %220, float* %"'de98", align 4
  %221 = load float, float* %"'de97", align 4
  %m0diffe99 = fmul fast float %221, %_unwrap74
  %m1diffe100 = fmul fast float %221, %_unwrap72
  store float 0.000000e+00, float* %"'de97", align 4
  %222 = load float, float* %"'de101", align 4
  %223 = fadd fast float %222, %m0diffe99
  store float %223, float* %"'de101", align 4
  %224 = load float, float* %"'de102", align 4
  %225 = fadd fast float %224, %m1diffe100
  store float %225, float* %"'de102", align 4
  %226 = load float, float* %"'de102", align 4
  %227 = fneg fast float %226
  store float 0.000000e+00, float* %"'de102", align 4
  %228 = load float, float* %"'de103", align 4
  %229 = fadd fast float %228, %227
  store float %229, float* %"'de103", align 4
  %230 = load float, float* %"'de103", align 4
  %m0diffe104 = fmul fast float %230, 0x3FBB4248E0000000
  store float 0.000000e+00, float* %"'de103", align 4
  %231 = load float, float* %"'de101", align 4
  %232 = fadd fast float %231, %m0diffe104
  store float %232, float* %"'de101", align 4
  %233 = load float, float* %"'de98", align 4
  %m0diffe105 = fmul fast float %233, %_unwrap79
  %m1diffe106 = fmul fast float %233, %_unwrap71
  store float 0.000000e+00, float* %"'de98", align 4
  %234 = load float, float* %"'de107", align 4
  %235 = fadd fast float %234, %m0diffe105
  store float %235, float* %"'de107", align 4
  %236 = load float, float* %"'de108", align 4
  %237 = fadd fast float %236, %m1diffe106
  store float %237, float* %"'de108", align 4
  %238 = load float, float* %"'de108", align 4
  store float 0.000000e+00, float* %"'de108", align 4
  %239 = load float, float* %"'de109", align 4
  %240 = fadd fast float %239, %238
  store float %240, float* %"'de109", align 4
  %241 = load float, float* %"'de109", align 4
  %m0diffe110 = fmul fast float %241, %_unwrap77
  %m1diffe111 = fmul fast float %241, %_unwrap72
  store float 0.000000e+00, float* %"'de109", align 4
  %242 = load float, float* %"'de101", align 4
  %243 = fadd fast float %242, %m0diffe110
  store float %243, float* %"'de101", align 4
  %244 = load float, float* %"'de112", align 4
  %245 = fadd fast float %244, %m1diffe111
  store float %245, float* %"'de112", align 4
  %246 = load float, float* %"'de112", align 4
  store float 0.000000e+00, float* %"'de112", align 4
  %247 = load float, float* %"'de113", align 4
  %248 = fadd fast float %247, %246
  store float %248, float* %"'de113", align 4
  %249 = load float, float* %"'de113", align 4
  %m0diffe114 = fmul fast float %249, 0x3FAF9584A0000000
  store float 0.000000e+00, float* %"'de113", align 4
  %250 = load float, float* %"'de101", align 4
  %251 = fadd fast float %250, %m0diffe114
  store float %251, float* %"'de101", align 4
  %252 = load float, float* %"'de101", align 4
  %m0diffe115 = fmul fast float %252, %_unwrap71
  %m1diffe116 = fmul fast float %252, %_unwrap71
  store float 0.000000e+00, float* %"'de101", align 4
  %253 = load float, float* %"'de107", align 4
  %254 = fadd fast float %253, %m0diffe115
  store float %254, float* %"'de107", align 4
  %255 = load float, float* %"'de107", align 4
  %256 = fadd fast float %255, %m1diffe116
  store float %256, float* %"'de107", align 4
  %257 = load float, float* %"'de107", align 4
  %m0diffevalue_phi5117 = fmul fast float %257, %190
  %m1diffevalue_phi5 = fmul fast float %257, %190
  store float 0.000000e+00, float* %"'de107", align 4
  %258 = load float, float* %"value_phi5'de", align 4
  %259 = fadd fast float %258, %m0diffevalue_phi5117
  store float %259, float* %"value_phi5'de", align 4
  %260 = load float, float* %"value_phi5'de", align 4
  %261 = fadd fast float %260, %m1diffevalue_phi5
  store float %261, float* %"value_phi5'de", align 4
  %262 = load float, float* %"value_phi5'de", align 4
  store float 0.000000e+00, float* %"value_phi5'de", align 4
  %263 = load i8, i8* %_cache121, align 1, !invariant.group !506
  %264 = icmp eq i8 0, %263
  %265 = icmp eq i8 1, %263
  %266 = icmp eq i8 2, %263
  %267 = icmp eq i8 3, %263
  %268 = select fast i1 %267, float %262, float 0.000000e+00
  %269 = load float, float* %"'de69", align 4
  %270 = fadd fast float %269, %262
  %271 = select fast i1 %267, float %270, float %269
  store float %271, float* %"'de69", align 4
  %272 = select fast i1 %266, float %262, float 0.000000e+00
  %273 = load float, float* %"'de59", align 4
  %274 = fadd fast float %273, %262
  %275 = select fast i1 %266, float %274, float %273
  store float %275, float* %"'de59", align 4
  %276 = select fast i1 %265, float %262, float 0.000000e+00
  %277 = load float, float* %"'de52", align 4
  %278 = fadd fast float %277, %262
  %279 = select fast i1 %265, float %278, float %277
  store float %279, float* %"'de52", align 4
  %280 = select fast i1 %264, float %262, float 0.000000e+00
  %281 = load float, float* %"'de43", align 4
  %282 = fadd fast float %281, %262
  %283 = select fast i1 %264, float %282, float %281
  store float %283, float* %"'de43", align 4
  %284 = load i8, i8* %_cache122, align 1, !invariant.group !507
  switch i8 %284, label %invertL32 [
    i8 0, label %invertL51
    i8 1, label %invertL46
    i8 2, label %invertL37
  ]
}

attributes #0 = { nofree noinline nosync readnone "enzyme_math"="atan2f" "enzyme_shouldrecompute" "enzymejl_job"="140242273548272" "enzymejl_mi"="140248990592432" "probe-stack"="inline-asm" }
attributes #1 = { nofree readnone "enzyme_inactive" "enzyme_shouldrecompute" }
attributes #2 = { nofree nosync nounwind readnone speculatable willreturn }
attributes #3 = { nofree nosync readnone "enzymejl_job"="140242273548272" "enzymejl_mi"="140248990987648" "probe-stack"="inline-asm" }
attributes #4 = { nofree nosync readnone "probe-stack"="inline-asm" }
attributes #5 = { mustprogress nofree nosync readnone willreturn "probe-stack"="inline-asm" }
attributes #6 = { mustprogress nofree noinline nosync readnone willreturn "enzyme_math"="atan2f" "enzyme_shouldrecompute" "enzymejl_job"="140242273548272" "enzymejl_mi"="140248990592432" "probe-stack"="inline-asm" }
attributes #7 = { mustprogress nofree nosync readnone willreturn "enzymejl_job"="140242273548272" "enzymejl_mi"="140248990987648" "probe-stack"="inline-asm" }
attributes #8 = { nofree "probe-stack"="inline-asm" }
attributes #9 = { mustprogress willreturn }
attributes #10 = { mustprogress nofree willreturn "probe-stack"="inline-asm" }

!llvm.module.flags = !{!0, !1}
!llvm.dbg.cu = !{!2, !5, !7}

!0 = !{i32 2, !"Dwarf Version", i32 4}
!1 = !{i32 2, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !3, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!3 = !DIFile(filename: "special/trig.jl", directory: ".")
!4 = !{}
!5 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !6, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!6 = !DIFile(filename: "REPL[3]", directory: ".")
!7 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !3, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!8 = distinct !DISubprogram(name: "atan", linkageName: "julia_atan_3286", scope: null, file: !3, line: 565, type: !9, scopeLine: 565, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!9 = !DISubroutineType(types: !4)
!10 = !DILocation(line: 411, scope: !11, inlinedAt: !13)
!11 = distinct !DISubprogram(name: "!=;", linkageName: "!=", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!12 = !DIFile(filename: "float.jl", directory: ".")
!13 = !DILocation(line: 496, scope: !14, inlinedAt: !15)
!14 = distinct !DISubprogram(name: "isnan;", linkageName: "isnan", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!15 = !DILocation(line: 584, scope: !8)
!16 = !DILocation(line: 410, scope: !17, inlinedAt: !18)
!17 = distinct !DISubprogram(name: "==;", linkageName: "==", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!18 = !DILocation(line: 588, scope: !8)
!19 = !DILocation(line: 0, scope: !8)
!20 = !DILocation(line: 589, scope: !8)
!21 = !DILocation(line: 16, scope: !22, inlinedAt: !24)
!22 = distinct !DISubprogram(name: "signbit;", linkageName: "signbit", scope: !23, file: !23, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!23 = !DIFile(filename: "floatfuncs.jl", directory: ".")
!24 = !DILocation(line: 592, scope: !8)
!25 = !DILocation(line: 88, scope: !26, inlinedAt: !28)
!26 = distinct !DISubprogram(name: "*;", linkageName: "*", scope: !27, file: !27, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!27 = !DIFile(filename: "int.jl", directory: ".")
!28 = !DILocation(line: 991, scope: !26, inlinedAt: !24)
!29 = !DILocation(line: 691, scope: !30, inlinedAt: !32)
!30 = distinct !DISubprogram(name: "toInt64;", linkageName: "toInt64", scope: !31, file: !31, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!31 = !DIFile(filename: "boot.jl", directory: ".")
!32 = !DILocation(line: 764, scope: !33, inlinedAt: !34)
!33 = distinct !DISubprogram(name: "Int64;", linkageName: "Int64", scope: !31, file: !31, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!34 = !DILocation(line: 7, scope: !35, inlinedAt: !37)
!35 = distinct !DISubprogram(name: "convert;", linkageName: "convert", scope: !36, file: !36, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!36 = !DIFile(filename: "number.jl", directory: ".")
!37 = !DILocation(line: 513, scope: !38, inlinedAt: !39)
!38 = distinct !DISubprogram(name: "rem;", linkageName: "rem", scope: !27, file: !27, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!39 = !DILocation(line: 989, scope: !26, inlinedAt: !24)
!40 = !DILocation(line: 87, scope: !41, inlinedAt: !24)
!41 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !27, file: !27, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!42 = !DILocation(line: 410, scope: !17, inlinedAt: !43)
!43 = !DILocation(line: 42, scope: !44, inlinedAt: !45)
!44 = distinct !DISubprogram(name: "iszero;", linkageName: "iszero", scope: !36, file: !36, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!45 = !DILocation(line: 594, scope: !8)
!46 = !DILocation(line: 595, scope: !8)
!47 = !DILocation(line: 410, scope: !17, inlinedAt: !48)
!48 = !DILocation(line: 42, scope: !44, inlinedAt: !49)
!49 = !DILocation(line: 602, scope: !8)
!50 = !DILocation(line: 11, scope: !51, inlinedAt: !52)
!51 = distinct !DISubprogram(name: "flipsign;", linkageName: "flipsign", scope: !23, file: !23, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!52 = !DILocation(line: 603, scope: !8)
!53 = !DILocation(line: 384, scope: !54, inlinedAt: !55)
!54 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!55 = !DILocation(line: 499, scope: !56, inlinedAt: !57)
!56 = distinct !DISubprogram(name: "isfinite;", linkageName: "isfinite", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!57 = !DILocation(line: 510, scope: !58, inlinedAt: !59)
!58 = distinct !DISubprogram(name: "isinf;", linkageName: "isinf", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!59 = !DILocation(line: 606, scope: !8)
!60 = !DILocation(line: 410, scope: !17, inlinedAt: !61)
!61 = !DILocation(line: 448, scope: !17, inlinedAt: !55)
!62 = !DILocation(line: 384, scope: !54, inlinedAt: !63)
!63 = !DILocation(line: 499, scope: !56, inlinedAt: !64)
!64 = !DILocation(line: 510, scope: !58, inlinedAt: !65)
!65 = !DILocation(line: 607, scope: !8)
!66 = !DILocation(line: 410, scope: !17, inlinedAt: !67)
!67 = !DILocation(line: 448, scope: !17, inlinedAt: !63)
!68 = !DILocation(line: 608, scope: !8)
!69 = !DILocation(line: 618, scope: !8)
!70 = !DILocation(line: 384, scope: !54, inlinedAt: !71)
!71 = !DILocation(line: 499, scope: !56, inlinedAt: !72)
!72 = !DILocation(line: 510, scope: !58, inlinedAt: !73)
!73 = !DILocation(line: 631, scope: !8)
!74 = !DILocation(line: 410, scope: !17, inlinedAt: !75)
!75 = !DILocation(line: 448, scope: !17, inlinedAt: !71)
!76 = !DILocation(line: 6, scope: !77, inlinedAt: !73)
!77 = distinct !DISubprogram(name: "copysign;", linkageName: "copysign", scope: !23, file: !23, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!78 = !DILocation(line: 340, scope: !79, inlinedAt: !80)
!79 = distinct !DISubprogram(name: "&;", linkageName: "&", scope: !27, file: !27, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!80 = !DILocation(line: 1336, scope: !81, inlinedAt: !83)
!81 = distinct !DISubprogram(name: "poshighword;", linkageName: "poshighword", scope: !82, file: !82, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!82 = !DIFile(filename: "math.jl", directory: ".")
!83 = !DILocation(line: 633, scope: !8)
!84 = !DILocation(line: 340, scope: !79, inlinedAt: !85)
!85 = !DILocation(line: 1336, scope: !81, inlinedAt: !86)
!86 = !DILocation(line: 634, scope: !8)
!87 = !DILocation(line: 86, scope: !88, inlinedAt: !89)
!88 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !27, file: !27, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!89 = !DILocation(line: 636, scope: !8)
!90 = !DILocation(line: 83, scope: !91, inlinedAt: !92)
!91 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !27, file: !27, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!92 = !DILocation(line: 428, scope: !93, inlinedAt: !95)
!93 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !94, file: !94, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!94 = !DIFile(filename: "promotion.jl", directory: ".")
!95 = !DILocation(line: 382, scope: !96, inlinedAt: !98)
!96 = distinct !DISubprogram(name: ">;", linkageName: ">", scope: !97, file: !97, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!97 = !DIFile(filename: "operators.jl", directory: ".")
!98 = !DILocation(line: 638, scope: !8)
!99 = !DILocation(line: 412, scope: !100, inlinedAt: !101)
!100 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!101 = !DILocation(line: 463, scope: !100, inlinedAt: !102)
!102 = !DILocation(line: 641, scope: !8)
!103 = !DILocation(line: 386, scope: !104, inlinedAt: !105)
!104 = distinct !DISubprogram(name: "/;", linkageName: "/", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!105 = !DILocation(line: 644, scope: !8)
!106 = !DILocation(line: 486, scope: !107, inlinedAt: !105)
!107 = distinct !DISubprogram(name: "abs;", linkageName: "abs", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!108 = !DILocation(line: 647, scope: !8)
!109 = !DILocation(line: 381, scope: !54, inlinedAt: !110)
!110 = !DILocation(line: 650, scope: !8)
!111 = !DILocation(line: 384, scope: !54, inlinedAt: !112)
!112 = !DILocation(line: 652, scope: !8)
!113 = !DILocation(line: 384, scope: !54, inlinedAt: !114)
!114 = !DILocation(line: 654, scope: !8)
!115 = distinct !DISubprogram(name: "atan", linkageName: "julia_atan_3290", scope: null, file: !3, line: 501, type: !9, scopeLine: 501, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!116 = !DILocation(line: 486, scope: !117, inlinedAt: !118)
!117 = distinct !DISubprogram(name: "abs;", linkageName: "abs", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!118 = !DILocation(line: 517, scope: !115)
!119 = !DILocation(line: 413, scope: !120, inlinedAt: !121)
!120 = distinct !DISubprogram(name: "<=;", linkageName: "<=", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!121 = !DILocation(line: 429, scope: !122, inlinedAt: !123)
!122 = distinct !DISubprogram(name: ">=;", linkageName: ">=", scope: !97, file: !97, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!123 = !DILocation(line: 518, scope: !115)
!124 = !DILocation(line: 0, scope: !115)
!125 = !DILocation(line: 6, scope: !126, inlinedAt: !127)
!126 = distinct !DISubprogram(name: "copysign;", linkageName: "copysign", scope: !23, file: !23, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!127 = !DILocation(line: 519, scope: !115)
!128 = !DILocation(line: 412, scope: !129, inlinedAt: !130)
!129 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!130 = !DILocation(line: 521, scope: !115)
!131 = !DILocation(line: 412, scope: !129, inlinedAt: !132)
!132 = !DILocation(line: 523, scope: !115)
!133 = !DILocation(line: 385, scope: !134, inlinedAt: !135)
!134 = distinct !DISubprogram(name: "*;", linkageName: "*", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!135 = !DILocation(line: 495, scope: !136, inlinedAt: !137)
!136 = distinct !DISubprogram(name: "atan_pq;", linkageName: "atan_pq", scope: !3, file: !3, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!137 = !DILocation(line: 526, scope: !115)
!138 = !DILocation(line: 385, scope: !134, inlinedAt: !139)
!139 = !DILocation(line: 496, scope: !136, inlinedAt: !137)
!140 = !DILocation(line: 388, scope: !141, inlinedAt: !142)
!141 = distinct !DISubprogram(name: "muladd;", linkageName: "muladd", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!142 = !DILocation(line: 178, scope: !143, inlinedAt: !144)
!143 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !82, file: !82, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!144 = !DILocation(line: 177, scope: !145, inlinedAt: !146)
!145 = distinct !DISubprogram(name: "evalpoly;", linkageName: "evalpoly", scope: !82, file: !82, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!146 = !DILocation(line: 492, scope: !147, inlinedAt: !148)
!147 = distinct !DISubprogram(name: "atan_p;", linkageName: "atan_p", scope: !3, file: !3, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!148 = !DILocation(line: 498, scope: !136, inlinedAt: !137)
!149 = !DILocation(line: 385, scope: !134, inlinedAt: !146)
!150 = !DILocation(line: 388, scope: !141, inlinedAt: !151)
!151 = !DILocation(line: 178, scope: !143, inlinedAt: !152)
!152 = !DILocation(line: 177, scope: !145, inlinedAt: !153)
!153 = !DILocation(line: 493, scope: !154, inlinedAt: !148)
!154 = distinct !DISubprogram(name: "atan_q;", linkageName: "atan_q", scope: !3, file: !3, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!155 = !DILocation(line: 385, scope: !134, inlinedAt: !153)
!156 = !DILocation(line: 383, scope: !157, inlinedAt: !158)
!157 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!158 = !DILocation(line: 527, scope: !115)
!159 = !DILocation(line: 385, scope: !134, inlinedAt: !158)
!160 = !DILocation(line: 384, scope: !161, inlinedAt: !158)
!161 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!162 = !DILocation(line: 412, scope: !129, inlinedAt: !163)
!163 = !DILocation(line: 162, scope: !164, inlinedAt: !165)
!164 = distinct !DISubprogram(name: "sign;", linkageName: "sign", scope: !36, file: !36, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!165 = !DILocation(line: 529, scope: !115)
!166 = !DILocation(line: 412, scope: !129, inlinedAt: !167)
!167 = !DILocation(line: 382, scope: !168, inlinedAt: !163)
!168 = distinct !DISubprogram(name: ">;", linkageName: ">", scope: !97, file: !97, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!169 = !DILocation(line: 489, scope: !170, inlinedAt: !163)
!170 = distinct !DISubprogram(name: "ifelse;", linkageName: "ifelse", scope: !171, file: !171, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!171 = !DIFile(filename: "essentials.jl", directory: ".")
!172 = !DILocation(line: 412, scope: !129, inlinedAt: !173)
!173 = !DILocation(line: 530, scope: !115)
!174 = !DILocation(line: 412, scope: !129, inlinedAt: !175)
!175 = !DILocation(line: 531, scope: !115)
!176 = !DILocation(line: 385, scope: !134, inlinedAt: !177)
!177 = !DILocation(line: 534, scope: !115)
!178 = !DILocation(line: 384, scope: !161, inlinedAt: !177)
!179 = !DILocation(line: 383, scope: !157, inlinedAt: !177)
!180 = !DILocation(line: 386, scope: !181, inlinedAt: !177)
!181 = distinct !DISubprogram(name: "/;", linkageName: "/", scope: !12, file: !12, type: !9, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!182 = !DILocation(line: 384, scope: !161, inlinedAt: !183)
!183 = !DILocation(line: 538, scope: !115)
!184 = !DILocation(line: 383, scope: !157, inlinedAt: !183)
!185 = !DILocation(line: 386, scope: !181, inlinedAt: !183)
!186 = !DILocation(line: 412, scope: !129, inlinedAt: !187)
!187 = !DILocation(line: 541, scope: !115)
!188 = !DILocation(line: 384, scope: !161, inlinedAt: !189)
!189 = !DILocation(line: 544, scope: !115)
!190 = !DILocation(line: 385, scope: !134, inlinedAt: !189)
!191 = !DILocation(line: 383, scope: !157, inlinedAt: !189)
!192 = !DILocation(line: 386, scope: !181, inlinedAt: !189)
!193 = !DILocation(line: 386, scope: !181, inlinedAt: !194)
!194 = !DILocation(line: 548, scope: !115)
!195 = !DILocation(line: 385, scope: !134, inlinedAt: !196)
!196 = !DILocation(line: 495, scope: !136, inlinedAt: !197)
!197 = !DILocation(line: 552, scope: !115)
!198 = !DILocation(line: 385, scope: !134, inlinedAt: !199)
!199 = !DILocation(line: 496, scope: !136, inlinedAt: !197)
!200 = !DILocation(line: 388, scope: !141, inlinedAt: !201)
!201 = !DILocation(line: 178, scope: !143, inlinedAt: !202)
!202 = !DILocation(line: 177, scope: !145, inlinedAt: !203)
!203 = !DILocation(line: 492, scope: !147, inlinedAt: !204)
!204 = !DILocation(line: 498, scope: !136, inlinedAt: !197)
!205 = !DILocation(line: 385, scope: !134, inlinedAt: !203)
!206 = !DILocation(line: 388, scope: !141, inlinedAt: !207)
!207 = !DILocation(line: 178, scope: !143, inlinedAt: !208)
!208 = !DILocation(line: 177, scope: !145, inlinedAt: !209)
!209 = !DILocation(line: 493, scope: !154, inlinedAt: !204)
!210 = !DILocation(line: 385, scope: !134, inlinedAt: !209)
!211 = !DILocation(line: 383, scope: !157, inlinedAt: !212)
!212 = !DILocation(line: 553, scope: !115)
!213 = !DILocation(line: 385, scope: !134, inlinedAt: !212)
!214 = !DILocation(line: 384, scope: !161, inlinedAt: !212)
!215 = !DILocation(line: 6, scope: !126, inlinedAt: !216)
!216 = !DILocation(line: 554, scope: !115)
!217 = distinct !DISubprogram(name: "f2", linkageName: "julia_f2_3283", scope: null, file: !6, line: 1, type: !9, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !4)
!218 = !DILocation(line: 1, scope: !217, inlinedAt: !219)
!219 = distinct !DILocation(line: 0, scope: !217)
!220 = !DILocation(line: 0, scope: !217)
!221 = distinct !DISubprogram(name: "f2", linkageName: "julia_f2_3283", scope: null, file: !6, line: 1, type: !9, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !4)
!222 = !DILocation(line: 1, scope: !221, inlinedAt: !223)
!223 = distinct !DILocation(line: 0, scope: !221)
!224 = !DILocation(line: 0, scope: !221)
!225 = distinct !DISubprogram(name: "f2", linkageName: "julia_f2_3283", scope: null, file: !6, line: 1, type: !9, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !4)
!226 = !DILocation(line: 1, scope: !225, inlinedAt: !227)
!227 = distinct !DILocation(line: 0, scope: !225)
!228 = !DILocation(line: 0, scope: !225)
!229 = distinct !DISubprogram(name: "atan", linkageName: "julia_atan_3286", scope: null, file: !3, line: 565, type: !9, scopeLine: 565, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!230 = !DILocation(line: 411, scope: !11, inlinedAt: !231)
!231 = !DILocation(line: 496, scope: !14, inlinedAt: !232)
!232 = !DILocation(line: 584, scope: !229)
!233 = !DILocation(line: 410, scope: !17, inlinedAt: !234)
!234 = !DILocation(line: 588, scope: !229)
!235 = !DILocation(line: 0, scope: !229)
!236 = !DILocation(line: 589, scope: !229)
!237 = !DILocation(line: 16, scope: !22, inlinedAt: !238)
!238 = !DILocation(line: 592, scope: !229)
!239 = !DILocation(line: 88, scope: !26, inlinedAt: !240)
!240 = !DILocation(line: 991, scope: !26, inlinedAt: !238)
!241 = !DILocation(line: 691, scope: !30, inlinedAt: !242)
!242 = !DILocation(line: 764, scope: !33, inlinedAt: !243)
!243 = !DILocation(line: 7, scope: !35, inlinedAt: !244)
!244 = !DILocation(line: 513, scope: !38, inlinedAt: !245)
!245 = !DILocation(line: 989, scope: !26, inlinedAt: !238)
!246 = !DILocation(line: 87, scope: !41, inlinedAt: !238)
!247 = !DILocation(line: 410, scope: !17, inlinedAt: !248)
!248 = !DILocation(line: 42, scope: !44, inlinedAt: !249)
!249 = !DILocation(line: 594, scope: !229)
!250 = !DILocation(line: 595, scope: !229)
!251 = !DILocation(line: 410, scope: !17, inlinedAt: !252)
!252 = !DILocation(line: 42, scope: !44, inlinedAt: !253)
!253 = !DILocation(line: 602, scope: !229)
!254 = !DILocation(line: 11, scope: !51, inlinedAt: !255)
!255 = !DILocation(line: 603, scope: !229)
!256 = !DILocation(line: 384, scope: !54, inlinedAt: !257)
!257 = !DILocation(line: 499, scope: !56, inlinedAt: !258)
!258 = !DILocation(line: 510, scope: !58, inlinedAt: !259)
!259 = !DILocation(line: 606, scope: !229)
!260 = !DILocation(line: 410, scope: !17, inlinedAt: !261)
!261 = !DILocation(line: 448, scope: !17, inlinedAt: !257)
!262 = !DILocation(line: 384, scope: !54, inlinedAt: !263)
!263 = !DILocation(line: 499, scope: !56, inlinedAt: !264)
!264 = !DILocation(line: 510, scope: !58, inlinedAt: !265)
!265 = !DILocation(line: 607, scope: !229)
!266 = !DILocation(line: 410, scope: !17, inlinedAt: !267)
!267 = !DILocation(line: 448, scope: !17, inlinedAt: !263)
!268 = !DILocation(line: 608, scope: !229)
!269 = !DILocation(line: 618, scope: !229)
!270 = !DILocation(line: 384, scope: !54, inlinedAt: !271)
!271 = !DILocation(line: 499, scope: !56, inlinedAt: !272)
!272 = !DILocation(line: 510, scope: !58, inlinedAt: !273)
!273 = !DILocation(line: 631, scope: !229)
!274 = !DILocation(line: 410, scope: !17, inlinedAt: !275)
!275 = !DILocation(line: 448, scope: !17, inlinedAt: !271)
!276 = !DILocation(line: 6, scope: !77, inlinedAt: !273)
!277 = !DILocation(line: 340, scope: !79, inlinedAt: !278)
!278 = !DILocation(line: 1336, scope: !81, inlinedAt: !279)
!279 = !DILocation(line: 633, scope: !229)
!280 = !DILocation(line: 340, scope: !79, inlinedAt: !281)
!281 = !DILocation(line: 1336, scope: !81, inlinedAt: !282)
!282 = !DILocation(line: 634, scope: !229)
!283 = !DILocation(line: 86, scope: !88, inlinedAt: !284)
!284 = !DILocation(line: 636, scope: !229)
!285 = !DILocation(line: 83, scope: !91, inlinedAt: !286)
!286 = !DILocation(line: 428, scope: !93, inlinedAt: !287)
!287 = !DILocation(line: 382, scope: !96, inlinedAt: !288)
!288 = !DILocation(line: 638, scope: !229)
!289 = !DILocation(line: 412, scope: !100, inlinedAt: !290)
!290 = !DILocation(line: 463, scope: !100, inlinedAt: !291)
!291 = !DILocation(line: 641, scope: !229)
!292 = !DILocation(line: 386, scope: !104, inlinedAt: !293)
!293 = !DILocation(line: 644, scope: !229)
!294 = !DILocation(line: 486, scope: !107, inlinedAt: !293)
!295 = !DILocation(line: 647, scope: !229)
!296 = !DILocation(line: 381, scope: !54, inlinedAt: !297)
!297 = !DILocation(line: 650, scope: !229)
!298 = !DILocation(line: 384, scope: !54, inlinedAt: !299)
!299 = !DILocation(line: 652, scope: !229)
!300 = !DILocation(line: 384, scope: !54, inlinedAt: !301)
!301 = !DILocation(line: 654, scope: !229)
!302 = distinct !DISubprogram(name: "atan", linkageName: "julia_atan_3286", scope: null, file: !3, line: 565, type: !9, scopeLine: 565, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!303 = !DILocation(line: 411, scope: !11, inlinedAt: !304)
!304 = !DILocation(line: 496, scope: !14, inlinedAt: !305)
!305 = !DILocation(line: 584, scope: !302)
!306 = distinct !{}
!307 = distinct !{}
!308 = !DILocation(line: 410, scope: !17, inlinedAt: !309)
!309 = !DILocation(line: 588, scope: !302)
!310 = !DILocation(line: 0, scope: !302)
!311 = !DILocation(line: 589, scope: !302)
!312 = !DILocation(line: 16, scope: !22, inlinedAt: !313)
!313 = !DILocation(line: 592, scope: !302)
!314 = !DILocation(line: 88, scope: !26, inlinedAt: !315)
!315 = !DILocation(line: 991, scope: !26, inlinedAt: !313)
!316 = !DILocation(line: 691, scope: !30, inlinedAt: !317)
!317 = !DILocation(line: 764, scope: !33, inlinedAt: !318)
!318 = !DILocation(line: 7, scope: !35, inlinedAt: !319)
!319 = !DILocation(line: 513, scope: !38, inlinedAt: !320)
!320 = !DILocation(line: 989, scope: !26, inlinedAt: !313)
!321 = !DILocation(line: 87, scope: !41, inlinedAt: !313)
!322 = !DILocation(line: 410, scope: !17, inlinedAt: !323)
!323 = !DILocation(line: 42, scope: !44, inlinedAt: !324)
!324 = !DILocation(line: 594, scope: !302)
!325 = !DILocation(line: 595, scope: !302)
!326 = !DILocation(line: 410, scope: !17, inlinedAt: !327)
!327 = !DILocation(line: 42, scope: !44, inlinedAt: !328)
!328 = !DILocation(line: 602, scope: !302)
!329 = !DILocation(line: 11, scope: !51, inlinedAt: !330)
!330 = !DILocation(line: 603, scope: !302)
!331 = !DILocation(line: 384, scope: !54, inlinedAt: !332)
!332 = !DILocation(line: 499, scope: !56, inlinedAt: !333)
!333 = !DILocation(line: 510, scope: !58, inlinedAt: !334)
!334 = !DILocation(line: 606, scope: !302)
!335 = !DILocation(line: 410, scope: !17, inlinedAt: !336)
!336 = !DILocation(line: 448, scope: !17, inlinedAt: !332)
!337 = !DILocation(line: 384, scope: !54, inlinedAt: !338)
!338 = !DILocation(line: 499, scope: !56, inlinedAt: !339)
!339 = !DILocation(line: 510, scope: !58, inlinedAt: !340)
!340 = !DILocation(line: 607, scope: !302)
!341 = !DILocation(line: 410, scope: !17, inlinedAt: !342)
!342 = !DILocation(line: 448, scope: !17, inlinedAt: !338)
!343 = !DILocation(line: 608, scope: !302)
!344 = !DILocation(line: 618, scope: !302)
!345 = !DILocation(line: 384, scope: !54, inlinedAt: !346)
!346 = !DILocation(line: 499, scope: !56, inlinedAt: !347)
!347 = !DILocation(line: 510, scope: !58, inlinedAt: !348)
!348 = !DILocation(line: 631, scope: !302)
!349 = !DILocation(line: 410, scope: !17, inlinedAt: !350)
!350 = !DILocation(line: 448, scope: !17, inlinedAt: !346)
!351 = !DILocation(line: 6, scope: !77, inlinedAt: !348)
!352 = !DILocation(line: 340, scope: !79, inlinedAt: !353)
!353 = !DILocation(line: 1336, scope: !81, inlinedAt: !354)
!354 = !DILocation(line: 633, scope: !302)
!355 = !DILocation(line: 340, scope: !79, inlinedAt: !356)
!356 = !DILocation(line: 1336, scope: !81, inlinedAt: !357)
!357 = !DILocation(line: 634, scope: !302)
!358 = !DILocation(line: 86, scope: !88, inlinedAt: !359)
!359 = !DILocation(line: 636, scope: !302)
!360 = !DILocation(line: 83, scope: !91, inlinedAt: !361)
!361 = !DILocation(line: 428, scope: !93, inlinedAt: !362)
!362 = !DILocation(line: 382, scope: !96, inlinedAt: !363)
!363 = !DILocation(line: 638, scope: !302)
!364 = !DILocation(line: 412, scope: !100, inlinedAt: !365)
!365 = !DILocation(line: 463, scope: !100, inlinedAt: !366)
!366 = !DILocation(line: 641, scope: !302)
!367 = !DILocation(line: 386, scope: !104, inlinedAt: !368)
!368 = !DILocation(line: 644, scope: !302)
!369 = !DILocation(line: 486, scope: !107, inlinedAt: !368)
!370 = !DILocation(line: 647, scope: !302)
!371 = !DILocation(line: 381, scope: !54, inlinedAt: !372)
!372 = !DILocation(line: 650, scope: !302)
!373 = !DILocation(line: 384, scope: !54, inlinedAt: !374)
!374 = !DILocation(line: 652, scope: !302)
!375 = !DILocation(line: 384, scope: !54, inlinedAt: !376)
!376 = !DILocation(line: 654, scope: !302)
!377 = distinct !DISubprogram(name: "atan", linkageName: "julia_atan_3290", scope: null, file: !3, line: 501, type: !9, scopeLine: 501, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!378 = !DILocation(line: 486, scope: !117, inlinedAt: !379)
!379 = !DILocation(line: 517, scope: !377)
!380 = !DILocation(line: 413, scope: !120, inlinedAt: !381)
!381 = !DILocation(line: 429, scope: !122, inlinedAt: !382)
!382 = !DILocation(line: 518, scope: !377)
!383 = !DILocation(line: 0, scope: !377)
!384 = !DILocation(line: 6, scope: !126, inlinedAt: !385)
!385 = !DILocation(line: 519, scope: !377)
!386 = !DILocation(line: 412, scope: !129, inlinedAt: !387)
!387 = !DILocation(line: 521, scope: !377)
!388 = !DILocation(line: 412, scope: !129, inlinedAt: !389)
!389 = !DILocation(line: 523, scope: !377)
!390 = !DILocation(line: 385, scope: !134, inlinedAt: !391)
!391 = !DILocation(line: 495, scope: !136, inlinedAt: !392)
!392 = !DILocation(line: 526, scope: !377)
!393 = !DILocation(line: 385, scope: !134, inlinedAt: !394)
!394 = !DILocation(line: 496, scope: !136, inlinedAt: !392)
!395 = !DILocation(line: 388, scope: !141, inlinedAt: !396)
!396 = !DILocation(line: 178, scope: !143, inlinedAt: !397)
!397 = !DILocation(line: 177, scope: !145, inlinedAt: !398)
!398 = !DILocation(line: 492, scope: !147, inlinedAt: !399)
!399 = !DILocation(line: 498, scope: !136, inlinedAt: !392)
!400 = !DILocation(line: 385, scope: !134, inlinedAt: !398)
!401 = !DILocation(line: 388, scope: !141, inlinedAt: !402)
!402 = !DILocation(line: 178, scope: !143, inlinedAt: !403)
!403 = !DILocation(line: 177, scope: !145, inlinedAt: !404)
!404 = !DILocation(line: 493, scope: !154, inlinedAt: !399)
!405 = !DILocation(line: 385, scope: !134, inlinedAt: !404)
!406 = !DILocation(line: 383, scope: !157, inlinedAt: !407)
!407 = !DILocation(line: 527, scope: !377)
!408 = !DILocation(line: 385, scope: !134, inlinedAt: !407)
!409 = !DILocation(line: 384, scope: !161, inlinedAt: !407)
!410 = !DILocation(line: 412, scope: !129, inlinedAt: !411)
!411 = !DILocation(line: 162, scope: !164, inlinedAt: !412)
!412 = !DILocation(line: 529, scope: !377)
!413 = !DILocation(line: 412, scope: !129, inlinedAt: !414)
!414 = !DILocation(line: 382, scope: !168, inlinedAt: !411)
!415 = !DILocation(line: 489, scope: !170, inlinedAt: !411)
!416 = !DILocation(line: 412, scope: !129, inlinedAt: !417)
!417 = !DILocation(line: 530, scope: !377)
!418 = !DILocation(line: 412, scope: !129, inlinedAt: !419)
!419 = !DILocation(line: 531, scope: !377)
!420 = !DILocation(line: 385, scope: !134, inlinedAt: !421)
!421 = !DILocation(line: 534, scope: !377)
!422 = !DILocation(line: 384, scope: !161, inlinedAt: !421)
!423 = !DILocation(line: 383, scope: !157, inlinedAt: !421)
!424 = !DILocation(line: 386, scope: !181, inlinedAt: !421)
!425 = !DILocation(line: 384, scope: !161, inlinedAt: !426)
!426 = !DILocation(line: 538, scope: !377)
!427 = !DILocation(line: 383, scope: !157, inlinedAt: !426)
!428 = !DILocation(line: 386, scope: !181, inlinedAt: !426)
!429 = !DILocation(line: 412, scope: !129, inlinedAt: !430)
!430 = !DILocation(line: 541, scope: !377)
!431 = !DILocation(line: 384, scope: !161, inlinedAt: !432)
!432 = !DILocation(line: 544, scope: !377)
!433 = !DILocation(line: 385, scope: !134, inlinedAt: !432)
!434 = !DILocation(line: 383, scope: !157, inlinedAt: !432)
!435 = !DILocation(line: 386, scope: !181, inlinedAt: !432)
!436 = !DILocation(line: 386, scope: !181, inlinedAt: !437)
!437 = !DILocation(line: 548, scope: !377)
!438 = !DILocation(line: 385, scope: !134, inlinedAt: !439)
!439 = !DILocation(line: 495, scope: !136, inlinedAt: !440)
!440 = !DILocation(line: 552, scope: !377)
!441 = !DILocation(line: 385, scope: !134, inlinedAt: !442)
!442 = !DILocation(line: 496, scope: !136, inlinedAt: !440)
!443 = !DILocation(line: 388, scope: !141, inlinedAt: !444)
!444 = !DILocation(line: 178, scope: !143, inlinedAt: !445)
!445 = !DILocation(line: 177, scope: !145, inlinedAt: !446)
!446 = !DILocation(line: 492, scope: !147, inlinedAt: !447)
!447 = !DILocation(line: 498, scope: !136, inlinedAt: !440)
!448 = !DILocation(line: 385, scope: !134, inlinedAt: !446)
!449 = !DILocation(line: 388, scope: !141, inlinedAt: !450)
!450 = !DILocation(line: 178, scope: !143, inlinedAt: !451)
!451 = !DILocation(line: 177, scope: !145, inlinedAt: !452)
!452 = !DILocation(line: 493, scope: !154, inlinedAt: !447)
!453 = !DILocation(line: 385, scope: !134, inlinedAt: !452)
!454 = !DILocation(line: 383, scope: !157, inlinedAt: !455)
!455 = !DILocation(line: 553, scope: !377)
!456 = !DILocation(line: 385, scope: !134, inlinedAt: !455)
!457 = !DILocation(line: 384, scope: !161, inlinedAt: !455)
!458 = !DILocation(line: 6, scope: !126, inlinedAt: !459)
!459 = !DILocation(line: 554, scope: !377)
!460 = distinct !DISubprogram(name: "atan", linkageName: "julia_atan_3290", scope: null, file: !3, line: 501, type: !9, scopeLine: 501, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!461 = !DILocation(line: 486, scope: !117, inlinedAt: !462)
!462 = !DILocation(line: 517, scope: !460)
!463 = !DILocation(line: 413, scope: !120, inlinedAt: !464)
!464 = !DILocation(line: 429, scope: !122, inlinedAt: !465)
!465 = !DILocation(line: 518, scope: !460)
!466 = !DILocation(line: 0, scope: !460)
!467 = distinct !{}
!468 = distinct !{}
!469 = !DILocation(line: 412, scope: !129, inlinedAt: !470)
!470 = !DILocation(line: 521, scope: !460)
!471 = !DILocation(line: 412, scope: !129, inlinedAt: !472)
!472 = !DILocation(line: 523, scope: !460)
!473 = !DILocation(line: 385, scope: !134, inlinedAt: !474)
!474 = !DILocation(line: 495, scope: !136, inlinedAt: !475)
!475 = !DILocation(line: 526, scope: !460)
!476 = !DILocation(line: 385, scope: !134, inlinedAt: !477)
!477 = !DILocation(line: 496, scope: !136, inlinedAt: !475)
!478 = !DILocation(line: 388, scope: !141, inlinedAt: !479)
!479 = !DILocation(line: 178, scope: !143, inlinedAt: !480)
!480 = !DILocation(line: 177, scope: !145, inlinedAt: !481)
!481 = !DILocation(line: 492, scope: !147, inlinedAt: !482)
!482 = !DILocation(line: 498, scope: !136, inlinedAt: !475)
!483 = !DILocation(line: 385, scope: !134, inlinedAt: !481)
!484 = !DILocation(line: 388, scope: !141, inlinedAt: !485)
!485 = !DILocation(line: 178, scope: !143, inlinedAt: !486)
!486 = !DILocation(line: 177, scope: !145, inlinedAt: !487)
!487 = !DILocation(line: 493, scope: !154, inlinedAt: !482)
!488 = !DILocation(line: 385, scope: !134, inlinedAt: !487)
!489 = !DILocation(line: 383, scope: !157, inlinedAt: !490)
!490 = !DILocation(line: 527, scope: !460)
!491 = !DILocation(line: 412, scope: !129, inlinedAt: !492)
!492 = !DILocation(line: 162, scope: !164, inlinedAt: !493)
!493 = !DILocation(line: 529, scope: !460)
!494 = !DILocation(line: 412, scope: !129, inlinedAt: !495)
!495 = !DILocation(line: 382, scope: !168, inlinedAt: !492)
!496 = !DILocation(line: 489, scope: !170, inlinedAt: !492)
!497 = !DILocation(line: 412, scope: !129, inlinedAt: !498)
!498 = !DILocation(line: 530, scope: !460)
!499 = !DILocation(line: 412, scope: !129, inlinedAt: !500)
!500 = !DILocation(line: 531, scope: !460)
!501 = !DILocation(line: 385, scope: !134, inlinedAt: !502)
!502 = !DILocation(line: 534, scope: !460)
!503 = !DILocation(line: 384, scope: !161, inlinedAt: !502)
!504 = !DILocation(line: 383, scope: !157, inlinedAt: !502)
!505 = !DILocation(line: 386, scope: !181, inlinedAt: !502)
!506 = distinct !{}
!507 = distinct !{}
!508 = !DILocation(line: 384, scope: !161, inlinedAt: !509)
!509 = !DILocation(line: 538, scope: !460)
!510 = !DILocation(line: 383, scope: !157, inlinedAt: !509)
!511 = !DILocation(line: 386, scope: !181, inlinedAt: !509)
!512 = !DILocation(line: 412, scope: !129, inlinedAt: !513)
!513 = !DILocation(line: 541, scope: !460)
!514 = !DILocation(line: 384, scope: !161, inlinedAt: !515)
!515 = !DILocation(line: 544, scope: !460)
!516 = !DILocation(line: 385, scope: !134, inlinedAt: !515)
!517 = !DILocation(line: 383, scope: !157, inlinedAt: !515)
!518 = !DILocation(line: 386, scope: !181, inlinedAt: !515)
!519 = !DILocation(line: 386, scope: !181, inlinedAt: !520)
!520 = !DILocation(line: 548, scope: !460)
!521 = !DILocation(line: 385, scope: !134, inlinedAt: !522)
!522 = !DILocation(line: 495, scope: !136, inlinedAt: !523)
!523 = !DILocation(line: 552, scope: !460)
!524 = !DILocation(line: 385, scope: !134, inlinedAt: !525)
!525 = !DILocation(line: 496, scope: !136, inlinedAt: !523)
!526 = !DILocation(line: 388, scope: !141, inlinedAt: !527)
!527 = !DILocation(line: 178, scope: !143, inlinedAt: !528)
!528 = !DILocation(line: 177, scope: !145, inlinedAt: !529)
!529 = !DILocation(line: 492, scope: !147, inlinedAt: !530)
!530 = !DILocation(line: 498, scope: !136, inlinedAt: !523)
!531 = !DILocation(line: 385, scope: !134, inlinedAt: !529)
!532 = !DILocation(line: 388, scope: !141, inlinedAt: !533)
!533 = !DILocation(line: 178, scope: !143, inlinedAt: !534)
!534 = !DILocation(line: 177, scope: !145, inlinedAt: !535)
!535 = !DILocation(line: 493, scope: !154, inlinedAt: !530)
!536 = !DILocation(line: 385, scope: !134, inlinedAt: !535)
!537 = !DILocation(line: 383, scope: !157, inlinedAt: !538)
!538 = !DILocation(line: 553, scope: !460)
!539 = !DILocation(line: 385, scope: !134, inlinedAt: !538)
!540 = !DILocation(line: 384, scope: !161, inlinedAt: !538)
!541 = distinct !{}
!542 = distinct !{}
!543 = distinct !{}
!544 = !DILocation(line: 6, scope: !126, inlinedAt: !545)
!545 = !DILocation(line: 554, scope: !460)

; Function Attrs: mustprogress nofree noinline nosync readnone willreturn
define dso_local float @preprocess_julia_atan_3286(float %0, float %1) local_unnamed_addr #6 !dbg !229 {
top:
  %2 = call {}*** @julia.get_pgcstack() #8
  %3 = fcmp ord float %1, 0.000000e+00, !dbg !230
  %4 = fcmp ord float %0, 0.000000e+00
  %or.cond = select i1 %3, i1 %4, i1 false, !dbg !232
  br i1 %or.cond, label %L7, label %common.ret, !dbg !232

L7:                                               ; preds = %top
  %5 = fcmp une float %1, 1.000000e+00, !dbg !233
  br i1 %5, label %L11, label %L9, !dbg !234

common.ret.fold.split:                            ; preds = %L26
  br label %common.ret, !dbg !235

common.ret.fold.split16:                          ; preds = %L26
  br label %common.ret, !dbg !235

common.ret.fold.split17:                          ; preds = %L65
  br label %common.ret, !dbg !235

common.ret.fold.split18:                          ; preds = %L65
  br label %common.ret, !dbg !235

common.ret.fold.split19:                          ; preds = %L65
  br label %common.ret, !dbg !235

common.ret.fold.split20:                          ; preds = %L78
  br label %common.ret, !dbg !235

common.ret.fold.split21:                          ; preds = %L78
  br label %common.ret, !dbg !235

common.ret.fold.split22:                          ; preds = %L78
  br label %common.ret, !dbg !235

common.ret:                                       ; preds = %L143, %L140, %L136, %L129, %L99, %L78, %L65, %L42, %L26, %L26, %L9, %common.ret.fold.split22, %common.ret.fold.split21, %common.ret.fold.split20, %common.ret.fold.split19, %common.ret.fold.split18, %common.ret.fold.split17, %common.ret.fold.split16, %common.ret.fold.split, %top
  %common.ret.op = phi float [ %6, %L9 ], [ %16, %L42 ], [ %23, %L99 ], [ %33, %L136 ], [ %35, %L140 ], [ %37, %L143 ], [ %0, %L26 ], [ 0x3FE921FB60000000, %L65 ], [ 0.000000e+00, %L78 ], [ %value_phi, %L129 ], [ 0x7FF8000000000000, %top ], [ %0, %L26 ], [ 0x400921FB60000000, %common.ret.fold.split ], [ 0xC00921FB60000000, %common.ret.fold.split16 ], [ 0xBFE921FB60000000, %common.ret.fold.split17 ], [ 0x4002D97C80000000, %common.ret.fold.split18 ], [ 0xC002D97C80000000, %common.ret.fold.split19 ], [ -0.000000e+00, %common.ret.fold.split20 ], [ 0x400921FB60000000, %common.ret.fold.split21 ], [ 0xC00921FB60000000, %common.ret.fold.split22 ]
  ret float %common.ret.op, !dbg !235

L9:                                               ; preds = %L7
  %6 = call fastcc float @julia_atan_3290(float %0) #5, !dbg !236
  br label %common.ret

L11:                                              ; preds = %L7
  %7 = bitcast float %1 to i32, !dbg !237
  %8 = lshr i32 %7, 30, !dbg !239
  %9 = and i32 %8, 2, !dbg !239
  %10 = bitcast float %0 to i32, !dbg !237
  %.lobit = lshr i32 %10, 31, !dbg !241
  %11 = or i32 %9, %.lobit, !dbg !246
  %12 = fcmp une float %0, 0.000000e+00, !dbg !247
  br i1 %12, label %L40, label %L26, !dbg !249

L26:                                              ; preds = %L11
  switch i32 %11, label %L4724 [
    i32 0, label %common.ret
    i32 1, label %common.ret
    i32 2, label %common.ret.fold.split
    i32 3, label %common.ret.fold.split16
  ], !dbg !250

L40:                                              ; preds = %L11
  %13 = fcmp une float %1, 0.000000e+00, !dbg !251
  br i1 %13, label %L47, label %L42, !dbg !253

L42:                                              ; preds = %L40
  %14 = and i32 %10, -2147483648, !dbg !254
  %15 = or i32 %14, 1070141403, !dbg !254
  %16 = bitcast i32 %15 to float, !dbg !254
  br label %common.ret

L4724:                                            ; preds = %L26
  unreachable

L47:                                              ; preds = %L40
  %17 = fsub float %1, %1, !dbg !256
  %18 = fcmp oeq float %17, 0.000000e+00, !dbg !260
  br i1 %18, label %L90, label %L56, !dbg !259

L56:                                              ; preds = %L47
  %19 = fsub float %0, %0, !dbg !262
  %20 = fcmp oeq float %19, 0.000000e+00, !dbg !266
  br i1 %20, label %L78, label %L65, !dbg !265

L65:                                              ; preds = %L56
  switch i32 %11, label %L9025 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split17
    i32 2, label %common.ret.fold.split18
    i32 3, label %common.ret.fold.split19
  ], !dbg !268

L78:                                              ; preds = %L56
  switch i32 %11, label %L9026 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split20
    i32 2, label %common.ret.fold.split21
    i32 3, label %common.ret.fold.split22
  ], !dbg !269

L9025:                                            ; preds = %L65
  unreachable

L9026:                                            ; preds = %L78
  unreachable

L90:                                              ; preds = %L47
  %21 = fsub float %0, %0, !dbg !270
  %22 = fcmp oeq float %21, 0.000000e+00, !dbg !274
  br i1 %22, label %L101, label %L99, !dbg !273

L99:                                              ; preds = %L90
  %23 = call float @llvm.copysign.f32(float noundef 0x3FF921FB60000000, float %0) #8, !dbg !276
  br label %common.ret

L101:                                             ; preds = %L90
  %24 = and i32 %10, 2147483647, !dbg !277
  %25 = and i32 %7, 2147483647, !dbg !280
  %26 = sub nsw i32 %24, %25, !dbg !283
  %27 = icmp slt i32 %26, 226492416, !dbg !285
  br i1 %27, label %L116, label %L129, !dbg !288

L116:                                             ; preds = %L101
  %28 = fcmp uge float %1, 0.000000e+00, !dbg !289
  %29 = icmp sgt i32 %26, -218103809
  %or.cond23 = select i1 %28, i1 true, i1 %29, !dbg !291
  br i1 %or.cond23, label %L126, label %L129, !dbg !291

L126:                                             ; preds = %L116
  %30 = fdiv float %0, %1, !dbg !292
  %31 = call float @llvm.fabs.f32(float %30) #8, !dbg !294
  %32 = call fastcc float @julia_atan_3290(float %31) #5, !dbg !293
  br label %L129, !dbg !293

L129:                                             ; preds = %L126, %L116, %L101
  %value_phi = phi float [ %32, %L126 ], [ 0.000000e+00, %L116 ], [ 0x3FF921FB60000000, %L101 ]
  %value_phi1 = phi i32 [ %11, %L126 ], [ %11, %L116 ], [ %.lobit, %L101 ]
  switch i32 %value_phi1, label %L143 [
    i32 0, label %common.ret
    i32 1, label %L136
    i32 2, label %L140
  ], !dbg !295

L136:                                             ; preds = %L129
  %33 = fneg float %value_phi, !dbg !296
  br label %common.ret

L140:                                             ; preds = %L129
  %34 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !298
  %35 = fsub float 0x400921FB60000000, %34, !dbg !298
  br label %common.ret

L143:                                             ; preds = %L129
  %36 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !300
  %37 = fadd float %36, 0xC00921FB60000000, !dbg !300
  br label %common.ret
}

 constantarg[float %0] = 0 type: {[-1]:Float@float} - vals: {}
 constantarg[float %1] = 0 type: {[-1]:Float@float} - vals: {}
 constantinst[  %2 = call {}*** @julia.get_pgcstack() #8] = 1 val:1 type: {}
 constantinst[  %3 = fcmp ord float %1, 0.000000e+00, !dbg !10] = 1 val:1 type: {[-1]:Integer}
 constantinst[  %4 = fcmp ord float %0, 0.000000e+00] = 1 val:1 type: {[-1]:Integer}
 constantinst[  %or.cond = select i1 %3, i1 %4, i1 false, !dbg !15] = 1 val:1 type: {[-1]:Integer}
 constantinst[  br i1 %or.cond, label %L7, label %common.ret, !dbg !15] = 1 val:1 type: {}
 constantinst[  %5 = fcmp une float %1, 1.000000e+00, !dbg !16] = 1 val:1 type: {[-1]:Integer}
 constantinst[  br i1 %5, label %L11, label %L9, !dbg !18] = 1 val:1 type: {}
 constantinst[  br label %common.ret, !dbg !19] = 1 val:1 type: {}
 constantinst[  br label %common.ret, !dbg !19] = 1 val:1 type: {}
 constantinst[  br label %common.ret, !dbg !19] = 1 val:1 type: {}
 constantinst[  br label %common.ret, !dbg !19] = 1 val:1 type: {}
 constantinst[  br label %common.ret, !dbg !19] = 1 val:1 type: {}
 constantinst[  br label %common.ret, !dbg !19] = 1 val:1 type: {}
 constantinst[  br label %common.ret, !dbg !19] = 1 val:1 type: {}
 constantinst[  br label %common.ret, !dbg !19] = 1 val:1 type: {}
 constantinst[  %common.ret.op = phi float [ %6, %L9 ], [ %16, %L42 ], [ %23, %L99 ], [ %33, %L136 ], [ %35, %L140 ], [ %37, %L143 ], [ %0, %L26 ], [ 0x3FE921FB60000000, %L65 ], [ 0.000000e+00, %L78 ], [ %value_phi, %L129 ], [ 0x7FF8000000000000, %top ], [ %0, %L26 ], [ 0x400921FB60000000, %common.ret.fold.split ], [ 0xC00921FB60000000, %common.ret.fold.split16 ], [ 0xBFE921FB60000000, %common.ret.fold.split17 ], [ 0x4002D97C80000000, %common.ret.fold.split18 ], [ 0xC002D97C80000000, %common.ret.fold.split19 ], [ -0.000000e+00, %common.ret.fold.split20 ], [ 0x400921FB60000000, %common.ret.fold.split21 ], [ 0xC00921FB60000000, %common.ret.fold.split22 ]] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  ret float %common.ret.op, !dbg !19] = 1 val:1 type: {}
 constantinst[  %6 = call fastcc float @julia_atan_3290(float %0) #5, !dbg !20] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  br label %common.ret] = 1 val:1 type: {}
 constantinst[  %7 = bitcast float %1 to i32, !dbg !21] = 1 val:1 type: {[-1]:Float@float}
 constantinst[  %8 = lshr i32 %7, 30, !dbg !25] = 1 val:1 type: {}
 constantinst[  %9 = and i32 %8, 2, !dbg !25] = 1 val:1 type: {[-1]:Integer}
 constantinst[  %10 = bitcast float %0 to i32, !dbg !21] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  %.lobit = lshr i32 %10, 31, !dbg !29] = 1 val:1 type: {}
 constantinst[  %11 = or i32 %9, %.lobit, !dbg !40] = 1 val:1 type: {}
 constantinst[  %12 = fcmp une float %0, 0.000000e+00, !dbg !42] = 1 val:1 type: {[-1]:Integer}
 constantinst[  br i1 %12, label %L40, label %L26, !dbg !45] = 1 val:1 type: {}
 constantinst[  switch i32 %11, label %L4724 [
    i32 0, label %common.ret
    i32 1, label %common.ret
    i32 2, label %common.ret.fold.split
    i32 3, label %common.ret.fold.split16
  ], !dbg !46] = 1 val:1 type: {}
 constantinst[  %13 = fcmp une float %1, 0.000000e+00, !dbg !47] = 1 val:1 type: {[-1]:Integer}
 constantinst[  br i1 %13, label %L47, label %L42, !dbg !49] = 1 val:1 type: {}
 constantinst[  %14 = and i32 %10, -2147483648, !dbg !50] = 0 val:0 type: {}
 constantinst[  %15 = or i32 %14, 1070141403, !dbg !50] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  %16 = bitcast i32 %15 to float, !dbg !50] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  br label %common.ret] = 1 val:1 type: {}
 constantinst[  unreachable] = 1 val:1 type: {}
 constantinst[  %17 = fsub float %1, %1, !dbg !53] = 1 val:1 type: {[-1]:Float@float}
 constantinst[  %18 = fcmp oeq float %17, 0.000000e+00, !dbg !60] = 1 val:1 type: {[-1]:Integer}
 constantinst[  br i1 %18, label %L90, label %L56, !dbg !59] = 1 val:1 type: {}
 constantinst[  %19 = fsub float %0, %0, !dbg !62] = 1 val:1 type: {[-1]:Float@float}
 constantinst[  %20 = fcmp oeq float %19, 0.000000e+00, !dbg !66] = 1 val:1 type: {[-1]:Integer}
 constantinst[  br i1 %20, label %L78, label %L65, !dbg !65] = 1 val:1 type: {}
 constantinst[  switch i32 %11, label %L9025 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split17
    i32 2, label %common.ret.fold.split18
    i32 3, label %common.ret.fold.split19
  ], !dbg !68] = 1 val:1 type: {}
 constantinst[  switch i32 %11, label %L9026 [
    i32 0, label %common.ret
    i32 1, label %common.ret.fold.split20
    i32 2, label %common.ret.fold.split21
    i32 3, label %common.ret.fold.split22
  ], !dbg !69] = 1 val:1 type: {}
 constantinst[  unreachable] = 1 val:1 type: {}
 constantinst[  unreachable] = 1 val:1 type: {}
 constantinst[  %21 = fsub float %0, %0, !dbg !70] = 1 val:1 type: {[-1]:Float@float}
 constantinst[  %22 = fcmp oeq float %21, 0.000000e+00, !dbg !74] = 1 val:1 type: {[-1]:Integer}
 constantinst[  br i1 %22, label %L101, label %L99, !dbg !73] = 1 val:1 type: {}
 constantinst[  %23 = call float @llvm.copysign.f32(float noundef 0x3FF921FB60000000, float %0) #8, !dbg !76] = 1 val:1 type: {[-1]:Float@float}
 constantinst[  br label %common.ret] = 1 val:1 type: {}
 constantinst[  %24 = and i32 %10, 2147483647, !dbg !78] = 1 val:1 type: {}
 constantinst[  %25 = and i32 %7, 2147483647, !dbg !84] = 1 val:1 type: {}
 constantinst[  %26 = sub nsw i32 %24, %25, !dbg !87] = 1 val:1 type: {[-1]:Integer}
 constantinst[  %27 = icmp slt i32 %26, 226492416, !dbg !90] = 1 val:1 type: {[-1]:Integer}
 constantinst[  br i1 %27, label %L116, label %L129, !dbg !98] = 1 val:1 type: {}
 constantinst[  %28 = fcmp uge float %1, 0.000000e+00, !dbg !99] = 1 val:1 type: {[-1]:Integer}
 constantinst[  %29 = icmp sgt i32 %26, -218103809] = 1 val:1 type: {[-1]:Integer}
 constantinst[  %or.cond23 = select i1 %28, i1 true, i1 %29, !dbg !102] = 1 val:1 type: {[-1]:Integer}
 constantinst[  br i1 %or.cond23, label %L126, label %L129, !dbg !102] = 1 val:1 type: {}
 constantinst[  %30 = fdiv float %0, %1, !dbg !103] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  %31 = call float @llvm.fabs.f32(float %30) #8, !dbg !106] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  %32 = call fastcc float @julia_atan_3290(float %31) #5, !dbg !105] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  br label %L129, !dbg !105] = 1 val:1 type: {}
 constantinst[  %value_phi = phi float [ %32, %L126 ], [ 0.000000e+00, %L116 ], [ 0x3FF921FB60000000, %L101 ]] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  %value_phi1 = phi i32 [ %11, %L126 ], [ %11, %L116 ], [ %.lobit, %L101 ]] = 1 val:1 type: {}
 constantinst[  switch i32 %value_phi1, label %L143 [
    i32 0, label %common.ret
    i32 1, label %L136
    i32 2, label %L140
  ], !dbg !108] = 1 val:1 type: {}
 constantinst[  %33 = fneg float %value_phi, !dbg !109] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  br label %common.ret] = 1 val:1 type: {}
 constantinst[  %34 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !111] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  %35 = fsub float 0x400921FB60000000, %34, !dbg !111] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  br label %common.ret] = 1 val:1 type: {}
 constantinst[  %36 = fadd float %value_phi, 0x3E7777A5C0000000, !dbg !113] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  %37 = fadd float %36, 0xC00921FB60000000, !dbg !113] = 0 val:0 type: {[-1]:Float@float}
 constantinst[  br label %common.ret] = 1 val:1 type: {}
cannot handle unknown binary operator:   %15 = or i32 %14, 1070141403, !dbg !50


Stacktrace:
 [1] flipsign
   @ ./floatfuncs.jl:11
 [2] atan
   @ ./special/trig.jl:603

Stacktrace:
  [1] julia_error(cstr::Cstring, val::Ptr{LLVM.API.LLVMOpaqueValue}, errtype::Enzyme.API.ErrorType, data::Ptr{Nothing})
    @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:3498
  [2] EnzymeCreatePrimalAndGradient(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{Enzyme.API.CDIFFE_TYPE}, TA::Enzyme.TypeAnalysis, returnValue::Bool, dretUsed::Bool, mode::Enzyme.API.CDerivativeMode, width::Int64, additionalArg::Ptr{Nothing}, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{Bool}, augmented::Ptr{Nothing}, atomicAdd::Bool)
    @ Enzyme.API ~/.julia/dev/Enzyme/src/api.jl:123
  [3] enzyme!(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams, GPUCompiler.FunctionSpec{typeof(f2), Tuple{Float32, Float32}}}, mod::LLVM.Module, primalf::LLVM.Function, adjoint::GPUCompiler.FunctionSpec{typeof(f2), Tuple{Active{Float32}, Active{Float32}}}, mode::Enzyme.API.CDerivativeMode, width::Int64, parallel::Bool, actualRetType::Type, dupClosure::Bool, wrap::Bool, modifiedBetween::Bool, returnPrimal::Bool, jlrules::Vector{String})
    @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:4762
  [4] codegen(output::Symbol, job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams, GPUCompiler.FunctionSpec{typeof(f2), Tuple{Float32, Float32}}}; libraries::Bool, deferred_codegen::Bool, optimize::Bool, ctx::LLVM.Context, strip::Bool, validate::Bool, only_entry::Bool, parent_job::Nothing)
    @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:5854
  [5] _thunk
    @ ~/.julia/dev/Enzyme/src/compiler.jl:6321 [inlined]
  [6] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams, GPUCompiler.FunctionSpec{typeof(f2), Tuple{Float32, Float32}}})
    @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:6315
  [7] cached_compilation(job::GPUCompiler.CompilerJob, key::UInt64, specid::UInt64)
    @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:6359
  [8] #s836#163
    @ ~/.julia/dev/Enzyme/src/compiler.jl:6419 [inlined]
  [9] var"#s836#163"(F::Any, Fn::Any, DF::Any, A::Any, TT::Any, Mode::Any, ModifiedBetween::Any, width::Any, specid::Any, ReturnPrimal::Any, ::Any, #unused#::Type, f::Any, df::Any, #unused#::Type, tt::Any, #unused#::Type, #unused#::Type, #unused#::Type, #unused#::Type, #unused#::Any)
    @ Enzyme.Compiler ./none:0
 [10] (::Core.GeneratedFunctionStub)(::Any, ::Vararg{Any})
    @ Core ./boot.jl:582
 [11] thunk
    @ ~/.julia/dev/Enzyme/src/compiler.jl:6452 [inlined]
 [12] thunk (repeats 2 times)
    @ ~/.julia/dev/Enzyme/src/compiler.jl:6445 [inlined]
 [13] autodiff
    @ ~/.julia/dev/Enzyme/src/Enzyme.jl:199 [inlined]
 [14] autodiff
    @ ~/.julia/dev/Enzyme/src/Enzyme.jl:236 [inlined]
 [15] autodiff(::typeof(f2), ::Active{Float32}, ::Active{Float32})
    @ Enzyme ~/.julia/dev/Enzyme/src/Enzyme.jl:342
 [16] top-level scope
    @ REPL[4]:1

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

Successfully merging a pull request may close this issue.

1 participant