github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/third_party/mlir/lib/Analysis/TestParallelismDetection.cpp (about) 1 //===- ParallelismDetection.cpp - Parallelism Detection pass ------------*-===// 2 // 3 // Copyright 2019 The MLIR Authors. 4 // 5 // Licensed under the Apache License, Version 2.0 (the "License"); 6 // you may not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, software 12 // distributed under the License is distributed on an "AS IS" BASIS, 13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 // See the License for the specific language governing permissions and 15 // limitations under the License. 16 // ============================================================================= 17 // 18 // This file implements a pass to detect parallel affine 'affine.for' ops. 19 // 20 //===----------------------------------------------------------------------===// 21 22 #include "mlir/Analysis/Passes.h" 23 #include "mlir/Analysis/Utils.h" 24 #include "mlir/Dialect/AffineOps/AffineOps.h" 25 #include "mlir/IR/Builders.h" 26 #include "mlir/Pass/Pass.h" 27 28 using namespace mlir; 29 30 namespace { 31 32 struct TestParallelismDetection 33 : public FunctionPass<TestParallelismDetection> { 34 void runOnFunction() override; 35 }; 36 37 } // end anonymous namespace 38 39 FunctionPassBase *mlir::createParallelismDetectionTestPass() { 40 return new TestParallelismDetection(); 41 } 42 43 // Walks the function and emits a note for all 'affine.for' ops detected as 44 // parallel. 45 void TestParallelismDetection::runOnFunction() { 46 FuncOp f = getFunction(); 47 OpBuilder b(f.getBody()); 48 f.walk([&](AffineForOp forOp) { 49 if (isLoopParallel(forOp)) 50 forOp.emitRemark("parallel loop"); 51 else 52 forOp.emitRemark("sequential loop"); 53 }); 54 } 55 56 static PassRegistration<TestParallelismDetection> 57 pass("test-detect-parallel", "Test parallelism detection ");