Disable indvar widening if arithmetics on the wider type are more expensive
authorJingyue Wu <jingyue@google.com>
Wed, 12 Nov 2014 06:58:45 +0000 (06:58 +0000)
committerJingyue Wu <jingyue@google.com>
Wed, 12 Nov 2014 06:58:45 +0000 (06:58 +0000)
commit69adc159ee69de7a2f36a6e69dba56f36d859b8b
treea903000b2dc3b59b66559784816f0e1881887080
parenta43247ca4e18ad392ab71f1a87947c9fb50fb8ac
Disable indvar widening if arithmetics on the wider type are more expensive

Summary:
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.

Reviewers: jholewinski, eliben, meheff, atrick

Reviewed By: atrick

Subscribers: jholewinski, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221772 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/NVPTX/NVPTXTargetTransformInfo.cpp
lib/Transforms/Scalar/IndVarSimplify.cpp
test/Transforms/IndVarSimplify/no-widen-expensive.ll [new file with mode: 0644]