[PATCH] D86547: [compiler-rt][builtins] Use c[tl]zsi macro instead of __builtin_c[tl]z
Anatoly Trosinenko via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 22 03:22:16 PDT 2020
atrosinenko added a comment.
In D86547#2284095 <https://reviews.llvm.org/D86547#2284095>, @MaskRay wrote:
> The `(aWidth - 1) - clzsi(a)` change is correct, but why is the ctz change?
`d.s.low` and `d.s.high` are `su_int`. While some helpers from `libgcc` are documented with `int`, `long`, etc. types //for simplicity// and use machine modes under the hood, the `__builtin_ctz()` function (as well as clz), on the other hand, seems to **really** accept an `int`-sized argument:
$ clang --version
clang version 10.0.0-4ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
$ clang -S -O3 -o- -x c - <<< "int f() { return __builtin_ctz(0x100000); }"
.text
.file "-"
.globl f # -- Begin function f
.p2align 4, 0x90
.type f, at function
f: # @f
.cfi_startproc
# %bb.0:
movl $20, %eax
retq
.Lfunc_end0:
.size f, .Lfunc_end0-f
.cfi_endproc
# -- End function
.ident "clang version 10.0.0-4ubuntu1 "
.section ".note.GNU-stack","", at progbits
.addrsig
$ clang -S -O3 -target msp430 -o- -x c - <<< "int f() { return __builtin_ctz(0x100000); }"
<stdin>:1:32: warning: implicit conversion from 'long' to 'unsigned int' changes value from 1048576 to 0 [-Wconstant-conversion]
int f() { return __builtin_ctz(0x100000); }
~~~~~~~~~~~~~ ^~~~~~~~
.text
.file "-"
.globl f ; -- Begin function f
.p2align 1
.type f, at function
f: ; @f
; %bb.0:
ret
.Lfunc_end0:
.size f, .Lfunc_end0-f
; -- End function
.ident "clang version 10.0.0-4ubuntu1 "
.section ".note.GNU-stack","", at progbits
.addrsig
1 warning generated.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D86547/new/
https://reviews.llvm.org/D86547
More information about the cfe-commits
mailing list