Skip to content
This repository was archived by the owner on Jul 7, 2022. It is now read-only.

Conversation

undingen
Copy link
Contributor

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)

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.

```llvm
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
Copy link
Contributor Author

undingen commented Oct 8, 2019

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants