Skip to content

Commit 698584f

Browse files
committed
[IR] Remove unbounded as possible value for vscale_range minimum
The default for min is changed to 1. The behaviour of -mvscale-{min,max} in Clang is also changed such that 16 is the max vscale when targeting SVE and no max is specified. Reviewed By: sdesmalen, paulwalker-arm Differential Revision: https://reviews.llvm.org/D113294
1 parent 978431e commit 698584f

27 files changed

+71
-50
lines changed

clang/include/clang/Basic/DiagnosticDriverKinds.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,8 @@ def err_cc1_round_trip_ok_then_fail : Error<
608608
"generated arguments parse failed in round-trip">;
609609
def err_cc1_round_trip_mismatch : Error<
610610
"generated arguments do not match in round-trip">;
611+
def err_cc1_unbounded_vscale_min : Error<
612+
"minimum vscale must be an unsigned integer greater than 0">;
611613

612614
def err_drv_ssp_missing_offset_argument : Error<
613615
"'%0' is used without '-mstack-protector-guard-offset', and there is no default">;

clang/include/clang/Driver/Options.td

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3357,8 +3357,7 @@ def msve_vector_bits_EQ : Joined<["-"], "msve-vector-bits=">, Group<m_aarch64_Fe
33573357

33583358
def mvscale_min_EQ : Joined<["-"], "mvscale-min=">,
33593359
Group<m_aarch64_Features_Group>, Flags<[NoXarchOption,CC1Option]>,
3360-
HelpText<"Specify the vscale minimum. Defaults to the"
3361-
" vector length agnostic value of \"0\". (AArch64 only)">,
3360+
HelpText<"Specify the vscale minimum. Defaults to \"1\". (AArch64 only)">,
33623361
MarshallingInfoInt<LangOpts<"VScaleMin">>;
33633362
def mvscale_max_EQ : Joined<["-"], "mvscale-max=">,
33643363
Group<m_aarch64_Features_Group>, Flags<[NoXarchOption,CC1Option]>,

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -474,10 +474,12 @@ ArrayRef<Builtin::Info> AArch64TargetInfo::getTargetBuiltins() const {
474474
Optional<std::pair<unsigned, unsigned>>
475475
AArch64TargetInfo::getVScaleRange(const LangOptions &LangOpts) const {
476476
if (LangOpts.VScaleMin || LangOpts.VScaleMax)
477-
return std::pair<unsigned, unsigned>(LangOpts.VScaleMin,
478-
LangOpts.VScaleMax);
477+
return std::pair<unsigned, unsigned>(
478+
LangOpts.VScaleMin ? LangOpts.VScaleMin : 1, LangOpts.VScaleMax);
479+
479480
if (hasFeature("sve"))
480-
return std::pair<unsigned, unsigned>(0, 16);
481+
return std::pair<unsigned, unsigned>(1, 16);
482+
481483
return None;
482484
}
483485

clang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4123,6 +4123,13 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
41234123
{std::string(Split.first), std::string(Split.second)});
41244124
}
41254125

4126+
// Error if -mvscale-min is unbounded.
4127+
if (Arg *A = Args.getLastArg(options::OPT_mvscale_min_EQ)) {
4128+
unsigned VScaleMin;
4129+
if (StringRef(A->getValue()).getAsInteger(10, VScaleMin) || VScaleMin == 0)
4130+
Diags.Report(diag::err_cc1_unbounded_vscale_min);
4131+
}
4132+
41264133
return Diags.getNumErrors() == NumErrorsBefore;
41274134
}
41284135

clang/test/CodeGen/arm-sve-vector-bits-vscale-range.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@
1010
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -mvscale-min=4 -S -emit-llvm -o - %s | FileCheck %s -D#VBITS=4 --check-prefix=CHECK-NOMAX
1111
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -mvscale-min=8 -S -emit-llvm -o - %s | FileCheck %s -D#VBITS=8 --check-prefix=CHECK-NOMAX
1212
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -mvscale-min=16 -S -emit-llvm -o - %s | FileCheck %s -D#VBITS=16 --check-prefix=CHECK-NOMAX
13-
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve2 -mvscale-min=0 -mvscale-max=0 -S -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-NONE
14-
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -mvscale-min=0 -mvscale-max=0 -S -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-NONE
13+
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve2 -mvscale-min=1 -mvscale-max=0 -S -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-UNBOUNDED
14+
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -mvscale-min=1 -mvscale-max=0 -S -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-UNBOUNDED
1515
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -S -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-NONE
1616

