[llvm] 99b46a6 - [X86] Add PR44136 test coverage

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 9 03:42:37 PDT 2021


Author: Simon Pilgrim
Date: 2021-04-09T11:42:10+01:00
New Revision: 99b46a6c5ba70f49effe1e16516bd08a8440c73d

URL: https://github.com/llvm/llvm-project/commit/99b46a6c5ba70f49effe1e16516bd08a8440c73d
DIFF: https://github.com/llvm/llvm-project/commit/99b46a6c5ba70f49effe1e16516bd08a8440c73d.diff

LOG: [X86] Add PR44136 test coverage

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/setcc-logic.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/setcc-logic.ll b/llvm/test/CodeGen/X86/setcc-logic.ll
index 59e0efc18c87..b582f2cdbbc5 100644
--- a/llvm/test/CodeGen/X86/setcc-logic.ll
+++ b/llvm/test/CodeGen/X86/setcc-logic.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+bmi | FileCheck %s
 
 define zeroext i1 @all_bits_clear(i32 %P, i32 %Q) nounwind {
 ; CHECK-LABEL: all_bits_clear:
@@ -605,3 +606,66 @@ define i1 @and_icmps_const_1bit_
diff _common_op(i32 %x, i32 %y) {
   %r = or i1 %a, %b
   ret i1 %r
 }
+
+; TODO: PR44136 - fold cmpeq(or(X,Y),X) --> cmpeq(and(~X,Y),0)
+
+define i1 @or_cmp_eq_i64(i64 %x, i64 %y) {
+; CHECK-LABEL: or_cmp_eq_i64:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    orq %rdi, %rsi
+; CHECK-NEXT:    cmpq %rdi, %rsi
+; CHECK-NEXT:    sete %al
+; CHECK-NEXT:    retq
+  %o = or i64 %x, %y
+  %c = icmp eq i64 %o, %x
+  ret i1 %c
+}
+
+define i1 @or_cmp_eq_i32(i32 %x, i32 %y) {
+; CHECK-LABEL: or_cmp_eq_i32:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    orl %esi, %edi
+; CHECK-NEXT:    cmpl %esi, %edi
+; CHECK-NEXT:    sete %al
+; CHECK-NEXT:    retq
+  %o = or i32 %x, %y
+  %c = icmp eq i32 %o, %y
+  ret i1 %c
+}
+
+define i1 @or_cmp_eq_i16(i16 zeroext %x, i16 zeroext %y) {
+; CHECK-LABEL: or_cmp_eq_i16:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    orl %edi, %esi
+; CHECK-NEXT:    cmpw %si, %di
+; CHECK-NEXT:    sete %al
+; CHECK-NEXT:    retq
+  %o = or i16 %x, %y
+  %c = icmp eq i16 %x, %o
+  ret i1 %c
+}
+
+define i1 @or_cmp_eq_i8(i8 zeroext %x, i8 zeroext %y) {
+; CHECK-LABEL: or_cmp_eq_i8:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    orl %esi, %edi
+; CHECK-NEXT:    cmpb %dil, %sil
+; CHECK-NEXT:    sete %al
+; CHECK-NEXT:    retq
+  %o = or i8 %x, %y
+  %c = icmp eq i8 %y, %o
+  ret i1 %c
+}
+
+; Don't fold vectors.
+define <4 x i32> @or_cmp_eq_v4i32(<4 x i32> %x, <4 x i32> %y) {
+; CHECK-LABEL: or_cmp_eq_v4i32:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    por %xmm0, %xmm1
+; CHECK-NEXT:    pcmpeqd %xmm1, %xmm0
+; CHECK-NEXT:    retq
+  %o = or <4 x i32> %x, %y
+  %c = icmp eq <4 x i32> %o, %x
+  %s = sext <4 x i1> %c to <4 x i32>
+  ret <4 x i32> %s
+}


        


More information about the llvm-commits mailing list