diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2015-09-08 18:13:03 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2015-09-08 18:13:03 +0000 |
| commit | 21a145c341e0b2825fa7b58685bc27cac1a8cbcc (patch) | |
| tree | ce87cccaafb719469d1844688d1d6fca854c440c /llvm/test | |
| parent | b01b57486d7cc170c39032c199c917a429f4d1d8 (diff) | |
| download | bcm5719-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.ll | 38 |
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 +} + |

