[PATCH] D85446: [InstCombine] Add vector support to mul(add(x,c),negpow2) -> mul(sub(-c,x),pow2) folds
Roman Lebedev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 6 13:13:42 PDT 2020
lebedev.ri added inline comments.
================
Comment at: llvm/test/Transforms/InstCombine/mul.ll:976
; CHECK-LABEL: @muladd2_vec(
-; CHECK-NEXT: [[TMP1:%.*]] = mul <2 x i32> [[A0:%.*]], <i32 -4, i32 -4>
-; CHECK-NEXT: [[MUL:%.*]] = add <2 x i32> [[TMP1]], <i32 -64, i32 -64>
+; CHECK-NEXT: [[SUBC_NEG:%.*]] = mul <2 x i32> [[A0:%.*]], <i32 -4, i32 -4>
+; CHECK-NEXT: [[MUL:%.*]] = add <2 x i32> [[SUBC_NEG]], <i32 -64, i32 -64>
----------------
lebedev.ri wrote:
> And another example that we need something like Negator-driven hoisting.
Also, there's some very interesting fold pirouetting going on there.
I will be surprised if we won't encounter conflicting transforms here soon.
```
INSTCOMBINE ITERATION #1 on muladd2
IC: ADD: ret i32 %mul
IC: ADD: %mul = mul i32 %add, -4
IC: ADD: %add = add i32 %a0, 16
IC: Visiting: %add = add i32 %a0, 16
IC: Visiting: %mul = mul i32 %add, -4
Negator: attempting to sink negation into %add = add i32 %a0, 16
Negator: successfully sunk negation into %add = add i32 %a0, 16
NEW: %add.neg = sub i32 -16, %a0
Negator: Propagating 1 instrs to InstCombine
IC: ADD DEFERRED: %add.neg = sub i32 -16, %a0
IC: Old = %mul = mul i32 %add, -4
New = %mul = mul i32 %add.neg, 4
IC: ADD: %mul = mul i32 %add.neg, 4
IC: ERASE %1 = mul i32 %add, -4
IC: ADD DEFERRED: %add = add i32 %a0, 16
IC: ERASE %add = add i32 %a0, 16
IC: ADD: %add.neg = sub i32 -16, %a0
IC: Visiting: %add.neg = sub i32 -16, %a0
Negator: attempting to sink negation into i32 %a0
Negator: failed to sink negation into i32 %a0
IC: Visiting: %mul = mul i32 %add.neg, 4
IC: Old = %mul = mul i32 %add.neg, 4
New = <badref> = shl i32 %add.neg, 2
IC: ADD: %mul = shl i32 %add.neg, 2
IC: ERASE %1 = mul i32 %add.neg, 4
IC: ADD DEFERRED: %add.neg = sub i32 -16, %a0
IC: ADD: %add.neg = sub i32 -16, %a0
IC: Visiting: %add.neg = sub i32 -16, %a0
Negator: attempting to sink negation into i32 %a0
Negator: failed to sink negation into i32 %a0
IC: Visiting: %mul = shl i32 %add.neg, 2
IC: ADD DEFERRED: %add.neg = sub i32 1073741808, %a0
IC: Mod = %mul = shl i32 %add.neg, 2
New = %mul = shl i32 %add.neg, 2
IC: ADD: %mul = shl i32 %add.neg, 2
IC: ADD: %add.neg = sub i32 1073741808, %a0
IC: Visiting: %add.neg = sub i32 1073741808, %a0
Negator: attempting to sink negation into i32 %a0
Negator: failed to sink negation into i32 %a0
IC: Visiting: %mul = shl i32 %add.neg, 2
IC: ADD DEFERRED: %1 = shl i32 %a0, 2
IC: Old = %mul = shl i32 %1, 2
New = <badref> = sub i32 -64, %add.neg
IC: ADD: %mul = sub i32 -64, %add.neg
IC: ERASE %2 = shl i32 %1, 2
IC: ADD DEFERRED: %1 = sub i32 1073741808, %a0
IC: ERASE %1 = sub i32 1073741808, %a0
IC: ADD: %add.neg = shl i32 %a0, 2
IC: Visiting: %add.neg = shl i32 %a0, 2
IC: Visiting: %mul = sub i32 -64, %add.neg
Negator: attempting to sink negation into %add.neg = shl i32 %a0, 2
Negator: successfully sunk negation into %add.neg = shl i32 %a0, 2
NEW: %add.neg.neg = mul i32 %a0, -4
Negator: Propagating 1 instrs to InstCombine
IC: ADD DEFERRED: %add.neg.neg = mul i32 %a0, -4
IC: Old = %mul = sub i32 -64, %add.neg
New = <badref> = add i32 %add.neg.neg, -64
IC: ADD: %mul = add i32 %add.neg.neg, -64
IC: ERASE %1 = sub i32 -64, %add.neg
IC: ADD DEFERRED: %add.neg = shl i32 %a0, 2
IC: ERASE %add.neg = shl i32 %a0, 2
IC: ADD: %add.neg.neg = mul i32 %a0, -4
IC: Visiting: %add.neg.neg = mul i32 %a0, -4
Negator: attempting to sink negation into i32 %a0
Negator: failed to sink negation into i32 %a0
IC: Visiting: %mul = add i32 %add.neg.neg, -64
IC: Visiting: ret i32 %mul
INSTCOMBINE ITERATION #2 on muladd2
IC: ADD: ret i32 %mul
IC: ADD: %mul = add i32 %add.neg.neg, -64
IC: ADD: %add.neg.neg = mul i32 %a0, -4
IC: Visiting: %add.neg.neg = mul i32 %a0, -4
Negator: attempting to sink negation into i32 %a0
Negator: failed to sink negation into i32 %a0
IC: Visiting: %mul = add i32 %add.neg.neg, -64
IC: Visiting: ret i32 %mul
```
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D85446/new/
https://reviews.llvm.org/D85446
More information about the llvm-commits
mailing list