From 66779995bdd8b52605a185aaa8752d4a3339f514 Mon Sep 17 00:00:00 2001 From: baojingjing Date: Mon, 26 Jun 2023 10:35:27 +0800 Subject: [PATCH] [clang] add DFI struct field name metadata MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 描述: 新增field name metadat Issue: #I7FXF4:为DFI新增field name metadata 测试: Signed-off-by: baojingjing --- clang/include/clang/Pac/PacDfi.h | 1 - clang/lib/Pac/PacDfi.cpp | 5 +++++ clang/lib/Parse/ParseExpr.cpp | 5 +++-- .../Target/AArch64/AArch64PARTS/AArch64EarlyPartsCpiPass.cpp | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/clang/include/clang/Pac/PacDfi.h b/clang/include/clang/Pac/PacDfi.h index 0d028417cdcc..920cfffc87b8 100644 --- a/clang/include/clang/Pac/PacDfi.h +++ b/clang/include/clang/Pac/PacDfi.h @@ -23,6 +23,5 @@ using namespace clang; void PacDfiParseStruct(RecordDecl *TagDecl, ASTContext &Ctx, DiagnosticsEngine &Diags); void PacDfiEmitStructFieldsMetadata(llvm::Module &M, llvm::LLVMContext &VMContext, CodeGen::CodeGenModule *CGM); void PacDfiRecordDecl2StructName(const RecordDecl *RD, llvm::StructType *Entry); - #endif diff --git a/clang/lib/Pac/PacDfi.cpp b/clang/lib/Pac/PacDfi.cpp index 4ab2b19ea069..308d734193fb 100644 --- a/clang/lib/Pac/PacDfi.cpp +++ b/clang/lib/Pac/PacDfi.cpp @@ -91,19 +91,24 @@ void PacDfiCreateMetaData(std::map> &fieldI llvm::Module &M, llvm::LLVMContext &VMContext, CodeGen::CodeGenModule *CGM) { llvm::NamedMDNode *PacNMD = M.getOrInsertNamedMetadata(mdName); + llvm::NamedMDNode *PacNMDName = M.getOrInsertNamedMetadata(mdName.str() + "name"); for (auto item : fieldInfos) { if (RecordDecl2StructName.find(item.first) == RecordDecl2StructName.end()) { continue; } std::vector PacFields; + std::vector PacFieldsName; auto styName = RecordDecl2StructName.find(item.first)->second; PacFields.push_back(llvm::MDString::get(VMContext, styName)); + PacFieldsName.push_back(llvm::MDString::get(VMContext, styName)); for (auto *Field : item.second) { + PacFieldsName.push_back(llvm::MDString::get(VMContext, Field->getName())); unsigned idx = CodeGen::getLLVMFieldNumber(*CGM, item.first, Field); PacFields.push_back(llvm::ConstantAsMetadata::get(llvm::ConstantInt::get( llvm::Type::getInt32Ty(VMContext), idx))); } PacNMD->addOperand(llvm::MDNode::get(VMContext, PacFields)); + PacNMDName->addOperand(llvm::MDNode::get(VMContext, PacFieldsName)); } } diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 1c0e0c62a3c5..2b506786df77 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -2408,8 +2408,9 @@ ExprResult Parser::ParseSYCLUniqueStableNameExpression() { ExprResult Parser::ParseUnaryExprOrTypeTraitExpression() { assert(Tok.isOneOf(tok::kw_sizeof, tok::kw___alignof, tok::kw_alignof, tok::kw__Alignof, tok::kw_vec_step, - tok::kw___builtin_omp_required_simd_align) && - "Not a sizeof/alignof/vec_step expression!"); + tok::kw___builtin_omp_required_simd_align, + tok::kw___builtin_get_modifier_bytype) && // OHOS_LOCAL + "Not a sizeof/alignof/vec_step/get_modifier_bytype expression!"); Token OpTok = Tok; ConsumeToken(); diff --git a/llvm/lib/Target/AArch64/AArch64PARTS/AArch64EarlyPartsCpiPass.cpp b/llvm/lib/Target/AArch64/AArch64PARTS/AArch64EarlyPartsCpiPass.cpp index 63d38b6729f9..c590344b93bc 100644 --- a/llvm/lib/Target/AArch64/AArch64PARTS/AArch64EarlyPartsCpiPass.cpp +++ b/llvm/lib/Target/AArch64/AArch64PARTS/AArch64EarlyPartsCpiPass.cpp @@ -127,7 +127,7 @@ inline MachineInstr* AArch64EarlyPartsCpiPass::findIndirectCallMachineInstr(Mach unsigned BLRinstr_oper0 = 0; for (auto &MBB: MF) { for (auto MIi = MBB.instr_begin(), MIie = MBB.instr_end(); MIi != MIie; ++MIi) { - if (&*MIi != nullptr && isIndirectCall(*MIi)) { + if (isIndirectCall(*MIi)) { BLRinstr_oper0 = MIi->getOperand(0).getReg(); if (AUTCALLinstr_oper0 == BLRinstr_oper0) { return &*MIi; -- Gitee