[InstCombine] mark ADD with nuw if no unsigned overflow
authorJingyue Wu <jingyue@google.com>
Tue, 17 Jun 2014 00:42:07 +0000 (00:42 +0000)
committerJingyue Wu <jingyue@google.com>
Tue, 17 Jun 2014 00:42:07 +0000 (00:42 +0000)
commit33bd53df7f9b635499508fcbaf0fdb3d2e331211
tree164261494495085a28ca680a89702a6b75056114
parentb07f1e1fdd0b35be087c6c49fe8e7da1134e64c5
[InstCombine] mark ADD with nuw if no unsigned overflow

Summary:
As a starting step, we only use one simple heuristic: if the sign bits
of both a and b are zero, we can prove "add a, b" do not unsigned
overflow, and thus convert it to "add nuw a, b".

Updated all affected tests and added two new tests (@zero_sign_bit and
@zero_sign_bit2) in AddOverflow.ll

Test Plan: make check-all

Reviewers: eliben, rafael, meheff, chandlerc

Reviewed By: chandlerc

Subscribers: chandlerc, llvm-commits

Differential Revision: http://reviews.llvm.org/D4144

llvm-svn: 211084
llvm/lib/Transforms/InstCombine/InstCombine.h
llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
llvm/test/Transforms/InstCombine/AddOverFlow.ll
llvm/test/Transforms/InstCombine/add-sitofp.ll
llvm/test/Transforms/InstCombine/ffs-1.ll
llvm/test/Transforms/InstCombine/select.ll