1// RUN: tco %s | FileCheck %s 2// RUN: tco %s --mlir-pass-statistics --mlir-pass-statistics-display=pipeline 2>&1 | FileCheck %s --check-prefix=PASSES 3 4// REQUIRES: asserts 5 6// Check that tco is working with a basic test. 7// Also check the passes in the default pipeline. 8 9func.func @_QQmain() { 10 return 11} 12 13// CHECK: ; ModuleID = 'FIRModule' 14// CHECK-LABEL: define void @_QQmain() 15// CHECK: ret void 16 17// PASSES: Pass statistics report 18 19// PASSES: Canonicalizer 20// PASSES-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'omp.declare_reduction', 'omp.private'] 21// PASSES-NEXT: 'fir.global' Pipeline 22// PASSES-NEXT: SimplifyHLFIRIntrinsics 23// PASSES-NEXT: InlineElementals 24// PASSES-NEXT: 'func.func' Pipeline 25// PASSES-NEXT: SimplifyHLFIRIntrinsics 26// PASSES-NEXT: InlineElementals 27// PASSES-NEXT: 'omp.declare_reduction' Pipeline 28// PASSES-NEXT: SimplifyHLFIRIntrinsics 29// PASSES-NEXT: InlineElementals 30// PASSES-NEXT: 'omp.private' Pipeline 31// PASSES-NEXT: SimplifyHLFIRIntrinsics 32// PASSES-NEXT: InlineElementals 33// PASSES-NEXT: Canonicalizer 34// PASSES-NEXT: CSE 35// PASSES-NEXT: (S) 0 num-cse'd - Number of operations CSE'd 36// PASSES-NEXT: (S) 0 num-dce'd - Number of operations DCE'd 37// PASSES-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'omp.declare_reduction', 'omp.private'] 38// PASSES-NEXT: 'fir.global' Pipeline 39// PASSES-NEXT: SimplifyHLFIRIntrinsics 40// PASSES-NEXT: OptimizedBufferization 41// PASSES-NEXT: InlineHLFIRAssign 42// PASSES-NEXT: 'func.func' Pipeline 43// PASSES-NEXT: SimplifyHLFIRIntrinsics 44// PASSES-NEXT: OptimizedBufferization 45// PASSES-NEXT: InlineHLFIRAssign 46// PASSES-NEXT: 'omp.declare_reduction' Pipeline 47// PASSES-NEXT: SimplifyHLFIRIntrinsics 48// PASSES-NEXT: OptimizedBufferization 49// PASSES-NEXT: InlineHLFIRAssign 50// PASSES-NEXT: 'omp.private' Pipeline 51// PASSES-NEXT: SimplifyHLFIRIntrinsics 52// PASSES-NEXT: OptimizedBufferization 53// PASSES-NEXT: InlineHLFIRAssign 54// PASSES-NEXT: LowerHLFIROrderedAssignments 55// PASSES-NEXT: LowerHLFIRIntrinsics 56// PASSES-NEXT: BufferizeHLFIR 57// PASSES-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'omp.declare_reduction', 'omp.private'] 58// PASSES-NEXT: 'fir.global' Pipeline 59// PASSES-NEXT: InlineHLFIRAssign 60// PASSES-NEXT: 'func.func' Pipeline 61// PASSES-NEXT: InlineHLFIRAssign 62// PASSES-NEXT: 'omp.declare_reduction' Pipeline 63// PASSES-NEXT: InlineHLFIRAssign 64// PASSES-NEXT: 'omp.private' Pipeline 65// PASSES-NEXT: InlineHLFIRAssign 66// PASSES-NEXT: ConvertHLFIRtoFIR 67// PASSES-NEXT: LowerWorkshare 68// PASSES-NEXT: CSE 69// PASSES-NEXT: (S) 0 num-cse'd - Number of operations CSE'd 70// PASSES-NEXT: (S) 0 num-dce'd - Number of operations DCE'd 71 72// PASSES-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'omp.declare_reduction', 'omp.private'] 73// PASSES-NEXT: 'fir.global' Pipeline 74// PASSES-NEXT: CharacterConversion 75// PASSES-NEXT: 'func.func' Pipeline 76// PASSES-NEXT: ArrayValueCopy 77// PASSES-NEXT: CharacterConversion 78// PASSES-NEXT: 'omp.declare_reduction' Pipeline 79// PASSES-NEXT: CharacterConversion 80// PASSES-NEXT: 'omp.private' Pipeline 81// PASSES-NEXT: CharacterConversion 82 83// PASSES-NEXT: Canonicalizer 84// PASSES-NEXT: SimplifyRegionLite 85// PASSES-NEXT: SimplifyIntrinsics 86// PASSES-NEXT: AlgebraicSimplification 87// PASSES-NEXT: CSE 88// PASSES-NEXT: (S) 0 num-cse'd - Number of operations CSE'd 89// PASSES-NEXT: (S) 0 num-dce'd - Number of operations DCE'd 90 91// PASSES-NEXT: 'func.func' Pipeline 92// PASSES-NEXT: MemoryAllocationOpt 93 94// PASSES-NEXT: Inliner 95// PASSES-NEXT: SimplifyRegionLite 96// PASSES-NEXT: CSE 97// PASSES-NEXT: (S) 0 num-cse'd - Number of operations CSE'd 98// PASSES-NEXT: (S) 0 num-dce'd - Number of operations DCE'd 99 100// PASSES-NEXT: PolymorphicOpConversion 101// PASSES-NEXT: AssumedRankOpConversion 102// PASSES-NEXT: AddAliasTags 103 104// PASSES-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'omp.declare_reduction', 'omp.private'] 105// PASSES-NEXT: 'fir.global' Pipeline 106// PASSES-NEXT: StackReclaim 107// PASSES-NEXT: CFGConversion 108// PASSES-NEXT: 'func.func' Pipeline 109// PASSES-NEXT: StackReclaim 110// PASSES-NEXT: CFGConversion 111// PASSES-NEXT: 'omp.declare_reduction' Pipeline 112// PASSES-NEXT: StackReclaim 113// PASSES-NEXT: CFGConversion 114// PASSES-NEXT: 'omp.private' Pipeline 115// PASSES-NEXT: StackReclaim 116// PASSES-NEXT: CFGConversion 117 118// PASSES-NEXT: SCFToControlFlow 119// PASSES-NEXT: Canonicalizer 120// PASSES-NEXT: SimplifyRegionLite 121// PASSES-NEXT: CSE 122// PASSES-NEXT: (S) 0 num-cse'd - Number of operations CSE'd 123// PASSES-NEXT: (S) 0 num-dce'd - Number of operations DCE'd 124// PASSES-NEXT: BoxedProcedurePass 125 126// PASSES-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'gpu.module', 'omp.declare_reduction', 'omp.private'] 127// PASSES-NEXT: 'fir.global' Pipeline 128// PASSES-NEXT: AbstractResultOpt 129// PASSES-NEXT: 'func.func' Pipeline 130// PASSES-NEXT: AbstractResultOpt 131// PASSES-NEXT: 'gpu.module' Pipeline 132// PASSES-NEXT: Pipeline Collection : ['func.func', 'gpu.func'] 133// PASSES-NEXT: 'func.func' Pipeline 134// PASSES-NEXT: AbstractResultOpt 135// PASSES-NEXT: 'gpu.func' Pipeline 136// PASSES-NEXT: AbstractResultOpt 137// PASSES-NEXT: 'omp.declare_reduction' Pipeline 138// PASSES-NEXT: AbstractResultOpt 139// PASSES-NEXT: 'omp.private' Pipeline 140// PASSES-NEXT: AbstractResultOpt 141 142// PASSES-NEXT: CodeGenRewrite 143// PASSES-NEXT: (S) 0 num-dce'd - Number of operations eliminated 144// PASSES-NEXT: TargetRewrite 145// PASSES-NEXT: CompilerGeneratedNamesConversion 146// PASSES-NEXT: 'func.func' Pipeline 147// PASSES-NEXT: FunctionAttr 148// PASSES-NEXT: FIRToLLVMLowering 149// PASSES-NEXT: ReconcileUnrealizedCasts 150// PASSES-NEXT: LLVMIRLoweringPass 151