llvm2cranelift icon indicating copy to clipboard operation
llvm2cranelift copied to clipboard

fix panic when encountering memcpy, memset, memove intrinsics

Open undingen opened this issue 5 years ago • 1 comments

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)

undingen avatar Sep 17 '19 02:09 undingen

Thanks for the review. I removed the changes in translate_intr_libcalland rebased the PR.

undingen avatar Oct 08 '19 16:10 undingen