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
$ 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: