summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2015-09-08 18:13:03 +0000
committerSanjay Patel <spatel@rotateright.com>2015-09-08 18:13:03 +0000
commit21a145c341e0b2825fa7b58685bc27cac1a8cbcc (patch)
treece87cccaafb719469d1844688d1d6fca854c440c /llvm/test
parentb01b57486d7cc170c39032c199c917a429f4d1d8 (diff)
downloadbcm5719-llvm-21a145c341e0b2825fa7b58685bc27cac1a8cbcc.tar.gz
bcm5719-llvm-21a145c341e0b2825fa7b58685bc27cac1a8cbcc.zip
add tests for De Morgan instcombines based on PR22723
llvm-svn: 247040
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/InstCombine/demorgan-zext.ll38
1 files changed, 38 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/demorgan-zext.ll b/llvm/test/Transforms/InstCombine/demorgan-zext.ll
new file mode 100644
index 00000000000..0587ca7cfa7
--- /dev/null
+++ b/llvm/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
+}
+
OpenPOWER on IntegriCloud