231 lines · plain
1; RUN: opt < %s -passes='print<func-properties>' -disable-output 2>&1 | FileCheck %s2; RUN: opt < %s -passes='print<func-properties>' -disable-output 2>&1 -enable-detailed-function-properties | FileCheck %s --check-prefix=DETAILED-PROPERTIES3 4define i32 @main() {5; CHECK-DAG: Printing analysis results of CFA for function 'main':6; DETAILED-PROPERTIES-DAG: Printing analysis results of CFA for function 'main':7 8entry:9 %retval = alloca i32, align 410 %mat1 = alloca [2 x [2 x i32]], align 1611 %mat2 = alloca [2 x [2 x i32]], align 1612 %res = alloca [2 x [2 x i32]], align 1613 %i = alloca i32, align 414 %j = alloca i32, align 415 store i32 0, ptr %retval, align 416 %arraydecay = getelementptr inbounds [2 x [2 x i32]], ptr %mat1, i64 0, i64 017 %arraydecay1 = getelementptr inbounds [2 x [2 x i32]], ptr %mat2, i64 0, i64 018 %arraydecay2 = getelementptr inbounds [2 x [2 x i32]], ptr %res, i64 0, i64 019 call void @multiply(ptr %arraydecay, ptr %arraydecay1, ptr %arraydecay2)20 ret i32 021}22; CHECK-DAG: BasicBlockCount: 123; CHECK-DAG: BlocksReachedFromConditionalInstruction: 024; CHECK-DAG: Uses: 125; CHECK-DAG: DirectCallsToDefinedFunctions: 126; CHECK-DAG: LoadInstCount: 027; CHECK-DAG: StoreInstCount: 128; CHECK-DAG: MaxLoopDepth: 029; CHECK-DAG: TopLevelLoopCount: 030 31; DETAILED-PROPERTIES-DAG: BasicBlockCount: 132; DETAILED-PROPERTIES-DAG: BlocksReachedFromConditionalInstruction: 033; DETAILED-PROPERTIES-DAG: Uses: 134; DETAILED-PROPERTIES-DAG: DirectCallsToDefinedFunctions: 135; DETAILED-PROPERTIES-DAG: LoadInstCount: 036; DETAILED-PROPERTIES-DAG: StoreInstCount: 137; DETAILED-PROPERTIES-DAG: MaxLoopDepth: 038; DETAILED-PROPERTIES-DAG: TopLevelLoopCount: 039; DETAILED-PROPERTIES-DAG: BasicBlocksWithSingleSuccessor: 040; DETAILED-PROPERTIES-DAG: BasicBlocksWithTwoSuccessors: 041; DETAILED-PROPERTIES-DAG: BasicBlocksWithMoreThanTwoSuccessors: 042; DETAILED-PROPERTIES-DAG: BasicBlocksWithSinglePredecessor: 043; DETAILED-PROPERTIES-DAG: BasicBlocksWithTwoPredecessors: 044; DETAILED-PROPERTIES-DAG: BasicBlocksWithMoreThanTwoPredecessors: 045; DETAILED-PROPERTIES-DAG: BigBasicBlocks: 046; DETAILED-PROPERTIES-DAG: MediumBasicBlocks: 047; DETAILED-PROPERTIES-DAG: SmallBasicBlocks: 148; DETAILED-PROPERTIES-DAG: CastInstructionCount: 049; DETAILED-PROPERTIES-DAG: FloatingPointInstructionCount: 050; DETAILED-PROPERTIES-DAG: IntegerInstructionCount: 051; DETAILED-PROPERTIES-DAG: ConstantIntOperandCount: 1452; DETAILED-PROPERTIES-DAG: ConstantFPOperandCount: 053; DETAILED-PROPERTIES-DAG: ConstantOperandCount: 054; DETAILED-PROPERTIES-DAG: InstructionOperandCount: 755; DETAILED-PROPERTIES-DAG: BasicBlockOperandCount: 056; DETAILED-PROPERTIES-DAG: GlobalValueOperandCount: 157; DETAILED-PROPERTIES-DAG: InlineAsmOperandCount: 058; DETAILED-PROPERTIES-DAG: ArgumentOperandCount: 059; DETAILED-PROPERTIES-DAG: UnknownOperandCount: 060; DETAILED-PROPERTIES-DAG: CriticalEdgeCount: 061; DETAILED-PROPERTIES-DAG: ControlFlowEdgeCount: 062; DETAILED-PROPERTIES-DAG: UnconditionalBranchCount: 063; DETAILED-PROPERTIES-DAG: DirectCallCount: 164; DETAILED-PROPERTIES-DAG: IndirectCallCount: 065; DETAILED-PROPERTIES-DAG: CallReturnsIntegerCount: 066; DETAILED-PROPERTIES-DAG: CallReturnsFloatCount: 067; DETAILED-PROPERTIES-DAG: CallReturnsPointerCount: 068; DETAILED-PROPERTIES-DAG: CallReturnsVectorIntCount: 069; DETAILED-PROPERTIES-DAG: CallReturnsVectorFloatCount: 070; DETAILED-PROPERTIES-DAG: CallReturnsVectorPointerCount: 071; DETAILED-PROPERTIES-DAG: CallWithManyArgumentsCount: 072; DETAILED-PROPERTIES-DAG: CallWithPointerArgumentCount: 173 74define void @multiply(ptr %mat1, ptr %mat2, ptr %res) {75; CHECK-DAG: Printing analysis results of CFA for function 'multiply':76; DETAILED-PROPERTIES-DAG: Printing analysis results of CFA for function 'multiply':77entry:78 %mat1.addr = alloca ptr, align 879 %mat2.addr = alloca ptr, align 880 %res.addr = alloca ptr, align 881 %i = alloca i32, align 482 %j = alloca i32, align 483 %k = alloca i32, align 484 store ptr %mat1, ptr %mat1.addr, align 885 store ptr %mat2, ptr %mat2.addr, align 886 store ptr %res, ptr %res.addr, align 887 store i32 0, ptr %i, align 488 br label %for.cond89 90for.cond: ; preds = %for.inc24, %entry91 %0 = load i32, ptr %i, align 492 %cmp = icmp slt i32 %0, 293 br i1 %cmp, label %for.body, label %for.end2694 95for.body: ; preds = %for.cond96 store i32 0, ptr %j, align 497 br label %for.cond198 99for.cond1: ; preds = %for.inc21, %for.body100 %1 = load i32, ptr %j, align 4101 %cmp2 = icmp slt i32 %1, 2102 br i1 %cmp2, label %for.body3, label %for.end23103 104for.body3: ; preds = %for.cond1105 %2 = load ptr, ptr %res.addr, align 8106 %3 = load i32, ptr %i, align 4107 %idxprom = sext i32 %3 to i64108 %arrayidx = getelementptr inbounds [2 x i32], ptr %2, i64 %idxprom109 %4 = load i32, ptr %j, align 4110 %idxprom4 = sext i32 %4 to i64111 %arrayidx5 = getelementptr inbounds [2 x i32], ptr %arrayidx, i64 0, i64 %idxprom4112 store i32 0, ptr %arrayidx5, align 4113 store i32 0, ptr %k, align 4114 br label %for.cond6115 116for.cond6: ; preds = %for.inc, %for.body3117 %5 = load i32, ptr %k, align 4118 %cmp7 = icmp slt i32 %5, 2119 br i1 %cmp7, label %for.body8, label %for.end120 121for.body8: ; preds = %for.cond6122 %6 = load ptr, ptr %mat1.addr, align 8123 %7 = load i32, ptr %i, align 4124 %idxprom9 = sext i32 %7 to i64125 %arrayidx10 = getelementptr inbounds [2 x i32], ptr %6, i64 %idxprom9126 %8 = load i32, ptr %k, align 4127 %idxprom11 = sext i32 %8 to i64128 %arrayidx12 = getelementptr inbounds [2 x i32], ptr %arrayidx10, i64 0, i64 %idxprom11129 %9 = load i32, ptr %arrayidx12, align 4130 %10 = load ptr, ptr %mat2.addr, align 8131 %11 = load i32, ptr %k, align 4132 %idxprom13 = sext i32 %11 to i64133 %arrayidx14 = getelementptr inbounds [2 x i32], ptr %10, i64 %idxprom13134 %12 = load i32, ptr %j, align 4135 %idxprom15 = sext i32 %12 to i64136 %arrayidx16 = getelementptr inbounds [2 x i32], ptr %arrayidx14, i64 0, i64 %idxprom15137 %13 = load i32, ptr %arrayidx16, align 4138 %mul = mul nsw i32 %9, %13139 %14 = load ptr, ptr %res.addr, align 8140 %15 = load i32, ptr %i, align 4141 %idxprom17 = sext i32 %15 to i64142 %arrayidx18 = getelementptr inbounds [2 x i32], ptr %14, i64 %idxprom17143 %16 = load i32, ptr %j, align 4144 %idxprom19 = sext i32 %16 to i64145 %arrayidx20 = getelementptr inbounds [2 x i32], ptr %arrayidx18, i64 0, i64 %idxprom19146 %17 = load i32, ptr %arrayidx20, align 4147 %add = add nsw i32 %17, %mul148 store i32 %add, ptr %arrayidx20, align 4149 br label %for.inc150 151for.inc: ; preds = %for.body8152 %18 = load i32, ptr %k, align 4153 %inc = add nsw i32 %18, 1154 store i32 %inc, ptr %k, align 4155 br label %for.cond6156 157for.end: ; preds = %for.cond6158 br label %for.inc21159 160for.inc21: ; preds = %for.end161 %19 = load i32, ptr %j, align 4162 %inc22 = add nsw i32 %19, 1163 store i32 %inc22, ptr %j, align 4164 br label %for.cond1165 166for.end23: ; preds = %for.cond1167 br label %for.inc24168 169for.inc24: ; preds = %for.end23170 %20 = load i32, ptr %i, align 4171 %inc25 = add nsw i32 %20, 1172 store i32 %inc25, ptr %i, align 4173 br label %for.cond174 175for.end26: ; preds = %for.cond176 ret void177}178 179; CHECK-DAG: BasicBlockCount: 13180; CHECK-DAG: BlocksReachedFromConditionalInstruction: 6181; CHECK-DAG: Uses: 2182; CHECK-DAG: DirectCallsToDefinedFunctions: 0183; CHECK-DAG: LoadInstCount: 21184; CHECK-DAG: StoreInstCount: 11185; CHECK-DAG: MaxLoopDepth: 3186; CHECK-DAG: TopLevelLoopCount: 1187 188; DETAILED-PROPERTIES-DAG: BasicBlockCount: 13189; DETAILED-PROPERTIES-DAG: BlocksReachedFromConditionalInstruction: 6190; DETAILED-PROPERTIES-DAG: Uses: 2191; DETAILED-PROPERTIES-DAG: DirectCallsToDefinedFunctions: 0192; DETAILED-PROPERTIES-DAG: LoadInstCount: 21193; DETAILED-PROPERTIES-DAG: StoreInstCount: 11194; DETAILED-PROPERTIES-DAG: MaxLoopDepth: 3195; DETAILED-PROPERTIES-DAG: TopLevelLoopCount: 1196; DETAILED-PROPERTIES-DAG: BasicBlocksWithSingleSuccessor: 9197; DETAILED-PROPERTIES-DAG: BasicBlocksWithTwoSuccessors: 3198; DETAILED-PROPERTIES-DAG: BasicBlocksWithMoreThanTwoSuccessors: 0199; DETAILED-PROPERTIES-DAG: BasicBlocksWithSinglePredecessor: 9200; DETAILED-PROPERTIES-DAG: BasicBlocksWithTwoPredecessors: 3201; DETAILED-PROPERTIES-DAG: BasicBlocksWithMoreThanTwoPredecessors: 0202; DETAILED-PROPERTIES-DAG: BigBasicBlocks: 0203; DETAILED-PROPERTIES-DAG: MediumBasicBlocks: 11204; DETAILED-PROPERTIES-DAG: SmallBasicBlocks: 2205; DETAILED-PROPERTIES-DAG: CastInstructionCount: 8206; DETAILED-PROPERTIES-DAG: FloatingPointInstructionCount: 0207; DETAILED-PROPERTIES-DAG: IntegerInstructionCount: 33208; DETAILED-PROPERTIES-DAG: ConstantIntOperandCount: 20209; DETAILED-PROPERTIES-DAG: ConstantFPOperandCount: 0210; DETAILED-PROPERTIES-DAG: ConstantOperandCount: 0211; DETAILED-PROPERTIES-DAG: InstructionOperandCount: 73212; DETAILED-PROPERTIES-DAG: BasicBlockOperandCount: 15213; DETAILED-PROPERTIES-DAG: GlobalValueOperandCount: 0214; DETAILED-PROPERTIES-DAG: InlineAsmOperandCount: 0215; DETAILED-PROPERTIES-DAG: ArgumentOperandCount: 3216; DETAILED-PROPERTIES-DAG: UnknownOperandCount: 0217; DETAILED-PROPERTIES-DAG: DirectCallCount: 0218; DETAILED-PROPERTIES-DAG: IndirectCallCount: 0219; DETAILED-PROPERTIES-DAG: CriticalEdgeCount: 0220; DETAILED-PROPERTIES-DAG: ControlFlowEdgeCount: 15221; DETAILED-PROPERTIES-DAG: UnconditionalBranchCount: 9222; DETAILED-PROPERTIES-DAG: CallReturnsIntegerCount: 0223; DETAILED-PROPERTIES-DAG: CallReturnsFloatCount: 0224; DETAILED-PROPERTIES-DAG: CallReturnsPointerCount: 0225; DETAILED-PROPERTIES-DAG: CallReturnsVectorIntCount: 0226; DETAILED-PROPERTIES-DAG: CallReturnsVectorFloatCount: 0227; DETAILED-PROPERTIES-DAG: CallReturnsVectorPointerCount: 0228; DETAILED-PROPERTIES-DAG: CallWithManyArgumentsCount: 0229; DETAILED-PROPERTIES-DAG: CallWithPointerArgumentCount: 0230 231