1717
// CHECK-LABEL: @func() #0
1818
// CHECK: attributes #0 = { {{.*}} vscale_range([[#VBITS]],[[#VBITS]]) {{.*}} }
1919
// CHECK-NOMAX: attributes #0 = { {{.*}} vscale_range([[#VBITS]],0) {{.*}} }
20-
// CHECK-NONE: attributes #0 = { {{.*}} vscale_range(0,16) {{.*}} }
20+
// CHECK-UNBOUNDED: attributes #0 = { {{.*}} vscale_range(1,0) {{.*}} }
21+
// CHECK-NONE: attributes #0 = { {{.*}} vscale_range(1,16) {{.*}} }
2122
void func() {}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// -----------------------------------------------------------------------------
2+
// Tests for the -mvscale-min flag
3+
// -----------------------------------------------------------------------------
4+
5+
// Error out if value is unbounded.
6+
// -----------------------------------------------------------------------------
7+
// RUN: not %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve \
8+
// RUN: -mvscale-min=0 2>&1 | FileCheck %s
9+
10+
// CHECK: error: minimum vscale must be an unsigned integer greater than 0

llvm/docs/LangRef.rst

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2134,9 +2134,10 @@ example:
21342134
duplicate definitions are linked together with differing values.
21352135
``vscale_range(<min>[, <max>])``
21362136
This attribute indicates the minimum and maximum vscale value for the given
2137-
function. A value of 0 means unbounded. If the optional max value is omitted
2138-
then max is set to the value of min. If the attribute is not present, no
2139-
assumptions are made about the range of vscale.
2137+
function. The min must be greater than 0. A maximum value of 0 means
2138+
unbounded. If the optional max value is omitted then max is set to the
2139+
value of min. If the attribute is not present, no assumptions are made
2140+
about the range of vscale.
21402141

21412142
Call Site Attributes
21422143
----------------------

