compnerd added inline comments. ================ Comment at: lib/Transforms/Instrumentation/GCOVProfiling.cpp:447 @@ -432,3 +446,3 @@ return Filename.str(); } } ---------------- A quick pass over this yielded something like:
if (N->getNumOperands() != 2 && N->getNumOperands() != 3) continue; bool HasProfileDir = N->getNumOperands() == 3; unsigned Offset = HasProfileDir ? 1 : 0; auto *NotesFile = dyn_cast<MDString>(N->getOperand(Offset + 0)); auto *CovFile = dyn_cast<MDString>(N->getOperand(Offset + 0)); auto *CompileUnit = dyn_cast<MDNode>(N->getOperand(Offset + 1)); if ((!HasProfileDir || !NotesFile) || !CovFile || !CompileUnit) continue; if (CompileUnit == CU) { bool GCNO = OutputType == GCovFileType::GCNO; if (HasProfileDir) { return GCNO ? NotesFile->getString() : CovFile->getString(); } else { SmallString<128> FileName = CovFile->getString(); sys::path::replace_extension(FileName, GCNO ? "gcno" : "gcda"); return FileName.str(); } } It does reduce a bit of the duplication, and still accounts for the string duplication that you were pointing out. I think it makes it slightly easier to read due to the variable de-duplication (at the slight cost of an extra pointer on the stack and an extra lookup). https://reviews.llvm.org/D23734 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits