From d422f7e4945cf7c0c200cdde4e3736c67f8dd2fe Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Wed, 30 Nov 2022 15:28:11 -0500 Subject: [PATCH] [InstSimplify] add tests for select with common 'and' ops; NFC --- .../test/Transforms/InstSimplify/select-logical.ll | 97 ++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/llvm/test/Transforms/InstSimplify/select-logical.ll b/llvm/test/Transforms/InstSimplify/select-logical.ll index 99b9a08..349a396 100644 --- a/llvm/test/Transforms/InstSimplify/select-logical.ll +++ b/llvm/test/Transforms/InstSimplify/select-logical.ll @@ -465,3 +465,100 @@ define i1 @select_or_same_op_negatvie(i1 %x, i1 %y, i1 %z) { %r = select i1 %or, i1 %x, i1 %z ret i1 %r } + +; (X && Y) ? X : Y --> Y + +define i1 @select_and_same_op(i1 %x, i1 %y) { +; CHECK-LABEL: @select_and_same_op( +; CHECK-NEXT: [[A:%.*]] = and i1 [[X:%.*]], [[Y:%.*]] +; CHECK-NEXT: [[R:%.*]] = select i1 [[A]], i1 [[X]], i1 [[Y]] +; CHECK-NEXT: ret i1 [[R]] +; + %a = and i1 %x, %y + %r = select i1 %a, i1 %x, i1 %y + ret i1 %r +} + + +define i1 @select_and_same_op_commute(i1 %x, i1 %y) { +; CHECK-LABEL: @select_and_same_op_commute( +; CHECK-NEXT: [[A:%.*]] = and i1 [[X:%.*]], [[Y:%.*]] +; CHECK-NEXT: [[R:%.*]] = select i1 [[A]], i1 [[Y]], i1 [[X]] +; CHECK-NEXT: ret i1 [[R]] +; + %a = and i1 %x, %y + %r = select i1 %a, i1 %y, i1 %x + ret i1 %r +} + + +define <2 x i1> @select_and_same_op_vector1(<2 x i1> %x, <2 x i1> %y) { +; CHECK-LABEL: @select_and_same_op_vector1( +; CHECK-NEXT: [[A:%.*]] = and <2 x i1> [[X:%.*]], [[Y:%.*]] +; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[A]], <2 x i1> [[X]], <2 x i1> [[Y]] +; CHECK-NEXT: ret <2 x i1> [[R]] +; + %a = and <2 x i1> %x, %y + %r = select <2 x i1> %a, <2 x i1> %x, <2 x i1> %y + ret <2 x i1> %r +} + + +define i1 @select_logic_and1_same_op(i1 %x, i1 %y) { +; CHECK-LABEL: @select_logic_and1_same_op( +; CHECK-NEXT: [[A:%.*]] = select i1 [[X:%.*]], i1 [[Y:%.*]], i1 false +; CHECK-NEXT: [[R:%.*]] = select i1 [[A]], i1 [[X]], i1 [[Y]] +; CHECK-NEXT: ret i1 [[R]] +; + %a = select i1 %x, i1 %y, i1 false + %r = select i1 %a, i1 %x, i1 %y + ret i1 %r +} + + +define i1 @select_logic_and2_same_op(i1 %x, i1 %y) { +; CHECK-LABEL: @select_logic_and2_same_op( +; CHECK-NEXT: [[A:%.*]] = select i1 [[Y:%.*]], i1 [[X:%.*]], i1 false +; CHECK-NEXT: [[R:%.*]] = select i1 [[A]], i1 [[X]], i1 [[Y]] +; CHECK-NEXT: ret i1 [[R]] +; + %a = select i1 %y, i1 %x, i1 false + %r = select i1 %a, i1 %x, i1 %y + ret i1 %r +} + + +define <2 x i1> @select_and_same_op_vector2(<2 x i1> %x, <2 x i1> %y) { +; CHECK-LABEL: @select_and_same_op_vector2( +; CHECK-NEXT: [[A:%.*]] = select <2 x i1> [[X:%.*]], <2 x i1> [[Y:%.*]], <2 x i1> zeroinitializer +; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[A]], <2 x i1> [[X]], <2 x i1> [[Y]] +; CHECK-NEXT: ret <2 x i1> [[R]] +; + %a = select <2 x i1> %x, <2 x i1> %y, <2 x i1> zeroinitializer + %r = select <2 x i1> %a, <2 x i1> %x, <2 x i1> %y + ret <2 x i1> %r +} + +; (X && Y) ? X : Y --> Y + +define <2 x i1> @select_and_same_op_vector2_poison(<2 x i1> %x, <2 x i1> %y) { +; CHECK-LABEL: @select_and_same_op_vector2_poison( +; CHECK-NEXT: [[A:%.*]] = select <2 x i1> [[X:%.*]], <2 x i1> [[Y:%.*]], <2 x i1> +; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[A]], <2 x i1> [[X]], <2 x i1> [[Y]] +; CHECK-NEXT: ret <2 x i1> [[R]] +; + %a = select <2 x i1> %x, <2 x i1> %y, <2 x i1> + %r = select <2 x i1> %a, <2 x i1> %x, <2 x i1> %y + ret <2 x i1> %r +} + +define i1 @select_and_same_op_negatvie(i1 %x, i1 %y, i1 %z) { +; CHECK-LABEL: @select_and_same_op_negatvie( +; CHECK-NEXT: [[A:%.*]] = and i1 [[X:%.*]], [[Y:%.*]] +; CHECK-NEXT: [[R:%.*]] = select i1 [[A]], i1 [[X]], i1 [[Z:%.*]] +; CHECK-NEXT: ret i1 [[R]] +; + %a = and i1 %x, %y + %r = select i1 %a, i1 %x, i1 %z + ret i1 %r +} -- 2.7.4