[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)
commitdcc92918519125050edd5823567179143b20042a
tree98286f32d174b34f057a2052e1c4bf4c5055c7c8
parent4072aa3649ff90ab4ea2b7c7ff5970ec1be496eb
[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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211084 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/InstCombine/InstCombine.h
lib/Transforms/InstCombine/InstCombineAddSub.cpp
test/Transforms/InstCombine/AddOverFlow.ll
test/Transforms/InstCombine/add-sitofp.ll
test/Transforms/InstCombine/ffs-1.ll
test/Transforms/InstCombine/select.ll