<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">I have implemented a language and I'm planning to release it soon. One of my goals is to have good build speeds so I can use it for web development. I noticed building ll files is faster than building C. However I noticed building a simple ll file can take 100+milliseconds on my desktop which isn't terrible but isn't extremely fast either (-fsyntax-only is about 50ms).</div><div><br></div><div>What can I do to build faster? I believe I saw some kind of C++ library. Is using that directly any faster? I'm not writing my compiler in C++ and I'm very likely to rewrite it in my language which will provide C linking. Am I out of luck?</div><div><br></div><div>The test C file I used was</div><div><br></div><div style="margin-left:40px">int main() {<br>    puts("Hello");<br>    return 0;<br>}<br></div>I created the ll file by using `clang hello.c -S -emit-llvm` which generated the below. Usually I program on linux but there's some debugging I'm doing on windows atm however last time I checked I believe the speed was comparable.<br></div><div dir="ltr"><br></div><div><div style="margin-left:40px">; ModuleID = 'hello.c'<br>source_filename = "hello.c"<br>target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"<br>target triple = "x86_64-pc-windows-msvc19.10.25017"<br><br>$"??_C@_05COLMCDPH@Hello?$AA@" = comdat any<br><br>@"??_C@_05COLMCDPH@Hello?$AA@" = linkonce_odr dso_local unnamed_addr constant [6 x i8] c"Hello\00", comdat, align 1<br><br>; Function Attrs: noinline nounwind optnone uwtable<br>define dso_local i32 @main() #0 {<br>  %1 = alloca i32, align 4<br>  store i32 0, i32* %1, align 4<br>  %2 = call i32 bitcast (i32 (...)* @puts to i32 (i8*)*)(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @"??_C@_05COLMCDPH@Hello?$AA@", i32 0, i32 0))<br>  ret i32 0<br>}<br><br>declare dso_local i32 @puts(...) #1<br><br>attributes #0 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }<br>attributes #1 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }<br><br>!llvm.module.flags = !{!0, !1}<br>!llvm.ident = !{!2}<br><br>!0 = !{i32 1, !"wchar_size", i32 2}<br>!1 = !{i32 7, !"PIC Level", i32 2}<br>!2 = !{!"clang version 7.0.1 (tags/RELEASE_701/final)"}<br></div><br></div></div></div></div>