[llvm] r176768 - LoopVectorizer: Ignore dbg.value instructions

Hal Finkel hfinkel at anl.gov
Sat Mar 9 16:00:16 PST 2013


Arnold,

Out of curiosity, do we have a similar issue with llvm.lifetime/llvm.invariant (and the annotation) intrinsics? (I believe that I have a similar problem in the BBVectorizer with all of these).

Thanks again,
Hal

----- Original Message -----
> From: "Arnold Schwaighofer" <aschwaighofer at apple.com>
> To: "Benjamin Kramer" <benny.kra at gmail.com>
> Cc: "LLVM Commits" <llvm-commits at cs.uiuc.edu>
> Sent: Saturday, March 9, 2013 10:28:39 AM
> Subject: Re: [llvm] r176768 - LoopVectorizer: Ignore dbg.value instructions
> 
> r176769
> 
> On Mar 9, 2013, at 10:13 AM, Arnold Schwaighofer
> <aschwaighofer at apple.com> wrote:
> 
> > I was assuming that they would not occur in a loop as they are used
> > to annotate allocas. But I guess it can't  hurt to be more
> > inclusive.
> > 
> > On Mar 9, 2013, at 10:06 AM, Benjamin Kramer <benny.kra at gmail.com>
> > wrote:
> > 
> >> 
> >> On 09.03.2013, at 16:56, Arnold Schwaighofer
> >> <aschwaighofer at apple.com> wrote:
> >> 
> >>> Author: arnolds
> >>> Date: Sat Mar  9 09:56:34 2013
> >>> New Revision: 176768
> >>> 
> >>> URL: http://llvm.org/viewvc/llvm-project?rev=176768&view=rev
> >>> Log:
> >>> LoopVectorizer: Ignore dbg.value instructions
> >>> 
> >>> We want vectorization to happen at -g. Ignore calls to the
> >>> dbg.value intrinsic
> >>> and don't transfer them to the vectorized code.
> >> 
> >> Should this also ignore dbg.declare intrinsics? (There's a
> >> DbgInfoIntrinsic wrapper that matches both)
> >> 
> >> - Ben
> >>> 
> >>> radar://13378964
> >>> 
> >>> Added:
> >>>  llvm/trunk/test/Transforms/LoopVectorize/dbg.value.ll
> >>> Modified:
> >>>  llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
> >>> 
> >>> Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
> >>> URL:
> >>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=176768&r1=176767&r2=176768&view=diff
> >>> ==============================================================================
> >>> --- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
> >>> (original)
> >>> +++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Sat Mar
> >>>  9 09:56:34 2013
> >>> @@ -2088,6 +2088,10 @@ InnerLoopVectorizer::vectorizeBlockInLoo
> >>>   }
> >>> 
> >>>   case Instruction::Call: {
> >>> +      // Ignore dbg.value instructions.
> >>> +      if (isa<DbgValueInst>(it))
> >>> +        break;
> >>> +
> >>>     Module *M = BB->getParent()->getParent();
> >>>     CallInst *CI = cast<CallInst>(it);
> >>>     Intrinsic::ID ID = getIntrinsicIDForCall(CI, TLI);
> >>> @@ -2324,9 +2328,10 @@ bool LoopVectorizationLegality::canVecto
> >>>       return false;
> >>>     }// end of PHI handling
> >>> 
> >>> -      // We still don't handle functions.
> >>> +      // We still don't handle functions. However, we can ignore
> >>> dbg.value
> >>> +      // calls and we do handle certain intrinsic and libm
> >>> functions.
> >>>     CallInst *CI = dyn_cast<CallInst>(it);
> >>> -      if (CI && !getIntrinsicIDForCall(CI, TLI)) {
> >>> +      if (CI && !getIntrinsicIDForCall(CI, TLI) &&
> >>> !isa<DbgValueInst>(CI)) {
> >>>       DEBUG(dbgs() << "LV: Found a call site.\n");
> >>>       return false;
> >>>     }
> >>> @@ -3263,6 +3268,10 @@ unsigned LoopVectorizationCostModel::exp
> >>> 
> >>>   // For each instruction in the old loop.
> >>>   for (BasicBlock::iterator it = BB->begin(), e = BB->end(); it
> >>>   != e; ++it) {
> >>> +      // Skip dbg.value instructions.
> >>> +      if (isa<DbgValueInst>(it))
> >>> +        continue;
> >>> +
> >>>     unsigned C = getInstructionCost(it, VF);
> >>>     Cost += C;
> >>>     DEBUG(dbgs() << "LV: Found an estimated cost of "<< C <<" for
> >>>     VF " <<
> >>> 
> >>> Added: llvm/trunk/test/Transforms/LoopVectorize/dbg.value.ll
> >>> URL:
> >>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVectorize/dbg.value.ll?rev=176768&view=auto
> >>> ==============================================================================
> >>> --- llvm/trunk/test/Transforms/LoopVectorize/dbg.value.ll (added)
> >>> +++ llvm/trunk/test/Transforms/LoopVectorize/dbg.value.ll Sat Mar
> >>>  9 09:56:34 2013
> >>> @@ -0,0 +1,70 @@
> >>> +; RUN: opt < %s -S -loop-vectorize -force-vector-unroll=1
> >>> -force-vector-width=4 -dce -instcombine | FileCheck %s
> >>> +; Make sure we vectorize with debugging turned on.
> >>> +
> >>> +target datalayout =
> >>> "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
> >>> +target triple = "x86_64-apple-macosx10.8.0"
> >>> +
> >>> + at A = global [1024 x i32] zeroinitializer, align 16
> >>> + at B = global [1024 x i32] zeroinitializer, align 16
> >>> + at C = global [1024 x i32] zeroinitializer, align 16
> >>> +
> >>> +; CHECK: @test
> >>> +define i32 @test() #0 {
> >>> +entry:
> >>> +  tail call void @llvm.dbg.value(metadata !1, i64 0, metadata
> >>> !9), !dbg !18
> >>> +  br label %for.body, !dbg !18
> >>> +
> >>> +for.body:
> >>> +  ;CHECK: load <4 x i32>
> >>> +  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next,
> >>> %for.body ]
> >>> +  %arrayidx = getelementptr inbounds [1024 x i32]* @B, i64 0,
> >>> i64 %indvars.iv, !dbg !19
> >>> +  %0 = load i32* %arrayidx, align 4, !dbg !19, !tbaa !21
> >>> +  %arrayidx2 = getelementptr inbounds [1024 x i32]* @C, i64 0,
> >>> i64 %indvars.iv, !dbg !19
> >>> +  %1 = load i32* %arrayidx2, align 4, !dbg !19, !tbaa !21
> >>> +  %add = add nsw i32 %1, %0, !dbg !19
> >>> +  %arrayidx4 = getelementptr inbounds [1024 x i32]* @A, i64 0,
> >>> i64 %indvars.iv, !dbg !19
> >>> +  store i32 %add, i32* %arrayidx4, align 4, !dbg !19, !tbaa !21
> >>> +  %indvars.iv.next = add i64 %indvars.iv, 1, !dbg !18
> >>> +  tail call void @llvm.dbg.value(metadata !{null}, i64 0,
> >>> metadata !9), !dbg !18
> >>> +  %lftr.wideiv = trunc i64 %indvars.iv.next to i32, !dbg !18
> >>> +  %exitcond = icmp ne i32 %lftr.wideiv, 1024, !dbg !18
> >>> +  br i1 %exitcond, label %for.body, label %for.end, !dbg !18
> >>> +
> >>> +for.end:
> >>> +  ret i32 0, !dbg !24
> >>> +}
> >>> +
> >>> +declare void @llvm.dbg.declare(metadata, metadata) #1
> >>> +
> >>> +declare void @llvm.dbg.value(metadata, i64, metadata) #1
> >>> +
> >>> +attributes #0 = { nounwind ssp uwtable
> >>> "fp-contract-model"="standard" "no-frame-pointer-elim"
> >>> "no-frame-pointer-elim-non-leaf" "realign-stack"
> >>> "relocation-model"="pic" "ssp-buffers-size"="8" }
> >>> +attributes #1 = { nounwind readnone }
> >>> +
> >>> +!llvm.dbg.cu = !{!0}
> >>> +
> >>> +!0 = metadata !{i32 786449, i32 0, i32 4, metadata !"test",
> >>> metadata !"/path/to/somewhere", metadata !"clang", i1 true, i1
> >>> true, metadata !"", i32 0, metadata !1, metadata !1, metadata
> >>> !2, metadata !11, metadata !""}
> >>> +!1 = metadata !{i32 0}
> >>> +!2 = metadata !{metadata !3}
> >>> +!3 = metadata !{i32 786478, i32 0, metadata !4, metadata
> >>> !"test", metadata !"test", metadata !"test", metadata !4, i32 5,
> >>> metadata !5, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1
> >>> true, i32 ()* @test, null, null, metadata !8, i32 5}
> >>> +!4 = metadata !{i32 786473, metadata !"test", metadata
> >>> !"/path/to/somewhere", null}
> >>> +!5 = metadata !{i32 786453, i32 0, metadata !"", i32 0, i32 0,
> >>> i64 0, i64 0, i64 0, i32 0, null, metadata !6, i32 0, i32 0}
> >>> +!6 = metadata !{metadata !7}
> >>> +!7 = metadata !{i32 786468, null, metadata !"int", null, i32 0,
> >>> i64 32, i64 32, i64 0, i32 0, i32 5}
> >>> +!8 = metadata !{metadata !9}
> >>> +!9 = metadata !{i32 786688, metadata !10, metadata !"i",
> >>> metadata !4, i32 6, metadata !7, i32 0, i32 0}
> >>> +!10 = metadata !{i32 786443, metadata !3, i32 6, i32 0, metadata
> >>> !4, i32 0}
> >>> +!11 = metadata !{metadata !12, metadata !16, metadata !17}
> >>> +!12 = metadata !{i32 786484, i32 0, null, metadata !"A",
> >>> metadata !"A", metadata !"", metadata !4, i32 1, metadata !13,
> >>> i32 0, i32 1, [1024 x i32]* @A, null}
> >>> +!13 = metadata !{i32 786433, null, metadata !"", null, i32 0,
> >>> i64 32768, i64 32, i32 0, i32 0, metadata !7, metadata !14, i32
> >>> 0, i32 0}
> >>> +!14 = metadata !{metadata !15}
> >>> +!15 = metadata !{i32 786465, i64 0, i64 1024}
> >>> +!16 = metadata !{i32 786484, i32 0, null, metadata !"B",
> >>> metadata !"B", metadata !"", metadata !4, i32 2, metadata !13,
> >>> i32 0, i32 1, [1024 x i32]* @B, null}
> >>> +!17 = metadata !{i32 786484, i32 0, null, metadata !"C",
> >>> metadata !"C", metadata !"", metadata !4, i32 3, metadata !13,
> >>> i32 0, i32 1, [1024 x i32]* @C, null}
> >>> +!18 = metadata !{i32 6, i32 0, metadata !10, null}
> >>> +!19 = metadata !{i32 7, i32 0, metadata !20, null}
> >>> +!20 = metadata !{i32 786443, metadata !10, i32 6, i32 0,
> >>> metadata !4, i32 1}
> >>> +!21 = metadata !{metadata !"int", metadata !22}
> >>> +!22 = metadata !{metadata !"omnipotent char", metadata !23}
> >>> +!23 = metadata !{metadata !"Simple C/C++ TBAA"}
> >>> +!24 = metadata !{i32 9, i32 0, metadata !3, null}
> >>> 
> >>> 
> >>> _______________________________________________
> >>> llvm-commits mailing list
> >>> llvm-commits at cs.uiuc.edu
> >>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> > 
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> _______________________________________________
> 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