diff options
author | Alina Sbirlea <asbirlea@google.com> | 2018-10-24 22:46:45 +0000 |
---|---|---|
committer | Alina Sbirlea <asbirlea@google.com> | 2018-10-24 22:46:45 +0000 |
commit | ad4d018202d7f967c56b6adcfc283f7273b9d356 (patch) | |
tree | 9e10f57e88dffe7575e33d94fd61fe0e58e2f559 /llvm/test | |
parent | c8ae09673969e7b179fe419d780d1d0f2d2c2c19 (diff) | |
download | bcm5719-llvm-ad4d018202d7f967c56b6adcfc283f7273b9d356.tar.gz bcm5719-llvm-ad4d018202d7f967c56b6adcfc283f7273b9d356.zip |
Update MemorySSA in LoopRotate.
Summary:
Teach LoopRotate to preserve MemorySSA.
Enable tests for correctness, dependency disabled by default.
Subscribers: sanjoy, jlebar, Prazek, george.burgess.iv, llvm-commits
Differential Revision: https://reviews.llvm.org/D51718
llvm-svn: 345216
Diffstat (limited to 'llvm/test')
22 files changed, 215 insertions, 2 deletions
diff --git a/llvm/test/Transforms/LoopRotate/2009-01-25-SingleEntryPhi.ll b/llvm/test/Transforms/LoopRotate/2009-01-25-SingleEntryPhi.ll index 7036d2d9c3a..a09a2290e0a 100644 --- a/llvm/test/Transforms/LoopRotate/2009-01-25-SingleEntryPhi.ll +++ b/llvm/test/Transforms/LoopRotate/2009-01-25-SingleEntryPhi.ll @@ -1,4 +1,5 @@ ; RUN: opt < %s -loop-rotate -verify-dom-info -verify-loop-info -disable-output +; RUN: opt < %s -loop-rotate -verify-dom-info -verify-loop-info -enable-mssa-loop-dependency=true -verify-memoryssa -disable-output ; PR3408 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" target triple = "x86_64-unknown-linux-gnu" diff --git a/llvm/test/Transforms/LoopRotate/PhiRename-1.ll b/llvm/test/Transforms/LoopRotate/PhiRename-1.ll index 6d75888d70d..8bece445cf4 100644 --- a/llvm/test/Transforms/LoopRotate/PhiRename-1.ll +++ b/llvm/test/Transforms/LoopRotate/PhiRename-1.ll @@ -1,4 +1,5 @@ ; RUN: opt < %s -loop-rotate -verify-dom-info -verify-loop-info -S | FileCheck %s +; RUN: opt < %s -loop-rotate -verify-dom-info -verify-loop-info -enable-mssa-loop-dependency=true -verify-memoryssa -S | FileCheck %s ; CHECK-NOT: [ {{.}}tmp224 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64" diff --git a/llvm/test/Transforms/LoopRotate/PhiSelfReference-1.ll b/llvm/test/Transforms/LoopRotate/PhiSelfReference-1.ll index ed494483391..7726c53e55e 100644 --- a/llvm/test/Transforms/LoopRotate/PhiSelfReference-1.ll +++ b/llvm/test/Transforms/LoopRotate/PhiSelfReference-1.ll @@ -1,4 +1,5 @@ ; RUN: opt < %s -loop-rotate -verify-dom-info -verify-loop-info -disable-output +; RUN: opt < %s -loop-rotate -verify-dom-info -verify-loop-info -enable-mssa-loop-dependency=true -verify-memoryssa -disable-output ; ModuleID = 'PhiSelfReference-1.bc' define void @snrm2(i32 %incx) { diff --git a/llvm/test/Transforms/LoopRotate/alloca.ll b/llvm/test/Transforms/LoopRotate/alloca.ll index bbcfb39c372..59da33f8802 100644 --- a/llvm/test/Transforms/LoopRotate/alloca.ll +++ b/llvm/test/Transforms/LoopRotate/alloca.ll @@ -1,4 +1,5 @@ ; RUN: opt < %s -loop-rotate -S | FileCheck %s +; RUN: opt < %s -loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa -S | FileCheck %s ; Test alloca in -loop-rotate. diff --git a/llvm/test/Transforms/LoopRotate/basic.ll b/llvm/test/Transforms/LoopRotate/basic.ll index 299c18c871e..d01d19f7f12 100644 --- a/llvm/test/Transforms/LoopRotate/basic.ll +++ b/llvm/test/Transforms/LoopRotate/basic.ll @@ -1,5 +1,7 @@ ; RUN: opt -S -loop-rotate < %s | FileCheck %s +; RUN: opt -S -loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa < %s | FileCheck %s ; RUN: opt -S -passes='require<targetir>,require<assumptions>,loop(rotate)' < %s | FileCheck %s +; RUN: opt -S -passes='require<targetir>,require<assumptions>,loop(rotate)' -enable-mssa-loop-dependency=true -verify-memoryssa < %s | FileCheck %s 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" target triple = "x86_64-apple-darwin10.0.0" diff --git a/llvm/test/Transforms/LoopRotate/catchret.ll b/llvm/test/Transforms/LoopRotate/catchret.ll index c035e49d79c..f28af8aed60 100755 --- a/llvm/test/Transforms/LoopRotate/catchret.ll +++ b/llvm/test/Transforms/LoopRotate/catchret.ll @@ -1,4 +1,5 @@ ; RUN: opt < %s -loop-rotate -S | FileCheck %s +; RUN: opt < %s -loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa -S | FileCheck %s target triple = "x86_64-pc-windows-msvc" diff --git a/llvm/test/Transforms/LoopRotate/convergent.ll b/llvm/test/Transforms/LoopRotate/convergent.ll index c8b34fd75f0..37671562142 100644 --- a/llvm/test/Transforms/LoopRotate/convergent.ll +++ b/llvm/test/Transforms/LoopRotate/convergent.ll @@ -1,4 +1,5 @@ ; RUN: opt -S -loop-rotate < %s | FileCheck %s +; RUN: opt -S -loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa < %s | FileCheck %s @e = global i32 10 diff --git a/llvm/test/Transforms/LoopRotate/crash.ll b/llvm/test/Transforms/LoopRotate/crash.ll index 5e2b66d6803..2a45e370e18 100644 --- a/llvm/test/Transforms/LoopRotate/crash.ll +++ b/llvm/test/Transforms/LoopRotate/crash.ll @@ -1,4 +1,5 @@ ; RUN: opt -loop-rotate -disable-output -verify-dom-info -verify-loop-info < %s +; RUN: opt -loop-rotate -disable-output -verify-dom-info -verify-loop-info -enable-mssa-loop-dependency=true -verify-memoryssa < %s 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" target triple = "x86_64-apple-darwin10.0.0" diff --git a/llvm/test/Transforms/LoopRotate/dbg-value-duplicates.ll b/llvm/test/Transforms/LoopRotate/dbg-value-duplicates.ll index 2fea06b5afe..ce7157c571f 100644 --- a/llvm/test/Transforms/LoopRotate/dbg-value-duplicates.ll +++ b/llvm/test/Transforms/LoopRotate/dbg-value-duplicates.ll @@ -1,4 +1,5 @@ ; RUN: opt -S -loop-rotate < %s | FileCheck %s +; RUN: opt -S -loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa < %s | FileCheck %s source_filename = "/tmp/loop.c" target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.13.0" diff --git a/llvm/test/Transforms/LoopRotate/dbgvalue.ll b/llvm/test/Transforms/LoopRotate/dbgvalue.ll index bc0b20d0fea..93e3c4c252c 100644 --- a/llvm/test/Transforms/LoopRotate/dbgvalue.ll +++ b/llvm/test/Transforms/LoopRotate/dbgvalue.ll @@ -1,4 +1,5 @@ ; RUN: opt -S -loop-rotate < %s | FileCheck %s +; RUN: opt -S -loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa < %s | FileCheck %s declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone diff --git a/llvm/test/Transforms/LoopRotate/indirectbr.ll b/llvm/test/Transforms/LoopRotate/indirectbr.ll index 8f059d50505..a26ec375953 100644 --- a/llvm/test/Transforms/LoopRotate/indirectbr.ll +++ b/llvm/test/Transforms/LoopRotate/indirectbr.ll @@ -1,4 +1,5 @@ ; RUN: opt < %s -S -loop-rotate -o - -verify-loop-info -verify-dom-info | FileCheck %s +; RUN: opt < %s -S -loop-rotate -o - -verify-loop-info -verify-dom-info -enable-mssa-loop-dependency=true -verify-memoryssa | FileCheck %s ; PR5502 define void @z80_do_opcodes() nounwind { diff --git a/llvm/test/Transforms/LoopRotate/loopexitinglatch.ll b/llvm/test/Transforms/LoopRotate/loopexitinglatch.ll index c05e512831e..dee29ec958e 100644 --- a/llvm/test/Transforms/LoopRotate/loopexitinglatch.ll +++ b/llvm/test/Transforms/LoopRotate/loopexitinglatch.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -S -loop-rotate < %s -verify-loop-info -verify-dom-info | FileCheck %s +; RUN: opt -S -loop-rotate < %s -verify-loop-info -verify-dom-info -enable-mssa-loop-dependency=true -verify-memoryssa | FileCheck %s target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" target triple = "thumbv8m.base-arm-none-eabi" diff --git a/llvm/test/Transforms/LoopRotate/multiple-exits.ll b/llvm/test/Transforms/LoopRotate/multiple-exits.ll index f38c855b9c8..c6f153b8ca3 100644 --- a/llvm/test/Transforms/LoopRotate/multiple-exits.ll +++ b/llvm/test/Transforms/LoopRotate/multiple-exits.ll @@ -1,4 +1,5 @@ ; RUN: opt -S -loop-rotate < %s -verify-loop-info -verify-dom-info | FileCheck %s +; RUN: opt -S -loop-rotate < %s -verify-loop-info -verify-dom-info -enable-mssa-loop-dependency=true -verify-memoryssa | FileCheck %s 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" diff --git a/llvm/test/Transforms/LoopRotate/phi-dbgvalue.ll b/llvm/test/Transforms/LoopRotate/phi-dbgvalue.ll index c4b2a6a76f2..1f7e129c26e 100644 --- a/llvm/test/Transforms/LoopRotate/phi-dbgvalue.ll +++ b/llvm/test/Transforms/LoopRotate/phi-dbgvalue.ll @@ -1,4 +1,5 @@ ; RUN: opt -S -loop-rotate < %s | FileCheck %s +; RUN: opt -S -loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa < %s | FileCheck %s ;CHECK-LABEL: func ;CHECK-LABEL: entry diff --git a/llvm/test/Transforms/LoopRotate/phi-duplicate.ll b/llvm/test/Transforms/LoopRotate/phi-duplicate.ll index 46ee5961ba5..d7f69d8c9cc 100644 --- a/llvm/test/Transforms/LoopRotate/phi-duplicate.ll +++ b/llvm/test/Transforms/LoopRotate/phi-duplicate.ll @@ -1,4 +1,5 @@ ; RUN: opt -S -loop-rotate < %s | FileCheck %s +; RUN: opt -S -loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa < %s | FileCheck %s 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" target triple = "x86_64-apple-darwin10.0" diff --git a/llvm/test/Transforms/LoopRotate/pr22337.ll b/llvm/test/Transforms/LoopRotate/pr22337.ll index 03e804b775e..8195affbcd3 100644 --- a/llvm/test/Transforms/LoopRotate/pr22337.ll +++ b/llvm/test/Transforms/LoopRotate/pr22337.ll @@ -1,4 +1,5 @@ ; RUN: opt < %s -loop-rotate -S | FileCheck %s +; RUN: opt < %s -loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa -S | FileCheck %s @a = external global i8, align 4 @tmp = global i8* @a diff --git a/llvm/test/Transforms/LoopRotate/pr33701.ll b/llvm/test/Transforms/LoopRotate/pr33701.ll index ed162b12098..8535e317676 100644 --- a/llvm/test/Transforms/LoopRotate/pr33701.ll +++ b/llvm/test/Transforms/LoopRotate/pr33701.ll @@ -1,4 +1,5 @@ ; RUN: opt < %s -loop-rotate -verify-dom-info -verify-loop-info -disable-output +; RUN: opt < %s -loop-rotate -verify-dom-info -verify-loop-info -enable-mssa-loop-dependency=true -verify-memoryssa -disable-output define void @func() { bb0: diff --git a/llvm/test/Transforms/LoopRotate/pr35210.ll b/llvm/test/Transforms/LoopRotate/pr35210.ll index 3033ca84732..a705642c435 100644 --- a/llvm/test/Transforms/LoopRotate/pr35210.ll +++ b/llvm/test/Transforms/LoopRotate/pr35210.ll @@ -1,4 +1,5 @@ ;RUN: opt %s -passes='adce,loop(rotate),adce' -S -debug-pass-manager -debug-only=loop-rotate 2>&1 | FileCheck %s +;RUN: opt %s -passes='adce,loop(rotate),adce' -S -debug-pass-manager -debug-only=loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa 2>&1 | FileCheck %s --check-prefix=MSSA ;REQUIRES: asserts ; This test is to make sure we invalidate the post dominator pass after loop rotate simplifies the loop latch. @@ -32,6 +33,36 @@ ; CHECK-NEXT: Running analysis: PostDominatorTreeAnalysis on f ; CHECK-NEXT: Finished llvm::Function pass manager run. +; MSSA: Starting llvm::Function pass manager run. +; MSSA-NEXT: Running pass: ADCEPass on f +; MSSA-NEXT: Running analysis: PostDominatorTreeAnalysis on f +; MSSA-NEXT: Running pass: FunctionToLoopPassAdaptor{{.*}} on f +; MSSA-NEXT: Starting llvm::Function pass manager run. +; MSSA-NEXT: Running pass: LoopSimplifyPass on f +; MSSA-NEXT: Running analysis: LoopAnalysis on f +; MSSA-NEXT: Running analysis: DominatorTreeAnalysis on f +; MSSA-NEXT: Running analysis: AssumptionAnalysis on f +; MSSA-NEXT: Running pass: LCSSAPass on f +; MSSA-NEXT: Finished llvm::Function pass manager run. +; MSSA-NEXT: Running analysis: MemorySSAAnalysis on f +; MSSA-NEXT: Running analysis: AAManager on f +; MSSA-NEXT: Running analysis: TargetLibraryAnalysis on f +; MSSA-NEXT: Running analysis: ScalarEvolutionAnalysis on f +; MSSA-NEXT: Running analysis: TargetIRAnalysis on f +; MSSA-NEXT: Running analysis: InnerAnalysisManagerProxy{{.*}} on f +; MSSA-NEXT: Starting Loop pass manager run. +; MSSA-NEXT: Running analysis: PassInstrumentationAnalysis on bb +; MSSA-NEXT: Running pass: LoopRotatePass on Loop at depth 1 containing: %bb<header><exiting>,%bb4<latch> +; MSSA-NEXT: Folding loop latch bb4 into bb +; MSSA-NEXT: Invalidating all non-preserved analyses for: bb +; MSSA-NEXT: Finished Loop pass manager run. +; MSSA-NEXT: Invalidating all non-preserved analyses for: f +; MSSA-NEXT: Invalidating analysis: PostDominatorTreeAnalysis on f +; MSSA-NEXT: Running pass: ADCEPass on f +; MSSA-NEXT: Running analysis: PostDominatorTreeAnalysis on f +; MSSA-NEXT: Finished llvm::Function pass manager run. + + ; CHECK-LABEL: define i8 @f() { ; CHECK-NEXT : entry: ; CHECK-NEXT : br label %bb @@ -52,6 +83,26 @@ ; CHECK-NEXT : ; CHECK-NEXT : attributes #0 = { noreturn } +; MSSA-LABEL: define i8 @f() { +; MSSA-NEXT : entry: +; MSSA-NEXT : br label %bb +; MSSA-NEXT : +; MSSA-NEXT : bb: ; preds = %bb, %entry +; MSSA-NEXT : %mode.0 = phi i8 [ 0, %entry ], [ %indvar.next, %bb ] +; MSSA-NEXT : %tmp5 = icmp eq i8 %mode.0, 1 +; MSSA-NEXT : %indvar.next = add i8 %mode.0, 1 +; MSSA-NEXT : br i1 %tmp5, label %bb5, label %bb +; MSSA-NEXT : +; MSSA-NEXT : bb5: ; preds = %bb +; MSSA-NEXT : tail call void @raise_exception() #0 +; MSSA-NEXT : unreachable +; MSSA-NEXT : } +; MSSA-NEXT : +; MSSA-NEXT : ; Function Attrs: noreturn +; MSSA-NEXT : declare void @raise_exception() #0 +; MSSA-NEXT : +; MSSA-NEXT : attributes #0 = { noreturn } + define i8 @f() { entry: br label %bb diff --git a/llvm/test/Transforms/LoopRotate/pr37205.ll b/llvm/test/Transforms/LoopRotate/pr37205.ll index 3ba6c04545f..20ad7568189 100644 --- a/llvm/test/Transforms/LoopRotate/pr37205.ll +++ b/llvm/test/Transforms/LoopRotate/pr37205.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -S -indvars -verify -loop-rotate -loop-idiom < %s | FileCheck %s +; RUN: opt -S -indvars -verify -loop-rotate -loop-idiom -enable-mssa-loop-dependency=true -verify-memoryssa < %s | FileCheck %s target triple = "x86_64-unknown-linux-gnu" ; Verify that we invalidate SCEV properly. diff --git a/llvm/test/Transforms/LoopRotate/preserve-mssa.ll b/llvm/test/Transforms/LoopRotate/preserve-mssa.ll new file mode 100644 index 00000000000..d975f80cd9e --- /dev/null +++ b/llvm/test/Transforms/LoopRotate/preserve-mssa.ll @@ -0,0 +1,109 @@ +; RUN: opt -S -loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa < %s | FileCheck %s + +; CHECK-LABEL: @multiedge( +define void @multiedge() { +entry: + br label %retry + +retry: ; preds = %sw.epilog, %entry + br i1 undef, label %cleanup, label %if.end + +if.end: ; preds = %retry + switch i32 undef, label %sw.epilog [ + i32 -3, label %cleanup + i32 -5, label %cleanup + i32 -16, label %cleanup + i32 -25, label %cleanup + ] + +sw.epilog: ; preds = %if.end + br label %retry + +cleanup: ; preds = %if.end, %if.end, %if.end, %if.end, %retry + ret void +} + +; CHECK-LABEL: @read_line( +define internal fastcc i32 @read_line(i8* nocapture %f) unnamed_addr { +entry: + br label %for.cond + +for.cond: ; preds = %if.end, %entry + %call = call i8* @prepbuffer(i8* nonnull undef) + %call1 = call i8* @fgets(i8* %call, i32 8192, i8* %f) + br i1 undef, label %if.then, label %if.end + +if.then: ; preds = %for.cond + ret i32 undef + +if.end: ; preds = %for.cond + %call4 = call i64 @strlen(i8* %call) + br label %for.cond +} + +declare dso_local i8* @prepbuffer(i8*) local_unnamed_addr +declare dso_local i8* @fgets(i8*, i32, i8* nocapture) local_unnamed_addr +declare dso_local i64 @strlen(i8* nocapture) local_unnamed_addr + + +; CHECK-LABEL: @loop3 +define dso_local fastcc void @loop3() unnamed_addr { +entry: + br label %for.cond + +for.cond: ; preds = %for.body, %entry + br i1 undef, label %for.body, label %for.end81 + +for.body: ; preds = %for.cond + %.idx122.val = load i32, i32* undef, align 8 + call fastcc void @cont() + br label %for.cond + +for.end81: ; preds = %for.cond + ret void +} + +; CHECK-LABEL: @loop4 +define dso_local fastcc void @loop4() unnamed_addr { +entry: + br label %while.cond + +while.cond: ; preds = %while.body, %entry + br i1 undef, label %while.end, label %while.body + +while.body: ; preds = %while.cond + call fastcc void @cont() + br label %while.cond + +while.end: ; preds = %while.cond + call fastcc void @cont() + call fastcc void @cont() + ret void +} + +; Function Attrs: inlinehint nounwind uwtable +declare dso_local fastcc void @cont() unnamed_addr + +@glob_array = internal unnamed_addr constant [3 x i32] [i32 1, i32 0, i32 2], align 4 +; Test against failure in MemorySSAUpdater, when rotate clones instructions as Value. +; CHECK-LABEL: @loop5 +define dso_local fastcc void @loop5() unnamed_addr { +entry: + br label %for.body + +do.cond: ; preds = %for.body + unreachable + +for.body: ; preds = %if.end, %entry + %indvar = phi i64 [ %indvar.next, %if.end ], [ 0, %entry ] + %array = getelementptr inbounds [3 x i32], [3 x i32]* @glob_array, i64 0, i64 %indvar + %0 = load i32, i32* %array, align 4 + br i1 undef, label %do.cond, label %if.end + +if.end: ; preds = %for.body + store i32 undef, i32* undef, align 4 + %indvar.next = add nuw nsw i64 %indvar, 1 + br label %for.body +} + + diff --git a/llvm/test/Transforms/LoopRotate/preserve-scev.ll b/llvm/test/Transforms/LoopRotate/preserve-scev.ll index 7bd22326864..2faf8ec487a 100644 --- a/llvm/test/Transforms/LoopRotate/preserve-scev.ll +++ b/llvm/test/Transforms/LoopRotate/preserve-scev.ll @@ -1,27 +1,48 @@ ; RUN: opt < %s -loop-rotate -loop-reduce -verify-dom-info -verify-loop-info -disable-output +; RUN: opt < %s -loop-rotate -loop-reduce -enable-mssa-loop-dependency=true -verify-memoryssa -verify-dom-info -verify-loop-info -disable-output -define fastcc void @foo() nounwind { +define fastcc void @foo(i32* %A, i64 %i) nounwind { BB: br label %BB1 BB1: ; preds = %BB19, %BB + %tttmp1 = getelementptr i32, i32* %A, i64 %i + %tttmp2 = load i32, i32* %tttmp1 + %tttmp3 = add i32 %tttmp2, 1 + store i32 %tttmp3, i32* %tttmp1 br label %BB4 BB2: ; preds = %BB4 %tmp = bitcast i32 undef to i32 ; <i32> [#uses=1] + %tttmp7 = getelementptr i32, i32* %A, i64 %i + %tttmp8 = load i32, i32* %tttmp7 + %tttmp9 = add i32 %tttmp8, 3 + store i32 %tttmp9, i32* %tttmp7 br label %BB4 -BB4: ; preds = %BB3, %BB1 +BB4: ; preds = %BB2, %BB1 %tmp5 = phi i32 [ undef, %BB1 ], [ %tmp, %BB2 ] ; <i32> [#uses=1] + %tttmp4 = getelementptr i32, i32* %A, i64 %i + %tttmp5 = load i32, i32* %tttmp4 + %tttmp6 = add i32 %tttmp5, 3 + store i32 %tttmp6, i32* %tttmp4 br i1 false, label %BB8, label %BB2 BB8: ; preds = %BB6 %tmp7 = bitcast i32 %tmp5 to i32 ; <i32> [#uses=2] + %tttmp10 = getelementptr i32, i32* %A, i64 %i + %tttmp11 = load i32, i32* %tttmp10 + %tttmp12 = add i32 %tttmp11, 3 + store i32 %tttmp12, i32* %tttmp10 br i1 false, label %BB9, label %BB13 BB9: ; preds = %BB12, %BB8 %tmp10 = phi i32 [ %tmp11, %BB12 ], [ %tmp7, %BB8 ] ; <i32> [#uses=2] %tmp11 = add i32 %tmp10, 1 ; <i32> [#uses=1] + %tttmp13 = getelementptr i32, i32* %A, i64 %i + %tttmp14 = load i32, i32* %tttmp13 + %tttmp15 = add i32 %tttmp14, 3 + store i32 %tttmp15, i32* %tttmp13 br label %BB12 BB12: ; preds = %BB9 @@ -29,16 +50,28 @@ BB12: ; preds = %BB9 BB13: ; preds = %BB15, %BB8 %tmp14 = phi i32 [ %tmp16, %BB15 ], [ %tmp7, %BB8 ] ; <i32> [#uses=1] + %tttmp16 = getelementptr i32, i32* %A, i64 %i + %tttmp17 = load i32, i32* %tttmp16 + %tttmp18 = add i32 %tttmp17, 3 + store i32 %tttmp18, i32* %tttmp16 br label %BB15 BB15: ; preds = %BB13 %tmp16 = add i32 %tmp14, -1 ; <i32> [#uses=1] + %tttmp19 = getelementptr i32, i32* %A, i64 %i + %tttmp20 = load i32, i32* %tttmp19 + %tttmp21 = add i32 %tttmp20, 3 + store i32 %tttmp21, i32* %tttmp19 br i1 false, label %BB13, label %BB18 BB17: ; preds = %BB12 br label %BB19 BB18: ; preds = %BB15 + %tttmp22 = getelementptr i32, i32* %A, i64 %i + %tttmp23 = load i32, i32* %tttmp22 + %tttmp24 = add i32 %tttmp23, 3 + store i32 %tttmp24, i32* %tttmp22 br label %BB19 BB19: ; preds = %BB18, %BB17 diff --git a/llvm/test/Transforms/LoopRotate/vect.omp.persistence.ll b/llvm/test/Transforms/LoopRotate/vect.omp.persistence.ll index 6a1865499d3..c4c987e7b2b 100644 --- a/llvm/test/Transforms/LoopRotate/vect.omp.persistence.ll +++ b/llvm/test/Transforms/LoopRotate/vect.omp.persistence.ll @@ -1,4 +1,5 @@ ; RUN: opt < %s -loop-rotate -S | FileCheck %s +; RUN: opt < %s -loop-rotate -enable-mssa-loop-dependency=true -verify-memoryssa -S | FileCheck %s 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" |