Skip to content

Commit 41b876d

Browse files
committed
[ValueTracking] Add tests for Known{Bits,NonZero,FPClass} for llvm.vector.reverse; NFC
1 parent d3f8105 commit 41b876d

File tree

3 files changed

+83
-0
lines changed

3 files changed

+83
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt -passes=instsimplify < %s -S | FileCheck %s
3+
4+
define <4 x i1> @vec_reverse_known_bits(<4 x i8> %xx) {
5+
; CHECK-LABEL: @vec_reverse_known_bits(
6+
; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 -128, i8 -128, i8 -128, i8 -128>
7+
; CHECK-NEXT: [[REV:%.*]] = call <4 x i8> @llvm.vector.reverse.v4i8(<4 x i8> [[X]])
8+
; CHECK-NEXT: [[R:%.*]] = icmp slt <4 x i8> [[REV]], zeroinitializer
9+
; CHECK-NEXT: ret <4 x i1> [[R]]
10+
;
11+
%x = or <4 x i8> %xx, <i8 128, i8 128, i8 128, i8 128>
12+
%rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x)
13+
%r = icmp slt <4 x i8> %rev, zeroinitializer
14+
ret <4 x i1> %r
15+
}
16+
17+
define <4 x i1> @vec_reverse_known_bits_fail(<4 x i8> %xx) {
18+
; CHECK-LABEL: @vec_reverse_known_bits_fail(
19+
; CHECK-NEXT: [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 -128, i8 -128, i8 -128, i8 127>
20+
; CHECK-NEXT: [[REV:%.*]] = call <4 x i8> @llvm.vector.reverse.v4i8(<4 x i8> [[X]])
21+
; CHECK-NEXT: [[R:%.*]] = icmp slt <4 x i8> [[REV]], zeroinitializer
22+
; CHECK-NEXT: ret <4 x i1> [[R]]
23+
;
24+
%x = or <4 x i8> %xx, <i8 128, i8 128, i8 128, i8 127>
25+
%rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x)
26+
%r = icmp slt <4 x i8> %rev, zeroinitializer
27+
ret <4 x i1> %r
28+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt -passes=instsimplify < %s -S | FileCheck %s
3+
4+
define <4 x i1> @vector_reverse_fpclass(<4 x double> nofpclass(nzero nan) %x) {
5+
; CHECK-LABEL: @vector_reverse_fpclass(
6+
; CHECK-NEXT: [[X_ABS:%.*]] = call <4 x double> @llvm.fabs.v4f64(<4 x double> [[X:%.*]])
7+
; CHECK-NEXT: [[OP:%.*]] = call <4 x double> @llvm.vector.reverse.v4f64(<4 x double> [[X_ABS]])
8+
; CHECK-NEXT: [[CMP:%.*]] = fcmp oge <4 x double> [[OP]], zeroinitializer
9+
; CHECK-NEXT: ret <4 x i1> [[CMP]]
10+
;
11+
%x.abs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %x)
12+
%op = call <4 x double> @llvm.vector.reverse(<4 x double> %x.abs)
13+
%cmp = fcmp oge <4 x double> %op, <double 0.0, double 0.0, double 0.0, double 0.0>
14+
ret <4 x i1> %cmp
15+
}
16+
17+
define <4 x i1> @vector_reverse_fpclass2(<4 x double> nofpclass(nzero) %x) {
18+
; CHECK-LABEL: @vector_reverse_fpclass2(
19+
; CHECK-NEXT: [[X_ABS:%.*]] = call <4 x double> @llvm.fabs.v4f64(<4 x double> [[X:%.*]])
20+
; CHECK-NEXT: [[OP:%.*]] = call <4 x double> @llvm.vector.reverse.v4f64(<4 x double> [[X_ABS]])
21+
; CHECK-NEXT: [[CMP:%.*]] = fcmp oge <4 x double> [[OP]], zeroinitializer
22+
; CHECK-NEXT: ret <4 x i1> [[CMP]]
23+
;
24+
%x.abs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %x)
25+
%op = call <4 x double> @llvm.vector.reverse(<4 x double> %x.abs)
26+
%cmp = fcmp oge <4 x double> %op, <double 0.0, double 0.0, double 0.0, double 0.0>
27+
ret <4 x i1> %cmp
28+
}
29+

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1497,4 +1497,30 @@ define i1 @trunc_nsw_nuw_non_zero_fail(i8 %xx) {
14971497
ret i1 %r
14981498
}
14991499

1500+
define <4 x i1> @vec_reverse_non_zero(<4 x i8> %xx) {
1501+
; CHECK-LABEL: @vec_reverse_non_zero(
1502+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 1>
1503+
; CHECK-NEXT: [[REV:%.*]] = call <4 x i8> @llvm.vector.reverse.v4i8(<4 x i8> [[X]])
1504+
; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[REV]], zeroinitializer
1505+
; CHECK-NEXT: ret <4 x i1> [[R]]
1506+
;
1507+
%x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
1508+
%rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x)
1509+
%r = icmp eq <4 x i8> %rev, zeroinitializer
1510+
ret <4 x i1> %r
1511+
}
1512+
1513+
define <4 x i1> @vec_reverse_non_zero_fail(<4 x i8> %xx) {
1514+
; CHECK-LABEL: @vec_reverse_non_zero_fail(
1515+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 0, i8 1, i8 1>
1516+
; CHECK-NEXT: [[REV:%.*]] = call <4 x i8> @llvm.vector.reverse.v4i8(<4 x i8> [[X]])
1517+
; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[REV]], zeroinitializer
1518+
; CHECK-NEXT: ret <4 x i1> [[R]]
1519+
;
1520+
%x = add nuw <4 x i8> %xx, <i8 1, i8 0, i8 1, i8 1>
1521+
%rev = call <4 x i8> @llvm.vector.reverse(<4 x i8> %x)
1522+
%r = icmp eq <4 x i8> %rev, zeroinitializer
1523+
ret <4 x i1> %r
1524+
}
1525+
15001526
declare i32 @llvm.experimental.get.vector.length.i32(i32, i32, i1)

0 commit comments

Comments
 (0)