OSDN Git Service

[Vectorizer] Add a new 'OperandValueKind' in TargetTransformInfo called
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Wed, 12 Feb 2014 23:43:47 +0000 (23:43 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Wed, 12 Feb 2014 23:43:47 +0000 (23:43 +0000)
commit029a76b0a26981afb6bc3252b2a75b16393d893e
treed115e9ea00aaea69a6701bf9b43c9efeecbf4cb1
parent88873717824208d6d2f8f34bf727550fba1c590d
[Vectorizer] Add a new 'OperandValueKind' in TargetTransformInfo called
'OK_NonUniformConstValue' to identify operands which are constants but
not constant splats.

The cost model now allows returning 'OK_NonUniformConstValue'
for non splat operands that are instances of ConstantVector or
ConstantDataVector.

With this change, targets are now able to compute different costs
for instructions with non-uniform constant operands.
For example, On X86 the cost of a vector shift may vary depending on whether
the second operand is a uniform or non-uniform constant.

This patch applies the following changes:
 - The cost model computation now takes into account non-uniform constants;
 - The cost of vector shift instructions has been improved in
   X86TargetTransformInfo analysis pass;
 - BBVectorize, SLPVectorizer and LoopVectorize now know how to distinguish
   between non-uniform and uniform constant operands.

Added a new test to verify that the output of opt
'-cost-model -analyze' is valid in the following configurations: SSE2,
SSE4.1, AVX, AVX2.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201272 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Analysis/TargetTransformInfo.h
lib/Analysis/CostModel.cpp
lib/Target/X86/X86TargetTransformInfo.cpp
lib/Transforms/Vectorize/BBVectorize.cpp
lib/Transforms/Vectorize/LoopVectorize.cpp
lib/Transforms/Vectorize/SLPVectorizer.cpp
test/Analysis/CostModel/X86/vshift-cost.ll [new file with mode: 0644]