diff options
author | Evan Cheng <evan.cheng@apple.com> | 2011-05-24 01:48:22 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2011-05-24 01:48:22 +0000 |
commit | b5a55d979c84e100f383ce11c5c5e3b616b9dcc4 (patch) | |
tree | 52d1aa5341d7eef05cc952b61bd9fdb68cabad10 /test | |
parent | 4992b03cbdaad1df46ea771b587f247395e49999 (diff) | |
download | external_llvm-b5a55d979c84e100f383ce11c5c5e3b616b9dcc4.zip external_llvm-b5a55d979c84e100f383ce11c5c5e3b616b9dcc4.tar.gz external_llvm-b5a55d979c84e100f383ce11c5c5e3b616b9dcc4.tar.bz2 |
- Teach SelectionDAG::isKnownNeverZero to return true (op x, c) when c is
non-zero.
- Teach X86 cmov optimization to eliminate the cmov from ctlz, cttz extension
when the source of X86ISD::BSR / X86ISD::BSF is proven to be non-zero.
rdar://9490949
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131948 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/X86/clz.ll | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/test/CodeGen/X86/clz.ll b/test/CodeGen/X86/clz.ll index 623ac75..d76fab4 100644 --- a/test/CodeGen/X86/clz.ll +++ b/test/CodeGen/X86/clz.ll @@ -31,3 +31,18 @@ entry: } declare i16 @llvm.ctlz.i16(i16) nounwind readnone + +; Don't generate the cmovne when the source is known non-zero (and bsr would +; not set ZF). +; rdar://9490949 + +define i32 @t4(i32 %n) nounwind { +entry: +; CHECK: t4: +; CHECK: bsrl +; CHECK-NOT: cmov +; CHECK: ret + %or = or i32 %n, 1 + %tmp1 = tail call i32 @llvm.ctlz.i32(i32 %or) + ret i32 %tmp1 +} |