From 4e1ac95cf5802a041a847b9feb8f215558b447fc Mon Sep 17 00:00:00 2001 From: Alina Sbirlea Date: Tue, 30 Apr 2019 21:29:20 +0000 Subject: [PATCH] [PassManagerBuilder] Add option for interleaved loops, for loop vectorize. Summary: Match NewPassManager behavior: add option for interleaved loops in the old pass manager, and use that instead of the flag used to disable loop unroll. No changes in the defaults. Reviewers: chandlerc Subscribers: mehdi_amini, jlebar, dmgreen, hsaito, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D61030 llvm-svn: 359615 --- llvm/include/llvm/Transforms/IPO/PassManagerBuilder.h | 1 + llvm/lib/Transforms/IPO/PassManagerBuilder.cpp | 6 ++---- llvm/test/Transforms/LoopVectorize/X86/unroll-pm.ll | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/llvm/include/llvm/Transforms/IPO/PassManagerBuilder.h b/llvm/include/llvm/Transforms/IPO/PassManagerBuilder.h index ec707e8..33648e0 100644 --- a/llvm/include/llvm/Transforms/IPO/PassManagerBuilder.h +++ b/llvm/include/llvm/Transforms/IPO/PassManagerBuilder.h @@ -145,6 +145,7 @@ public: bool DisableUnrollLoops; bool SLPVectorize; bool LoopVectorize; + bool LoopsInterleaved; bool RerollLoops; bool NewGVN; bool DisableGVNLoadPRE; diff --git a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp index eeb1968..e8b4b8f 100644 --- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp +++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -162,9 +162,7 @@ PassManagerBuilder::PassManagerBuilder() { DisableUnrollLoops = false; SLPVectorize = RunSLPVectorization; LoopVectorize = EnableLoopVectorization; - // FIXME: Add: LoopsInterleaved = EnableLoopInterleaving; - // Replace usage of DisableUnrollLoops with LoopsInterleaved when creating - // the LoopVectorize pass, to be consistent with the new pass manager. + LoopsInterleaved = EnableLoopInterleaving; RerollLoops = RunLoopRerolling; NewGVN = RunNewGVN; LicmMssaOptCap = SetLicmMssaOptCap; @@ -673,7 +671,7 @@ void PassManagerBuilder::populateModulePassManager( // llvm.loop.distribute=true or when -enable-loop-distribute is specified. MPM.add(createLoopDistributePass()); - MPM.add(createLoopVectorizePass(DisableUnrollLoops, !LoopVectorize)); + MPM.add(createLoopVectorizePass(!LoopsInterleaved, !LoopVectorize)); // Eliminate loads by forwarding stores from the previous iteration to loads // of the current iteration. diff --git a/llvm/test/Transforms/LoopVectorize/X86/unroll-pm.ll b/llvm/test/Transforms/LoopVectorize/X86/unroll-pm.ll index 52914b6..fc1c154 100644 --- a/llvm/test/Transforms/LoopVectorize/X86/unroll-pm.ll +++ b/llvm/test/Transforms/LoopVectorize/X86/unroll-pm.ll @@ -1,5 +1,5 @@ ; RUN: opt < %s -O2 -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx -force-vector-width=4 -S | FileCheck %s -; RUN: opt < %s -O2 -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx -force-vector-width=4 -disable-loop-unrolling -S | FileCheck %s -check-prefix=CHECK-NOUNRL +; RUN: opt < %s -O2 -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx -force-vector-width=4 -disable-loop-unrolling -interleave-loops=false -S | FileCheck %s -check-prefix=CHECK-NOUNRL 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" -- 2.7.4