llvm/include/llvm/IR/Attributes.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ class Attribute {
216216
/// if not known).
217217
std::pair<unsigned, Optional<unsigned>> getAllocSizeArgs() const;
218218

219-
/// Returns the argument numbers for the vscale_range attribute (or pair(0, 0)
219+
/// Returns the argument numbers for the vscale_range attribute (or pair(1, 0)
220220
/// if not known).
221221
std::pair<unsigned, unsigned> getVScaleRangeArgs() const;
222222

@@ -1054,7 +1054,7 @@ class AttrBuilder {
10541054
std::pair<unsigned, Optional<unsigned>> getAllocSizeArgs() const;
10551055

10561056
/// Retrieve the vscale_range args, if the vscale_range attribute exists. If
1057-
/// it doesn't exist, pair(0, 0) is returned.
1057+
/// it doesn't exist, pair(1, 0) is returned.
10581058
std::pair<unsigned, unsigned> getVScaleRangeArgs() const;
10591059

10601060
/// Add integer attribute with raw value (packed/encoded if necessary).

llvm/lib/IR/Attributes.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -719,7 +719,7 @@ std::pair<unsigned, Optional<unsigned>> AttributeSet::getAllocSizeArgs() const {
719719

720720
std::pair<unsigned, unsigned> AttributeSet::getVScaleRangeArgs() const {
721721
return SetNode ? SetNode->getVScaleRangeArgs()
722-
: std::pair<unsigned, unsigned>(0, 0);
722+
: std::pair<unsigned, unsigned>(1, 0);
723723
}
724724

725725
std::string AttributeSet::getAsString(bool InAttrGrp) const {
@@ -900,7 +900,7 @@ AttributeSetNode::getAllocSizeArgs() const {
900900
std::pair<unsigned, unsigned> AttributeSetNode::getVScaleRangeArgs() const {
901901
if (auto A = findEnumAttribute(Attribute::VScaleRange))
902902
return A->getVScaleRangeArgs();
903-
return std::make_pair(0, 0);
903+
return std::make_pair(1, 0);
904904
}
905905

906906
std::string AttributeSetNode::getAsString(bool InAttrGrp) const {

llvm/lib/IR/Verifier.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2058,6 +2058,9 @@ void Verifier::verifyFunctionAttrs(FunctionType *FT, AttributeList Attrs,
20582058
std::pair<unsigned, unsigned> Args =
20592059
Attrs.getFnAttrs().getVScaleRangeArgs();
20602060

2061+
if (Args.first == 0)
2062+
CheckFailed("'vscale_range' minimum must be greater than 0", V);
2063+
20612064
if (Args.first > Args.second && Args.second != 0)
20622065
CheckFailed("'vscale_range' minimum cannot be greater than maximum", V);
20632066
}

llvm/test/Analysis/CostModel/AArch64/sve-gather.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ define void @masked_gathers_no_vscale_range() #2 {
104104
ret void
105105
}
106106

107-
attributes #0 = { "target-features"="+sve" vscale_range(0, 8) }
108-
attributes #1 = { "target-features"="+sve" vscale_range(0, 16) "tune-cpu"="generic" }
107+
attributes #0 = { "target-features"="+sve" vscale_range(1, 8) }
108+
attributes #1 = { "target-features"="+sve" vscale_range(1, 16) "tune-cpu"="generic" }
109109
attributes #2 = { "target-features"="+sve" }
110110

111111
declare <vscale x 4 x i32> @llvm.masked.gather.nxv4i32(<vscale x 4 x i32*>, i32, <vscale x 4 x i1>, <vscale x 4 x i32>)

llvm/test/Analysis/CostModel/AArch64/sve-scatter.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ define void @masked_scatters_no_vscale_range() #2 {
104104
ret void
105105
}
106106

107-
attributes #0 = { "target-features"="+sve" vscale_range(0, 8) }
108-
attributes #1 = { "target-features"="+sve" vscale_range(0, 16) "tune-cpu"="generic" }
107+
attributes #0 = { "target-features"="+sve" vscale_range(1, 8) }
108+
attributes #1 = { "target-features"="+sve" vscale_range(1, 16) "tune-cpu"="generic" }
109109
attributes #2 = { "target-features"="+sve" }
110110

111111
declare void @llvm.masked.scatter.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32*>, i32, <vscale x 4 x i1>)

llvm/test/Bitcode/attributes.ll

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -440,13 +440,6 @@ define void @f74() vscale_range(1,0)
440440
ret void
441441
}
442442

443-
; CHECK: define void @f75()
444-
; CHECK-NOT: define void @f75() #
445-
define void @f75() vscale_range(0,0)
446-
{
447-
ret void
448-
}
449-
450443
; CHECK: define void @f76(i8* swiftasync %0)
451444
define void @f76(i8* swiftasync %0)
452445
{

llvm/test/Transforms/InstCombine/icmp-vscale.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt -instcombine -S < %s | FileCheck %s
33

4-
define i1 @ugt_vscale64_x_32() vscale_range(0,16) {
4+
define i1 @ugt_vscale64_x_32() vscale_range(1,16) {
55
; CHECK-LABEL: @ugt_vscale64_x_32(
66
; CHECK-NEXT: entry:
77
; CHECK-NEXT: ret i1 false
@@ -13,7 +13,7 @@ entry:
1313
ret i1 %res
1414
}
1515

16-
define i1 @ugt_vscale64_x_31() vscale_range(0,16) {
16+
define i1 @ugt_vscale64_x_31() vscale_range(1,16) {
1717
; CHECK-LABEL: @ugt_vscale64_x_31(
1818
; CHECK-NEXT: entry:
1919
; CHECK-NEXT: ret i1 false
@@ -25,7 +25,7 @@ entry:
2525
ret i1 %res
2626
}
2727

28-
define i1 @ugt_vscale16_x_32() vscale_range(0,16) {
28+
define i1 @ugt_vscale16_x_32() vscale_range(1,16) {
2929
; CHECK-LABEL: @ugt_vscale16_x_32(
3030
; CHECK-NEXT: entry:
3131
; CHECK-NEXT: ret i1 false
@@ -37,7 +37,7 @@ entry:
3737
ret i1 %res
3838
}
3939

40-
define i1 @ult_vscale16() vscale_range(0,16) {
40+
define i1 @ult_vscale16() vscale_range(1,16) {
4141
; CHECK-LABEL: @ult_vscale16(
4242
; CHECK-NEXT: entry:
4343
; CHECK-NEXT: ret i1 false
@@ -48,7 +48,7 @@ entry:
4848
ret i1 %res
4949
}
5050

51-
define i1 @ule_vscale64() vscale_range(0,16) {
51+
define i1 @ule_vscale64() vscale_range(1,16) {
5252
; CHECK-LABEL: @ule_vscale64(
5353
; CHECK-NEXT: entry:
5454
; CHECK-NEXT: ret i1 false
@@ -70,7 +70,7 @@ entry:
7070
ret i1 %res
7171
}
7272

73-
define i1 @ne_vscale64_x_32() vscale_range(0,16) {
73+
define i1 @ne_vscale64_x_32() vscale_range(1,16) {
7474
; CHECK-LABEL: @ne_vscale64_x_32(
7575
; CHECK-NEXT: entry:
7676
; CHECK-NEXT: ret i1 true

llvm/test/Transforms/InstCombine/vscale_sext_and_zext.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
; Sign-extend
66
;
77

8-
define i32 @vscale_SExt_i8toi32() vscale_range(0, 127) {
8+
define i32 @vscale_SExt_i8toi32() vscale_range(1, 127) {
99
; CHECK-LABEL: @vscale_SExt_i8toi32(
1010
; CHECK-NEXT: entry:
1111
; CHECK-NEXT: [[TMP0:%.*]] = call i32 @llvm.vscale.i32()
@@ -17,7 +17,7 @@ entry:
1717
ret i32 %1
1818
}
1919

20-
define i32 @vscale_SExt_i8toi32_poison() vscale_range(0, 128) {
20+
define i32 @vscale_SExt_i8toi32_poison() vscale_range(1, 128) {
2121
; CHECK-LABEL: @vscale_SExt_i8toi32_poison(
2222
; CHECK-NEXT: entry:
2323
; CHECK-NEXT: [[TMP0:%.*]] = call i8 @llvm.vscale.i8()
@@ -34,7 +34,7 @@ define i32 @vscale_SExt_i8toi32_poison() vscale_range(0, 128) {
3434
; Zero-extend
3535
;
3636

37-
define i32 @vscale_ZExt_i8toi32() vscale_range(0, 128) {
37+
define i32 @vscale_ZExt_i8toi32() vscale_range(1, 128) {
3838
; CHECK-LABEL: @vscale_ZExt_i8toi32(
3939
; CHECK-NEXT: entry:
4040
; CHECK-NEXT: [[TMP0:%.*]] = call i32 @llvm.vscale.i32()
@@ -46,7 +46,7 @@ entry:
4646
ret i32 %1
4747
}
4848

49-
define i32 @vscale_ZExt_i8toi32_poison() vscale_range(0, 256) {
49+
define i32 @vscale_ZExt_i8toi32_poison() vscale_range(1, 256) {
5050
; CHECK-LABEL: @vscale_ZExt_i8toi32_poison(
5151
; CHECK-NEXT: entry:
5252
; CHECK-NEXT: [[TMP0:%.*]] = call i8 @llvm.vscale.i8()
@@ -80,7 +80,7 @@ define i32 @vscale_ZExt_i8toi32_unknown() {
8080
; unbounded vscale_range maximum (0)
8181
;
8282

83-
define i32 @vscale_SExt_i8toi32_unbounded() vscale_range(0, 0) {
83+
define i32 @vscale_SExt_i8toi32_unbounded() vscale_range(1, 0) {
8484
; CHECK-LABEL: @vscale_SExt_i8toi32_unbounded(
8585
; CHECK-NEXT: entry:
8686
; CHECK-NEXT: [[TMP0:%.*]] = call i8 @llvm.vscale.i8()
@@ -93,7 +93,7 @@ define i32 @vscale_SExt_i8toi32_unbounded() vscale_range(0, 0) {
9393
ret i32 %1
9494
}
9595

96-
define i32 @vscale_ZExt_i8toi32_unbounded() vscale_range(0, 0) {
96+
define i32 @vscale_ZExt_i8toi32_unbounded() vscale_range(1, 0) {
9797
; CHECK-LABEL: @vscale_ZExt_i8toi32_unbounded(
9898
; CHECK-NEXT: entry:
9999
; CHECK-NEXT: [[TMP0:%.*]] = call i8 @llvm.vscale.i8()

llvm/test/Transforms/InstCombine/vscale_trunc.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -instcombine -S | FileCheck %s
33

4-
define i8 @vscale_trunc_i32toi8() vscale_range(0, 255) {
4+
define i8 @vscale_trunc_i32toi8() vscale_range(1, 255) {
55
; CHECK-LABEL: @vscale_trunc_i32toi8(
66
; CHECK-NEXT: entry:
77
; CHECK-NEXT: [[TMP0:%.*]] = call i8 @llvm.vscale.i8()
@@ -13,7 +13,7 @@ entry:
1313
}
1414

1515

16-
define i8 @vscale_trunc_i32toi8_poison() vscale_range(0, 256) {
16+
define i8 @vscale_trunc_i32toi8_poison() vscale_range(1, 256) {
1717
; CHECK-LABEL: @vscale_trunc_i32toi8_poison(
1818
; CHECK-NEXT: entry:
1919
; CHECK-NEXT: [[TMP0:%.*]] = call i32 @llvm.vscale.i32()

llvm/test/Transforms/LoopVectorize/AArch64/first-order-recurrence.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,6 @@ for.end:
100100
ret void
101101
}
102102

103-
attributes #0 = { vscale_range(0, 16) }
103+
attributes #0 = { vscale_range(1, 16) }
104104
!0 = distinct !{!0, !1}
105105
!1 = !{!"llvm.loop.vectorize.scalable.enable", i1 true}

llvm/test/Transforms/LoopVectorize/AArch64/scalable-strict-fadd.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ for.end:
552552

553553
declare float @llvm.fmuladd.f32(float, float, float)
554554

555-
attributes #0 = { vscale_range(0, 16) }
555+
attributes #0 = { vscale_range(1, 16) }
556556
!0 = distinct !{!0, !3, !6, !8}
557557
!1 = distinct !{!1, !3, !7, !8}
558558
!2 = distinct !{!2, !4, !6, !8}

llvm/test/Transforms/LoopVectorize/AArch64/scalable-vectorization.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,4 +173,4 @@ exit:
173173
ret void
174174
}
175175

176-
attributes #0 = { vscale_range(0, 16) }
176+
attributes #0 = { vscale_range(1, 16) }

llvm/test/Transforms/LoopVectorize/AArch64/scalable-vf-hint.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ exit:
378378
ret void
379379
}
380380

381-
attributes #0 = { vscale_range(0, 16) }
381+
attributes #0 = { vscale_range(1, 16) }
382382
!21 = !{!21, !22, !23}
383383
!22 = !{!"llvm.loop.vectorize.width", i32 4}
384384
!23 = !{!"llvm.loop.vectorize.scalable.enable", i1 true}

llvm/test/Transforms/LoopVectorize/AArch64/sve-cond-inv-loads.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ for.end:
117117
ret void
118118
}
119119

120-
attributes #0 = { vscale_range(0, 16) }
120+
attributes #0 = { vscale_range(1, 16) }
121121
!0 = distinct !{!0, !1, !2, !3, !4, !5}
122122
!1 = !{!"llvm.loop.mustprogress"}
123123
!2 = !{!"llvm.loop.vectorize.width", i32 4}

llvm/test/Transforms/LoopVectorize/AArch64/sve-gather-scatter.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ for.cond.cleanup: ; preds = %for.cond.cleanup.lo
153153
ret void
154154
}
155155

156-
attributes #0 = { vscale_range(0, 16) }
156+
attributes #0 = { vscale_range(1, 16) }
157157

158158
!0 = distinct !{!0, !1, !2, !3, !4, !5}
159159
!1 = !{!"llvm.loop.mustprogress"}

llvm/test/Transforms/LoopVectorize/AArch64/sve-inv-store.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ for.end: ; preds = %for.inc, %entry
5959
ret void
6060
}
6161

62-
attributes #0 = { "target-features"="+neon,+sve" vscale_range(0, 16) }
62+
attributes #0 = { "target-features"="+neon,+sve" vscale_range(1, 16) }
6363

6464
!0 = distinct !{!0, !1, !2, !3, !4, !5}
6565
!1 = !{!"llvm.loop.mustprogress"}

llvm/test/Transforms/LoopVectorize/AArch64/sve-large-strides.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ for.end: ; preds = %for.end.loopexit, %
9090
ret void
9191
}
9292

93-
attributes #0 = { vscale_range(0, 16) }
93+
attributes #0 = { vscale_range(1, 16) }
9494
!0 = distinct !{!0, !1, !2, !3, !4, !5}
9595
!1 = !{!"llvm.loop.mustprogress"}
9696
!2 = !{!"llvm.loop.vectorize.width", i32 4}

llvm/test/Transforms/LoopVectorize/AArch64/sve-strict-fadd-cost.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ for.end:
5353
ret double %add
5454
}
5555

56-
attributes #0 = { "target-features"="+sve" vscale_range(0, 16) }
56+
attributes #0 = { "target-features"="+sve" vscale_range(1, 16) }
5757

5858
!0 = distinct !{!0, !1}
5959
!1 = !{!"llvm.loop.vectorize.scalable.enable", i1 true}

llvm/test/Transforms/LoopVectorize/AArch64/sve-widen-phi.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ for.end: ; preds = %if.end, %for.end
210210
ret void
211211
}
212212

213-
attributes #0 = { vscale_range(0, 16) }
213+
attributes #0 = { vscale_range(1, 16) }
214214

215215
!0 = distinct !{!0, !1, !2, !3, !4, !5}
216216
!1 = !{!"llvm.loop.mustprogress"}

llvm/test/Verifier/vscale_range.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
22

3+
; CHECK: 'vscale_range' minimum must be greater than 0
4+
declare i8* @a(i32*) vscale_range(0, 1)
5+
36
; CHECK: 'vscale_range' minimum cannot be greater than maximum
47
declare i8* @b(i32*) vscale_range(8, 1)

0 commit comments

Comments
 (0)