Skip to content

Commit 1dfbd07

Browse files
committed
[ValueTracking] Add tests for llvm.vector.reverse with DemandedElts; NFC
1 parent 80865c0 commit 1dfbd07

File tree

3 files changed

+95
-0
lines changed

3 files changed

+95
-0
lines changed

llvm/test/Analysis/ValueTracking/known-bits.ll

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,33 @@ define <4 x i1> @vec_reverse_known_bits_fail(<4 x i8> %xx) {
2323
%r = icmp slt <4 x i8> %rev, zeroinitializer
2424
ret <4 x i1> %r
2525
}
26+
27+
define i1 @vec_reverse_known_bits_demanded(<4 x i8> %xx) {
28+
; CHECK-LABEL: @vec_reverse_known_bits_demanded(
29+
; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 127, i8 55, i8 -128, i8 123>
30+
; CHECK-NEXT: [[REV:%.*]] = call <4 x i8> @llvm.vector.reverse.v4i8(<4 x i8> [[X]])
31+
; CHECK-NEXT: [[ELE:%.*]] = extractelement <4 x i8> [[REV]], i64 1
32+
; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[ELE]], 0
33+
; CHECK-NEXT: ret i1 [[R]]
34+
;
35+
%x = or <4 x i8> %xx, <i8 127, i8 55, i8 128, i8 123>
36+
%rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x)
37+
%ele = extractelement <4 x i8> %rev, i64 1
38+
%r = icmp slt i8 %ele, 0
39+
ret i1 %r
40+
}
41+
42+
define i1 @vec_reverse_known_bits_demanded_fail(<4 x i8> %xx) {
43+
; CHECK-LABEL: @vec_reverse_known_bits_demanded_fail(
44+
; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 127, i8 55, i8 -128, i8 123>
45+
; CHECK-NEXT: [[REV:%.*]] = call <4 x i8> @llvm.vector.reverse.v4i8(<4 x i8> [[X]])
46+
; CHECK-NEXT: [[ELE:%.*]] = extractelement <4 x i8> [[REV]], i64 2
47+
; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[ELE]], 0
48+
; CHECK-NEXT: ret i1 [[R]]
49+
;
50+
%x = or <4 x i8> %xx, <i8 127, i8 55, i8 128, i8 123>
51+
%rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x)
52+
%ele = extractelement <4 x i8> %rev, i64 2
53+
%r = icmp slt i8 %ele, 0
54+
ret i1 %r
55+
}

llvm/test/Analysis/ValueTracking/known-fpclass.ll

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,38 @@ define <4 x i1> @vector_reverse_fpclass2(<4 x double> nofpclass(nzero) %x) {
2424
ret <4 x i1> %cmp
2525
}
2626

