[llvm] r336752 - [test cases] add test cases for find more abs pattern
Chen Zheng via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 10 18:07:21 PDT 2018
Author: shchenz
Date: Tue Jul 10 18:07:21 2018
New Revision: 336752
URL: http://llvm.org/viewvc/llvm-project?rev=336752&view=rev
Log:
[test cases] add test cases for find more abs pattern
Differential Revision: https://reviews.llvm.org/D49123
Modified:
llvm/trunk/test/Transforms/InstCombine/abs-1.ll
Modified: llvm/trunk/test/Transforms/InstCombine/abs-1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/abs-1.ll?rev=336752&r1=336751&r2=336752&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/abs-1.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/abs-1.ll Tue Jul 10 18:07:21 2018
@@ -131,6 +131,50 @@ define i32 @abs_canonical_5(i8 %x) {
ret i32 %abs
}
+define i32 @abs_canonical_6(i32 %a, i32 %b) {
+; CHECK-LABEL: @abs_canonical_6(
+; CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP1]], -1
+; CHECK-NEXT: [[TMP2:%.*]] = sub i32 [[B]], [[A]]
+; CHECK-NEXT: [[ABS:%.*]] = select i1 [[CMP]], i32 [[TMP1]], i32 [[TMP2]]
+; CHECK-NEXT: ret i32 [[ABS]]
+;
+ %tmp1 = sub i32 %a, %b
+ %cmp = icmp sgt i32 %tmp1, -1
+ %tmp2 = sub i32 %b, %a
+ %abs = select i1 %cmp, i32 %tmp1, i32 %tmp2
+ ret i32 %abs
+}
+
+define <2 x i8> @abs_canonical_7(<2 x i8> %a, <2 x i8 > %b) {
+; CHECK-LABEL: @abs_canonical_7(
+; CHECK-NEXT: [[TMP1:%.*]] = sub <2 x i8> [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i8> [[TMP1]], <i8 -1, i8 -1>
+; CHECK-NEXT: [[TMP2:%.*]] = sub <2 x i8> [[B]], [[A]]
+; CHECK-NEXT: [[ABS:%.*]] = select <2 x i1> [[CMP]], <2 x i8> [[TMP1]], <2 x i8> [[TMP2]]
+; CHECK-NEXT: ret <2 x i8> [[ABS]]
+;
+
+ %tmp1 = sub <2 x i8> %a, %b
+ %cmp = icmp sgt <2 x i8> %tmp1, <i8 -1, i8 -1>
+ %tmp2 = sub <2 x i8> %b, %a
+ %abs = select <2 x i1> %cmp, <2 x i8> %tmp1, <2 x i8> %tmp2
+ ret <2 x i8> %abs
+}
+
+define i32 @abs_canonical_8(i32 %a) {
+; CHECK-LABEL: @abs_canonical_8(
+; CHECK-NEXT: [[TMP:%.*]] = sub i32 0, [[A:%.*]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP]], 0
+; CHECK-NEXT: [[ABS:%.*]] = select i1 [[CMP]], i32 [[A]], i32 [[TMP]]
+; CHECK-NEXT: ret i32 [[ABS]]
+;
+ %tmp = sub i32 0, %a
+ %cmp = icmp slt i32 %tmp, 0
+ %abs = select i1 %cmp, i32 %a, i32 %tmp
+ ret i32 %abs
+}
+
; We have a canonical form of nabs to make CSE easier.
define i8 @nabs_canonical_1(i8 %x) {
@@ -219,6 +263,49 @@ define i32 @nabs_canonical_5(i8 %x) {
ret i32 %abs
}
+define i32 @nabs_canonical_6(i32 %a, i32 %b) {
+; CHECK-LABEL: @nabs_canonical_6(
+; CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP1]], -1
+; CHECK-NEXT: [[TMP2:%.*]] = sub i32 [[B]], [[A]]
+; CHECK-NEXT: [[ABS:%.*]] = select i1 [[CMP]], i32 [[TMP2]], i32 [[TMP1]]
+; CHECK-NEXT: ret i32 [[ABS]]
+;
+ %tmp1 = sub i32 %a, %b
+ %cmp = icmp sgt i32 %tmp1, -1
+ %tmp2 = sub i32 %b, %a
+ %abs = select i1 %cmp, i32 %tmp2, i32 %tmp1
+ ret i32 %abs
+}
+
+define <2 x i8> @nabs_canonical_7(<2 x i8> %a, <2 x i8 > %b) {
+; CHECK-LABEL: @nabs_canonical_7(
+; CHECK-NEXT: [[TMP1:%.*]] = sub <2 x i8> [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i8> [[TMP1]], <i8 -1, i8 -1>
+; CHECK-NEXT: [[TMP2:%.*]] = sub <2 x i8> [[B]], [[A]]
+; CHECK-NEXT: [[ABS:%.*]] = select <2 x i1> [[CMP]], <2 x i8> [[TMP2]], <2 x i8> [[TMP1]]
+; CHECK-NEXT: ret <2 x i8> [[ABS]]
+;
+ %tmp1 = sub <2 x i8> %a, %b
+ %cmp = icmp sgt <2 x i8> %tmp1, <i8 -1, i8 -1>
+ %tmp2 = sub <2 x i8> %b, %a
+ %abs = select <2 x i1> %cmp, <2 x i8> %tmp2, <2 x i8> %tmp1
+ ret <2 x i8> %abs
+}
+
+define i32 @nabs_canonical_8(i32 %a) {
+; CHECK-LABEL: @nabs_canonical_8(
+; CHECK-NEXT: [[TMP:%.*]] = sub i32 0, [[A:%.*]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP]], 0
+; CHECK-NEXT: [[ABS:%.*]] = select i1 [[CMP]], i32 [[TMP]], i32 [[A]]
+; CHECK-NEXT: ret i32 [[ABS]]
+;
+ %tmp = sub i32 0, %a
+ %cmp = icmp slt i32 %tmp, 0
+ %abs = select i1 %cmp, i32 %tmp, i32 %a
+ ret i32 %abs
+}
+
; The following 5 tests use a shift+add+xor to implement abs():
; B = ashr i8 A, 7 -- smear the sign bit.
; xor (add A, B), B -- add -1 and flip bits if negative
More information about the llvm-commits
mailing list