Few comments:<br><br>Please remove unnecessary attributes from testcases.<div>Also, can you explain why this is the correct fix? Your commit message isn't enlightening and neither is the testcase.</div><div><br></div><div>-eric</div><br><div class="gmail_quote">On Fri Oct 31 2014 at 3:42:29 PM Michael Zolotukhin <<a href="mailto:mzolotukhin@apple.com">mzolotukhin@apple.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: mzolotukhin<br>
Date: Fri Oct 31 17:28:03 2014<br>
New Revision: 221009<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=221009&view=rev" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project?rev=221009&view=rev</a><br>
Log:<br>
Correctly update dom-tree after loop vectorizer.<br>
<br>
Added:<br>
    llvm/trunk/test/Transforms/<u></u>LoopVectorize/incorrect-dom-<u></u>info.ll<br>
Modified:<br>
    llvm/trunk/lib/Transforms/<u></u>Vectorize/LoopVectorize.cpp<br>
<br>
Modified: llvm/trunk/lib/Transforms/<u></u>Vectorize/LoopVectorize.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=221009&r1=221008&r2=221009&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/<u></u>Transforms/Vectorize/<u></u>LoopVectorize.cpp?rev=221009&<u></u>r1=221008&r2=221009&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/lib/Transforms/<u></u>Vectorize/LoopVectorize.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/<u></u>Vectorize/LoopVectorize.cpp Fri Oct 31 17:28:03 2014<br>
@@ -3428,7 +3428,7 @@ void InnerLoopVectorizer::<u></u>updateAnalysis<br>
   DT->addNewBlock(<u></u>LoopMiddleBlock, LoopBypassBlocks[1]);<br>
   DT->addNewBlock(<u></u>LoopScalarPreHeader, LoopBypassBlocks[0]);<br>
   DT->changeImmediateDominator(<u></u>LoopScalarBody, LoopScalarPreHeader);<br>
-  DT->changeImmediateDominator(<u></u>LoopExitBlock, LoopMiddleBlock);<br>
+  DT->changeImmediateDominator(<u></u>LoopExitBlock, LoopBypassBlocks[0]);<br>
<br>
   DEBUG(DT->verifyDomTree());<br>
 }<br>