27+
define i1 @vector_reverse_fpclass_demanded(<4 x double> %vec, double nofpclass(nzero nan) %x) {
28+
; CHECK-LABEL: @vector_reverse_fpclass_demanded(
29+
; CHECK-NEXT: [[X_ABS:%.*]] = call double @llvm.fabs.f64(double [[X:%.*]])
30+
; CHECK-NEXT: [[VEC_X:%.*]] = insertelement <4 x double> [[VEC:%.*]], double [[X_ABS]], i64 1
31+
; CHECK-NEXT: [[REV:%.*]] = call <4 x double> @llvm.vector.reverse.v4f64(<4 x double> [[VEC_X]])
32+
; CHECK-NEXT: [[ELE:%.*]] = extractelement <4 x double> [[REV]], i64 2
33+
; CHECK-NEXT: [[CMP:%.*]] = fcmp oge double [[ELE]], 0.000000e+00
34+
; CHECK-NEXT: ret i1 [[CMP]]
35+
;
36+
37+
%x.abs = call double @llvm.fabs.f64(double %x)
38+
%vec.x = insertelement <4 x double> %vec, double %x.abs, i64 1
39+
%rev = call <4 x double> @llvm.vector.reverse(<4 x double> %vec.x)
40+
%ele = extractelement <4 x double> %rev, i64 2
41+
%cmp = fcmp oge double %ele, 0.0
42+
ret i1 %cmp
43+
}
44+
45+
define i1 @vector_reverse_fpclass_demanded_fail(<4 x double> %vec, double nofpclass(nzero nan) %x) {
46+
; CHECK-LABEL: @vector_reverse_fpclass_demanded_fail(
47+
; CHECK-NEXT: [[X_ABS:%.*]] = call double @llvm.fabs.f64(double [[X:%.*]])
48+
; CHECK-NEXT: [[VEC_X:%.*]] = insertelement <4 x double> [[VEC:%.*]], double [[X_ABS]], i64 1
49+
; CHECK-NEXT: [[REV:%.*]] = call <4 x double> @llvm.vector.reverse.v4f64(<4 x double> [[VEC_X]])
50+
; CHECK-NEXT: [[ELE:%.*]] = extractelement <4 x double> [[REV]], i64 1
51+
; CHECK-NEXT: [[CMP:%.*]] = fcmp oge double [[ELE]], 0.000000e+00
52+
; CHECK-NEXT: ret i1 [[CMP]]
53+
;
54+
55+
%x.abs = call double @llvm.fabs.f64(double %x)
56+
%vec.x = insertelement <4 x double> %vec, double %x.abs, i64 1
57+
%rev = call <4 x double> @llvm.vector.reverse(<4 x double> %vec.x)
58+
%ele = extractelement <4 x double> %rev, i64 1
59+
%cmp = fcmp oge double %ele, 0.0
60+
ret i1 %cmp
61+
}

llvm/test/Analysis/ValueTracking/known-non-zero.ll

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,4 +1520,34 @@ define <4 x i1> @vec_reverse_non_zero_fail(<4 x i8> %xx) {
15201520
ret <4 x i1> %r
15211521
}
15221522

1523+
define i1 @vec_reverse_non_zero_demanded(<4 x i8> %xx) {
1524+
; CHECK-LABEL: @vec_reverse_non_zero_demanded(
1525+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 0, i8 0, i8 0>
1526+
; CHECK-NEXT: [[REV:%.*]] = call <4 x i8> @llvm.vector.reverse.v4i8(<4 x i8> [[X]])
1527+
; CHECK-NEXT: [[ELE:%.*]] = extractelement <4 x i8> [[REV]], i64 3
1528+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[ELE]], 0
1529+
; CHECK-NEXT: ret i1 [[R]]
1530+
;
1531+
%x = add nuw <4 x i8> %xx, <i8 1, i8 0, i8 0, i8 0>
1532+
%rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x)
1533+
%ele = extractelement <4 x i8> %rev, i64 3
1534+
%r = icmp eq i8 %ele, 0
1535+
ret i1 %r
1536+
}
1537+
1538+
define i1 @vec_reverse_non_zero_demanded_fail(<4 x i8> %xx) {
1539+
; CHECK-LABEL: @vec_reverse_non_zero_demanded_fail(
1540+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 0, i8 0, i8 0>
1541+
; CHECK-NEXT: [[REV:%.*]] = call <4 x i8> @llvm.vector.reverse.v4i8(<4 x i8> [[X]])
1542+
; CHECK-NEXT: [[ELE:%.*]] = extractelement <4 x i8> [[REV]], i64 2
1543+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[ELE]], 0
1544+
; CHECK-NEXT: ret i1 [[R]]
1545+
;
1546+
%x = add nuw <4 x i8> %xx, <i8 1, i8 0, i8 0, i8 0>
1547+
%rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x)
1548+
%ele = extractelement <4 x i8> %rev, i64 2
1549+
%r = icmp eq i8 %ele, 0
1550+
ret i1 %r
1551+
}
1552+
15231553
declare i32 @llvm.experimental.get.vector.length.i32(i32, i32, i1)

0 commit comments

Comments
 (0)