Add inlined memcpy and memset builtins and macros. (#668)

This commit is contained in:
Dmitry Atamanov
2022-12-12 15:45:01 +05:00
committed by GitHub
parent 50d2a04c48
commit 8b0d409695
11 changed files with 74 additions and 35 deletions

View File

@@ -9,10 +9,14 @@ fn void main()
$$memcpy(&dst, &src, ushort.sizeof, false, $alignof(dst), $alignof(src));
$$memmove(&dst, &src, ushort.sizeof, false, $alignof(dst), $alignof(src));
$$memset(&dst, 0u8, ushort.sizeof, false, $alignof(dst));
$$memcpy_inline(&dst, &src, ushort.sizeof, false, $alignof(dst), $alignof(src));
$$memset_inline(&dst, 0u8, ushort.sizeof, false, $alignof(dst));
}
/* #expect: test.ll
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 2 %0, i8* align 2 %1, i64 2, i1 false)
call void @llvm.memmove.p0i8.p0i8.i64(i8* align 2 %2, i8* align 2 %3, i64 2, i1 false)
call void @llvm.memset.p0i8.i64(i8* align 2 %4, i8 0, i64 2, i1 false)
call void @llvm.memset.p0i8.i64(i8* align 2 %4, i8 0, i64 2, i1 false)
call void @llvm.memcpy.inline.p0i8.p0i8.i64(i8* align 2 %5, i8* align 2 %6, i64 2, i1 false)

View File

@@ -508,7 +508,7 @@ after_check100: ; preds = %if.then
panic_block: ; preds = %assign_optional
%160 = load void (i8*, i64, i8*, i64, i8*, i64, i32)*, void (i8*, i64, i8*, i64, i8*, i64, i32)** @std_core_builtin_panic, align 8
call void %160(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.panic_msg, i64 0, i64 0), i64 27, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.file, i64 0, i64 0), i64 6, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.func, i64 0, i64 0), i64 4, i32 246)
call void %160(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.panic_msg, i64 0, i64 0), i64 27, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.file, i64 0, i64 0), i64 6, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.func, i64 0, i64 0), i64 4, i32 257)
unreachable
noerr_block: ; preds = %after_check100

View File

@@ -9,6 +9,9 @@ fn void main()
$$memcpy(&dst, &src, ushort.sizeof, false, $alignof(dst), $alignof(src));
$$memmove(&dst, &src, ushort.sizeof, false, $alignof(dst), $alignof(src));
$$memset(&dst, 0u8, ushort.sizeof, false, $alignof(dst));
$$memcpy_inline(&dst, &src, ushort.sizeof, false, $alignof(dst), $alignof(src));
$$memset_inline(&dst, 0u8, ushort.sizeof, false, $alignof(dst));
}
/* #expect: test.ll
@@ -16,3 +19,5 @@ fn void main()
call void @llvm.memcpy.p0.p0.i64(ptr align 2 %dst, ptr align 2 %src, i64 2, i1 false)
call void @llvm.memmove.p0.p0.i64(ptr align 2 %dst, ptr align 2 %src, i64 2, i1 false)
call void @llvm.memset.p0.i64(ptr align 2 %dst, i8 0, i64 2, i1 false)
call void @llvm.memcpy.inline.p0.p0.i64(ptr align 2 %dst, ptr align 2 %src, i64 2, i1 false)
call void @llvm.memset.inline.p0.i64(ptr align 2 %dst, i8 0, i64 2, i1 false)

View File

@@ -364,7 +364,7 @@ after_check67: ; preds = %if.then
panic_block: ; preds = %assign_optional
%81 = load ptr, ptr @std_core_builtin_panic, align 8
call void %81(ptr @.panic_msg, i64 27, ptr @.file, i64 6, ptr @.func, i64 4, i32 246)
call void %81(ptr @.panic_msg, i64 27, ptr @.file, i64 6, ptr @.func, i64 4, i32 257)
unreachable
noerr_block: ; preds = %after_check67