[llvm] r247040 - add tests for De Morgan instcombines based on PR22723

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 8 11:13:03 PDT 2015


Author: spatel
Date: Tue Sep  8 13:13:03 2015
New Revision: 247040

URL: http://llvm.org/viewvc/llvm-project?rev=247040&view=rev
Log:
add tests for De Morgan instcombines based on PR22723

Added:
    llvm/trunk/test/Transforms/InstCombine/demorgan-zext.ll

Added: llvm/trunk/test/Transforms/InstCombine/demorgan-zext.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/demorgan-zext.ll?rev=247040&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/demorgan-zext.ll (added)
+++ llvm/trunk/test/Transforms/InstCombine/demorgan-zext.ll Tue Sep  8 13:13:03 2015
@@ -0,0 +1,38 @@
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+; PR22723: Recognize De Morgan's Laws when obfuscated by zexts.
+
+define i32 @demorgan_or(i1 %X, i1 %Y) {
+  %zextX = zext i1 %X to i32
+  %zextY = zext i1 %Y to i32
+  %notX  = xor i32 %zextX, 1
+  %notY  = xor i32 %zextY, 1
+  %or    = or i32 %notX, %notY
+  ret i32 %or
+
+; CHECK-LABEL: demorgan_or(
+; CHECK-NEXT:  = zext
+; CHECK-NEXT:  = zext
+; CHECK-NEXT:  = xor
+; CHECK-NEXT:  = xor
+; CHECK-NEXT:  = or
+; CHECK-NEXT:  ret
+}
+
+define i32 @demorgan_and(i1 %X, i1 %Y) {
+  %zextX = zext i1 %X to i32
+  %zextY = zext i1 %Y to i32
+  %notX  = xor i32 %zextX, 1
+  %notY  = xor i32 %zextY, 1
+  %and   = and i32 %notX, %notY
+  ret i32 %and
+
+; CHECK-LABEL: demorgan_and(
+; CHECK-NEXT:  = zext
+; CHECK-NEXT:  = zext
+; CHECK-NEXT:  = xor
+; CHECK-NEXT:  = xor
+; CHECK-NEXT:  = and
+; CHECK-NEXT:  ret
+}
+




More information about the llvm-commits mailing list