From 044ebbbd9bb74f606e150cf7dfc829b5af6d5929 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Tue, 8 Sep 2015 18:13:03 +0000 Subject: [PATCH] add tests for De Morgan instcombines based on PR22723 llvm-svn: 247040 --- test/Transforms/InstCombine/demorgan-zext.ll | 38 ++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 test/Transforms/InstCombine/demorgan-zext.ll diff --git a/test/Transforms/InstCombine/demorgan-zext.ll b/test/Transforms/InstCombine/demorgan-zext.ll new file mode 100644 index 00000000000..0587ca7cfa7 --- /dev/null +++ b/test/Transforms/InstCombine/demorgan-zext.ll @@ -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 +} +