SDValue Chain, SDValue InFlag,
SDValue PStateSM, bool Entry) const;
+ bool isVScaleKnownToBeAPowerOfTwo() const override;
+
// Normally SVE is only used for byte size vectors that do not fit within a
// NEON vector. This changes when OverrideNEON is true, allowing SVE to be
// used for 64bit and 128bit vectors as well.
; CHECK-NEXT: rdvl x8, #1
; CHECK-NEXT: lsr x8, x8, #4
; CHECK-NEXT: lsr x8, x8, #3
-; CHECK-NEXT: udiv x9, x0, x8
-; CHECK-NEXT: msub x0, x9, x8, x0
+; CHECK-NEXT: sub x8, x8, #1
+; CHECK-NEXT: and x0, x0, x8
; CHECK-NEXT: ret
%vscale = call i64 @llvm.vscale.i64()
%shifted = lshr i64 %vscale, 3
; CHECK: // %bb.0:
; CHECK-NEXT: rdvl x8, #1
; CHECK-NEXT: lsr x8, x8, #4
-; CHECK-NEXT: udiv x9, x0, x8
-; CHECK-NEXT: msub x0, x9, x8, x0
+; CHECK-NEXT: sub x8, x8, #1
+; CHECK-NEXT: and x0, x0, x8
; CHECK-NEXT: ret
%vscale = call i64 @llvm.vscale.i64()
%urem = urem i64 %TC, %vscale
; CHECK-LABEL: vscale_shl:
; CHECK: // %bb.0:
; CHECK-NEXT: cnth x8
-; CHECK-NEXT: udiv x9, x0, x8
-; CHECK-NEXT: msub x0, x9, x8, x0
+; CHECK-NEXT: sub x8, x8, #1
+; CHECK-NEXT: and x0, x0, x8
; CHECK-NEXT: ret
%vscale = call i64 @llvm.vscale.i64()
%shifted = shl i64 %vscale, 3