[PATCH] D54659: [LoopSink] Add preheader to alias set

Guozhi Wei via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 20 08:52:06 PST 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL347325: [LoopSink] Add preheader to alias set (authored by Carrot, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D54659?vs=174474&id=174792#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D54659

Files:
  llvm/trunk/lib/Transforms/Scalar/LoopSink.cpp
  llvm/trunk/test/Transforms/LICM/loopsink-pr39695.ll


Index: llvm/trunk/lib/Transforms/Scalar/LoopSink.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopSink.cpp
+++ llvm/trunk/lib/Transforms/Scalar/LoopSink.cpp
@@ -280,6 +280,7 @@
   // Compute alias set.
   for (BasicBlock *BB : L.blocks())
     CurAST.add(*BB);
+  CurAST.add(*Preheader);
 
   // Sort loop's basic blocks by frequency
   SmallVector<BasicBlock *, 10> ColdLoopBBs;
Index: llvm/trunk/test/Transforms/LICM/loopsink-pr39695.ll
===================================================================
--- llvm/trunk/test/Transforms/LICM/loopsink-pr39695.ll
+++ llvm/trunk/test/Transforms/LICM/loopsink-pr39695.ll
@@ -0,0 +1,37 @@
+; RUN: opt -S -loop-sink < %s | FileCheck %s
+
+; The load instruction should not be sunk into following loop.
+; CHECK:      @foo
+; CHECK-NEXT: entry
+; CHECK-NEXT: %ptr = load i8*, i8** %pp, align 8
+; CHECK-NEXT: store i8* null, i8** %pp, align 8
+
+define i32 @foo(i32 %n, i8** %pp) !prof !0 {
+entry:
+  %ptr = load i8*, i8** %pp, align 8
+  store i8* null, i8** %pp, align 8
+  br label %for.cond
+
+for.cond:                                         ; preds = %for.body, %entry
+  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
+  %cmp = icmp ult i32 %i.0, %n
+  br i1 %cmp, label %for.body, label %for.end, !prof !1
+
+for.body:                                         ; preds = %for.cond
+  %0 = sext i32 %i.0 to i64
+  %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %0
+  %1 = load i8, i8* %arrayidx, align 1
+  %or19 = call i8 @llvm.bitreverse.i8(i8 %1)
+  %v = sext i8 %or19 to i32
+  %inc = add i32 %i.0, %v
+  br label %for.cond
+
+for.end:                                          ; preds = %for.cond
+  ret i32 %i.0
+}
+
+declare i8 @llvm.bitreverse.i8(i8) #0
+attributes #0 = { nounwind readnone speculatable }
+
+!0 = !{!"function_entry_count", i64 1}
+!1 = !{!"branch_weights", i32 1, i32 2000}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D54659.174792.patch
Type: text/x-patch
Size: 1924 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181120/a69cc372/attachment.bin>


More information about the llvm-commits mailing list