llvm2cranelift
llvm2cranelift copied to clipboard
fix panic when encountering memcpy, memset, memove intrinsics
when encountering the example below we rewrote the intrinsics name to e.g. memcpy
but because this string was likely not yet in string table
get_extname()
asserted. Instead of manually creating the string table entries I decided to start moving to the ExternalName::LibCall
functionality.
I did not want to introduce an new dependency on cranelift-module (and also didn't want to add the Box<dyn Fn(ir::LibCall)>
everywhere)
so instead I hardcoded the name of the three functions for now.
define dso_local void @foo(i8* nocapture readonly, i8* nocapture, i8* nocapture, i8* nocapture) local_unnamed_addr {
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %1, i8* align 1 %0, i64 42, i1 false)
tail call void @llvm.memmove.p0i8.p0i8.i64(i8* align 1 %2, i8* align 1 %0, i64 42, i1 false)
tail call void @llvm.memset.p0i8.i64(i8* align 1 %3, i8 0, i64 42, i1 false)
ret void
}
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1)
declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i1)
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1)
Thanks for the review. I removed the changes in translate_intr_libcall
and rebased the PR.