<br>
Added: llvm/trunk/test/Transforms/<u></u>LoopVectorize/incorrect-dom-<u></u>info.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVectorize/incorrect-dom-info.ll?rev=221009&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/test/<u></u>Transforms/LoopVectorize/<u></u>incorrect-dom-info.ll?rev=<u></u>221009&view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/test/Transforms/<u></u>LoopVectorize/incorrect-dom-<u></u>info.ll (added)<br>
+++ llvm/trunk/test/Transforms/<u></u>LoopVectorize/incorrect-dom-<u></u>info.ll Fri Oct 31 17:28:03 2014<br>
@@ -0,0 +1,142 @@<br>
+; This test is based on one of benchmarks from SPEC2006. It exposes a bug with<br>
+; incorrect updating of the dom-tree.<br>
+; RUN: opt < %s  -loop-vectorize -verify-dom-info<br>
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:<u></u>32:64-S128"<br>
+<br>
+@PL_utf8skip = external constant [0 x i8]<br>
+<br>
+; Function Attrs: nounwind ssp uwtable<br>
+define void @Perl_pp_quotemeta() #0 {<br>
+  %len = alloca i64, align 8<br>
+  br i1 undef, label %2, label %1<br>
+<br>
+; <label>:1                                       ; preds = %0<br>
+  br label %3<br>
+<br>
+; <label>:2                                       ; preds = %0<br>
+  br label %3<br>
+<br>
+; <label>:3                                       ; preds = %2, %1<br>
+  br i1 undef, label %34, label %4<br>
+<br>
+; <label>:4                                       ; preds = %3<br>
+  br i1 undef, label %5, label %6<br>
+<br>
+; <label>:5                                       ; preds = %4<br>
+  br label %6<br>
+<br>
+; <label>:6                                       ; preds = %5, %4<br>
+  br i1 undef, label %7, label %8<br>
+<br>
+; <label>:7                                       ; preds = %6<br>
+  br label %8<br>
+<br>
+; <label>:8                                       ; preds = %7, %6<br>
+  br i1 undef, label %.preheader, label %9<br>
+<br>
+.preheader:                                       ; preds = %9, %8<br>
+  br i1 undef, label %.loopexit, label %.<a href="http://lr.ph" target="_blank">lr.ph</a><br>
+<br>
+; <label>:9                                       ; preds = %8<br>
+  br i1 undef, label %thread-pre-split.preheader, label %.preheader<br>
+<br>
+thread-pre-split.preheader:                       ; preds = %9<br>
+  br i1 undef, label %thread-pre-split._crit_edge, label %.lr.ph21<br>
+<br>
+.thread-pre-split.loopexit_<u></u>crit_edge:             ; preds = %19<br>
+  %scevgep.sum = xor i64 %umax, -1<br>
+  %scevgep45 = getelementptr i8* %d.020, i64 %scevgep.sum<br>
+  br label %thread-pre-split.loopexit<br>
+<br>
+thread-pre-split.loopexit:                        ; preds = %11, %.thread-pre-split.loopexit_<u></u>crit_edge<br>
+  %d.1.lcssa = phi i8* [ %scevgep45, %.thread-pre-split.loopexit_<u></u>crit_edge ], [ %d.020, %11 ]<br>
+  br i1 false, label %thread-pre-split._crit_edge, label %.lr.ph21<br>
+<br>
+.lr.ph21:                                         ; preds = %26, %thread-pre-split.loopexit, %thread-pre-split.preheader<br>
+  %d.020 = phi i8* [ undef, %26 ], [ %d.1.lcssa, %thread-pre-split.loopexit ], [ undef, %thread-pre-split.preheader ]<br>
+  %10 = phi i64 [ %28, %26 ], [ undef, %thread-pre-split.loopexit ], [ undef, %thread-pre-split.preheader ]<br>
+  br i1 undef, label %11, label %22<br>
+<br>
+; <label>:11                                      ; preds = %.lr.ph21<br>
+  %12 = getelementptr inbounds [0 x i8]* @PL_utf8skip, i64 0, i64 undef<br>
+  %13 = load i8* %12, align 1<br>
+  %14 = zext i8 %13 to i64<br>
+  %15 = icmp ugt i64 %14, %10<br>
+  %. = select i1 %15, i64 %10, i64 %14<br>
+  br i1 undef, label %thread-pre-split.loopexit, label %.lr.ph28<br>
+<br>
+.lr.ph28:                                         ; preds = %11<br>
+  %16 = xor i64 %10, -1<br>
+  %17 = xor i64 %14, -1<br>
+  %18 = icmp ugt i64 %16, %17<br>
+  %umax = select i1 %18, i64 %16, i64 %17<br>
+  br label %19<br>
+<br>
+; <label>:19                                      ; preds = %19, %.lr.ph28<br>
+  %ulen.126 = phi i64 [ %., %.lr.ph28 ], [ %20, %19 ]<br>
+  %20 = add i64 %ulen.126, -1<br>
+  %21 = icmp eq i64 %20, 0<br>
+  br i1 %21, label %.thread-pre-split.loopexit_<u></u>crit_edge, label %19<br>
+<br>
+; <label>:22                                      ; preds = %.lr.ph21<br>
+  br i1 undef, label %26, label %23<br>
+<br>
+; <label>:23                                      ; preds = %22<br>
+  br i1 undef, label %26, label %24<br>
+<br>
+; <label>:24                                      ; preds = %23<br>
+  br i1 undef, label %26, label %25<br>
+<br>
+; <label>:25                                      ; preds = %24<br>
+  br label %26<br>
+<br>
+; <label>:26                                      ; preds = %25, %24, %23, %22<br>
+  %27 = load i64* %len, align 8<br>
+  %28 = add i64 %27, -1<br>
+  br i1 undef, label %thread-pre-split._crit_edge, label %.lr.ph21<br>
+<br>
+thread-pre-split._crit_edge:                      ; preds = %26, %thread-pre-split.loopexit, %thread-pre-split.preheader<br>
+  br label %.loopexit<br>
+<br>
+.<a href="http://lr.ph" target="_blank">lr.ph</a>:                                           ; preds = %33, %.preheader<br>
+  br i1 undef, label %29, label %thread-pre-split5<br>
+<br>
+; <label>:29                                      ; preds = %.<a href="http://lr.ph" target="_blank">lr.ph</a><br>
+  br i1 undef, label %33, label %30<br>
+<br>
+; <label>:30                                      ; preds = %29<br>
+  br i1 undef, label %33, label %31<br>
+<br>
+thread-pre-split5:                                ; preds = %.<a href="http://lr.ph" target="_blank">lr.ph</a><br>
+  br i1 undef, label %33, label %31<br>
+<br>
+; <label>:31                                      ; preds = %thread-pre-split5, %30<br>
+  br i1 undef, label %33, label %32<br>
+<br>
+; <label>:32                                      ; preds = %31<br>
+  br label %33<br>
+<br>
+; <label>:33                                      ; preds = %32, %31, %thread-pre-split5, %30, %29<br>
+  br i1 undef, label %.loopexit, label %.<a href="http://lr.ph" target="_blank">lr.ph</a><br>
+<br>
+.loopexit:                                        ; preds = %33, %thread-pre-split._crit_edge, %.preheader<br>
+  br label %35<br>
+<br>
+; <label>:34                                      ; preds = %3<br>
+  br label %35<br>
+<br>
+; <label>:35                                      ; preds = %34, %.loopexit<br>
+  br i1 undef, label %37, label %36<br>
+<br>
+; <label>:36                                      ; preds = %35<br>
+  br label %37<br>
+<br>
+; <label>:37                                      ; preds = %36, %35<br>
+  ret void<br>
+}<br>
+<br>
+attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-<u></u>leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"=<u></u>"8" "unsafe-fp-math"="false" "use-soft-float"="false" }<br>
+<br>
+!llvm.ident = !{!0}<br>
+<br>
+!0 = metadata !{metadata !"clang version 3.6.0 "}<br>
<br>
<br>
______________________________<u></u>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvm-commits</a><br>
</blockquote></div>