Description
Bugzilla Link | 6573 |
Version | trunk |
OS | Linux |
Attachments | Test case, Asm at -O2 |
Reporter | LLVM Bugzilla Contributor |
CC | @asl,@regehr |
Extended Description
Test case:
#include <stdint.h>
int8_t g_8[6][10];
int main(void)
{
int i, j;
for (i = 0; i < 6; i++)
{
for (j = 0; j < 10; j++)
g_8[i][j] = 0x44L;
}
return 0;
}
Description:
In the above code g_8 is an array of 6x10 bytes, which is initialized to 0x44. At -O2 and -O3, this array is initialized using memset().
C interface to memset(): void* memset(void* ptr, int value, size_t num);
Asm interface to memset(): ptr -> reg r15
data -> reg r14
size -> reg r13
Assembly code at -O2 and -O3 for call to memset():
main:
mov.w #0, r11
.LBB1_1
mov.w r11, r15
add.w #g_8, r15
mov.w #68, r14
mov.w #0, r13 /* size expected here, passed 0 /
mov.w #10, r12 / Size passed in r12, ignored */
call #memset
add.w #10, r11
cmp.w #60, r11
jne .LBB1_1
mov.w #0, r15
Bug: size argument to memset() should be passed in register r13. Instead it is passed in r12.
I am attaching the asm file at -O2. Below are the cmdline options.
pagariya@aleph:~/randprog-testing/main/tmp$ clang -ccc-host-triple msp430-elf -I/home/pagariya/res-pagariya/llvm-msp430/msp430/include -nostdinc -v -O2 -S test.c
clang version 1.1 (trunk 184)
Target: msp430-elf-
Thread model: posix
"/uusoc/facility/res/embed/users/pagariya/llvm-msp430/bin/clang" -cc1 -triple msp430-elf- -S -disable-free -main-file-name test.c -mrelocation-model static -mdisable-fp-elim -mconstructor-aliases -v -nostdinc -resource-dir /uusoc/facility/res/embed/users/pagariya/llvm-msp430/lib/clang/1.1 -I/home/pagariya/res-pagariya/llvm-msp430/msp430/include -O2 -fmessage-length 102 -fgnu-runtime -fdiagnostics-show-option -fcolor-diagnostics -o test.s -x c test.c
clang -cc1 version 1.1 based upon llvm 2.7svn hosted on i386-pc-linux-gnu
#include "..." search starts here:
#include <...> search starts here:
/home/pagariya/res-pagariya/llvm-msp430/msp430/include
/uusoc/facility/res/embed/users/pagariya/llvm-msp430/lib/clang/1.1/include
End of search list.
pagariya@aleph:~/randprog-testing/main/tmp$ uname -a
Linux aleph 2.6.24-24-generic #1 SMP Fri Sep 18 16:49:39 UTC 2009 i686 GNU/Linux