From owner-svn-src-all@freebsd.org Sun Jul 26 19:46:34 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6A0FE369BA1; Sun, 26 Jul 2020 19:46:34 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BFD2y2Nzgz40dD; Sun, 26 Jul 2020 19:46:34 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1CBCD11F54; Sun, 26 Jul 2020 19:46:34 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06QJkYSH085866; Sun, 26 Jul 2020 19:46:34 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06QJkTII085839; Sun, 26 Jul 2020 19:46:29 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202007261946.06QJkTII085839@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sun, 26 Jul 2020 19:46:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r363581 - in vendor/llvm-project/release-11.x: clang/include/clang/Driver clang/include/clang/Sema clang/lib/AST clang/lib/Basic/Targets clang/lib/CodeGen clang/lib/Driver clang/lib/Dri... X-SVN-Group: vendor X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in vendor/llvm-project/release-11.x: clang/include/clang/Driver clang/include/clang/Sema clang/lib/AST clang/lib/Basic/Targets clang/lib/CodeGen clang/lib/Driver clang/lib/Driver/ToolChains clang/lib/... X-SVN-Commit-Revision: 363581 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2020 19:46:34 -0000 Author: dim Date: Sun Jul 26 19:46:28 2020 New Revision: 363581 URL: https://svnweb.freebsd.org/changeset/base/363581 Log: Vendor import of llvm-project branch release/11.x llvmorg-11-init-20933-g3c1fca803bc. Added: vendor/llvm-project/release-11.x/llvm/include/llvm/Support/RISCVTargetParser.def Modified: vendor/llvm-project/release-11.x/clang/include/clang/Driver/Options.td vendor/llvm-project/release-11.x/clang/include/clang/Sema/SemaInternal.h vendor/llvm-project/release-11.x/clang/lib/AST/ExprConstant.cpp vendor/llvm-project/release-11.x/clang/lib/Basic/Targets/RISCV.cpp vendor/llvm-project/release-11.x/clang/lib/Basic/Targets/RISCV.h vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.cpp vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp vendor/llvm-project/release-11.x/clang/lib/CodeGen/CodeGenFunction.cpp vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Arch/RISCV.cpp vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Clang.cpp vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/CommonArgs.cpp vendor/llvm-project/release-11.x/clang/lib/Driver/Types.cpp vendor/llvm-project/release-11.x/clang/lib/Frontend/CompilerInvocation.cpp vendor/llvm-project/release-11.x/clang/lib/Sema/SemaExprCXX.cpp vendor/llvm-project/release-11.x/clang/lib/Sema/SemaOpenMP.cpp vendor/llvm-project/release-11.x/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp vendor/llvm-project/release-11.x/lld/COFF/SymbolTable.cpp vendor/llvm-project/release-11.x/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp vendor/llvm-project/release-11.x/llvm/include/llvm/IR/IRBuilder.h vendor/llvm-project/release-11.x/llvm/include/llvm/Support/TargetParser.h vendor/llvm-project/release-11.x/llvm/include/llvm/Transforms/Scalar/AlignmentFromAssumptions.h vendor/llvm-project/release-11.x/llvm/lib/Analysis/AssumeBundleQueries.cpp vendor/llvm-project/release-11.x/llvm/lib/Analysis/ConstantFolding.cpp vendor/llvm-project/release-11.x/llvm/lib/Analysis/InstructionSimplify.cpp vendor/llvm-project/release-11.x/llvm/lib/Analysis/ScalarEvolution.cpp vendor/llvm-project/release-11.x/llvm/lib/CodeGen/TwoAddressInstructionPass.cpp vendor/llvm-project/release-11.x/llvm/lib/IR/ConstantFold.cpp vendor/llvm-project/release-11.x/llvm/lib/IR/IRBuilder.cpp vendor/llvm-project/release-11.x/llvm/lib/IR/Verifier.cpp vendor/llvm-project/release-11.x/llvm/lib/MC/MCParser/MasmParser.cpp vendor/llvm-project/release-11.x/llvm/lib/Object/RelocationResolver.cpp vendor/llvm-project/release-11.x/llvm/lib/Support/TargetParser.cpp vendor/llvm-project/release-11.x/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp vendor/llvm-project/release-11.x/llvm/lib/Target/PowerPC/PPCISelLowering.cpp vendor/llvm-project/release-11.x/llvm/lib/Target/PowerPC/PPCInstr64Bit.td vendor/llvm-project/release-11.x/llvm/lib/Target/PowerPC/PPCInstrInfo.td vendor/llvm-project/release-11.x/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp vendor/llvm-project/release-11.x/llvm/lib/Target/RISCV/RISCV.td vendor/llvm-project/release-11.x/llvm/lib/Target/X86/AsmParser/X86Operand.h vendor/llvm-project/release-11.x/llvm/lib/Target/X86/X86ISelLowering.cpp vendor/llvm-project/release-11.x/llvm/lib/Target/X86/X86InstrInfo.td vendor/llvm-project/release-11.x/llvm/lib/Target/X86/X86InstrSystem.td vendor/llvm-project/release-11.x/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp vendor/llvm-project/release-11.x/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp vendor/llvm-project/release-11.x/llvm/lib/Transforms/InstCombine/InstCombineInternal.h vendor/llvm-project/release-11.x/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp vendor/llvm-project/release-11.x/llvm/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp vendor/llvm-project/release-11.x/llvm/utils/TableGen/X86RecognizableInstr.cpp Modified: vendor/llvm-project/release-11.x/clang/include/clang/Driver/Options.td ============================================================================== --- vendor/llvm-project/release-11.x/clang/include/clang/Driver/Options.td Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/include/clang/Driver/Options.td Sun Jul 26 19:46:28 2020 (r363581) @@ -1440,6 +1440,10 @@ def fpch_instantiate_templates: def fno_pch_instantiate_templates: Flag <["-"], "fno-pch-instantiate-templates">, Group, Flags<[CC1Option]>; +defm pch_codegen: OptInFFlag<"pch-codegen", "Generate ", "Do not generate ", + "code for uses of this PCH that assumes an explicit object file will be built for the PCH">; +defm pch_debuginfo: OptInFFlag<"pch-debuginfo", "Generate ", "Do not generate ", + "debug info for types in an object file built from this PCH and do not generate them elsewhere">; def fmodules : Flag <["-"], "fmodules">, Group, Flags<[DriverOption, CC1Option]>, Modified: vendor/llvm-project/release-11.x/clang/include/clang/Sema/SemaInternal.h ============================================================================== --- vendor/llvm-project/release-11.x/clang/include/clang/Sema/SemaInternal.h Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/include/clang/Sema/SemaInternal.h Sun Jul 26 19:46:28 2020 (r363581) @@ -168,6 +168,11 @@ class TypoCorrectionConsumer : public VisibleDeclConsu return TC; } + /// In the case of deeply invalid expressions, `getNextCorrection()` will + /// never be called since the transform never makes progress. If we don't + /// detect this we risk trying to correct typos forever. + bool hasMadeAnyCorrectionProgress() const { return CurrentTCIndex != 0; } + /// Reset the consumer's position in the stream of viable corrections /// (i.e. getNextCorrection() will return each of the previously returned /// corrections in order before returning any new corrections). Modified: vendor/llvm-project/release-11.x/clang/lib/AST/ExprConstant.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/AST/ExprConstant.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/AST/ExprConstant.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -9930,8 +9930,7 @@ namespace { const ConstantArrayType *CAT = Info.Ctx.getAsConstantArrayType(E->getType()); if (!CAT) { - if (const IncompleteArrayType *IAT = - Info.Ctx.getAsIncompleteArrayType(E->getType())) { + if (E->getType()->isIncompleteArrayType()) { // We can be asked to zero-initialize a flexible array member; this // is represented as an ImplicitValueInitExpr of incomplete array // type. In this case, the array has zero elements. Modified: vendor/llvm-project/release-11.x/clang/lib/Basic/Targets/RISCV.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/Basic/Targets/RISCV.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/Basic/Targets/RISCV.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -13,6 +13,7 @@ #include "RISCV.h" #include "clang/Basic/MacroBuilder.h" #include "llvm/ADT/StringSwitch.h" +#include "llvm/Support/TargetParser.h" using namespace clang; using namespace clang::targets; @@ -165,4 +166,24 @@ bool RISCVTargetInfo::handleTargetFeatures(std::vector } return true; +} + +bool RISCV32TargetInfo::isValidCPUName(StringRef Name) const { + return llvm::RISCV::checkCPUKind(llvm::RISCV::parseCPUKind(Name), + /*Is64Bit=*/false); +} + +void RISCV32TargetInfo::fillValidCPUList( + SmallVectorImpl &Values) const { + llvm::RISCV::fillValidCPUArchList(Values, false); +} + +bool RISCV64TargetInfo::isValidCPUName(StringRef Name) const { + return llvm::RISCV::checkCPUKind(llvm::RISCV::parseCPUKind(Name), + /*Is64Bit=*/true); +} + +void RISCV64TargetInfo::fillValidCPUList( + SmallVectorImpl &Values) const { + llvm::RISCV::fillValidCPUArchList(Values, true); } Modified: vendor/llvm-project/release-11.x/clang/lib/Basic/Targets/RISCV.h ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/Basic/Targets/RISCV.h Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/Basic/Targets/RISCV.h Sun Jul 26 19:46:28 2020 (r363581) @@ -24,7 +24,7 @@ namespace targets { // RISC-V Target class RISCVTargetInfo : public TargetInfo { protected: - std::string ABI; + std::string ABI, CPU; bool HasM; bool HasA; bool HasF; @@ -44,6 +44,13 @@ class RISCVTargetInfo : public TargetInfo { (public) WIntType = UnsignedInt; } + bool setCPU(const std::string &Name) override { + if (!isValidCPUName(Name)) + return false; + CPU = Name; + return true; + } + StringRef getABI() const override { return ABI; } void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override; @@ -97,6 +104,9 @@ class LLVM_LIBRARY_VISIBILITY RISCV32TargetInfo : publ return false; } + bool isValidCPUName(StringRef Name) const override; + void fillValidCPUList(SmallVectorImpl &Values) const override; + void setMaxAtomicWidth() override { MaxAtomicPromoteWidth = 128; @@ -120,6 +130,9 @@ class LLVM_LIBRARY_VISIBILITY RISCV64TargetInfo : publ } return false; } + + bool isValidCPUName(StringRef Name) const override; + void fillValidCPUList(SmallVectorImpl &Values) const override; void setMaxAtomicWidth() override { MaxAtomicPromoteWidth = 128; Modified: vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -886,8 +886,11 @@ void ReductionCodeGen::emitInitialization( SharedType, SharedAddresses[N].first.getBaseInfo(), CGF.CGM.getTBAAInfoForSubobject(SharedAddresses[N].first, SharedType)); if (CGF.getContext().getAsArrayType(PrivateVD->getType())) { + if (DRD && DRD->getInitializer()) + (void)DefaultInit(CGF); emitAggregateInitialization(CGF, N, PrivateAddr, SharedLVal, DRD); } else if (DRD && (DRD->getInitializer() || !PrivateVD->hasInit())) { + (void)DefaultInit(CGF); emitInitWithReductionInitializer(CGF, DRD, ClausesData[N].ReductionOp, PrivateAddr, SharedLVal.getAddress(CGF), SharedLVal.getType()); Modified: vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -4770,6 +4770,7 @@ Address CGOpenMPRuntimeNVPTX::getAddressOfLocalVariabl const VarDecl *VD) { if (VD && VD->hasAttr()) { const auto *A = VD->getAttr(); + auto AS = LangAS::Default; switch (A->getAllocatorType()) { // Use the default allocator here as by default local vars are // threadlocal. @@ -4783,42 +4784,30 @@ Address CGOpenMPRuntimeNVPTX::getAddressOfLocalVariabl case OMPAllocateDeclAttr::OMPUserDefinedMemAlloc: // TODO: implement aupport for user-defined allocators. return Address::invalid(); - case OMPAllocateDeclAttr::OMPConstMemAlloc: { - llvm::Type *VarTy = CGF.ConvertTypeForMem(VD->getType()); - auto *GV = new llvm::GlobalVariable( - CGM.getModule(), VarTy, /*isConstant=*/false, - llvm::GlobalValue::InternalLinkage, - llvm::Constant::getNullValue(VarTy), VD->getName(), - /*InsertBefore=*/nullptr, llvm::GlobalValue::NotThreadLocal, - CGM.getContext().getTargetAddressSpace(LangAS::cuda_constant)); - CharUnits Align = CGM.getContext().getDeclAlign(VD); - GV->setAlignment(Align.getAsAlign()); - return Address(GV, Align); - } - case OMPAllocateDeclAttr::OMPPTeamMemAlloc: { - llvm::Type *VarTy = CGF.ConvertTypeForMem(VD->getType()); - auto *GV = new llvm::GlobalVariable( - CGM.getModule(), VarTy, /*isConstant=*/false, - llvm::GlobalValue::InternalLinkage, - llvm::Constant::getNullValue(VarTy), VD->getName(), - /*InsertBefore=*/nullptr, llvm::GlobalValue::NotThreadLocal, - CGM.getContext().getTargetAddressSpace(LangAS::cuda_shared)); - CharUnits Align = CGM.getContext().getDeclAlign(VD); - GV->setAlignment(Align.getAsAlign()); - return Address(GV, Align); - } + case OMPAllocateDeclAttr::OMPConstMemAlloc: + AS = LangAS::cuda_constant; + break; + case OMPAllocateDeclAttr::OMPPTeamMemAlloc: + AS = LangAS::cuda_shared; + break; case OMPAllocateDeclAttr::OMPLargeCapMemAlloc: - case OMPAllocateDeclAttr::OMPCGroupMemAlloc: { - llvm::Type *VarTy = CGF.ConvertTypeForMem(VD->getType()); - auto *GV = new llvm::GlobalVariable( - CGM.getModule(), VarTy, /*isConstant=*/false, - llvm::GlobalValue::InternalLinkage, - llvm::Constant::getNullValue(VarTy), VD->getName()); - CharUnits Align = CGM.getContext().getDeclAlign(VD); - GV->setAlignment(Align.getAsAlign()); - return Address(GV, Align); + case OMPAllocateDeclAttr::OMPCGroupMemAlloc: + break; } - } + llvm::Type *VarTy = CGF.ConvertTypeForMem(VD->getType()); + auto *GV = new llvm::GlobalVariable( + CGM.getModule(), VarTy, /*isConstant=*/false, + llvm::GlobalValue::InternalLinkage, llvm::Constant::getNullValue(VarTy), + VD->getName(), + /*InsertBefore=*/nullptr, llvm::GlobalValue::NotThreadLocal, + CGM.getContext().getTargetAddressSpace(AS)); + CharUnits Align = CGM.getContext().getDeclAlign(VD); + GV->setAlignment(Align.getAsAlign()); + return Address( + CGF.Builder.CreatePointerBitCastOrAddrSpaceCast( + GV, VarTy->getPointerTo(CGM.getContext().getTargetAddressSpace( + VD->getType().getAddressSpace()))), + Align); } if (getDataSharingMode(CGM) != CGOpenMPRuntimeNVPTX::Generic) Modified: vendor/llvm-project/release-11.x/clang/lib/CodeGen/CodeGenFunction.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/CodeGen/CodeGenFunction.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/CodeGen/CodeGenFunction.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -2154,39 +2154,13 @@ void CodeGenFunction::emitAlignmentAssumption(llvm::Va SourceLocation AssumptionLoc, llvm::Value *Alignment, llvm::Value *OffsetValue) { - if (Alignment->getType() != IntPtrTy) - Alignment = - Builder.CreateIntCast(Alignment, IntPtrTy, false, "casted.align"); - if (OffsetValue && OffsetValue->getType() != IntPtrTy) - OffsetValue = - Builder.CreateIntCast(OffsetValue, IntPtrTy, true, "casted.offset"); - llvm::Value *TheCheck = nullptr; + llvm::Value *TheCheck; + llvm::Instruction *Assumption = Builder.CreateAlignmentAssumption( + CGM.getDataLayout(), PtrValue, Alignment, OffsetValue, &TheCheck); if (SanOpts.has(SanitizerKind::Alignment)) { - llvm::Value *PtrIntValue = - Builder.CreatePtrToInt(PtrValue, IntPtrTy, "ptrint"); - - if (OffsetValue) { - bool IsOffsetZero = false; - if (const auto *CI = dyn_cast(OffsetValue)) - IsOffsetZero = CI->isZero(); - - if (!IsOffsetZero) - PtrIntValue = Builder.CreateSub(PtrIntValue, OffsetValue, "offsetptr"); - } - - llvm::Value *Zero = llvm::ConstantInt::get(IntPtrTy, 0); - llvm::Value *Mask = - Builder.CreateSub(Alignment, llvm::ConstantInt::get(IntPtrTy, 1)); - llvm::Value *MaskedPtr = Builder.CreateAnd(PtrIntValue, Mask, "maskedptr"); - TheCheck = Builder.CreateICmpEQ(MaskedPtr, Zero, "maskcond"); + emitAlignmentAssumptionCheck(PtrValue, Ty, Loc, AssumptionLoc, Alignment, + OffsetValue, TheCheck, Assumption); } - llvm::Instruction *Assumption = Builder.CreateAlignmentAssumption( - CGM.getDataLayout(), PtrValue, Alignment, OffsetValue); - - if (!SanOpts.has(SanitizerKind::Alignment)) - return; - emitAlignmentAssumptionCheck(PtrValue, Ty, Loc, AssumptionLoc, Alignment, - OffsetValue, TheCheck, Assumption); } void CodeGenFunction::emitAlignmentAssumption(llvm::Value *PtrValue, Modified: vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Arch/RISCV.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Arch/RISCV.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Arch/RISCV.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -446,6 +446,19 @@ static bool getArchFeatures(const Driver &D, StringRef return true; } +// Get features except standard extension feature +void getRISCFeaturesFromMcpu(const Driver &D, const llvm::Triple &Triple, + const llvm::opt::ArgList &Args, + const llvm::opt::Arg *A, StringRef Mcpu, + std::vector &Features) { + bool Is64Bit = (Triple.getArch() == llvm::Triple::riscv64); + llvm::RISCV::CPUKind CPUKind = llvm::RISCV::parseCPUKind(Mcpu); + if (!llvm::RISCV::checkCPUKind(CPUKind, Is64Bit) || + !llvm::RISCV::getCPUFeaturesExceptStdExt(CPUKind, Features)) { + D.Diag(clang::diag::err_drv_clang_unsupported) << A->getAsString(Args); + } +} + void riscv::getRISCVTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector &Features) { @@ -454,6 +467,11 @@ void riscv::getRISCVTargetFeatures(const Driver &D, co if (!getArchFeatures(D, MArch, Features, Args)) return; + // If users give march and mcpu, get std extension feature from MArch + // and other features (ex. mirco architecture feature) from mcpu + if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) + getRISCFeaturesFromMcpu(D, Triple, Args, A, A->getValue(), Features); + // Handle features corresponding to "-ffixed-X" options if (Args.hasArg(options::OPT_ffixed_x1)) Features.push_back("+reserve-x1"); @@ -543,11 +561,9 @@ StringRef riscv::getRISCVABI(const ArgList &Args, cons // GCC's logic around choosing a default `-mabi=` is complex. If GCC is not // configured using `--with-abi=`, then the logic for the default choice is - // defined in config.gcc. This function is based on the logic in GCC 9.2.0. We - // deviate from GCC's default only on baremetal targets (UnknownOS) where - // neither `-march` nor `-mabi` is specified. + // defined in config.gcc. This function is based on the logic in GCC 9.2.0. // - // The logic uses the following, in order: + // The logic used in GCC 9.2.0 is the following, in order: // 1. Explicit choices using `--with-abi=` // 2. A default based on `--with-arch=`, if provided // 3. A default based on the target triple's arch @@ -556,38 +572,40 @@ StringRef riscv::getRISCVABI(const ArgList &Args, cons // // Clang does not have `--with-arch=` or `--with-abi=`, so we use `-march=` // and `-mabi=` respectively instead. + // + // In order to make chosing logic more clear, Clang uses the following logic, + // in order: + // 1. Explicit choices using `-mabi=` + // 2. A default based on the architecture as determined by getRISCVArch + // 3. Choose a default based on the triple // 1. If `-mabi=` is specified, use it. if (const Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) return A->getValue(); - // 2. Choose a default based on `-march=` + // 2. Choose a default based on the target architecture. // // rv32g | rv32*d -> ilp32d // rv32e -> ilp32e // rv32* -> ilp32 // rv64g | rv64*d -> lp64d // rv64* -> lp64 - if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) { - StringRef MArch = A->getValue(); + StringRef MArch = getRISCVArch(Args, Triple); - if (MArch.startswith_lower("rv32")) { - // FIXME: parse `March` to find `D` extension properly - if (MArch.substr(4).contains_lower("d") || - MArch.startswith_lower("rv32g")) - return "ilp32d"; - else if (MArch.startswith_lower("rv32e")) - return "ilp32e"; - else - return "ilp32"; - } else if (MArch.startswith_lower("rv64")) { - // FIXME: parse `March` to find `D` extension properly - if (MArch.substr(4).contains_lower("d") || - MArch.startswith_lower("rv64g")) - return "lp64d"; - else - return "lp64"; - } + if (MArch.startswith_lower("rv32")) { + // FIXME: parse `March` to find `D` extension properly + if (MArch.substr(4).contains_lower("d") || MArch.startswith_lower("rv32g")) + return "ilp32d"; + else if (MArch.startswith_lower("rv32e")) + return "ilp32e"; + else + return "ilp32"; + } else if (MArch.startswith_lower("rv64")) { + // FIXME: parse `March` to find `D` extension properly + if (MArch.substr(4).contains_lower("d") || MArch.startswith_lower("rv64g")) + return "lp64d"; + else + return "lp64"; } // 3. Choose a default based on the triple @@ -617,10 +635,11 @@ StringRef riscv::getRISCVArch(const llvm::opt::ArgList // GCC's logic around choosing a default `-march=` is complex. If GCC is not // configured using `--with-arch=`, then the logic for the default choice is // defined in config.gcc. This function is based on the logic in GCC 9.2.0. We - // deviate from GCC's default only on baremetal targets (UnknownOS) where - // neither `-march` nor `-mabi` is specified. + // deviate from GCC's default on additional `-mcpu` option (GCC does not + // support `-mcpu`) and baremetal targets (UnknownOS) where neither `-march` + // nor `-mabi` is specified. // - // The logic uses the following, in order: + // The logic used in GCC 9.2.0 is the following, in order: // 1. Explicit choices using `--with-arch=` // 2. A default based on `--with-abi=`, if provided // 3. A default based on the target triple's arch @@ -630,6 +649,12 @@ StringRef riscv::getRISCVArch(const llvm::opt::ArgList // Clang does not have `--with-arch=` or `--with-abi=`, so we use `-march=` // and `-mabi=` respectively instead. // + // Clang uses the following logic, in order: + // 1. Explicit choices using `-march=` + // 2. Based on `-mcpu` if the target CPU has a default ISA string + // 3. A default based on `-mabi`, if provided + // 4. A default based on the target triple's arch + // // Clang does not yet support MULTILIB_REUSE, so we use `rv{XLEN}imafdc` // instead of `rv{XLEN}gc` though they are (currently) equivalent. @@ -637,7 +662,15 @@ StringRef riscv::getRISCVArch(const llvm::opt::ArgList if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) return A->getValue(); - // 2. Choose a default based on `-mabi=` + // 2. Get march (isa string) based on `-mcpu=` + if (const Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) { + StringRef MArch = llvm::RISCV::getMArchFromMcpu(A->getValue()); + // Bypass if target cpu's default march is empty. + if (MArch != "") + return MArch; + } + + // 3. Choose a default based on `-mabi=` // // ilp32e -> rv32e // ilp32 | ilp32f | ilp32d -> rv32imafdc @@ -653,7 +686,7 @@ StringRef riscv::getRISCVArch(const llvm::opt::ArgList return "rv64imafdc"; } - // 3. Choose a default based on the triple + // 4. Choose a default based on the triple // // We deviate from GCC's defaults here: // - On `riscv{XLEN}-unknown-elf` we default to `rv{XLEN}imac` Modified: vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Clang.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Clang.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Clang.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -5627,6 +5627,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi if (Args.hasFlag(options::OPT_fpch_instantiate_templates, options::OPT_fno_pch_instantiate_templates, false)) CmdArgs.push_back("-fpch-instantiate-templates"); + if (Args.hasFlag(options::OPT_fpch_codegen, options::OPT_fno_pch_codegen, + false)) + CmdArgs.push_back("-fmodules-codegen"); + if (Args.hasFlag(options::OPT_fpch_debuginfo, options::OPT_fno_pch_debuginfo, + false)) + CmdArgs.push_back("-fmodules-debuginfo"); Args.AddLastArg(CmdArgs, options::OPT_fexperimental_new_pass_manager, options::OPT_fno_experimental_new_pass_manager); Modified: vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/CommonArgs.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/CommonArgs.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/CommonArgs.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -333,6 +333,11 @@ std::string tools::getCPUName(const ArgList &Args, con return TargetCPUName; } + case llvm::Triple::riscv32: + case llvm::Triple::riscv64: + if (const Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) + return A->getValue(); + return ""; case llvm::Triple::bpfel: case llvm::Triple::bpfeb: Modified: vendor/llvm-project/release-11.x/clang/lib/Driver/Types.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/Driver/Types.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/Driver/Types.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -141,7 +141,7 @@ bool types::isAcceptedByClang(ID Id) { case TY_CXXHeader: case TY_PP_CXXHeader: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: case TY_CXXModule: case TY_PP_CXXModule: - case TY_AST: case TY_ModuleFile: + case TY_AST: case TY_ModuleFile: case TY_PCH: case TY_LLVM_IR: case TY_LLVM_BC: return true; } Modified: vendor/llvm-project/release-11.x/clang/lib/Frontend/CompilerInvocation.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/Frontend/CompilerInvocation.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/Frontend/CompilerInvocation.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -2022,8 +2022,9 @@ static InputKind ParseFrontendArgs(FrontendOptions &Op // FIXME: Supporting '-header-cpp-output' would be useful. bool Preprocessed = XValue.consume_back("-cpp-output"); bool ModuleMap = XValue.consume_back("-module-map"); - IsHeaderFile = - !Preprocessed && !ModuleMap && XValue.consume_back("-header"); + IsHeaderFile = !Preprocessed && !ModuleMap && + XValue != "precompiled-header" && + XValue.consume_back("-header"); // Principal languages. DashX = llvm::StringSwitch(XValue) @@ -2050,7 +2051,7 @@ static InputKind ParseFrontendArgs(FrontendOptions &Op DashX = llvm::StringSwitch(XValue) .Case("cpp-output", InputKind(Language::C).getPreprocessed()) .Case("assembler-with-cpp", Language::Asm) - .Cases("ast", "pcm", + .Cases("ast", "pcm", "precompiled-header", InputKind(Language::Unknown, InputKind::Precompiled)) .Case("ir", Language::LLVM_IR) .Default(Language::Unknown); Modified: vendor/llvm-project/release-11.x/clang/lib/Sema/SemaExprCXX.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/Sema/SemaExprCXX.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/Sema/SemaExprCXX.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -7977,19 +7977,26 @@ class TransformTypos : public TreeTransformhasMadeAnyCorrectionProgress()) + return false; if (!State.Consumer->finished()) return true; State.Consumer->resetCorrectionStream(); Modified: vendor/llvm-project/release-11.x/clang/lib/Sema/SemaOpenMP.cpp ============================================================================== --- vendor/llvm-project/release-11.x/clang/lib/Sema/SemaOpenMP.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/clang/lib/Sema/SemaOpenMP.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -15153,6 +15153,7 @@ static bool actOnOMPReductionKindClause( auto *DRDRef = DeclareReductionRef.getAs(); auto *DRD = cast(DRDRef->getDecl()); if (DRD->getInitializer()) { + S.ActOnUninitializedDecl(PrivateVD); Init = DRDRef; RHSVD->setInit(DRDRef); RHSVD->setInitStyle(VarDecl::CallInit); @@ -15259,10 +15260,19 @@ static bool actOnOMPReductionKindClause( llvm_unreachable("Unexpected reduction operation"); } } - if (Init && DeclareReductionRef.isUnset()) + if (Init && DeclareReductionRef.isUnset()) { S.AddInitializerToDecl(RHSVD, Init, /*DirectInit=*/false); - else if (!Init) + // Store initializer for single element in private copy. Will be used + // during codegen. + PrivateVD->setInit(RHSVD->getInit()); + PrivateVD->setInitStyle(RHSVD->getInitStyle()); + } else if (!Init) { S.ActOnUninitializedDecl(RHSVD); + // Store initializer for single element in private copy. Will be used + // during codegen. + PrivateVD->setInit(RHSVD->getInit()); + PrivateVD->setInitStyle(RHSVD->getInitStyle()); + } if (RHSVD->isInvalidDecl()) continue; if (!RHSVD->hasInit() && @@ -15276,10 +15286,6 @@ static bool actOnOMPReductionKindClause( << D; continue; } - // Store initializer for single element in private copy. Will be used during - // codegen. - PrivateVD->setInit(RHSVD->getInit()); - PrivateVD->setInitStyle(RHSVD->getInitStyle()); DeclRefExpr *PrivateDRE = buildDeclRefExpr(S, PrivateVD, PrivateTy, ELoc); ExprResult ReductionOp; if (DeclareReductionRef.isUsable()) { Modified: vendor/llvm-project/release-11.x/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp ============================================================================== --- vendor/llvm-project/release-11.x/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -439,65 +439,61 @@ void RestoreStack(int tid, const u64 epoch, VarSizeSta ExtractTagFromStack(stk, tag); } -static bool HandleRacyStacks(ThreadState *thr, VarSizeStackTrace traces[2], - uptr addr_min, uptr addr_max) { - bool equal_stack = false; +static bool FindRacyStacks(const RacyStacks &hash) { + for (uptr i = 0; i < ctx->racy_stacks.Size(); i++) { + if (hash == ctx->racy_stacks[i]) { + VPrintf(2, "ThreadSanitizer: suppressing report as doubled (stack)\n"); + return true; + } + } + return false; +} + +static bool HandleRacyStacks(ThreadState *thr, VarSizeStackTrace traces[2]) { + if (!flags()->suppress_equal_stacks) + return false; RacyStacks hash; - bool equal_address = false; - RacyAddress ra0 = {addr_min, addr_max}; + hash.hash[0] = md5_hash(traces[0].trace, traces[0].size * sizeof(uptr)); + hash.hash[1] = md5_hash(traces[1].trace, traces[1].size * sizeof(uptr)); { ReadLock lock(&ctx->racy_mtx); - if (flags()->suppress_equal_stacks) { - hash.hash[0] = md5_hash(traces[0].trace, traces[0].size * sizeof(uptr)); - hash.hash[1] = md5_hash(traces[1].trace, traces[1].size * sizeof(uptr)); - for (uptr i = 0; i < ctx->racy_stacks.Size(); i++) { - if (hash == ctx->racy_stacks[i]) { - VPrintf(2, - "ThreadSanitizer: suppressing report as doubled (stack)\n"); - equal_stack = true; - break; - } - } + if (FindRacyStacks(hash)) + return true; + } + Lock lock(&ctx->racy_mtx); + if (FindRacyStacks(hash)) + return true; + ctx->racy_stacks.PushBack(hash); + return false; +} + +static bool FindRacyAddress(const RacyAddress &ra0) { + for (uptr i = 0; i < ctx->racy_addresses.Size(); i++) { + RacyAddress ra2 = ctx->racy_addresses[i]; + uptr maxbeg = max(ra0.addr_min, ra2.addr_min); + uptr minend = min(ra0.addr_max, ra2.addr_max); + if (maxbeg < minend) { + VPrintf(2, "ThreadSanitizer: suppressing report as doubled (addr)\n"); + return true; } - if (flags()->suppress_equal_addresses) { - for (uptr i = 0; i < ctx->racy_addresses.Size(); i++) { - RacyAddress ra2 = ctx->racy_addresses[i]; - uptr maxbeg = max(ra0.addr_min, ra2.addr_min); - uptr minend = min(ra0.addr_max, ra2.addr_max); - if (maxbeg < minend) { - VPrintf(2, "ThreadSanitizer: suppressing report as doubled (addr)\n"); - equal_address = true; - break; - } - } - } } - if (!equal_stack && !equal_address) - return false; - if (!equal_stack) { - Lock lock(&ctx->racy_mtx); - ctx->racy_stacks.PushBack(hash); - } - if (!equal_address) { - Lock lock(&ctx->racy_mtx); - ctx->racy_addresses.PushBack(ra0); - } - return true; + return false; } -static void AddRacyStacks(ThreadState *thr, VarSizeStackTrace traces[2], - uptr addr_min, uptr addr_max) { - Lock lock(&ctx->racy_mtx); - if (flags()->suppress_equal_stacks) { - RacyStacks hash; - hash.hash[0] = md5_hash(traces[0].trace, traces[0].size * sizeof(uptr)); - hash.hash[1] = md5_hash(traces[1].trace, traces[1].size * sizeof(uptr)); - ctx->racy_stacks.PushBack(hash); +static bool HandleRacyAddress(ThreadState *thr, uptr addr_min, uptr addr_max) { + if (!flags()->suppress_equal_addresses) + return false; + RacyAddress ra0 = {addr_min, addr_max}; + { + ReadLock lock(&ctx->racy_mtx); + if (FindRacyAddress(ra0)) + return true; } - if (flags()->suppress_equal_addresses) { - RacyAddress ra0 = {addr_min, addr_max}; - ctx->racy_addresses.PushBack(ra0); - } + Lock lock(&ctx->racy_mtx); + if (FindRacyAddress(ra0)) + return true; + ctx->racy_addresses.PushBack(ra0); + return false; } bool OutputReport(ThreadState *thr, const ScopedReport &srep) { @@ -618,6 +614,8 @@ void ReportRace(ThreadState *thr) { if (IsExpectedReport(addr_min, addr_max - addr_min)) return; } + if (HandleRacyAddress(thr, addr_min, addr_max)) + return; ReportType typ = ReportTypeRace; if (thr->is_vptr_access && freed) @@ -668,7 +666,7 @@ void ReportRace(ThreadState *thr) { if (IsFiredSuppression(ctx, typ, traces[1])) return; - if (HandleRacyStacks(thr, traces, addr_min, addr_max)) + if (HandleRacyStacks(thr, traces)) return; // If any of the accesses has a tag, treat this as an "external" race. @@ -711,7 +709,6 @@ void ReportRace(ThreadState *thr) { if (!OutputReport(thr, rep)) return; - AddRacyStacks(thr, traces, addr_min, addr_max); } void PrintCurrentStack(ThreadState *thr, uptr pc) { Modified: vendor/llvm-project/release-11.x/lld/COFF/SymbolTable.cpp ============================================================================== --- vendor/llvm-project/release-11.x/lld/COFF/SymbolTable.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/lld/COFF/SymbolTable.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -136,12 +136,16 @@ getFileLine(const SectionChunk *c, uint32_t addr) { // of all references to that symbol from that file. If no debug information is // available, returns just the name of the file, else one string per actual // reference as described in the debug info. -std::vector getSymbolLocations(ObjFile *file, uint32_t symIndex) { +// Returns up to maxStrings string descriptions, along with the total number of +// locations found. +static std::pair, size_t> +getSymbolLocations(ObjFile *file, uint32_t symIndex, size_t maxStrings) { struct Location { Symbol *sym; std::pair fileLine; }; std::vector locations; + size_t numLocations = 0; for (Chunk *c : file->getChunks()) { auto *sc = dyn_cast(c); @@ -150,6 +154,10 @@ std::vector getSymbolLocations(ObjFile *f for (const coff_relocation &r : sc->getRelocs()) { if (r.SymbolTableIndex != symIndex) continue; + numLocations++; + if (locations.size() >= maxStrings) + continue; + Optional> fileLine = getFileLine(sc, r.VirtualAddress); Symbol *sym = getSymbol(sc, r.VirtualAddress); @@ -160,9 +168,13 @@ std::vector getSymbolLocations(ObjFile *f } } - if (locations.empty()) - return std::vector({"\n>>> referenced by " + toString(file)}); + if (maxStrings == 0) + return std::make_pair(std::vector(), numLocations); + if (numLocations == 0) + return std::make_pair( + std::vector{"\n>>> referenced by " + toString(file)}, 1); + std::vector symbolLocations(locations.size()); size_t i = 0; for (Location loc : locations) { @@ -175,17 +187,26 @@ std::vector getSymbolLocations(ObjFile *f if (loc.sym) os << ":(" << toString(*loc.sym) << ')'; } - return symbolLocations; + return std::make_pair(symbolLocations, numLocations); } -std::vector getSymbolLocations(InputFile *file, - uint32_t symIndex) { +std::vector getSymbolLocations(ObjFile *file, uint32_t symIndex) { + return getSymbolLocations(file, symIndex, SIZE_MAX).first; +} + +static std::pair, size_t> +getSymbolLocations(InputFile *file, uint32_t symIndex, size_t maxStrings) { if (auto *o = dyn_cast(file)) - return getSymbolLocations(o, symIndex); - if (auto *b = dyn_cast(file)) - return getSymbolLocations(b); + return getSymbolLocations(o, symIndex, maxStrings); + if (auto *b = dyn_cast(file)) { + std::vector symbolLocations = getSymbolLocations(b); + size_t numLocations = symbolLocations.size(); + if (symbolLocations.size() > maxStrings) + symbolLocations.resize(maxStrings); + return std::make_pair(symbolLocations, numLocations); + } llvm_unreachable("unsupported file type passed to getSymbolLocations"); - return {}; + return std::make_pair(std::vector(), (size_t)0); } // For an undefined symbol, stores all files referencing it and the index of @@ -205,20 +226,21 @@ static void reportUndefinedSymbol(const UndefinedDiag os << "undefined symbol: " << toString(*undefDiag.sym); const size_t maxUndefReferences = 3; - size_t i = 0, numRefs = 0; + size_t numDisplayedRefs = 0, numRefs = 0; for (const UndefinedDiag::File &ref : undefDiag.files) { - std::vector symbolLocations = - getSymbolLocations(ref.file, ref.symIndex); - numRefs += symbolLocations.size(); + std::vector symbolLocations; + size_t totalLocations = 0; + std::tie(symbolLocations, totalLocations) = getSymbolLocations( + ref.file, ref.symIndex, maxUndefReferences - numDisplayedRefs); + + numRefs += totalLocations; + numDisplayedRefs += symbolLocations.size(); for (const std::string &s : symbolLocations) { - if (i >= maxUndefReferences) - break; os << s; - i++; } } - if (i < numRefs) - os << "\n>>> referenced " << numRefs - i << " more times"; + if (numDisplayedRefs < numRefs) + os << "\n>>> referenced " << numRefs - numDisplayedRefs << " more times"; errorOrWarn(os.str()); } Modified: vendor/llvm-project/release-11.x/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp ============================================================================== --- vendor/llvm-project/release-11.x/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -1036,18 +1036,20 @@ bool SymbolFileDWARF::ParseLineTable(CompileUnit &comp // FIXME: Rather than parsing the whole line table and then copying it over // into LLDB, we should explore using a callback to populate the line table // while we parse to reduce memory usage. - std::unique_ptr sequence = - LineTable::CreateLineSequenceContainer(); std::vector> sequences; - for (auto &row : line_table->Rows) { - LineTable::AppendLineEntryToSequence( - sequence.get(), row.Address.Address, row.Line, row.Column, row.File, - row.IsStmt, row.BasicBlock, row.PrologueEnd, row.EpilogueBegin, - row.EndSequence); - if (row.EndSequence) { - sequences.push_back(std::move(sequence)); - sequence = LineTable::CreateLineSequenceContainer(); + // The Sequences view contains only valid line sequences. Don't iterate over + // the Rows directly. + for (const llvm::DWARFDebugLine::Sequence &seq : line_table->Sequences) { + std::unique_ptr sequence = + LineTable::CreateLineSequenceContainer(); + for (unsigned idx = seq.FirstRowIndex; idx < seq.LastRowIndex; ++idx) { + const llvm::DWARFDebugLine::Row &row = line_table->Rows[idx]; + LineTable::AppendLineEntryToSequence( + sequence.get(), row.Address.Address, row.Line, row.Column, row.File, + row.IsStmt, row.BasicBlock, row.PrologueEnd, row.EpilogueBegin, + row.EndSequence); } + sequences.push_back(std::move(sequence)); } std::unique_ptr line_table_up = Modified: vendor/llvm-project/release-11.x/llvm/include/llvm/IR/IRBuilder.h ============================================================================== --- vendor/llvm-project/release-11.x/llvm/include/llvm/IR/IRBuilder.h Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/llvm/include/llvm/IR/IRBuilder.h Sun Jul 26 19:46:28 2020 (r363581) @@ -782,11 +782,7 @@ class IRBuilderBase { (public) /// Create an assume intrinsic call that allows the optimizer to /// assume that the provided condition will be true. - /// - /// The optional argument \p OpBundles specifies operand bundles that are - /// added to the call instruction. - CallInst *CreateAssumption(Value *Cond, - ArrayRef OpBundles = llvm::None); + CallInst *CreateAssumption(Value *Cond); /// Create a call to the experimental.gc.statepoint intrinsic to /// start a new statepoint sequence. @@ -2506,11 +2502,13 @@ class IRBuilderBase { (public) private: /// Helper function that creates an assume intrinsic call that - /// represents an alignment assumption on the provided pointer \p PtrValue - /// with offset \p OffsetValue and alignment value \p AlignValue. + /// represents an alignment assumption on the provided Ptr, Mask, Type + /// and Offset. It may be sometimes useful to do some other logic + /// based on this alignment check, thus it can be stored into 'TheCheck'. CallInst *CreateAlignmentAssumptionHelper(const DataLayout &DL, - Value *PtrValue, Value *AlignValue, - Value *OffsetValue); + Value *PtrValue, Value *Mask, + Type *IntPtrTy, Value *OffsetValue, + Value **TheCheck); public: /// Create an assume intrinsic call that represents an alignment @@ -2519,9 +2517,13 @@ class IRBuilderBase { (public) /// An optional offset can be provided, and if it is provided, the offset /// must be subtracted from the provided pointer to get the pointer with the /// specified alignment. + /// + /// It may be sometimes useful to do some other logic + /// based on this alignment check, thus it can be stored into 'TheCheck'. CallInst *CreateAlignmentAssumption(const DataLayout &DL, Value *PtrValue, unsigned Alignment, - Value *OffsetValue = nullptr); + Value *OffsetValue = nullptr, + Value **TheCheck = nullptr); /// Create an assume intrinsic call that represents an alignment /// assumption on the provided pointer. @@ -2530,11 +2532,15 @@ class IRBuilderBase { (public) /// must be subtracted from the provided pointer to get the pointer with the /// specified alignment. /// + /// It may be sometimes useful to do some other logic + /// based on this alignment check, thus it can be stored into 'TheCheck'. + /// /// This overload handles the condition where the Alignment is dependent /// on an existing value rather than a static value. CallInst *CreateAlignmentAssumption(const DataLayout &DL, Value *PtrValue, Value *Alignment, - Value *OffsetValue = nullptr); + Value *OffsetValue = nullptr, + Value **TheCheck = nullptr); }; /// This provides a uniform API for creating instructions and inserting Added: vendor/llvm-project/release-11.x/llvm/include/llvm/Support/RISCVTargetParser.def ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/llvm-project/release-11.x/llvm/include/llvm/Support/RISCVTargetParser.def Sun Jul 26 19:46:28 2020 (r363581) @@ -0,0 +1,13 @@ +#ifndef PROC +#define PROC(ENUM, NAME, FEATURES, DEFAULT_MARCH) +#endif + +PROC(INVALID, {"invalid"}, FK_INVALID, {""}) +PROC(GENERIC_RV32, {"generic-rv32"}, FK_NONE, {""}) +PROC(GENERIC_RV64, {"generic-rv64"}, FK_64BIT, {""}) +PROC(ROCKET_RV32, {"rocket-rv32"}, FK_NONE, {""}) +PROC(ROCKET_RV64, {"rocket-rv64"}, FK_64BIT, {""}) +PROC(SIFIVE_E31, {"sifive-e31"}, FK_NONE, {"rv32imac"}) +PROC(SIFIVE_U54, {"sifive-u54"}, FK_64BIT, {"rv64gc"}) + +#undef PROC Modified: vendor/llvm-project/release-11.x/llvm/include/llvm/Support/TargetParser.h ============================================================================== --- vendor/llvm-project/release-11.x/llvm/include/llvm/Support/TargetParser.h Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/llvm/include/llvm/Support/TargetParser.h Sun Jul 26 19:46:28 2020 (r363581) @@ -130,6 +130,32 @@ IsaVersion getIsaVersion(StringRef GPU); } // namespace AMDGPU +namespace RISCV { + +enum CPUKind : unsigned { +#define PROC(ENUM, NAME, FEATURES, DEFAULT_MARCH) CK_##ENUM, +#include "RISCVTargetParser.def" +}; + +enum FeatureKind : unsigned { + FK_INVALID = 0, + FK_NONE = 1, + FK_STDEXTM = 1 << 2, + FK_STDEXTA = 1 << 3, + FK_STDEXTF = 1 << 4, + FK_STDEXTD = 1 << 5, + FK_STDEXTC = 1 << 6, + FK_64BIT = 1 << 7, +}; + +bool checkCPUKind(CPUKind Kind, bool IsRV64); +CPUKind parseCPUKind(StringRef CPU); +StringRef getMArchFromMcpu(StringRef CPU); +void fillValidCPUArchList(SmallVectorImpl &Values, bool IsRV64); +bool getCPUFeaturesExceptStdExt(CPUKind Kind, std::vector &Features); + +} // namespace RISCV + } // namespace llvm #endif Modified: vendor/llvm-project/release-11.x/llvm/include/llvm/Transforms/Scalar/AlignmentFromAssumptions.h ============================================================================== --- vendor/llvm-project/release-11.x/llvm/include/llvm/Transforms/Scalar/AlignmentFromAssumptions.h Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/llvm/include/llvm/Transforms/Scalar/AlignmentFromAssumptions.h Sun Jul 26 19:46:28 2020 (r363581) @@ -37,9 +37,9 @@ struct AlignmentFromAssumptionsPass ScalarEvolution *SE = nullptr; DominatorTree *DT = nullptr; - bool extractAlignmentInfo(CallInst *I, unsigned Idx, Value *&AAPtr, - const SCEV *&AlignSCEV, const SCEV *&OffSCEV); - bool processAssumption(CallInst *I, unsigned Idx); + bool extractAlignmentInfo(CallInst *I, Value *&AAPtr, const SCEV *&AlignSCEV, + const SCEV *&OffSCEV); + bool processAssumption(CallInst *I); }; } Modified: vendor/llvm-project/release-11.x/llvm/lib/Analysis/AssumeBundleQueries.cpp ============================================================================== --- vendor/llvm-project/release-11.x/llvm/lib/Analysis/AssumeBundleQueries.cpp Sun Jul 26 19:40:37 2020 (r363580) +++ vendor/llvm-project/release-11.x/llvm/lib/Analysis/AssumeBundleQueries.cpp Sun Jul 26 19:46:28 2020 (r363581) @@ -108,17 +108,10 @@ llvm::getKnowledgeFromBundle(CallInst &Assume, Result.AttrKind = Attribute::getAttrKindFromName(BOI.Tag->getKey()); if (bundleHasArgument(BOI, ABA_WasOn)) Result.WasOn = getValueFromBundleOpInfo(Assume, BOI, ABA_WasOn); - auto GetArgOr1 = [&](unsigned Idx) -> unsigned { - if (auto *ConstInt = dyn_cast( - getValueFromBundleOpInfo(Assume, BOI, ABA_Argument + Idx))) - return ConstInt->getZExtValue(); - return 1; - }; if (BOI.End - BOI.Begin > ABA_Argument) - Result.ArgValue = GetArgOr1(0); - if (Result.AttrKind == Attribute::Alignment) - if (BOI.End - BOI.Begin > ABA_Argument + 1) - Result.ArgValue = MinAlign(Result.ArgValue, GetArgOr1(1)); + Result.ArgValue = + cast(getValueFromBundleOpInfo(Assume, BOI, ABA_Argument)) + ->getZExtValue(); return Result; *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***