}
}
};
- AppendUsersIfNeeded(LHS);
- AppendUsersIfNeeded(RHS);
// Control the compile time by limiting the number of node we look at in
// total.
if (Res) {
Matched = true;
CombinesToApply.push_back(*Res);
+ // All the inputs that are extended need to be folded, otherwise
+ // we would be leaving the old input (since it is may still be used),
+ // and the new one.
+ if (Res->SExtLHS.has_value())
+ AppendUsersIfNeeded(LHS);
+ if (Res->SExtRHS.has_value())
+ AppendUsersIfNeeded(RHS);
break;
}
}
; CHECK: # %bb.0: # %bb
; CHECK-NEXT: slli a0, a0, 32
; CHECK-NEXT: srli a0, a0, 32
-; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
-; CHECK-NEXT: vsext.vf4 v10, v8
+; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
+; CHECK-NEXT: vsext.vf2 v10, v8
+; CHECK-NEXT: vwadd.wv v8, v9, v10
; CHECK-NEXT: vsetvli zero, zero, e32, m1, tu, ma
-; CHECK-NEXT: vadd.vv v9, v9, v10
+; CHECK-NEXT: vadd.vi v9, v8, 0
; CHECK-NEXT: vmv1r.v v8, v9
; CHECK-NEXT: ret
bb:
; CHECK: # %bb.0: # %bb
; CHECK-NEXT: slli a0, a0, 32
; CHECK-NEXT: srli a0, a0, 32
-; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
-; CHECK-NEXT: vzext.vf4 v10, v8
+; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
+; CHECK-NEXT: vzext.vf2 v10, v8
+; CHECK-NEXT: vwaddu.wv v8, v9, v10
; CHECK-NEXT: vsetvli zero, zero, e32, m1, tu, ma
-; CHECK-NEXT: vadd.vv v9, v9, v10
+; CHECK-NEXT: vadd.vi v9, v8, 0
; CHECK-NEXT: vmv1r.v v8, v9
; CHECK-NEXT: ret
bb: