forked from OSchip/llvm-project
[gcov] Assign names to some types and loaded values used in @__llvm_internal*
This makes the generated IR much more readable.
This commit is contained in:
parent
8cf1ac97ce
commit
f086e85eea
|
@ -37,10 +37,10 @@ int test2(int b) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// CHECK: @__llvm_internal_gcov_emit_function_args.0 = internal unnamed_addr constant [2 x %0]
|
// CHECK: @__llvm_internal_gcov_emit_function_args.0 = internal unnamed_addr constant [2 x %emit_function_args_ty]
|
||||||
// CHECK-SAME: [%0 { i32 0, i32 {{[-0-9]+}}, i32 {{[-0-9]+}} }, %0 { i32 1, i32 {{[-0-9]+}}, i32 {{[-0-9]+}} }]
|
// CHECK-SAME: [%emit_function_args_ty { i32 0, i32 {{[-0-9]+}}, i32 {{[-0-9]+}} }, %emit_function_args_ty { i32 1, i32 {{[-0-9]+}}, i32 {{[-0-9]+}} }]
|
||||||
|
|
||||||
// CHECK: @__llvm_internal_gcov_emit_file_info = internal unnamed_addr constant [1 x %2]
|
// CHECK: @__llvm_internal_gcov_emit_file_info = internal unnamed_addr constant [1 x %file_info]
|
||||||
/// 0x3330342a '3' '0' '4' '*'
|
/// 0x3330342a '3' '0' '4' '*'
|
||||||
// 304-SAME: i32 858797098
|
// 304-SAME: i32 858797098
|
||||||
/// 0x3430372a '4' '0' '7' '*'
|
/// 0x3430372a '4' '0' '7' '*'
|
||||||
|
|
|
@ -1029,15 +1029,19 @@ Function *GCOVProfiler::insertCounterWriteout(
|
||||||
// Collect the relevant data into a large constant data structure that we can
|
// Collect the relevant data into a large constant data structure that we can
|
||||||
// walk to write out everything.
|
// walk to write out everything.
|
||||||
StructType *StartFileCallArgsTy = StructType::create(
|
StructType *StartFileCallArgsTy = StructType::create(
|
||||||
{Builder.getInt8PtrTy(), Builder.getInt32Ty(), Builder.getInt32Ty()});
|
{Builder.getInt8PtrTy(), Builder.getInt32Ty(), Builder.getInt32Ty()},
|
||||||
|
"start_file_args_ty");
|
||||||
StructType *EmitFunctionCallArgsTy = StructType::create(
|
StructType *EmitFunctionCallArgsTy = StructType::create(
|
||||||
{Builder.getInt32Ty(), Builder.getInt32Ty(), Builder.getInt32Ty()});
|
{Builder.getInt32Ty(), Builder.getInt32Ty(), Builder.getInt32Ty()},
|
||||||
|
"emit_function_args_ty");
|
||||||
StructType *EmitArcsCallArgsTy = StructType::create(
|
StructType *EmitArcsCallArgsTy = StructType::create(
|
||||||
{Builder.getInt32Ty(), Builder.getInt64Ty()->getPointerTo()});
|
{Builder.getInt32Ty(), Builder.getInt64Ty()->getPointerTo()},
|
||||||
|
"emit_arcs_args_ty");
|
||||||
StructType *FileInfoTy =
|
StructType *FileInfoTy =
|
||||||
StructType::create({StartFileCallArgsTy, Builder.getInt32Ty(),
|
StructType::create({StartFileCallArgsTy, Builder.getInt32Ty(),
|
||||||
EmitFunctionCallArgsTy->getPointerTo(),
|
EmitFunctionCallArgsTy->getPointerTo(),
|
||||||
EmitArcsCallArgsTy->getPointerTo()});
|
EmitArcsCallArgsTy->getPointerTo()},
|
||||||
|
"file_info");
|
||||||
|
|
||||||
Constant *Zero32 = Builder.getInt32(0);
|
Constant *Zero32 = Builder.getInt32(0);
|
||||||
// Build an explicit array of two zeros for use in ConstantExpr GEP building.
|
// Build an explicit array of two zeros for use in ConstantExpr GEP building.
|
||||||
|
@ -1147,41 +1151,46 @@ Function *GCOVProfiler::insertCounterWriteout(
|
||||||
|
|
||||||
// The index into the files structure is our loop induction variable.
|
// The index into the files structure is our loop induction variable.
|
||||||
Builder.SetInsertPoint(FileLoopHeader);
|
Builder.SetInsertPoint(FileLoopHeader);
|
||||||
PHINode *IV =
|
PHINode *IV = Builder.CreatePHI(Builder.getInt32Ty(), /*NumReservedValues*/ 2,
|
||||||
Builder.CreatePHI(Builder.getInt32Ty(), /*NumReservedValues*/ 2);
|
"file_idx");
|
||||||
IV->addIncoming(Builder.getInt32(0), BB);
|
IV->addIncoming(Builder.getInt32(0), BB);
|
||||||
auto *FileInfoPtr = Builder.CreateInBoundsGEP(
|
auto *FileInfoPtr = Builder.CreateInBoundsGEP(
|
||||||
FileInfoArrayTy, FileInfoArrayGV, {Builder.getInt32(0), IV});
|
FileInfoArrayTy, FileInfoArrayGV, {Builder.getInt32(0), IV});
|
||||||
auto *StartFileCallArgsPtr =
|
auto *StartFileCallArgsPtr =
|
||||||
Builder.CreateStructGEP(FileInfoTy, FileInfoPtr, 0);
|
Builder.CreateStructGEP(FileInfoTy, FileInfoPtr, 0, "start_file_args");
|
||||||
auto *StartFileCall = Builder.CreateCall(
|
auto *StartFileCall = Builder.CreateCall(
|
||||||
StartFile,
|
StartFile,
|
||||||
{Builder.CreateLoad(StartFileCallArgsTy->getElementType(0),
|
{Builder.CreateLoad(StartFileCallArgsTy->getElementType(0),
|
||||||
Builder.CreateStructGEP(StartFileCallArgsTy,
|
Builder.CreateStructGEP(StartFileCallArgsTy,
|
||||||
StartFileCallArgsPtr, 0)),
|
StartFileCallArgsPtr, 0),
|
||||||
|
"filename"),
|
||||||
Builder.CreateLoad(StartFileCallArgsTy->getElementType(1),
|
Builder.CreateLoad(StartFileCallArgsTy->getElementType(1),
|
||||||
Builder.CreateStructGEP(StartFileCallArgsTy,
|
Builder.CreateStructGEP(StartFileCallArgsTy,
|
||||||
StartFileCallArgsPtr, 1)),
|
StartFileCallArgsPtr, 1),
|
||||||
|
"version"),
|
||||||
Builder.CreateLoad(StartFileCallArgsTy->getElementType(2),
|
Builder.CreateLoad(StartFileCallArgsTy->getElementType(2),
|
||||||
Builder.CreateStructGEP(StartFileCallArgsTy,
|
Builder.CreateStructGEP(StartFileCallArgsTy,
|
||||||
StartFileCallArgsPtr, 2))});
|
StartFileCallArgsPtr, 2),
|
||||||
|
"stamp")});
|
||||||
if (auto AK = TLI->getExtAttrForI32Param(false))
|
if (auto AK = TLI->getExtAttrForI32Param(false))
|
||||||
StartFileCall->addParamAttr(2, AK);
|
StartFileCall->addParamAttr(2, AK);
|
||||||
auto *NumCounters =
|
auto *NumCounters = Builder.CreateLoad(
|
||||||
Builder.CreateLoad(FileInfoTy->getElementType(1),
|
FileInfoTy->getElementType(1),
|
||||||
Builder.CreateStructGEP(FileInfoTy, FileInfoPtr, 1));
|
Builder.CreateStructGEP(FileInfoTy, FileInfoPtr, 1), "num_ctrs");
|
||||||
auto *EmitFunctionCallArgsArray =
|
auto *EmitFunctionCallArgsArray =
|
||||||
Builder.CreateLoad(FileInfoTy->getElementType(2),
|
Builder.CreateLoad(FileInfoTy->getElementType(2),
|
||||||
Builder.CreateStructGEP(FileInfoTy, FileInfoPtr, 2));
|
Builder.CreateStructGEP(FileInfoTy, FileInfoPtr, 2),
|
||||||
auto *EmitArcsCallArgsArray =
|
"emit_function_args");
|
||||||
Builder.CreateLoad(FileInfoTy->getElementType(3),
|
auto *EmitArcsCallArgsArray = Builder.CreateLoad(
|
||||||
Builder.CreateStructGEP(FileInfoTy, FileInfoPtr, 3));
|
FileInfoTy->getElementType(3),
|
||||||
|
Builder.CreateStructGEP(FileInfoTy, FileInfoPtr, 3), "emit_arcs_args");
|
||||||
auto *EnterCounterLoopCond =
|
auto *EnterCounterLoopCond =
|
||||||
Builder.CreateICmpSLT(Builder.getInt32(0), NumCounters);
|
Builder.CreateICmpSLT(Builder.getInt32(0), NumCounters);
|
||||||
Builder.CreateCondBr(EnterCounterLoopCond, CounterLoopHeader, FileLoopLatch);
|
Builder.CreateCondBr(EnterCounterLoopCond, CounterLoopHeader, FileLoopLatch);
|
||||||
|
|
||||||
Builder.SetInsertPoint(CounterLoopHeader);
|
Builder.SetInsertPoint(CounterLoopHeader);
|
||||||
auto *JV = Builder.CreatePHI(Builder.getInt32Ty(), /*NumReservedValues*/ 2);
|
auto *JV = Builder.CreatePHI(Builder.getInt32Ty(), /*NumReservedValues*/ 2,
|
||||||
|
"ctr_idx");
|
||||||
JV->addIncoming(Builder.getInt32(0), FileLoopHeader);
|
JV->addIncoming(Builder.getInt32(0), FileLoopHeader);
|
||||||
auto *EmitFunctionCallArgsPtr = Builder.CreateInBoundsGEP(
|
auto *EmitFunctionCallArgsPtr = Builder.CreateInBoundsGEP(
|
||||||
EmitFunctionCallArgsTy, EmitFunctionCallArgsArray, JV);
|
EmitFunctionCallArgsTy, EmitFunctionCallArgsArray, JV);
|
||||||
|
@ -1189,14 +1198,16 @@ Function *GCOVProfiler::insertCounterWriteout(
|
||||||
EmitFunction,
|
EmitFunction,
|
||||||
{Builder.CreateLoad(EmitFunctionCallArgsTy->getElementType(0),
|
{Builder.CreateLoad(EmitFunctionCallArgsTy->getElementType(0),
|
||||||
Builder.CreateStructGEP(EmitFunctionCallArgsTy,
|
Builder.CreateStructGEP(EmitFunctionCallArgsTy,
|
||||||
EmitFunctionCallArgsPtr, 0)),
|
EmitFunctionCallArgsPtr, 0),
|
||||||
|
"ident"),
|
||||||
Builder.CreateLoad(EmitFunctionCallArgsTy->getElementType(1),
|
Builder.CreateLoad(EmitFunctionCallArgsTy->getElementType(1),
|
||||||
Builder.CreateStructGEP(EmitFunctionCallArgsTy,
|
Builder.CreateStructGEP(EmitFunctionCallArgsTy,
|
||||||
EmitFunctionCallArgsPtr, 1)),
|
EmitFunctionCallArgsPtr, 1),
|
||||||
|
"func_checkssum"),
|
||||||
Builder.CreateLoad(EmitFunctionCallArgsTy->getElementType(2),
|
Builder.CreateLoad(EmitFunctionCallArgsTy->getElementType(2),
|
||||||
Builder.CreateStructGEP(EmitFunctionCallArgsTy,
|
Builder.CreateStructGEP(EmitFunctionCallArgsTy,
|
||||||
EmitFunctionCallArgsPtr,
|
EmitFunctionCallArgsPtr, 2),
|
||||||
2))});
|
"cfg_checksum")});
|
||||||
if (auto AK = TLI->getExtAttrForI32Param(false)) {
|
if (auto AK = TLI->getExtAttrForI32Param(false)) {
|
||||||
EmitFunctionCall->addParamAttr(0, AK);
|
EmitFunctionCall->addParamAttr(0, AK);
|
||||||
EmitFunctionCall->addParamAttr(1, AK);
|
EmitFunctionCall->addParamAttr(1, AK);
|
||||||
|
@ -1208,10 +1219,12 @@ Function *GCOVProfiler::insertCounterWriteout(
|
||||||
EmitArcs,
|
EmitArcs,
|
||||||
{Builder.CreateLoad(
|
{Builder.CreateLoad(
|
||||||
EmitArcsCallArgsTy->getElementType(0),
|
EmitArcsCallArgsTy->getElementType(0),
|
||||||
Builder.CreateStructGEP(EmitArcsCallArgsTy, EmitArcsCallArgsPtr, 0)),
|
Builder.CreateStructGEP(EmitArcsCallArgsTy, EmitArcsCallArgsPtr, 0),
|
||||||
Builder.CreateLoad(EmitArcsCallArgsTy->getElementType(1),
|
"num_counters"),
|
||||||
Builder.CreateStructGEP(EmitArcsCallArgsTy,
|
Builder.CreateLoad(
|
||||||
EmitArcsCallArgsPtr, 1))});
|
EmitArcsCallArgsTy->getElementType(1),
|
||||||
|
Builder.CreateStructGEP(EmitArcsCallArgsTy, EmitArcsCallArgsPtr, 1),
|
||||||
|
"counters")});
|
||||||
if (auto AK = TLI->getExtAttrForI32Param(false))
|
if (auto AK = TLI->getExtAttrForI32Param(false))
|
||||||
EmitArcsCall->addParamAttr(0, AK);
|
EmitArcsCall->addParamAttr(0, AK);
|
||||||
auto *NextJV = Builder.CreateAdd(JV, Builder.getInt32(1));
|
auto *NextJV = Builder.CreateAdd(JV, Builder.getInt32(1));
|
||||||
|
@ -1222,7 +1235,7 @@ Function *GCOVProfiler::insertCounterWriteout(
|
||||||
Builder.SetInsertPoint(FileLoopLatch);
|
Builder.SetInsertPoint(FileLoopLatch);
|
||||||
Builder.CreateCall(SummaryInfo, {});
|
Builder.CreateCall(SummaryInfo, {});
|
||||||
Builder.CreateCall(EndFile, {});
|
Builder.CreateCall(EndFile, {});
|
||||||
auto *NextIV = Builder.CreateAdd(IV, Builder.getInt32(1));
|
auto *NextIV = Builder.CreateAdd(IV, Builder.getInt32(1), "next_file_idx");
|
||||||
auto *FileLoopCond =
|
auto *FileLoopCond =
|
||||||
Builder.CreateICmpSLT(NextIV, Builder.getInt32(FileInfos.size()));
|
Builder.CreateICmpSLT(NextIV, Builder.getInt32(FileInfos.size()));
|
||||||
Builder.CreateCondBr(FileLoopCond, FileLoopHeader, ExitBB);
|
Builder.CreateCondBr(FileLoopCond, FileLoopHeader, ExitBB);
|
||||||
|
|
Loading…
Reference in New Issue