From 3da85ae5a5433c3bf04401216ea14b8adcba55c1 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Wed, 21 Mar 2018 15:54:48 +0000 Subject: [PATCH] [InstCombine] move/add tests for xor-of-icmps (PR36682); NFC llvm-svn: 328109 --- llvm/test/Transforms/InstCombine/xor-icmps.ll | 128 ++++++++++++++++++++++++++ llvm/test/Transforms/InstCombine/xor.ll | 21 ----- 2 files changed, 128 insertions(+), 21 deletions(-) create mode 100644 llvm/test/Transforms/InstCombine/xor-icmps.ll diff --git a/llvm/test/Transforms/InstCombine/xor-icmps.ll b/llvm/test/Transforms/InstCombine/xor-icmps.ll new file mode 100644 index 0000000..834e913 --- /dev/null +++ b/llvm/test/Transforms/InstCombine/xor-icmps.ll @@ -0,0 +1,128 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt < %s -instcombine -S | FileCheck %s + +define i1 @eq_zero(i4 %x, i4 %y) { +; CHECK-LABEL: @eq_zero( +; CHECK-NEXT: [[I0:%.*]] = icmp eq i4 [[X:%.*]], 0 +; CHECK-NEXT: [[I1:%.*]] = icmp eq i4 [[Y:%.*]], 0 +; CHECK-NEXT: [[R:%.*]] = xor i1 [[I0]], [[I1]] +; CHECK-NEXT: ret i1 [[R]] +; + %i0 = icmp eq i4 %x, 0 + %i1 = icmp eq i4 %y, 0 + %r = xor i1 %i0, %i1 + ret i1 %r +} + +define i1 @ne_zero(i4 %x, i4 %y) { +; CHECK-LABEL: @ne_zero( +; CHECK-NEXT: [[I0:%.*]] = icmp ne i4 [[X:%.*]], 0 +; CHECK-NEXT: [[I1:%.*]] = icmp ne i4 [[Y:%.*]], 0 +; CHECK-NEXT: [[R:%.*]] = xor i1 [[I0]], [[I1]] +; CHECK-NEXT: ret i1 [[R]] +; + %i0 = icmp ne i4 %x, 0 + %i1 = icmp ne i4 %y, 0 + %r = xor i1 %i0, %i1 + ret i1 %r +} + +define i1 @eq_ne_zero(i4 %x, i4 %y) { +; CHECK-LABEL: @eq_ne_zero( +; CHECK-NEXT: [[I0:%.*]] = icmp eq i4 [[X:%.*]], 0 +; CHECK-NEXT: [[I1:%.*]] = icmp ne i4 [[Y:%.*]], 0 +; CHECK-NEXT: [[R:%.*]] = xor i1 [[I0]], [[I1]] +; CHECK-NEXT: ret i1 [[R]] +; + %i0 = icmp eq i4 %x, 0 + %i1 = icmp ne i4 %y, 0 + %r = xor i1 %i0, %i1 + ret i1 %r +} + +define i1 @slt_zero(i4 %x, i4 %y) { +; CHECK-LABEL: @slt_zero( +; CHECK-NEXT: [[I0:%.*]] = icmp slt i4 [[X:%.*]], 0 +; CHECK-NEXT: [[I1:%.*]] = icmp slt i4 [[Y:%.*]], 0 +; CHECK-NEXT: [[R:%.*]] = xor i1 [[I0]], [[I1]] +; CHECK-NEXT: ret i1 [[R]] +; + %i0 = icmp slt i4 %x, 0 + %i1 = icmp slt i4 %y, 0 + %r = xor i1 %i0, %i1 + ret i1 %r +} + +define i1 @sgt_zero(i4 %x, i4 %y) { +; CHECK-LABEL: @sgt_zero( +; CHECK-NEXT: [[I0:%.*]] = icmp sgt i4 [[X:%.*]], 0 +; CHECK-NEXT: [[I1:%.*]] = icmp sgt i4 [[Y:%.*]], 0 +; CHECK-NEXT: [[R:%.*]] = xor i1 [[I0]], [[I1]] +; CHECK-NEXT: ret i1 [[R]] +; + %i0 = icmp sgt i4 %x, 0 + %i1 = icmp sgt i4 %y, 0 + %r = xor i1 %i0, %i1 + ret i1 %r +} + +define i1 @sgt_minus1(i4 %x, i4 %y) { +; CHECK-LABEL: @sgt_minus1( +; CHECK-NEXT: [[I0:%.*]] = icmp sgt i4 [[X:%.*]], -1 +; CHECK-NEXT: [[I1:%.*]] = icmp sgt i4 [[Y:%.*]], -1 +; CHECK-NEXT: [[R:%.*]] = xor i1 [[I0]], [[I1]] +; CHECK-NEXT: ret i1 [[R]] +; + %i0 = icmp sgt i4 %x, -1 + %i1 = icmp sgt i4 %y, -1 + %r = xor i1 %i0, %i1 + ret i1 %r +} + +define i1 @slt_zero_sgt_minus1(i4 %x, i4 %y) { +; CHECK-LABEL: @slt_zero_sgt_minus1( +; CHECK-NEXT: [[I0:%.*]] = icmp slt i4 [[X:%.*]], 0 +; CHECK-NEXT: [[I1:%.*]] = icmp sgt i4 [[Y:%.*]], -1 +; CHECK-NEXT: [[R:%.*]] = xor i1 [[I0]], [[I1]] +; CHECK-NEXT: ret i1 [[R]] +; + %i0 = icmp slt i4 %x, 0 + %i1 = icmp sgt i4 %y, -1 + %r = xor i1 %i0, %i1 + ret i1 %r +} + +define <2 x i1> @sgt_minus1_slt_zero_sgt(<2 x i4> %x, <2 x i4> %y) { +; CHECK-LABEL: @sgt_minus1_slt_zero_sgt( +; CHECK-NEXT: [[I1:%.*]] = icmp sgt <2 x i4> [[X:%.*]], +; CHECK-NEXT: [[I0:%.*]] = icmp slt <2 x i4> [[Y:%.*]], zeroinitializer +; CHECK-NEXT: [[R:%.*]] = xor <2 x i1> [[I0]], [[I1]] +; CHECK-NEXT: ret <2 x i1> [[R]] +; + %i1 = icmp sgt <2 x i4> %x, + %i0 = icmp slt <2 x i4> %y, zeroinitializer + %r = xor <2 x i1> %i0, %i1 + ret <2 x i1> %r +} + +define i1 @test13(i8 %A, i8 %B) { +; CHECK-LABEL: @test13( +; CHECK-NEXT: [[TMP1:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]] +; CHECK-NEXT: ret i1 [[TMP1]] +; + %C = icmp ult i8 %A, %B + %D = icmp ugt i8 %A, %B + %E = xor i1 %C, %D + ret i1 %E +} + +define i1 @test14(i8 %A, i8 %B) { +; CHECK-LABEL: @test14( +; CHECK-NEXT: ret i1 true +; + %C = icmp eq i8 %A, %B + %D = icmp ne i8 %B, %A + %E = xor i1 %C, %D + ret i1 %E +} + diff --git a/llvm/test/Transforms/InstCombine/xor.ll b/llvm/test/Transforms/InstCombine/xor.ll index a26a089..fcfab54 100644 --- a/llvm/test/Transforms/InstCombine/xor.ll +++ b/llvm/test/Transforms/InstCombine/xor.ll @@ -157,27 +157,6 @@ define <2 x i1> @test12vec(<2 x i8> %a) { ret <2 x i1> %c } -define i1 @test13(i8 %A, i8 %B) { -; CHECK-LABEL: @test13( -; CHECK-NEXT: [[TMP1:%.*]] = icmp ne i8 %A, %B -; CHECK-NEXT: ret i1 [[TMP1]] -; - %C = icmp ult i8 %A, %B - %D = icmp ugt i8 %A, %B - %E = xor i1 %C, %D - ret i1 %E -} - -define i1 @test14(i8 %A, i8 %B) { -; CHECK-LABEL: @test14( -; CHECK-NEXT: ret i1 true -; - %C = icmp eq i8 %A, %B - %D = icmp ne i8 %B, %A - %E = xor i1 %C, %D - ret i1 %E -} - define i32 @test15(i32 %A) { ; CHECK-LABEL: @test15( ; CHECK-NEXT: [[C:%.*]] = sub i32 0, %A -- 2.7.4