terralang / terra

Terra is a low-level system programming language that is embedded in and meta-programmed by the Lua programming language.
terralang.org
Other
2.71k stars 197 forks source link

cconv_more.t fails on Apple M2 with N=10 #627

Open elliottslaughter opened 1 year ago

elliottslaughter commented 1 year ago

Running be8952140264510c16b60cc21561fbc19f105158 with LLVM 16.

./cconv_more.t:600: scalar test failed for N=10, {uint8_t_2,uint8_t_2,uint8_t_2,uint8_t_2,uint8_t_2,uint8_t_2,uint8_t_2,uint8_t_2,uint8_t_2,uint8_t_2} -> uint8: error code 164

Comparing the signatures:

define zeroext i8 @cbb10(i64 %x1.coerce, i64 %x2.coerce, i64 %x3.coerce, i64 %x4.coerce, i64 %x5.coerce, i64 %x6.coerce, i64 %x7.coerce, i64 %x8.coerce, i64 %x9.coerce, i64 %x10.coerce) #0 {
define internal i8 @"$tbb10"(i16 %0, i16 %1, i16 %2, i16 %3, i16 %4, i16 %5, i16 %6, i16 %7, i16 %8, i16 %9) #2 {

Looks like Clang is promoting the arguments to i64 which may result in extra padding if we pass them on the stack?

elliottslaughter commented 1 year ago

For posterity, I confirmed that it also fails on LLVM 11, 13, 14, and 15. (So not sensitive to LLVM version, and not a regression.)