[llvm] 6a70b84 - [InstCombine] Precommit tests for D139076; NFC

via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 2 10:02:13 PST 2022


Author: chenglin.bi
Date: 2022-12-03T02:01:57+08:00
New Revision: 6a70b846a44189481656f0cb5201add396a1ed41

URL: https://github.com/llvm/llvm-project/commit/6a70b846a44189481656f0cb5201add396a1ed41
DIFF: https://github.com/llvm/llvm-project/commit/6a70b846a44189481656f0cb5201add396a1ed41.diff

LOG: [InstCombine] Precommit tests for D139076; NFC

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/select-cmp.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/select-cmp.ll b/llvm/test/Transforms/InstCombine/select-cmp.ll
index 2bd4fa9b47156..386616ec04d70 100644
--- a/llvm/test/Transforms/InstCombine/select-cmp.ll
+++ b/llvm/test/Transforms/InstCombine/select-cmp.ll
@@ -10,3 +10,188 @@ define i1 @f(i1 %cond, i32 %x, i32 %x2) {
   %c = icmp eq i32 %y, %x2
   ret i1 %c
 }
+
+define i1 @icmp_ne_common_op00(i1 %c, i6 %x, i6 %y, i6 %z) {
+; CHECK-LABEL: @icmp_ne_common_op00(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ne i6 [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i6 [[X]], [[Z:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %cmp1 = icmp ne i6 %x, %y
+  %cmp2 = icmp ne i6 %x, %z
+  %r = select i1 %c, i1 %cmp1, i1 %cmp2
+  ret i1 %r
+}
+
+define i1 @icmp_ne_common_op01(i1 %c, i3 %x, i3 %y, i3 %z) {
+; CHECK-LABEL: @icmp_ne_common_op01(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ne i3 [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i3 [[Z:%.*]], [[X]]
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %cmp1 = icmp ne i3 %x, %y
+  %cmp2 = icmp ne i3 %z, %x
+  %r = select i1 %c, i1 %cmp1, i1 %cmp2
+  ret i1 %r
+}
+
+define i1 @icmp_ne_common_op10(i1 %c, i4 %x, i4 %y, i4 %z) {
+; CHECK-LABEL: @icmp_ne_common_op10(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ne i4 [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i4 [[X]], [[Z:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %cmp1 = icmp ne i4 %y, %x
+  %cmp2 = icmp ne i4 %x, %z
+  %r = select i1 %c, i1 %cmp1, i1 %cmp2
+  ret i1 %r
+}
+
+define <3 x i1> @icmp_ne_common_op11(<3 x i1> %c, <3 x i17> %x, <3 x i17> %y, <3 x i17> %z) {
+; CHECK-LABEL: @icmp_ne_common_op11(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ne <3 x i17> [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne <3 x i17> [[Z:%.*]], [[X]]
+; CHECK-NEXT:    [[R:%.*]] = select <3 x i1> [[C:%.*]], <3 x i1> [[CMP1]], <3 x i1> [[CMP2]]
+; CHECK-NEXT:    ret <3 x i1> [[R]]
+;
+  %cmp1 = icmp ne <3 x i17> %y, %x
+  %cmp2 = icmp ne <3 x i17> %z, %x
+  %r = select <3 x i1> %c, <3 x i1> %cmp1, <3 x i1> %cmp2
+  ret <3 x i1> %r
+}
+
+define i1 @icmp_eq_common_op00(i1 %c, i5 %x, i5 %y, i5 %z) {
+; CHECK-LABEL: @icmp_eq_common_op00(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i5 [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i5 [[X]], [[Z:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %cmp1 = icmp eq i5 %x, %y
+  %cmp2 = icmp eq i5 %x, %z
+  %r = select i1 %c, i1 %cmp1, i1 %cmp2
+  ret i1 %r
+}
+
+define <5 x i1> @icmp_eq_common_op01(<5 x i1> %c, <5 x i7> %x, <5 x i7> %y, <5 x i7> %z) {
+; CHECK-LABEL: @icmp_eq_common_op01(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq <5 x i7> [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq <5 x i7> [[Z:%.*]], [[X]]
+; CHECK-NEXT:    [[R:%.*]] = select <5 x i1> [[C:%.*]], <5 x i1> [[CMP1]], <5 x i1> [[CMP2]]
+; CHECK-NEXT:    ret <5 x i1> [[R]]
+;
+  %cmp1 = icmp eq <5 x i7> %x, %y
+  %cmp2 = icmp eq <5 x i7> %z, %x
+  %r = select <5 x i1> %c, <5 x i1> %cmp1, <5 x i1> %cmp2
+  ret <5 x i1> %r
+}
+
+define i1 @icmp_eq_common_op10(i1 %c, i32 %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @icmp_eq_common_op10(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i32 [[X]], [[Z:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %cmp1 = icmp eq i32 %y, %x
+  %cmp2 = icmp eq i32 %x, %z
+  %r = select i1 %c, i1 %cmp1, i1 %cmp2
+  ret i1 %r
+}
+
+define i1 @icmp_eq_common_op11(i1 %c, i64 %x, i64 %y, i64 %z) {
+; CHECK-LABEL: @icmp_eq_common_op11(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i64 [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i64 [[Z:%.*]], [[X]]
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %cmp1 = icmp eq i64 %y, %x
+  %cmp2 = icmp eq i64 %z, %x
+  %r = select i1 %c, i1 %cmp1, i1 %cmp2
+  ret i1 %r
+}
+
+define i1 @icmp_common_one_use_1(i1 %c, i8 %x, i8 %y, i8 %z) {
+; CHECK-LABEL: @icmp_common_one_use_1(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    call void @use(i1 [[CMP1]])
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[Z:%.*]], [[X]]
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %cmp1 = icmp eq i8 %y, %x
+  call void @use(i1 %cmp1)
+  %cmp2 = icmp eq i8 %z, %x
+  %r = select i1 %c, i1 %cmp1, i1 %cmp2
+  ret i1 %r
+}
+
+; negative test: pred is not eq/ne
+
+define i1 @icmp_common_pred_not_eqne(i1 %c, i8 %x, i8 %y, i8 %z) {
+; CHECK-LABEL: @icmp_common_pred_not_eqne(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp ugt i8 [[Z:%.*]], [[X]]
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %cmp1 = icmp ugt i8 %y, %x
+  %cmp2 = icmp ugt i8 %z, %x
+  %r = select i1 %c, i1 %cmp1, i1 %cmp2
+  ret i1 %r
+}
+
+; negative test: pred is not the same
+
+define i1 @icmp_common_pred_
diff erent(i1 %c, i8 %x, i8 %y, i8 %z) {
+; CHECK-LABEL: @icmp_common_pred_
diff erent(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[Z:%.*]], [[X]]
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %cmp1 = icmp eq i8 %y, %x
+  %cmp2 = icmp ne i8 %z, %x
+  %r = select i1 %c, i1 %cmp1, i1 %cmp2
+  ret i1 %r
+}
+
+; negative test: both icmp is not one-use
+
+define i1 @icmp_common_one_use_0(i1 %c, i8 %x, i8 %y, i8 %z) {
+; CHECK-LABEL: @icmp_common_one_use_0(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    call void @use(i1 [[CMP1]])
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[Z:%.*]], [[X]]
+; CHECK-NEXT:    call void @use(i1 [[CMP2]])
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %cmp1 = icmp eq i8 %y, %x
+  call void @use(i1 %cmp1)
+  %cmp2 = icmp eq i8 %z, %x
+  call void @use(i1 %cmp2)
+  %r = select i1 %c, i1 %cmp1, i1 %cmp2
+  ret i1 %r
+}
+
+; negative test: no common op
+
+define i1 @icmp_no_common(i1 %c, i8 %x, i8 %y, i8 %z) {
+; CHECK-LABEL: @icmp_no_common(
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[Y:%.*]], 0
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[Z:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %cmp1 = icmp eq i8 %y, 0
+  %cmp2 = icmp eq i8 %z, %x
+  %r = select i1 %c, i1 %cmp1, i1 %cmp2
+  ret i1 %r
+}
+
+declare void @use(i1)


        


More information about the llvm-commits mailing list