mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Add inlined memcpy and memset builtins and macros. (#668)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user