Guile compiler drives out part of initialization for autoloaded
modules (typically,  statements in `side-effects only' form).
Please find below an example. Interpreter produces expected
result;  compiler works fine when `define-public’ form is used
in autoloaded module for `f’ definition. 
 
amaya@t460s:~/tmp/guile-test$ cat main.scm f.scm
(define-module (guile-test main) #:autoload (guile-test f) (f))
(define (main) (f))
(main)
 
(define-module (guile-test f) #:export (f))
(format (current-error-port) "*** module f initialized\n")
(define (f) (format #t "hello from f\n"))
 
amaya@t460s:~/tmp/guile-test$ guile -L .. main.scm
hello from f
 
amaya@t460s:~/tmp/guile-test$ cat main.scm | guile -L ..
GNU Guile 3.0.8
Copyright (C) 1995-2021 Free Software Foundation, Inc.
[...]
*** module f initialized
$1 = #<directory (guile-test main) 7f83118763c0>
hello from f
$2 = #t