forked from OSchip/llvm-project
parent
d8c2a48d58
commit
fe4c7fb7ae
|
@ -56,20 +56,6 @@ Number 1 is the preferred solution.
|
|||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
DAG combine this into mul A, 8:
|
||||
|
||||
int %test(int %A) {
|
||||
%B = mul int %A, 8 ;; shift
|
||||
%C = add int %B, 7 ;; dead, no demanded bits.
|
||||
%D = and int %C, -8 ;; dead once add is gone.
|
||||
ret int %D
|
||||
}
|
||||
|
||||
This sort of thing occurs in the alloca lowering code and other places that
|
||||
are generating alignment of an already aligned value.
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
Turn this into a signed shift right in instcombine:
|
||||
|
||||
int f(unsigned x) {
|
||||
|
@ -81,14 +67,6 @@ http://gcc.gnu.org/ml/gcc-patches/2006-02/msg01492.html
|
|||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
We should reassociate:
|
||||
int f(int a, int b){ return a * a + 2 * a * b + b * b; }
|
||||
into:
|
||||
int f(int a, int b) { return a * (a + 2 * b) + b * b; }
|
||||
to eliminate a multiply.
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
On targets with expensive 64-bit multiply, we could LSR this:
|
||||
|
||||
for (i = ...; ++i) {
|
||||
|
|
Loading…
Reference in New Issue