[llvm-dev] How to remove memcpy

Mehdi Amini via llvm-dev llvm-dev at lists.llvm.org
Sat Oct 15 16:01:36 PDT 2016


> On Oct 15, 2016, at 3:56 PM, Wolfgang McSneed via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> Hi,
> 
> I am hoping that someone can help me figure out how to prevent the insertion of "memcpy" from the assembly source. 
> 
> My target is an instruction set simulator that doesn't support this.
> 
> Thank you for your valuable time.
> 
> Wolf
> 
> Here are my compile commands:
> $ clang -emit-llvm -fno-builtin -o3 --target=mips -S matrix_float.c -o vl_matrix_float.ll

Technically  -fno-bultin prevents the compiler from understand the memset in the original code. The right option to prevent the compiler from insert libc calls “out-of-the-blue” is -ffreestanding.

However I thought that right now clang does not differentiate these, so your result is somehow strange.
Can you include the matrix_float.c source code?

— 
Mehdi


> $ llc vl_matrix_float.ll 
> 
> IR File Snip:
>   %0 = bitcast [10 x [10 x float]]* %a to i8*
>   call void @llvm.memcpy.p0i8.p0i8.i32(i8* %0, i8* bitcast ([10 x [10 x float]]* @main.a to i8*), i32 400, i32 4, i1 false)
>   %1 = bitcast [10 x [10 x float]]* %b to i8*
>   call void @llvm.memcpy.p0i8.p0i8.i32(i8* %1, i8* bitcast ([10 x [10 x float]]* @main.b to i8*), i32 400, i32 4, i1 false)
>   store i32 0, i32* %sum, align 4
> 
> Assembly File Snip:
> 
> # BB#0:                                 # %entry
> 	lui	$2, %hi(_gp_disp)
> 	addiu	$2, $2, %lo(_gp_disp)
> 	addiu	$sp, $sp, -1664
> 	sw	$ra, 1660($sp)          # 4-byte Folded Spill
> 	sw	$fp, 1656($sp)          # 4-byte Folded Spill
> 	sw	$17, 1652($sp)          # 4-byte Folded Spill
> 	sw	$16, 1648($sp)          # 4-byte Folded Spill
> 	move	 $fp, $sp
> 	addu	$17, $2, $25
> 	lw	$1, %got($main.a)($17)
> 	addiu	$5, $1, %lo($main.a)
> 	lw	$25, %call16(memcpy)($17)
> 	addiu	$16, $fp, 1248
> 	move	 $4, $16
> 	addiu	$6, $zero, 400
> 	jalr	$25
> 	move	 $gp, $17
> 	lw	$1, %got($main.b)($17)
> 	addiu	$5, $1, %lo($main.b)
> 	lw	$25, %call16(memcpy)($17)
> 	addiu	$17, $fp, 848
> 	move	 $4, $17
> 	jalr	$25
> 	addiu	$6, $zero, 400
> 	sw	$zero, 820($fp)
> 	sw	$zero, 844($fp)
> 	addiu	$2, $fp, 420
> 	b	$BB0_2
> 	addiu	$3, $fp, 20
> $BB0_1:
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161015/2e909900/attachment.html>


More information about the llvm-dev mailing list