diff options
author | Chad Rosier <mcrosier@codeaurora.org> | 2014-07-23 14:57:52 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@codeaurora.org> | 2014-07-23 14:57:52 +0000 |
commit | 17020f96c79a0b28275681e16569c81dc369d77b (patch) | |
tree | 1f6dadbf7ab978ce7e3a87bac0ded8699d0833c9 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 74acbb77678f702c84ad56f444abe259058f6bdc (diff) | |
download | llvm-17020f96c79a0b28275681e16569c81dc369d77b.zip llvm-17020f96c79a0b28275681e16569c81dc369d77b.tar.gz llvm-17020f96c79a0b28275681e16569c81dc369d77b.tar.bz2 |
[AArch64] Lower sdiv x, pow2 using add + select + shift.
The target-independent DAGcombiner will generate:
asr w1, X, #31 w1 = splat sign bit.
add X, X, w1, lsr #28 X = X + 0 or pow2-1
asr w0, X, asr #4 w0 = X/pow2
However, the add + shifts is expensive, so generate:
add w0, X, 15 w0 = X + pow2-1
cmp X, wzr X - 0
csel X, w0, X, lt X = (X < 0) ? X + pow2-1 : X;
asr w0, X, asr 4 w0 = X/pow2
llvm-svn: 213758
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions