- 
                Notifications
    You must be signed in to change notification settings 
- Fork 15k
Closed
Labels
Description
| Bugzilla Link | 3997 | 
| Resolution | FIXED | 
| Resolved on | Mar 20, 2017 13:45 | 
| Version | trunk | 
| OS | Linux | 
| Blocks | llvm/llvm-bugzilla-archive#4068 | 
| Attachments | test case | 
| Reporter | LLVM Bugzilla Contributor | 
| CC | @asl,@chandlerc,@pageexec | 
Extended Description
llc does not handle this case correctly:
call void @​llvm.memcpy.i32(i8* %3, i8* %4, i32 2052, i32 4)
%dst1 = bitcast [128 x i8]* %dst to i8*		; <i8*> [#uses=1]
%src2 = bitcast [128 x i8]* %src to i8*		; <i8*> [#uses=1]
%5 = call i8* @​memcpy(i8* inreg %dst1, i8* inreg %src2, i32 inreg 128) nounwind		; <i8*> [#uses=0]
when llvm.memcpy.i32 lowers to call to memcpy, it does not follow the customized memcpy calling convention.
for the first llvm.memcpy.i32, the generated assemblies are:
movl	%eax, (%edx)
movl	%ecx, 4(%edx)
movl	$2052, 8(%edx)
call	memcpy
for the second call of memcpy, the codes are:
leal	-140(%ebp), %eax
leal	-268(%ebp), %ecx
movl	$128, %edx
movl	%edx, -276(%ebp)
movl	%ecx, %edx
movl	-276(%ebp), %ecx
call	memcpy