coalton-lang / coalton

Coalton is an efficient, statically typed functional programming language that supercharges Common Lisp.
https://coalton-lang.github.io/
MIT License
1.12k stars 67 forks source link

Constant fold int literals #1181

Closed garlic0x1 closed 1 month ago

garlic0x1 commented 1 month ago

https://github.com/coalton-lang/coalton/issues/1176

COALTON-USER> (coalton-codegen
                (declare addr (Integer -> Integer))
                (define (addr x) (+ x 1)))

Old output, notice the fromint

(COMMON-LISP:PROGN
 (COALTON-IMPL/GLOBAL-LEXICAL:DEFINE-GLOBAL-LEXICAL ADDR
                                                    COALTON-IMPL/RUNTIME/FUNCTION-ENTRY:FUNCTION-ENTRY)
 (COMMON-LISP:DEFUN ADDR (X-3769)
   (COMMON-LISP:DECLARE (COMMON-LISP:IGNORABLE X-3769))
   (COALTON-LIBRARY/MATH/NUM::|INSTANCE/NUM INTEGER-COALTON-LIBRARY/CLASSES:+|
    X-3769
    (COALTON-LIBRARY/MATH/NUM::|INSTANCE/NUM INTEGER-COALTON-LIBRARY/CLASSES:FROMINT|
     1)))
 (COMMON-LISP:SETF ADDR (COALTON-IMPL/RUNTIME/FUNCTION-ENTRY::F1 #'ADDR))
 (COMMON-LISP:SETF (COMMON-LISP:DOCUMENTATION 'ADDR 'COMMON-LISP:VARIABLE)
                     "ADDR :: (INTEGER → INTEGER)")
 (COMMON-LISP:SETF (COMMON-LISP:DOCUMENTATION 'ADDR 'COMMON-LISP:FUNCTION)
                     "ADDR :: (INTEGER → INTEGER)")
 (COMMON-LISP:VALUES))

New output, known integer is not cast.

(COMMON-LISP:PROGN
 (COALTON-IMPL/GLOBAL-LEXICAL:DEFINE-GLOBAL-LEXICAL ADDR
                                                    COALTON-IMPL/RUNTIME/FUNCTION-ENTRY:FUNCTION-ENTRY)
 (COMMON-LISP:DEFUN ADDR (X-3770)
   (COMMON-LISP:DECLARE (COMMON-LISP:IGNORABLE X-3770))
   (COALTON-LIBRARY/MATH/NUM::|INSTANCE/NUM INTEGER-COALTON-LIBRARY/CLASSES:+|
    X-3770 1))
 (COMMON-LISP:SETF ADDR (COALTON-IMPL/RUNTIME/FUNCTION-ENTRY::F1 #'ADDR))
 (COMMON-LISP:SETF (COMMON-LISP:DOCUMENTATION 'ADDR 'COMMON-LISP:VARIABLE)
                     "ADDR :: (INTEGER → INTEGER)")
 (COMMON-LISP:SETF (COMMON-LISP:DOCUMENTATION 'ADDR 'COMMON-LISP:FUNCTION)
                     "ADDR :: (INTEGER → INTEGER)")
 (COMMON-LISP:VALUES))

Trailing whitespace was removed from the affected file as well.

stylewarning commented 1 month ago

Can we get IFix, UFix, single and double floats in this PR too? Those get much greater benefit.

stylewarning commented 1 month ago

😑

jbouwman commented 1 month ago

🥺