mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[gcov] Default coverage version to '407*' and delete CC1 option -coverage-cfg-checksum
Defaulting to -Xclang -coverage-version='407*' makes .gcno/.gcda compatible with gcov [4.7,8) In addition, delete clang::CodeGenOptionsBase::CoverageExtraChecksum and GCOVOptions::UseCfgChecksum. We can infer the information from the version. With this change, .gcda files produced by `clang --coverage a.o` linked executable can be read by gcov 4.7~7. We don't need other -Xclang -coverage* options. There may be a mismatching version warning, though. (Note, GCC r173147 "split checksum into cfg checksum and line checksum" made gcov 4.7 incompatible with previous versions.)
This commit is contained in:
parent
7244405635
commit
9c7a9b76b2
@ -63,10 +63,6 @@ struct GCOVOptions {
|
||||
// gcc's gcov-io.h
|
||||
char Version[4];
|
||||
|
||||
// Emit a "cfg checksum" that follows the "line number checksum" of a
|
||||
// function. This affects both .gcno and .gcda files.
|
||||
bool UseCfgChecksum;
|
||||
|
||||
// Add the 'noredzone' attribute to added runtime library calls.
|
||||
bool NoRedZone;
|
||||
|
||||
|
@ -49,9 +49,9 @@ using namespace llvm;
|
||||
|
||||
#define DEBUG_TYPE "insert-gcov-profiling"
|
||||
|
||||
static cl::opt<std::string>
|
||||
DefaultGCOVVersion("default-gcov-version", cl::init("402*"), cl::Hidden,
|
||||
cl::ValueRequired);
|
||||
static cl::opt<std::string> DefaultGCOVVersion("default-gcov-version",
|
||||
cl::init("407*"), cl::Hidden,
|
||||
cl::ValueRequired);
|
||||
static cl::opt<bool> DefaultExitBlockBeforeBody("gcov-exit-block-before-body",
|
||||
cl::init(false), cl::Hidden);
|
||||
|
||||
@ -59,7 +59,6 @@ GCOVOptions GCOVOptions::getDefault() {
|
||||
GCOVOptions Options;
|
||||
Options.EmitNotes = true;
|
||||
Options.EmitData = true;
|
||||
Options.UseCfgChecksum = false;
|
||||
Options.NoRedZone = false;
|
||||
Options.ExitBlockBeforeBody = DefaultExitBlockBeforeBody;
|
||||
|
||||
@ -747,9 +746,10 @@ void GCOVProfiler::emitProfileNotes() {
|
||||
++It;
|
||||
EntryBlock.splitBasicBlock(It);
|
||||
|
||||
Funcs.push_back(std::make_unique<GCOVFunction>(SP, &F, &out, FunctionIdent++,
|
||||
Options.UseCfgChecksum,
|
||||
Options.ExitBlockBeforeBody));
|
||||
bool UseCfgChecksum = strncmp(Options.Version, "407", 3) >= 0;
|
||||
Funcs.push_back(std::make_unique<GCOVFunction>(
|
||||
SP, &F, &out, FunctionIdent++, UseCfgChecksum,
|
||||
Options.ExitBlockBeforeBody));
|
||||
GCOVFunction &Func = *Funcs.back();
|
||||
|
||||
// Add the function line number to the lines of the entry block
|
||||
@ -945,16 +945,14 @@ FunctionCallee GCOVProfiler::getEmitFunctionFunc(const TargetLibraryInfo *TLI) {
|
||||
Type *Args[] = {
|
||||
Type::getInt32Ty(*Ctx), // uint32_t ident
|
||||
Type::getInt32Ty(*Ctx), // uint32_t func_checksum
|
||||
Type::getInt8Ty(*Ctx), // uint8_t use_extra_checksum
|
||||
Type::getInt32Ty(*Ctx), // uint32_t cfg_checksum
|
||||
};
|
||||
FunctionType *FTy = FunctionType::get(Type::getVoidTy(*Ctx), Args, false);
|
||||
AttributeList AL;
|
||||
if (auto AK = TLI->getExtAttrForI32Param(false)) {
|
||||
AL = AL.addParamAttribute(*Ctx, 0, AK);
|
||||
AL = AL.addParamAttribute(*Ctx, 1, AK);
|
||||
AL = AL.addParamAttribute(*Ctx, 2, AK);
|
||||
AL = AL.addParamAttribute(*Ctx, 3, AK);
|
||||
AL = AL.addParamAttribute(*Ctx, 4, AK);
|
||||
}
|
||||
return M->getOrInsertFunction("llvm_gcda_emit_function", FTy);
|
||||
}
|
||||
@ -1014,9 +1012,8 @@ Function *GCOVProfiler::insertCounterWriteout(
|
||||
// walk to write out everything.
|
||||
StructType *StartFileCallArgsTy = StructType::create(
|
||||
{Builder.getInt8PtrTy(), Builder.getInt8PtrTy(), Builder.getInt32Ty()});
|
||||
StructType *EmitFunctionCallArgsTy =
|
||||
StructType::create({Builder.getInt32Ty(), Builder.getInt32Ty(),
|
||||
Builder.getInt8Ty(), Builder.getInt32Ty()});
|
||||
StructType *EmitFunctionCallArgsTy = StructType::create(
|
||||
{Builder.getInt32Ty(), Builder.getInt32Ty(), Builder.getInt32Ty()});
|
||||
StructType *EmitArcsCallArgsTy = StructType::create(
|
||||
{Builder.getInt32Ty(), Builder.getInt64Ty()->getPointerTo()});
|
||||
StructType *FileInfoTy =
|
||||
@ -1051,7 +1048,6 @@ Function *GCOVProfiler::insertCounterWriteout(
|
||||
EmitFunctionCallArgsTy,
|
||||
{Builder.getInt32(j),
|
||||
Builder.getInt32(FuncChecksum),
|
||||
Builder.getInt8(Options.UseCfgChecksum),
|
||||
Builder.getInt32(CfgChecksum)}));
|
||||
|
||||
GlobalVariable *GV = CountersBySP[j].first;
|
||||
@ -1179,17 +1175,13 @@ Function *GCOVProfiler::insertCounterWriteout(
|
||||
Builder.CreateStructGEP(EmitFunctionCallArgsTy,
|
||||
EmitFunctionCallArgsPtr, 1)),
|
||||
Builder.CreateLoad(EmitFunctionCallArgsTy->getElementType(2),
|
||||
Builder.CreateStructGEP(EmitFunctionCallArgsTy,
|
||||
EmitFunctionCallArgsPtr, 2)),
|
||||
Builder.CreateLoad(EmitFunctionCallArgsTy->getElementType(3),
|
||||
Builder.CreateStructGEP(EmitFunctionCallArgsTy,
|
||||
EmitFunctionCallArgsPtr,
|
||||
3))});
|
||||
2))});
|
||||
if (auto AK = TLI->getExtAttrForI32Param(false)) {
|
||||
EmitFunctionCall->addParamAttr(0, AK);
|
||||
EmitFunctionCall->addParamAttr(1, AK);
|
||||
EmitFunctionCall->addParamAttr(2, AK);
|
||||
EmitFunctionCall->addParamAttr(3, AK);
|
||||
}
|
||||
auto *EmitArcsCallArgsPtr =
|
||||
Builder.CreateInBoundsGEP(EmitArcsCallArgsTy, EmitArcsCallArgsArray, JV);
|
||||
|
@ -52,13 +52,10 @@ target triple = "x86_64-apple-macosx10.10.0"
|
||||
; GCDA-NEXT: %[[EMIT_FUN_ARG_1_PTR:.*]] = getelementptr inbounds {{.*}}, {{.*}}* %[[EMIT_FUN_ARGS]], i32 0, i32 1
|
||||
; GCDA-NEXT: %[[EMIT_FUN_ARG_1:.*]] = load i32, i32* %[[EMIT_FUN_ARG_1_PTR]]
|
||||
; GCDA-NEXT: %[[EMIT_FUN_ARG_2_PTR:.*]] = getelementptr inbounds {{.*}}, {{.*}}* %[[EMIT_FUN_ARGS]], i32 0, i32 2
|
||||
; GCDA-NEXT: %[[EMIT_FUN_ARG_2:.*]] = load i8, i8* %[[EMIT_FUN_ARG_2_PTR]]
|
||||
; GCDA-NEXT: %[[EMIT_FUN_ARG_3_PTR:.*]] = getelementptr inbounds {{.*}}, {{.*}}* %[[EMIT_FUN_ARGS]], i32 0, i32 3
|
||||
; GCDA-NEXT: %[[EMIT_FUN_ARG_3:.*]] = load i32, i32* %[[EMIT_FUN_ARG_3_PTR]]
|
||||
; GCDA-NEXT: %[[EMIT_FUN_ARG_2:.*]] = load i32, i32* %[[EMIT_FUN_ARG_2_PTR]]
|
||||
; GCDA-NEXT: call void @llvm_gcda_emit_function(i32 %[[EMIT_FUN_ARG_0]],
|
||||
; GCDA-SAME: i32 %[[EMIT_FUN_ARG_1]],
|
||||
; GCDA-SAME: i8 %[[EMIT_FUN_ARG_2]],
|
||||
; GCDA-SAME: i32 %[[EMIT_FUN_ARG_3]])
|
||||
; GCDA-SAME: i32 %[[EMIT_FUN_ARG_2]])
|
||||
; GCDA-NEXT: %[[EMIT_ARCS_ARGS:.*]] = getelementptr inbounds {{.*}}, {{.*}}* %[[EMIT_ARCS_ARGS_ARRAY]], i32 %[[JV]]
|
||||
; GCDA-NEXT: %[[EMIT_ARCS_ARG_0_PTR:.*]] = getelementptr inbounds {{.*}}, {{.*}}* %[[EMIT_ARCS_ARGS]], i32 0, i32 0
|
||||
; GCDA-NEXT: %[[EMIT_ARCS_ARG_0:.*]] = load i32, i32* %[[EMIT_ARCS_ARG_0_PTR]]
|
||||
|
@ -2,19 +2,19 @@
|
||||
; RUN: echo '!9 = !{!"%/t/version.ll", !0}' > %t/1
|
||||
; RUN: cat %s %t/1 > %t/2
|
||||
; RUN: opt -insert-gcov-profiling -disable-output < %t/2
|
||||
; RUN: head -c8 %t/version.gcno | grep '^oncg.204'
|
||||
; RUN: head -c8 %t/version.gcno | grep '^oncg.704'
|
||||
; RUN: rm %t/version.gcno
|
||||
; RUN: not --crash opt -insert-gcov-profiling -default-gcov-version=asdfasdf -disable-output < %t/2
|
||||
; RUN: opt -insert-gcov-profiling -default-gcov-version=407* -disable-output < %t/2
|
||||
; RUN: head -c8 %t/version.gcno | grep '^oncg.704'
|
||||
; RUN: opt -insert-gcov-profiling -default-gcov-version='402*' -disable-output < %t/2
|
||||
; RUN: head -c8 %t/version.gcno | grep '^oncg.204'
|
||||
; RUN: rm %t/version.gcno
|
||||
|
||||
; RUN: opt -passes=insert-gcov-profiling -disable-output < %t/2
|
||||
; RUN: head -c8 %t/version.gcno | grep '^oncg.204'
|
||||
; RUN: head -c8 %t/version.gcno | grep '^oncg.704'
|
||||
; RUN: rm %t/version.gcno
|
||||
; RUN: not --crash opt -passes=insert-gcov-profiling -default-gcov-version=asdfasdf -disable-output < %t/2
|
||||
; RUN: opt -passes=insert-gcov-profiling -default-gcov-version=407* -disable-output < %t/2
|
||||
; RUN: head -c8 %t/version.gcno | grep '^oncg.704'
|
||||
; RUN: opt -passes=insert-gcov-profiling -default-gcov-version='402*' -disable-output < %t/2
|
||||
; RUN: head -c8 %t/version.gcno | grep '^oncg.204'
|
||||
; RUN: rm %t/version.gcno
|
||||
|
||||
define void @test() !dbg !5 {
|
||||
|
Loading…
Reference in New Issue
Block a user