Yo,
I don't know if this helps, but I can create arbitrary compilation times with very small code samples:

let sink (a,f) = f a

let base = ()
let finish () = ()

let step () = ()

let fold (a,f) g = g (a,f)
let step0 h (a,f) = fold (h a,f)

let f z = fold (base, finish) z

let a z = step0 step z

let () =
  let () = f
    a a a a
    a a a a
    a a a a
    a a a a
    a a a a
    a a a
    sink
  in
  ();;

$> time ocamlc vararg.ml
real    1m9.372s
user    1m9.264s
sys    0m0.044s


Try adding a few a's and see what that gives.

have fun,
Romain.

PS

I'm quite clueless about what's going on exactly. I just stumbled onto this tinkering around with MLton's fold vararg solutions.