[llvm-commits] [llvm] r167032 - in /llvm/trunk: lib/Transforms/Vectorize/LoopVectorize.cpp test/Transforms/LoopVectorize/reduction.ll
Nadav Rotem
nrotem at apple.com
Tue Oct 30 15:08:11 PDT 2012
Done in r167055.
Thanks
On Oct 30, 2012, at 2:47 PM, Evan Cheng <evan.cheng at apple.com> wrote:
>
> On Oct 30, 2012, at 11:12 AM, Nadav Rotem <nrotem at apple.com> wrote:
>
>> Author: nadav
>> Date: Tue Oct 30 13:12:36 2012
>> New Revision: 167032
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=167032&view=rev
>> Log:
>> LoopVectorize: Fix a bug in the initialization of reduction variables. AND needs to start at all-one
>> while XOR, and OR need to start at zero.
>>
>>
>> Modified:
>> llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
>> llvm/trunk/test/Transforms/LoopVectorize/reduction.ll
>>
>> Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=167032&r1=167031&r2=167032&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Tue Oct 30 13:12:36 2012
>> @@ -211,8 +211,6 @@
>> TheLoop(Lp), SE(Se), DL(Dl), Induction(0) { }
>>
>> /// This represents the kinds of reductions that we support.
>> - /// We use the enum values to hold the 'identity' value for
>> - /// each operand. This value does not change the result if applied.
>> enum ReductionKind {
>> NoReduction = -1, /// Not a reduction.
>> IntegerAdd = 0, /// Sum of numbers.
>> @@ -523,7 +521,7 @@
>> SmallVector<Constant*, 8> Indices;
>> // Create a vector of consecutive numbers from zero to VF.
>> for (unsigned i = 0; i < VF; ++i)
>> - Indices.push_back(ConstantInt::get(ScalarTy, Val));
>> + Indices.push_back(ConstantInt::get(ScalarTy, Val, true));
>>
>> // Add the consecutive indices to the vector value.
>> return ConstantVector::get(Indices);
>> @@ -750,6 +748,23 @@
>> LoopBypassBlock = BypassBlock;
>> }
>>
>> +
>> +static unsigned
>> +getReductionIdentity(LoopVectorizationLegality::ReductionKind K) {
>> + switch (K) {
>> + case LoopVectorizationLegality::IntegerXor:
>> + case LoopVectorizationLegality::IntegerAdd:
>> + case LoopVectorizationLegality::IntegerOr:
>> + return 0;
>> + case LoopVectorizationLegality::IntegerMult:
>> + return 1;
>> + case LoopVectorizationLegality::IntegerAnd:
>> + return -1;
>> + default:
>> + llvm_unreachable("Unknown reduction kind");
>> + }
>> +}
>> +
>
> It seems like this function can do with some comments.
>
> Evan
>
>> void
>> SingleBlockLoopVectorizer::vectorizeLoop(LoopVectorizationLegality *Legal) {
>> //===------------------------------------------------===//
>> @@ -974,10 +989,9 @@
>> Value *VectorExit = getVectorValue(RdxDesc.LoopExitInstr);
>> Type *VecTy = VectorExit->getType();
>>
>> - // Find the reduction identity variable. The value of the enum is the
>> - // identity. Zero for addition. One for Multiplication.
>> - unsigned IdentitySclr = RdxDesc.Kind;
>> - Constant *Identity = getUniformVector(IdentitySclr,
>> + // Find the reduction identity variable. Zero for addition, or, xor,
>> + // one for multiplication, -1 for And.
>> + Constant *Identity = getUniformVector(getReductionIdentity(RdxDesc.Kind),
>> VecTy->getScalarType());
>>
>> // This vector is the Identity vector where the first element is the
>>
>> Modified: llvm/trunk/test/Transforms/LoopVectorize/reduction.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVectorize/reduction.ll?rev=167032&r1=167031&r2=167032&view=diff
>> ==============================================================================
>> --- llvm/trunk/test/Transforms/LoopVectorize/reduction.ll (original)
>> +++ llvm/trunk/test/Transforms/LoopVectorize/reduction.ll Tue Oct 30 13:12:36 2012
>> @@ -151,6 +151,7 @@
>>
>> ;CHECK: @reduction_and
>> ;CHECK: and <4 x i32>
>> +;CHECK: <i32 -1, i32 -1, i32 -1, i32 -1>
>> ;CHECK: ret i32
>> define i32 @reduction_and(i32 %n, i32* nocapture %A, i32* nocapture %B) nounwind uwtable readonly {
>> entry:
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list