llvm-project icon indicating copy to clipboard operation
llvm-project copied to clipboard

Failures to use optimal math routine

Open runer112 opened this issue 1 year ago • 0 comments

Absolute value

All of them synthesize the operation (poorly)

  • [ ] int8_t
  • [ ] int16_t
  • [ ] int24_t
  • [ ] int32_t
  • [ ] int48_t
  • [ ] int64_t

Bit reverse

  • [ ] uint48_t foo(uint48_t x) { return __builtin_bitreverse64(x) >> 16; } uses __llbitrev instead of __i48bitrev (but __builtin_bitreverse32(x >> 16) | (uint48_t)__builtin_bitreverse16(x) << 32 is fine?)

Byte swap

  • [ ] int24_t foo(int24_t x) { return __builtin_bswap32(x) >> 8; } uses __lbswap instead of __ibswap (__ibswap doesn't exist yet, but probably should?)
  • [ ] int48_t foo(int48_t x) { return __builtin_bswap64(x) >> 16; } uses __llbswap instead of __i48bswap? (can't confirm because of https://github.com/jacobly0/llvm-project/issues/44#issuecomment-2468738761)

Division

  • [ ] int8_t foo(int8_t x, int8_t y) { return x / y; } uses __sdivs instead of __bdivs
  • [ ] int16_t foo(int16_t x, int16_t y) { return x / y; } uses __idivs instead of __sdivs

Negation

  • [ ] int48_t foo(int48_t x) { return -x; } synthesizes the operation (poorly) instead of using __i48abs

Remainder

  • [ ] int8_t foo(int8_t x, int8_t y) { return x % y; } uses __srems instead of __brems
  • [ ] int16_t foo(int16_t x, int16_t y) { return x % y; } uses __irems instead of __srems

Shift left

  • [ ] int8_t foo(int8_t x, int8_t y) { return x << y; } uses __ishl instead of __bshl
  • [ ] int16_t foo(int16_t x, int16_t y) { return x << y; } uses __ishl instead of __sshl

Shift right

  • [ ] int8_t foo(int8_t x, int8_t y) { return x >> y; } uses __ishrs instead of __bshl
  • [ ] uint8_t foo(uint8_t x, uint8_t y) { return x >> y; } uses __ishru instead of __bshru
  • [ ] int16_t foo(int16_t x, int16_t y) { return x >> y; } uses __ishrs instead of __sshrs
  • [ ] uint16_t foo(uint16_t x, uint16_t y) { return x >> y; } uses __ishru instead of __sshru

runer112 avatar Nov 11 '24 19:11 runer112