[LLVMdev] Mips backend 3.2 va_arg possible bug
Stavropoulos Nikos
n.stavropoulos at think-silicon.com
Wed Feb 27 02:47:06 PST 2013
i have this code
typedef long long L;
typedef integer I;
void test2(auto L p0, auto L p1, auto L p2, auto L p4, ...)
{
va_list select;
va_start (select, p4);
report( va_arg(select,L) );
report( va_arg(select,I) );
report( va_arg(select,L) );
va_end (select);
}
int main(void)
{
test2(1, 2, 3, 4, 5LL, 6, 7LL);
return 0;
}
report is just a function that prints the results.
in main the assemply code seems to be ok but in test2 function does
something that seems to be wrong
i use "llc -march=mipsel -relocation-model=static -asm-verbose
-mattr=+condmov,-muldivadd,+single-float,-fp64,+o32,-bitcount " command
in function we report the values of a long long value then an integer value
and then again a long long
so the problem is that in the test2 function there is an addiu
$3, $2, 4
that causes the third long long value to be read from wrong address.
mipsel.s <http://llvm.1065342.n5.nabble.com/file/n55498/mipsel.s>
.set nomacro
# BB#0: # %entry
addiu $sp, $sp, -24
sw $ra, 20($sp) # 4-byte Folded Spill
addiu $2, $sp, 56
sw $2, 16($sp)
addiu $2, $2, 8
sw $2, 16($sp)
lw $5, 60($sp)
lw $4, 56($sp)
jal _Z6reportx
nop
lw $2, 16($sp)
#problem starts here
addiu $3, $2, 4
#problem stops here
sw $3, 16($sp)
lw $4, 0($2)
jal _Z6reporti
nop
lw $2, 16($sp)
addiu $3, $2, 8
sw $3, 16($sp)
lw $5, 4($2)
lw $4, 0($2)
jal _Z6reportx
nop
lw $ra, 20($sp) # 4-byte Folded Reload
addiu $sp, $sp, 24
jr $ra
nop
.set macro
.set reorder
.end _Z5test2xxxxz
--
View this message in context: http://llvm.1065342.n5.nabble.com/LLVMdev-Mips-backend-3-2-va-arg-possible-bug-tp55498.html
Sent from the LLVM - Dev mailing list archive at Nabble.com.
More information about the llvm-dev
mailing list