Skip to content

Commit

Permalink
Add dumping capabilities
Browse files Browse the repository at this point in the history
  • Loading branch information
ivanradanov committed Nov 11, 2024
1 parent 9996bc9 commit c0e6fae
Showing 1 changed file with 33 additions and 1 deletion.
34 changes: 33 additions & 1 deletion enzyme/include/enzyme/fprt/mpfr.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,27 @@ typedef struct __enzyme_fp {
mpfr_t result;
} __enzyme_fp;

#ifdef ENZYME_ENABLE_GARBAGE_COLLECTION
#ifdef ENZYME_FPRT_ENABLE_DUMPING
#define ENZYME_DUMP(X, OP_TYPE, LLVM_OP_NAME, TAG) \
do { \
fprintf(stderr, #OP_TYPE " " #LLVM_OP_NAME " " TAG ": %p ", X); \
fprintf(stderr, "%f\n", \
mpfr_get_d(X->result, __ENZYME_MPFR_DEFAULT_ROUNDING_MODE)); \
} while (0)
#define ENZYME_DUMP_INPUT(X, OP_TYPE, LLVM_OP_NAME) \
ENZYME_DUMP(X, OP_TYPE, LLVM_OP_NAME, "in")
#define ENZYME_DUMP_RESULT(X, OP_TYPE, LLVM_OP_NAME) \
ENZYME_DUMP(X, OP_TYPE, LLVM_OP_NAME, "res")
#else
#define ENZYME_DUMP_INPUT(X, OP_TYPE, LLVM_OP_NAME) \
do { \
} while (0)
#define ENZYME_DUMP_RESULT(X, OP_TYPE, LLVM_OP_NAME) \
do { \
} while (0)
#endif

#ifdef ENZYME_FPRT_ENABLE_GARBAGE_COLLECTION

void enzyme_fprt_gc_dump_status();
double enzyme_fprt_gc_mark_seen(double a);
Expand Down Expand Up @@ -191,7 +211,9 @@ __enzyme_fp *__enzyme_fprt_double_to_ptr_checked(double d, int64_t exponent,
a, exponent, significand, mode, loc); \
__enzyme_fp *mc = __enzyme_fprt_64_52_new_intermediate( \
exponent, significand, mode, loc); \
ENZYME_DUMP_INPUT(ma, OP_TYPE, LLVM_OP_NAME); \
mpfr_##MPFR_FUNC_NAME(mc->result, ma->result, ROUNDING_MODE); \
ENZYME_DUMP_RESULT(mc, OP_TYPE, LLVM_OP_NAME); \
return __enzyme_fprt_ptr_to_double(mc); \
} else { \
abort(); \
Expand Down Expand Up @@ -222,7 +244,9 @@ __enzyme_fp *__enzyme_fprt_double_to_ptr_checked(double d, int64_t exponent,
a, exponent, significand, mode, loc); \
__enzyme_fp *mc = __enzyme_fprt_64_52_new_intermediate( \
exponent, significand, mode, loc); \
ENZYME_DUMP_INPUT(ma, OP_TYPE, LLVM_OP_NAME); \
mpfr_##MPFR_FUNC_NAME(mc->result, ma->result, b, ROUNDING_MODE); \
ENZYME_DUMP_RESULT(mc, OP_TYPE, LLVM_OP_NAME); \
return __enzyme_fprt_ptr_to_double(mc); \
} else { \
abort(); \
Expand Down Expand Up @@ -256,8 +280,11 @@ __enzyme_fp *__enzyme_fprt_double_to_ptr_checked(double d, int64_t exponent,
b, exponent, significand, mode, loc); \
__enzyme_fp *mc = __enzyme_fprt_64_52_new_intermediate( \
exponent, significand, mode, loc); \
ENZYME_DUMP_INPUT(ma, OP_TYPE, LLVM_OP_NAME); \
ENZYME_DUMP_INPUT(mb, OP_TYPE, LLVM_OP_NAME); \
mpfr_##MPFR_FUNC_NAME(mc->result, ma->result, mb->result, \
ROUNDING_MODE); \
ENZYME_DUMP_RESULT(mc, OP_TYPE, LLVM_OP_NAME); \
return __enzyme_fprt_ptr_to_double(mc); \
} else { \
abort(); \
Expand Down Expand Up @@ -296,12 +323,17 @@ __enzyme_fp *__enzyme_fprt_double_to_ptr_checked(double d, int64_t exponent,
b, exponent, significand, mode, loc); \
__enzyme_fp *mc = __enzyme_fprt_double_to_ptr_checked( \
c, exponent, significand, mode, loc); \
ENZYME_DUMP_INPUT(ma, OP_TYPE, LLVM_OP_NAME); \
ENZYME_DUMP_INPUT(mb, OP_TYPE, LLVM_OP_NAME); \
ENZYME_DUMP_INPUT(mc, OP_TYPE, LLVM_OP_NAME); \
double mmul = __enzyme_fprt_##FROM_TYPE##_binop_fmul( \
__enzyme_fprt_ptr_to_double(ma), __enzyme_fprt_ptr_to_double(mb), \
exponent, significand, mode, loc); \
double madd = __enzyme_fprt_##FROM_TYPE##_binop_fadd( \
mmul, __enzyme_fprt_ptr_to_double(mc), exponent, significand, mode, \
loc); \
ENZYME_DUMP_RESULT(__enzyme_fprt_double_to_ptr(madd), OP_TYPE, \
LLVM_OP_NAME); \
return madd; \
} else { \
abort(); \
Expand Down

0 comments on commit c0e6fae

Please sign in to comment.