Disable indvar widening if arithmetics on the wider type are more expensive
authorJingyue Wu <jingyue@google.com>
Wed, 12 Nov 2014 18:09:15 +0000 (18:09 +0000)
committerJingyue Wu <jingyue@google.com>
Wed, 12 Nov 2014 18:09:15 +0000 (18:09 +0000)
commit8a12cea5f1e954363f1b31f48aacc8c3dba90928
tree71a692f0e7970da867af50eae477f6a1581a2451
parent7777b50eaf04ebc9e90c3e553244dc81f11669cb
Disable indvar widening if arithmetics on the wider type are more expensive

Summary:
Reapply r221772. The old patch breaks the bot because the @indvar_32_bit test
was run whether NVPTX was enabled or not.

IndVarSimplify should not widen an indvar if arithmetics on the wider
indvar are more expensive than those on the narrower indvar. For
instance, although NVPTX64 treats i64 as a legal type, an ADD on i64 is
twice as expensive as that on i32, because the hardware needs to
simulate a 64-bit integer using two 32-bit integers.

Split from D6188, and based on D6195 which adds NVPTXTargetTransformInfo.

Fixes PR21148.

Test Plan:
Added @indvar_32_bit that verifies we do not widen an indvar if the arithmetics
on the wider type are more expensive. This test is run only when NVPTX is
enabled.

Reviewers: jholewinski, eliben, meheff, atrick

Reviewed By: atrick

Subscribers: jholewinski, llvm-commits

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

llvm-svn: 221799
llvm/lib/Target/NVPTX/NVPTXTargetTransformInfo.cpp
llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
llvm/test/Transforms/IndVarSimplify/NVPTX/lit.local.cfg [new file with mode: 0644]
llvm/test/Transforms/IndVarSimplify/NVPTX/no-widen-expensive.ll [new file with mode: 0644]