svn commit: r365757 - in vendor/llvm-project/release-11.x: clang/include/clang/AST clang/include/clang/Basic clang/lib/AST clang/lib/Basic clang/lib/CodeGen clang/lib/Driver/ToolChains clang/lib/Dr...
Dimitry Andric
dim at FreeBSD.org
Tue Sep 15 18:55:41 UTC 2020
Author: dim
Date: Tue Sep 15 18:55:37 2020
New Revision: 365757
URL: https://svnweb.freebsd.org/changeset/base/365757
Log:
Vendor import of llvm-project branch release/11.x
llvmorg-11.0.0-rc2-91-g6e042866c30.
Modified:
vendor/llvm-project/release-11.x/clang/include/clang/AST/ASTContext.h
vendor/llvm-project/release-11.x/clang/include/clang/Basic/DiagnosticSemaKinds.td
vendor/llvm-project/release-11.x/clang/lib/AST/ASTContext.cpp
vendor/llvm-project/release-11.x/clang/lib/AST/DeclBase.cpp
vendor/llvm-project/release-11.x/clang/lib/AST/ItaniumMangle.cpp
vendor/llvm-project/release-11.x/clang/lib/Basic/Targets.cpp
vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGDebugInfo.cpp
vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.cpp
vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.h
vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp
vendor/llvm-project/release-11.x/clang/lib/CodeGen/CodeGenTypes.cpp
vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Arch/Sparc.cpp
vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Clang.cpp
vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/OpenBSD.cpp
vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/OpenBSD.h
vendor/llvm-project/release-11.x/clang/lib/Format/TokenAnnotator.cpp
vendor/llvm-project/release-11.x/clang/lib/Frontend/InitHeaderSearch.cpp
vendor/llvm-project/release-11.x/clang/lib/Headers/altivec.h
vendor/llvm-project/release-11.x/clang/lib/Sema/SemaChecking.cpp
vendor/llvm-project/release-11.x/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
vendor/llvm-project/release-11.x/clang/lib/Sema/SemaType.cpp
vendor/llvm-project/release-11.x/clang/lib/Serialization/ASTReaderDecl.cpp
vendor/llvm-project/release-11.x/clang/lib/StaticAnalyzer/Checkers/CastValueChecker.cpp
vendor/llvm-project/release-11.x/clang/lib/StaticAnalyzer/Core/DynamicType.cpp
vendor/llvm-project/release-11.x/compiler-rt/lib/builtins/clear_cache.c
vendor/llvm-project/release-11.x/compiler-rt/lib/builtins/cpu_model.c
vendor/llvm-project/release-11.x/compiler-rt/lib/profile/GCDAProfiling.c
vendor/llvm-project/release-11.x/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_netbsd.h
vendor/llvm-project/release-11.x/libunwind/src/AddressSpace.hpp
vendor/llvm-project/release-11.x/lld/COFF/Writer.cpp
vendor/llvm-project/release-11.x/lld/ELF/DWARF.cpp
vendor/llvm-project/release-11.x/lld/ELF/DWARF.h
vendor/llvm-project/release-11.x/lld/ELF/LinkerScript.cpp
vendor/llvm-project/release-11.x/lld/ELF/LinkerScript.h
vendor/llvm-project/release-11.x/lld/ELF/OutputSections.cpp
vendor/llvm-project/release-11.x/lld/ELF/SyntheticSections.cpp
vendor/llvm-project/release-11.x/lld/docs/ELF/linker_script.rst
vendor/llvm-project/release-11.x/lld/docs/ReleaseNotes.rst
vendor/llvm-project/release-11.x/lldb/source/Target/Target.cpp
vendor/llvm-project/release-11.x/llvm/include/llvm/ADT/CoalescingBitVector.h
vendor/llvm-project/release-11.x/llvm/include/llvm/Analysis/InstructionSimplify.h
vendor/llvm-project/release-11.x/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
vendor/llvm-project/release-11.x/llvm/include/llvm/IR/IRBuilder.h
vendor/llvm-project/release-11.x/llvm/lib/Analysis/InstructionSimplify.cpp
vendor/llvm-project/release-11.x/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
vendor/llvm-project/release-11.x/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
vendor/llvm-project/release-11.x/llvm/lib/CodeGen/MachineCopyPropagation.cpp
vendor/llvm-project/release-11.x/llvm/lib/CodeGen/RegAllocFast.cpp
vendor/llvm-project/release-11.x/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
vendor/llvm-project/release-11.x/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
vendor/llvm-project/release-11.x/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
vendor/llvm-project/release-11.x/llvm/lib/CodeGen/TargetLoweringBase.cpp
vendor/llvm-project/release-11.x/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
vendor/llvm-project/release-11.x/llvm/lib/IR/IRBuilder.cpp
vendor/llvm-project/release-11.x/llvm/lib/IR/LegacyPassManager.cpp
vendor/llvm-project/release-11.x/llvm/lib/Support/X86TargetParser.cpp
vendor/llvm-project/release-11.x/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
vendor/llvm-project/release-11.x/llvm/lib/Target/AArch64/SVEInstrFormats.td
vendor/llvm-project/release-11.x/llvm/lib/Target/AMDGPU/SIFoldOperands.cpp
vendor/llvm-project/release-11.x/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
vendor/llvm-project/release-11.x/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h
vendor/llvm-project/release-11.x/llvm/lib/Target/PowerPC/PPCBoolRetToInt.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/PPCMIPeephole.cpp
vendor/llvm-project/release-11.x/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
vendor/llvm-project/release-11.x/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
Modified: vendor/llvm-project/release-11.x/clang/include/clang/AST/ASTContext.h
==============================================================================
--- vendor/llvm-project/release-11.x/clang/include/clang/AST/ASTContext.h Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/include/clang/AST/ASTContext.h Tue Sep 15 18:55:37 2020 (r365757)
@@ -60,6 +60,7 @@
#include "llvm/Support/Allocator.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h"
+#include "llvm/Support/TypeSize.h"
#include <cassert>
#include <cstddef>
#include <cstdint>
@@ -1296,6 +1297,21 @@ class ASTContext : public RefCountedBase<ASTContext> {
/// Returns a vla type where known sizes are replaced with [*].
QualType getVariableArrayDecayedType(QualType Ty) const;
+
+ // Convenience struct to return information about a builtin vector type.
+ struct BuiltinVectorTypeInfo {
+ QualType ElementType;
+ llvm::ElementCount EC;
+ unsigned NumVectors;
+ BuiltinVectorTypeInfo(QualType ElementType, llvm::ElementCount EC,
+ unsigned NumVectors)
+ : ElementType(ElementType), EC(EC), NumVectors(NumVectors) {}
+ };
+
+ /// Returns the element type, element count and number of vectors
+ /// (in case of tuple) for a builtin vector type.
+ BuiltinVectorTypeInfo
+ getBuiltinVectorTypeInfo(const BuiltinType *VecTy) const;
/// Return the unique reference to a scalable vector type of the specified
/// element type and scalable number of elements.
Modified: vendor/llvm-project/release-11.x/clang/include/clang/Basic/DiagnosticSemaKinds.td
==============================================================================
--- vendor/llvm-project/release-11.x/clang/include/clang/Basic/DiagnosticSemaKinds.td Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/include/clang/Basic/DiagnosticSemaKinds.td Tue Sep 15 18:55:37 2020 (r365757)
@@ -6021,9 +6021,8 @@ def err_func_def_incomplete_result : Error<
def err_atomic_specifier_bad_type
: Error<"_Atomic cannot be applied to "
"%select{incomplete |array |function |reference |atomic |qualified "
- "|sizeless ||integer |integer }0type "
- "%1 %select{|||||||which is not trivially copyable|with less than "
- "1 byte of precision|with a non power of 2 precision}0">;
+ "|sizeless ||integer }0type "
+ "%1 %select{|||||||which is not trivially copyable|}0">;
// Expressions.
def ext_sizeof_alignof_function_type : Extension<
@@ -7941,6 +7940,8 @@ def err_atomic_exclusive_builtin_pointer_size : Error<
" 1,2,4 or 8 byte type (%0 invalid)">;
def err_atomic_builtin_ext_int_size : Error<
"Atomic memory operand must have a power-of-two size">;
+def err_atomic_builtin_ext_int_prohibit : Error<
+ "argument to atomic builtin of type '_ExtInt' is not supported">;
def err_atomic_op_needs_atomic : Error<
"address argument to atomic operation must be a pointer to _Atomic "
"type (%0 invalid)">;
Modified: vendor/llvm-project/release-11.x/clang/lib/AST/ASTContext.cpp
==============================================================================
--- vendor/llvm-project/release-11.x/clang/lib/AST/ASTContext.cpp Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/AST/ASTContext.cpp Tue Sep 15 18:55:37 2020 (r365757)
@@ -3634,6 +3634,119 @@ QualType ASTContext::getIncompleteArrayType(QualType e
return QualType(newType, 0);
}
+ASTContext::BuiltinVectorTypeInfo
+ASTContext::getBuiltinVectorTypeInfo(const BuiltinType *Ty) const {
+#define SVE_INT_ELTTY(BITS, ELTS, SIGNED, NUMVECTORS) \
+ {getIntTypeForBitwidth(BITS, SIGNED), llvm::ElementCount(ELTS, true), \
+ NUMVECTORS};
+
+#define SVE_ELTTY(ELTTY, ELTS, NUMVECTORS) \
+ {ELTTY, llvm::ElementCount(ELTS, true), NUMVECTORS};
+
+ switch (Ty->getKind()) {
+ default:
+ llvm_unreachable("Unsupported builtin vector type");
+ case BuiltinType::SveInt8:
+ return SVE_INT_ELTTY(8, 16, true, 1);
+ case BuiltinType::SveUint8:
+ return SVE_INT_ELTTY(8, 16, false, 1);
+ case BuiltinType::SveInt8x2:
+ return SVE_INT_ELTTY(8, 16, true, 2);
+ case BuiltinType::SveUint8x2:
+ return SVE_INT_ELTTY(8, 16, false, 2);
+ case BuiltinType::SveInt8x3:
+ return SVE_INT_ELTTY(8, 16, true, 3);
+ case BuiltinType::SveUint8x3:
+ return SVE_INT_ELTTY(8, 16, false, 3);
+ case BuiltinType::SveInt8x4:
+ return SVE_INT_ELTTY(8, 16, true, 4);
+ case BuiltinType::SveUint8x4:
+ return SVE_INT_ELTTY(8, 16, false, 4);
+ case BuiltinType::SveInt16:
+ return SVE_INT_ELTTY(16, 8, true, 1);
+ case BuiltinType::SveUint16:
+ return SVE_INT_ELTTY(16, 8, false, 1);
+ case BuiltinType::SveInt16x2:
+ return SVE_INT_ELTTY(16, 8, true, 2);
+ case BuiltinType::SveUint16x2:
+ return SVE_INT_ELTTY(16, 8, false, 2);
+ case BuiltinType::SveInt16x3:
+ return SVE_INT_ELTTY(16, 8, true, 3);
+ case BuiltinType::SveUint16x3:
+ return SVE_INT_ELTTY(16, 8, false, 3);
+ case BuiltinType::SveInt16x4:
+ return SVE_INT_ELTTY(16, 8, true, 4);
+ case BuiltinType::SveUint16x4:
+ return SVE_INT_ELTTY(16, 8, false, 4);
+ case BuiltinType::SveInt32:
+ return SVE_INT_ELTTY(32, 4, true, 1);
+ case BuiltinType::SveUint32:
+ return SVE_INT_ELTTY(32, 4, false, 1);
+ case BuiltinType::SveInt32x2:
+ return SVE_INT_ELTTY(32, 4, true, 2);
+ case BuiltinType::SveUint32x2:
+ return SVE_INT_ELTTY(32, 4, false, 2);
+ case BuiltinType::SveInt32x3:
+ return SVE_INT_ELTTY(32, 4, true, 3);
+ case BuiltinType::SveUint32x3:
+ return SVE_INT_ELTTY(32, 4, false, 3);
+ case BuiltinType::SveInt32x4:
+ return SVE_INT_ELTTY(32, 4, true, 4);
+ case BuiltinType::SveUint32x4:
+ return SVE_INT_ELTTY(32, 4, false, 4);
+ case BuiltinType::SveInt64:
+ return SVE_INT_ELTTY(64, 2, true, 1);
+ case BuiltinType::SveUint64:
+ return SVE_INT_ELTTY(64, 2, false, 1);
+ case BuiltinType::SveInt64x2:
+ return SVE_INT_ELTTY(64, 2, true, 2);
+ case BuiltinType::SveUint64x2:
+ return SVE_INT_ELTTY(64, 2, false, 2);
+ case BuiltinType::SveInt64x3:
+ return SVE_INT_ELTTY(64, 2, true, 3);
+ case BuiltinType::SveUint64x3:
+ return SVE_INT_ELTTY(64, 2, false, 3);
+ case BuiltinType::SveInt64x4:
+ return SVE_INT_ELTTY(64, 2, true, 4);
+ case BuiltinType::SveUint64x4:
+ return SVE_INT_ELTTY(64, 2, false, 4);
+ case BuiltinType::SveBool:
+ return SVE_ELTTY(BoolTy, 16, 1);
+ case BuiltinType::SveFloat16:
+ return SVE_ELTTY(HalfTy, 8, 1);
+ case BuiltinType::SveFloat16x2:
+ return SVE_ELTTY(HalfTy, 8, 2);
+ case BuiltinType::SveFloat16x3:
+ return SVE_ELTTY(HalfTy, 8, 3);
+ case BuiltinType::SveFloat16x4:
+ return SVE_ELTTY(HalfTy, 8, 4);
+ case BuiltinType::SveFloat32:
+ return SVE_ELTTY(FloatTy, 4, 1);
+ case BuiltinType::SveFloat32x2:
+ return SVE_ELTTY(FloatTy, 4, 2);
+ case BuiltinType::SveFloat32x3:
+ return SVE_ELTTY(FloatTy, 4, 3);
+ case BuiltinType::SveFloat32x4:
+ return SVE_ELTTY(FloatTy, 4, 4);
+ case BuiltinType::SveFloat64:
+ return SVE_ELTTY(DoubleTy, 2, 1);
+ case BuiltinType::SveFloat64x2:
+ return SVE_ELTTY(DoubleTy, 2, 2);
+ case BuiltinType::SveFloat64x3:
+ return SVE_ELTTY(DoubleTy, 2, 3);
+ case BuiltinType::SveFloat64x4:
+ return SVE_ELTTY(DoubleTy, 2, 4);
+ case BuiltinType::SveBFloat16:
+ return SVE_ELTTY(BFloat16Ty, 8, 1);
+ case BuiltinType::SveBFloat16x2:
+ return SVE_ELTTY(BFloat16Ty, 8, 2);
+ case BuiltinType::SveBFloat16x3:
+ return SVE_ELTTY(BFloat16Ty, 8, 3);
+ case BuiltinType::SveBFloat16x4:
+ return SVE_ELTTY(BFloat16Ty, 8, 4);
+ }
+}
+
/// getScalableVectorType - Return the unique reference to a scalable vector
/// type of the specified element type and size. VectorType must be a built-in
/// type.
Modified: vendor/llvm-project/release-11.x/clang/lib/AST/DeclBase.cpp
==============================================================================
--- vendor/llvm-project/release-11.x/clang/lib/AST/DeclBase.cpp Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/AST/DeclBase.cpp Tue Sep 15 18:55:37 2020 (r365757)
@@ -1487,6 +1487,13 @@ static bool shouldBeHidden(NamedDecl *D) {
if (FD->isFunctionTemplateSpecialization())
return true;
+ // Hide destructors that are invalid. There should always be one destructor,
+ // but if it is an invalid decl, another one is created. We need to hide the
+ // invalid one from places that expect exactly one destructor, like the
+ // serialization code.
+ if (isa<CXXDestructorDecl>(D) && D->isInvalidDecl())
+ return true;
+
return false;
}
Modified: vendor/llvm-project/release-11.x/clang/lib/AST/ItaniumMangle.cpp
==============================================================================
--- vendor/llvm-project/release-11.x/clang/lib/AST/ItaniumMangle.cpp Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/AST/ItaniumMangle.cpp Tue Sep 15 18:55:37 2020 (r365757)
@@ -3248,7 +3248,7 @@ static StringRef mangleAArch64VectorBase(const Builtin
case BuiltinType::Double:
return "Float64";
case BuiltinType::BFloat16:
- return "BFloat16";
+ return "Bfloat16";
default:
llvm_unreachable("Unexpected vector element base type");
}
Modified: vendor/llvm-project/release-11.x/clang/lib/Basic/Targets.cpp
==============================================================================
--- vendor/llvm-project/release-11.x/clang/lib/Basic/Targets.cpp Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/Basic/Targets.cpp Tue Sep 15 18:55:37 2020 (r365757)
@@ -409,8 +409,6 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple,
return new SolarisTargetInfo<SparcV8TargetInfo>(Triple, Opts);
case llvm::Triple::NetBSD:
return new NetBSDTargetInfo<SparcV8TargetInfo>(Triple, Opts);
- case llvm::Triple::OpenBSD:
- return new OpenBSDTargetInfo<SparcV8TargetInfo>(Triple, Opts);
case llvm::Triple::RTEMS:
return new RTEMSTargetInfo<SparcV8TargetInfo>(Triple, Opts);
default:
@@ -424,8 +422,6 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple,
return new LinuxTargetInfo<SparcV8elTargetInfo>(Triple, Opts);
case llvm::Triple::NetBSD:
return new NetBSDTargetInfo<SparcV8elTargetInfo>(Triple, Opts);
- case llvm::Triple::OpenBSD:
- return new OpenBSDTargetInfo<SparcV8elTargetInfo>(Triple, Opts);
case llvm::Triple::RTEMS:
return new RTEMSTargetInfo<SparcV8elTargetInfo>(Triple, Opts);
default:
Modified: vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGDebugInfo.cpp
==============================================================================
--- vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGDebugInfo.cpp Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGDebugInfo.cpp Tue Sep 15 18:55:37 2020 (r365757)
@@ -719,23 +719,39 @@ llvm::DIType *CGDebugInfo::CreateType(const BuiltinTyp
case BuiltinType::Id: \
return getOrCreateStructPtrType("opencl_" #ExtType, Id##Ty);
#include "clang/Basic/OpenCLExtensionTypes.def"
- // TODO: real support for SVE types requires more infrastructure
- // to be added first. The types have a variable length and are
- // represented in debug info as types whose length depends on a
- // target-specific pseudo register.
-#define SVE_TYPE(Name, Id, SingletonId) \
- case BuiltinType::Id:
+
+#define SVE_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
#include "clang/Basic/AArch64SVEACLETypes.def"
- {
- unsigned DiagID = CGM.getDiags().getCustomDiagID(
- DiagnosticsEngine::Error,
- "cannot yet generate debug info for SVE type '%0'");
- auto Name = BT->getName(CGM.getContext().getPrintingPolicy());
- CGM.getDiags().Report(DiagID) << Name;
- // Return something safe.
- return CreateType(cast<const BuiltinType>(CGM.getContext().IntTy));
- }
+ {
+ ASTContext::BuiltinVectorTypeInfo Info =
+ CGM.getContext().getBuiltinVectorTypeInfo(BT);
+ unsigned NumElemsPerVG = (Info.EC.Min * Info.NumVectors) / 2;
+ // Debuggers can't extract 1bit from a vector, so will display a
+ // bitpattern for svbool_t instead.
+ if (Info.ElementType == CGM.getContext().BoolTy) {
+ NumElemsPerVG /= 8;
+ Info.ElementType = CGM.getContext().UnsignedCharTy;
+ }
+
+ auto *LowerBound =
+ llvm::ConstantAsMetadata::get(llvm::ConstantInt::getSigned(
+ llvm::Type::getInt64Ty(CGM.getLLVMContext()), 0));
+ SmallVector<int64_t, 9> Expr(
+ {llvm::dwarf::DW_OP_constu, NumElemsPerVG, llvm::dwarf::DW_OP_bregx,
+ /* AArch64::VG */ 46, 0, llvm::dwarf::DW_OP_mul,
+ llvm::dwarf::DW_OP_constu, 1, llvm::dwarf::DW_OP_minus});
+ auto *UpperBound = DBuilder.createExpression(Expr);
+
+ llvm::Metadata *Subscript = DBuilder.getOrCreateSubrange(
+ /*count*/ nullptr, LowerBound, UpperBound, /*stride*/ nullptr);
+ llvm::DINodeArray SubscriptArray = DBuilder.getOrCreateArray(Subscript);
+ llvm::DIType *ElemTy =
+ getOrCreateType(Info.ElementType, TheCU->getFile());
+ auto Align = getTypeAlignIfRequired(BT, CGM.getContext());
+ return DBuilder.createVectorType(/*Size*/ 0, Align, ElemTy,
+ SubscriptArray);
+ }
case BuiltinType::UChar:
case BuiltinType::Char_U:
Encoding = llvm::dwarf::DW_ATE_unsigned_char;
Modified: vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.cpp
==============================================================================
--- vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.cpp Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.cpp Tue Sep 15 18:55:37 2020 (r365757)
@@ -29,7 +29,6 @@
#include "llvm/ADT/SetOperations.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Bitcode/BitcodeReader.h"
-#include "llvm/Frontend/OpenMP/OMPIRBuilder.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/GlobalValue.h"
@@ -1064,23 +1063,6 @@ CGOpenMPRuntime::CGOpenMPRuntime(CodeGenModule &CGM, S
StringRef Separator)
: CGM(CGM), FirstSeparator(FirstSeparator), Separator(Separator),
OMPBuilder(CGM.getModule()), OffloadEntriesInfoManager(CGM) {
- ASTContext &C = CGM.getContext();
- RecordDecl *RD = C.buildImplicitRecord("ident_t");
- QualType KmpInt32Ty = C.getIntTypeForBitwidth(/*DestWidth=*/32, /*Signed=*/1);
- RD->startDefinition();
- // reserved_1
- addFieldToRecordDecl(C, RD, KmpInt32Ty);
- // flags
- addFieldToRecordDecl(C, RD, KmpInt32Ty);
- // reserved_2
- addFieldToRecordDecl(C, RD, KmpInt32Ty);
- // reserved_3
- addFieldToRecordDecl(C, RD, KmpInt32Ty);
- // psource
- addFieldToRecordDecl(C, RD, C.VoidPtrTy);
- RD->completeDefinition();
- IdentQTy = C.getRecordType(RD);
- IdentTy = CGM.getTypes().ConvertRecordDeclType(RD);
KmpCriticalNameTy = llvm::ArrayType::get(CGM.Int32Ty, /*NumElements*/ 8);
// Initialize Types used in OpenMPIRBuilder from OMPKinds.def
@@ -1397,39 +1379,6 @@ createConstantGlobalStructAndAddToParent(CodeGenModule
Fields.finishAndAddTo(Parent);
}
-Address CGOpenMPRuntime::getOrCreateDefaultLocation(unsigned Flags) {
- CharUnits Align = CGM.getContext().getTypeAlignInChars(IdentQTy);
- unsigned Reserved2Flags = getDefaultLocationReserved2Flags();
- FlagsTy FlagsKey(Flags, Reserved2Flags);
- llvm::Value *Entry = OpenMPDefaultLocMap.lookup(FlagsKey);
- if (!Entry) {
- if (!DefaultOpenMPPSource) {
- // Initialize default location for psource field of ident_t structure of
- // all ident_t objects. Format is ";file;function;line;column;;".
- // Taken from
- // https://github.com/llvm/llvm-project/blob/master/openmp/runtime/src/kmp_str.cpp
- DefaultOpenMPPSource =
- CGM.GetAddrOfConstantCString(";unknown;unknown;0;0;;").getPointer();
- DefaultOpenMPPSource =
- llvm::ConstantExpr::getBitCast(DefaultOpenMPPSource, CGM.Int8PtrTy);
- }
-
- llvm::Constant *Data[] = {
- llvm::ConstantInt::getNullValue(CGM.Int32Ty),
- llvm::ConstantInt::get(CGM.Int32Ty, Flags),
- llvm::ConstantInt::get(CGM.Int32Ty, Reserved2Flags),
- llvm::ConstantInt::getNullValue(CGM.Int32Ty), DefaultOpenMPPSource};
- llvm::GlobalValue *DefaultOpenMPLocation =
- createGlobalStruct(CGM, IdentQTy, isDefaultLocationConstant(), Data, "",
- llvm::GlobalValue::PrivateLinkage);
- DefaultOpenMPLocation->setUnnamedAddr(
- llvm::GlobalValue::UnnamedAddr::Global);
-
- OpenMPDefaultLocMap[FlagsKey] = Entry = DefaultOpenMPLocation;
- }
- return Address(Entry, Align);
-}
-
void CGOpenMPRuntime::setLocThreadIdInsertPt(CodeGenFunction &CGF,
bool AtCurrentPoint) {
auto &Elem = OpenMPLocThreadIDMap.FindAndConstruct(CGF.CurFn);
@@ -1458,62 +1407,24 @@ void CGOpenMPRuntime::clearLocThreadIdInsertPt(CodeGen
llvm::Value *CGOpenMPRuntime::emitUpdateLocation(CodeGenFunction &CGF,
SourceLocation Loc,
unsigned Flags) {
- Flags |= OMP_IDENT_KMPC;
- // If no debug info is generated - return global default location.
+ llvm::Constant *SrcLocStr;
if (CGM.getCodeGenOpts().getDebugInfo() == codegenoptions::NoDebugInfo ||
- Loc.isInvalid())
- return getOrCreateDefaultLocation(Flags).getPointer();
-
- assert(CGF.CurFn && "No function in current CodeGenFunction.");
-
- CharUnits Align = CGM.getContext().getTypeAlignInChars(IdentQTy);
- Address LocValue = Address::invalid();
- auto I = OpenMPLocThreadIDMap.find(CGF.CurFn);
- if (I != OpenMPLocThreadIDMap.end())
- LocValue = Address(I->second.DebugLoc, Align);
-
- // OpenMPLocThreadIDMap may have null DebugLoc and non-null ThreadID, if
- // GetOpenMPThreadID was called before this routine.
- if (!LocValue.isValid()) {
- // Generate "ident_t .kmpc_loc.addr;"
- Address AI = CGF.CreateMemTemp(IdentQTy, ".kmpc_loc.addr");
- auto &Elem = OpenMPLocThreadIDMap.FindAndConstruct(CGF.CurFn);
- Elem.second.DebugLoc = AI.getPointer();
- LocValue = AI;
-
- if (!Elem.second.ServiceInsertPt)
- setLocThreadIdInsertPt(CGF);
- CGBuilderTy::InsertPointGuard IPG(CGF.Builder);
- CGF.Builder.SetInsertPoint(Elem.second.ServiceInsertPt);
- CGF.Builder.CreateMemCpy(LocValue, getOrCreateDefaultLocation(Flags),
- CGF.getTypeSize(IdentQTy));
- }
-
- // char **psource = &.kmpc_loc_<flags>.addr.psource;
- LValue Base = CGF.MakeAddrLValue(LocValue, IdentQTy);
- auto Fields = cast<RecordDecl>(IdentQTy->getAsTagDecl())->field_begin();
- LValue PSource =
- CGF.EmitLValueForField(Base, *std::next(Fields, IdentField_PSource));
-
- llvm::Value *OMPDebugLoc = OpenMPDebugLocMap.lookup(Loc.getRawEncoding());
- if (OMPDebugLoc == nullptr) {
- SmallString<128> Buffer2;
- llvm::raw_svector_ostream OS2(Buffer2);
- // Build debug location
- PresumedLoc PLoc = CGF.getContext().getSourceManager().getPresumedLoc(Loc);
- OS2 << ";" << PLoc.getFilename() << ";";
+ Loc.isInvalid()) {
+ SrcLocStr = OMPBuilder.getOrCreateDefaultSrcLocStr();
+ } else {
+ std::string FunctionName = "";
if (const auto *FD = dyn_cast_or_null<FunctionDecl>(CGF.CurFuncDecl))
- OS2 << FD->getQualifiedNameAsString();
- OS2 << ";" << PLoc.getLine() << ";" << PLoc.getColumn() << ";;";
- OMPDebugLoc = CGF.Builder.CreateGlobalStringPtr(OS2.str());
- OpenMPDebugLocMap[Loc.getRawEncoding()] = OMPDebugLoc;
+ FunctionName = FD->getQualifiedNameAsString();
+ PresumedLoc PLoc = CGF.getContext().getSourceManager().getPresumedLoc(Loc);
+ const char *FileName = PLoc.getFilename();
+ unsigned Line = PLoc.getLine();
+ unsigned Column = PLoc.getColumn();
+ SrcLocStr = OMPBuilder.getOrCreateSrcLocStr(FunctionName.c_str(), FileName,
+ Line, Column);
}
- // *psource = ";<File>;<Function>;<Line>;<Column>;;";
- CGF.EmitStoreOfScalar(OMPDebugLoc, PSource);
-
- // Our callers always pass this to a runtime function, so for
- // convenience, go ahead and return a naked pointer.
- return LocValue.getPointer();
+ unsigned Reserved2Flags = getDefaultLocationReserved2Flags();
+ return OMPBuilder.getOrCreateIdent(SrcLocStr, llvm::omp::IdentFlag(Flags),
+ Reserved2Flags);
}
llvm::Value *CGOpenMPRuntime::getThreadID(CodeGenFunction &CGF,
@@ -1595,7 +1506,7 @@ void CGOpenMPRuntime::functionFinished(CodeGenFunction
}
llvm::Type *CGOpenMPRuntime::getIdentTyPointerTy() {
- return IdentTy->getPointerTo();
+ return OMPBuilder.IdentPtr;
}
llvm::Type *CGOpenMPRuntime::getKmpc_MicroPointerTy() {
@@ -7354,6 +7265,8 @@ class MappableExprsHandler { (private)
// &p, &p, sizeof(float*), TARGET_PARAM | TO | FROM
//
// map(p[1:24])
+ // &p, &p[1], 24*sizeof(float), TARGET_PARAM | TO | FROM | PTR_AND_OBJ
+ // in unified shared memory mode or for local pointers
// p, &p[1], 24*sizeof(float), TARGET_PARAM | TO | FROM
//
// map(s)
@@ -7489,6 +7402,7 @@ class MappableExprsHandler { (private)
// Track if the map information being generated is the first for a list of
// components.
bool IsExpressionFirstInfo = true;
+ bool FirstPointerInComplexData = false;
Address BP = Address::invalid();
const Expr *AssocExpr = I->getAssociatedExpression();
const auto *AE = dyn_cast<ArraySubscriptExpr>(AssocExpr);
@@ -7531,10 +7445,15 @@ class MappableExprsHandler { (private)
QualType Ty =
I->getAssociatedDeclaration()->getType().getNonReferenceType();
if (Ty->isAnyPointerType() && std::next(I) != CE) {
- BP = CGF.EmitLoadOfPointer(BP, Ty->castAs<PointerType>());
-
- // We do not need to generate individual map information for the
- // pointer, it can be associated with the combined storage.
+ // No need to generate individual map information for the pointer, it
+ // can be associated with the combined storage if shared memory mode is
+ // active or the base declaration is not global variable.
+ const auto *VD = dyn_cast<VarDecl>(I->getAssociatedDeclaration());
+ if (CGF.CGM.getOpenMPRuntime().hasRequiresUnifiedSharedMemory() ||
+ !VD || VD->hasLocalStorage())
+ BP = CGF.EmitLoadOfPointer(BP, Ty->castAs<PointerType>());
+ else
+ FirstPointerInComplexData = IsCaptureFirstInfo;
++I;
}
}
@@ -7570,8 +7489,19 @@ class MappableExprsHandler { (private)
EncounteredME = dyn_cast<MemberExpr>(I->getAssociatedExpression());
// If we encounter a PTR_AND_OBJ entry from now on it should be marked
// as MEMBER_OF the parent struct.
- if (EncounteredME)
+ if (EncounteredME) {
ShouldBeMemberOf = true;
+ // Do not emit as complex pointer if this is actually not array-like
+ // expression.
+ if (FirstPointerInComplexData) {
+ QualType Ty = std::prev(I)
+ ->getAssociatedDeclaration()
+ ->getType()
+ .getNonReferenceType();
+ BP = CGF.EmitLoadOfPointer(BP, Ty->castAs<PointerType>());
+ FirstPointerInComplexData = false;
+ }
+ }
}
auto Next = std::next(I);
@@ -7704,10 +7634,11 @@ class MappableExprsHandler { (private)
// same expression except for the first one. We also need to signal
// this map is the first one that relates with the current capture
// (there is a set of entries for each capture).
- OpenMPOffloadMappingFlags Flags = getMapTypeBits(
- MapType, MapModifiers, IsImplicit,
- !IsExpressionFirstInfo || RequiresReference,
- IsCaptureFirstInfo && !RequiresReference);
+ OpenMPOffloadMappingFlags Flags =
+ getMapTypeBits(MapType, MapModifiers, IsImplicit,
+ !IsExpressionFirstInfo || RequiresReference ||
+ FirstPointerInComplexData,
+ IsCaptureFirstInfo && !RequiresReference);
if (!IsExpressionFirstInfo) {
// If we have a PTR_AND_OBJ pair where the OBJ is a pointer as well,
@@ -7765,6 +7696,7 @@ class MappableExprsHandler { (private)
IsExpressionFirstInfo = false;
IsCaptureFirstInfo = false;
+ FirstPointerInComplexData = false;
}
}
}
@@ -7995,6 +7927,10 @@ class MappableExprsHandler { (private)
// emission of that entry until the whole struct has been processed.
llvm::MapVector<const ValueDecl *, SmallVector<DeferredDevicePtrEntryTy, 4>>
DeferredInfo;
+ MapBaseValuesArrayTy UseDevicePtrBasePointers;
+ MapValuesArrayTy UseDevicePtrPointers;
+ MapValuesArrayTy UseDevicePtrSizes;
+ MapFlagsArrayTy UseDevicePtrTypes;
for (const auto *C :
CurExecDir->getClausesOfKind<OMPUseDevicePtrClause>()) {
@@ -8011,15 +7947,27 @@ class MappableExprsHandler { (private)
// We potentially have map information for this declaration already.
// Look for the first set of components that refer to it.
if (It != Info.end()) {
- auto CI = std::find_if(
- It->second.begin(), It->second.end(), [VD](const MapInfo &MI) {
- return MI.Components.back().getAssociatedDeclaration() == VD;
- });
+ auto *CI = llvm::find_if(It->second, [VD](const MapInfo &MI) {
+ return MI.Components.back().getAssociatedDeclaration() == VD;
+ });
// If we found a map entry, signal that the pointer has to be returned
// and move on to the next declaration.
+ // Exclude cases where the base pointer is mapped as array subscript,
+ // array section or array shaping. The base address is passed as a
+ // pointer to base in this case and cannot be used as a base for
+ // use_device_ptr list item.
if (CI != It->second.end()) {
- CI->ReturnDevicePointer = true;
- continue;
+ auto PrevCI = std::next(CI->Components.rbegin());
+ const auto *VarD = dyn_cast<VarDecl>(VD);
+ if (CGF.CGM.getOpenMPRuntime().hasRequiresUnifiedSharedMemory() ||
+ isa<MemberExpr>(IE) ||
+ !VD->getType().getNonReferenceType()->isPointerType() ||
+ PrevCI == CI->Components.rend() ||
+ isa<MemberExpr>(PrevCI->getAssociatedExpression()) || !VarD ||
+ VarD->hasLocalStorage()) {
+ CI->ReturnDevicePointer = true;
+ continue;
+ }
}
}
@@ -8040,10 +7988,12 @@ class MappableExprsHandler { (private)
} else {
llvm::Value *Ptr =
CGF.EmitLoadOfScalar(CGF.EmitLValue(IE), IE->getExprLoc());
- BasePointers.emplace_back(Ptr, VD);
- Pointers.push_back(Ptr);
- Sizes.push_back(llvm::Constant::getNullValue(CGF.Int64Ty));
- Types.push_back(OMP_MAP_RETURN_PARAM | OMP_MAP_TARGET_PARAM);
+ UseDevicePtrBasePointers.emplace_back(Ptr, VD);
+ UseDevicePtrPointers.push_back(Ptr);
+ UseDevicePtrSizes.push_back(
+ llvm::Constant::getNullValue(CGF.Int64Ty));
+ UseDevicePtrTypes.push_back(OMP_MAP_RETURN_PARAM |
+ OMP_MAP_TARGET_PARAM);
}
}
}
@@ -8104,10 +8054,12 @@ class MappableExprsHandler { (private)
Ptr = CGF.EmitLValue(IE).getPointer(CGF);
else
Ptr = CGF.EmitScalarExpr(IE);
- BasePointers.emplace_back(Ptr, VD);
- Pointers.push_back(Ptr);
- Sizes.push_back(llvm::Constant::getNullValue(CGF.Int64Ty));
- Types.push_back(OMP_MAP_RETURN_PARAM | OMP_MAP_TARGET_PARAM);
+ UseDevicePtrBasePointers.emplace_back(Ptr, VD);
+ UseDevicePtrPointers.push_back(Ptr);
+ UseDevicePtrSizes.push_back(
+ llvm::Constant::getNullValue(CGF.Int64Ty));
+ UseDevicePtrTypes.push_back(OMP_MAP_RETURN_PARAM |
+ OMP_MAP_TARGET_PARAM);
}
}
}
@@ -8197,6 +8149,12 @@ class MappableExprsHandler { (private)
Sizes.append(CurSizes.begin(), CurSizes.end());
Types.append(CurTypes.begin(), CurTypes.end());
}
+ // Append data for use_device_ptr clauses.
+ BasePointers.append(UseDevicePtrBasePointers.begin(),
+ UseDevicePtrBasePointers.end());
+ Pointers.append(UseDevicePtrPointers.begin(), UseDevicePtrPointers.end());
+ Sizes.append(UseDevicePtrSizes.begin(), UseDevicePtrSizes.end());
+ Types.append(UseDevicePtrTypes.begin(), UseDevicePtrTypes.end());
}
/// Generate all the base pointers, section pointers, sizes and map types for
Modified: vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.h
==============================================================================
--- vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.h Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntime.h Tue Sep 15 18:55:37 2020 (r365757)
@@ -374,17 +374,7 @@ class CGOpenMPRuntime { (protected)
private:
/// An OpenMP-IR-Builder instance.
llvm::OpenMPIRBuilder OMPBuilder;
- /// Default const ident_t object used for initialization of all other
- /// ident_t objects.
- llvm::Constant *DefaultOpenMPPSource = nullptr;
- using FlagsTy = std::pair<unsigned, unsigned>;
- /// Map of flags and corresponding default locations.
- using OpenMPDefaultLocMapTy = llvm::DenseMap<FlagsTy, llvm::Value *>;
- OpenMPDefaultLocMapTy OpenMPDefaultLocMap;
- Address getOrCreateDefaultLocation(unsigned Flags);
- QualType IdentQTy;
- llvm::StructType *IdentTy = nullptr;
/// Map for SourceLocation and OpenMP runtime library debug locations.
typedef llvm::DenseMap<unsigned, llvm::Value *> OpenMPDebugLocMapTy;
OpenMPDebugLocMapTy OpenMPDebugLocMap;
Modified: vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp
==============================================================================
--- vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp Tue Sep 15 18:55:37 2020 (r365757)
@@ -2857,8 +2857,12 @@ static llvm::Value *castValueToType(CodeGenFunction &C
Address CastItem = CGF.CreateMemTemp(CastTy);
Address ValCastItem = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
CastItem, Val->getType()->getPointerTo(CastItem.getAddressSpace()));
- CGF.EmitStoreOfScalar(Val, ValCastItem, /*Volatile=*/false, ValTy);
- return CGF.EmitLoadOfScalar(CastItem, /*Volatile=*/false, CastTy, Loc);
+ CGF.EmitStoreOfScalar(Val, ValCastItem, /*Volatile=*/false, ValTy,
+ LValueBaseInfo(AlignmentSource::Type),
+ TBAAAccessInfo());
+ return CGF.EmitLoadOfScalar(CastItem, /*Volatile=*/false, CastTy, Loc,
+ LValueBaseInfo(AlignmentSource::Type),
+ TBAAAccessInfo());
}
/// This function creates calls to one of two shuffle functions to copy
@@ -2945,9 +2949,14 @@ static void shuffleAndStore(CodeGenFunction &CGF, Addr
ThenBB, ExitBB);
CGF.EmitBlock(ThenBB);
llvm::Value *Res = createRuntimeShuffleFunction(
- CGF, CGF.EmitLoadOfScalar(Ptr, /*Volatile=*/false, IntType, Loc),
+ CGF,
+ CGF.EmitLoadOfScalar(Ptr, /*Volatile=*/false, IntType, Loc,
+ LValueBaseInfo(AlignmentSource::Type),
+ TBAAAccessInfo()),
IntType, Offset, Loc);
- CGF.EmitStoreOfScalar(Res, ElemPtr, /*Volatile=*/false, IntType);
+ CGF.EmitStoreOfScalar(Res, ElemPtr, /*Volatile=*/false, IntType,
+ LValueBaseInfo(AlignmentSource::Type),
+ TBAAAccessInfo());
Address LocalPtr = Bld.CreateConstGEP(Ptr, 1);
Address LocalElemPtr = Bld.CreateConstGEP(ElemPtr, 1);
PhiSrc->addIncoming(LocalPtr.getPointer(), ThenBB);
@@ -2956,9 +2965,14 @@ static void shuffleAndStore(CodeGenFunction &CGF, Addr
CGF.EmitBlock(ExitBB);
} else {
llvm::Value *Res = createRuntimeShuffleFunction(
- CGF, CGF.EmitLoadOfScalar(Ptr, /*Volatile=*/false, IntType, Loc),
+ CGF,
+ CGF.EmitLoadOfScalar(Ptr, /*Volatile=*/false, IntType, Loc,
+ LValueBaseInfo(AlignmentSource::Type),
+ TBAAAccessInfo()),
IntType, Offset, Loc);
- CGF.EmitStoreOfScalar(Res, ElemPtr, /*Volatile=*/false, IntType);
+ CGF.EmitStoreOfScalar(Res, ElemPtr, /*Volatile=*/false, IntType,
+ LValueBaseInfo(AlignmentSource::Type),
+ TBAAAccessInfo());
Ptr = Bld.CreateConstGEP(Ptr, 1);
ElemPtr = Bld.CreateConstGEP(ElemPtr, 1);
}
@@ -3112,12 +3126,14 @@ static void emitReductionListCopy(
} else {
switch (CGF.getEvaluationKind(Private->getType())) {
case TEK_Scalar: {
- llvm::Value *Elem =
- CGF.EmitLoadOfScalar(SrcElementAddr, /*Volatile=*/false,
- Private->getType(), Private->getExprLoc());
+ llvm::Value *Elem = CGF.EmitLoadOfScalar(
+ SrcElementAddr, /*Volatile=*/false, Private->getType(),
+ Private->getExprLoc(), LValueBaseInfo(AlignmentSource::Type),
+ TBAAAccessInfo());
// Store the source element value to the dest element address.
- CGF.EmitStoreOfScalar(Elem, DestElementAddr, /*Volatile=*/false,
- Private->getType());
+ CGF.EmitStoreOfScalar(
+ Elem, DestElementAddr, /*Volatile=*/false, Private->getType(),
+ LValueBaseInfo(AlignmentSource::Type), TBAAAccessInfo());
break;
}
case TEK_Complex: {
@@ -3260,8 +3276,9 @@ static llvm::Value *emitInterWarpCopyFunction(CodeGenM
Address AddrReduceListArg = CGF.GetAddrOfLocalVar(&ReduceListArg);
Address LocalReduceList(
Bld.CreatePointerBitCastOrAddrSpaceCast(
- CGF.EmitLoadOfScalar(AddrReduceListArg, /*Volatile=*/false,
- C.VoidPtrTy, Loc),
+ CGF.EmitLoadOfScalar(
+ AddrReduceListArg, /*Volatile=*/false, C.VoidPtrTy, Loc,
+ LValueBaseInfo(AlignmentSource::Type), TBAAAccessInfo()),
CGF.ConvertTypeForMem(ReductionArrayTy)->getPointerTo()),
CGF.getPointerAlign());
@@ -3339,10 +3356,13 @@ static llvm::Value *emitInterWarpCopyFunction(CodeGenM
// elem = *elemptr
//*MediumPtr = elem
- llvm::Value *Elem =
- CGF.EmitLoadOfScalar(ElemPtr, /*Volatile=*/false, CType, Loc);
+ llvm::Value *Elem = CGF.EmitLoadOfScalar(
+ ElemPtr, /*Volatile=*/false, CType, Loc,
+ LValueBaseInfo(AlignmentSource::Type), TBAAAccessInfo());
// Store the source element value to the dest element address.
- CGF.EmitStoreOfScalar(Elem, MediumPtr, /*Volatile=*/true, CType);
+ CGF.EmitStoreOfScalar(Elem, MediumPtr, /*Volatile=*/true, CType,
+ LValueBaseInfo(AlignmentSource::Type),
+ TBAAAccessInfo());
Bld.CreateBr(MergeBB);
@@ -3722,8 +3742,9 @@ static llvm::Value *emitListToGlobalCopyFunction(
GlobLVal.setAddress(Address(BufferPtr, GlobLVal.getAlignment()));
switch (CGF.getEvaluationKind(Private->getType())) {
case TEK_Scalar: {
- llvm::Value *V = CGF.EmitLoadOfScalar(ElemPtr, /*Volatile=*/false,
- Private->getType(), Loc);
+ llvm::Value *V = CGF.EmitLoadOfScalar(
+ ElemPtr, /*Volatile=*/false, Private->getType(), Loc,
+ LValueBaseInfo(AlignmentSource::Type), TBAAAccessInfo());
CGF.EmitStoreOfScalar(V, GlobLVal);
break;
}
@@ -3926,7 +3947,9 @@ static llvm::Value *emitGlobalToListCopyFunction(
switch (CGF.getEvaluationKind(Private->getType())) {
case TEK_Scalar: {
llvm::Value *V = CGF.EmitLoadOfScalar(GlobLVal, Loc);
- CGF.EmitStoreOfScalar(V, ElemPtr, /*Volatile=*/false, Private->getType());
+ CGF.EmitStoreOfScalar(V, ElemPtr, /*Volatile=*/false, Private->getType(),
+ LValueBaseInfo(AlignmentSource::Type),
+ TBAAAccessInfo());
break;
}
case TEK_Complex: {
Modified: vendor/llvm-project/release-11.x/clang/lib/CodeGen/CodeGenTypes.cpp
==============================================================================
--- vendor/llvm-project/release-11.x/clang/lib/CodeGen/CodeGenTypes.cpp Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/CodeGen/CodeGenTypes.cpp Tue Sep 15 18:55:37 2020 (r365757)
@@ -533,99 +533,60 @@ llvm::Type *CodeGenTypes::ConvertType(QualType T) {
case BuiltinType::OCLReserveID:
ResultType = CGM.getOpenCLRuntime().convertOpenCLSpecificType(Ty);
break;
-#define GET_SVE_INT_VEC(BITS, ELTS) \
- llvm::ScalableVectorType::get( \
- llvm::IntegerType::get(getLLVMContext(), BITS), ELTS);
case BuiltinType::SveInt8:
case BuiltinType::SveUint8:
- return GET_SVE_INT_VEC(8, 16);
case BuiltinType::SveInt8x2:
case BuiltinType::SveUint8x2:
- return GET_SVE_INT_VEC(8, 32);
case BuiltinType::SveInt8x3:
case BuiltinType::SveUint8x3:
- return GET_SVE_INT_VEC(8, 48);
case BuiltinType::SveInt8x4:
case BuiltinType::SveUint8x4:
- return GET_SVE_INT_VEC(8, 64);
case BuiltinType::SveInt16:
case BuiltinType::SveUint16:
- return GET_SVE_INT_VEC(16, 8);
case BuiltinType::SveInt16x2:
case BuiltinType::SveUint16x2:
- return GET_SVE_INT_VEC(16, 16);
case BuiltinType::SveInt16x3:
case BuiltinType::SveUint16x3:
- return GET_SVE_INT_VEC(16, 24);
case BuiltinType::SveInt16x4:
case BuiltinType::SveUint16x4:
- return GET_SVE_INT_VEC(16, 32);
case BuiltinType::SveInt32:
case BuiltinType::SveUint32:
- return GET_SVE_INT_VEC(32, 4);
case BuiltinType::SveInt32x2:
case BuiltinType::SveUint32x2:
- return GET_SVE_INT_VEC(32, 8);
case BuiltinType::SveInt32x3:
case BuiltinType::SveUint32x3:
- return GET_SVE_INT_VEC(32, 12);
case BuiltinType::SveInt32x4:
case BuiltinType::SveUint32x4:
- return GET_SVE_INT_VEC(32, 16);
case BuiltinType::SveInt64:
case BuiltinType::SveUint64:
- return GET_SVE_INT_VEC(64, 2);
case BuiltinType::SveInt64x2:
case BuiltinType::SveUint64x2:
- return GET_SVE_INT_VEC(64, 4);
case BuiltinType::SveInt64x3:
case BuiltinType::SveUint64x3:
- return GET_SVE_INT_VEC(64, 6);
case BuiltinType::SveInt64x4:
case BuiltinType::SveUint64x4:
- return GET_SVE_INT_VEC(64, 8);
case BuiltinType::SveBool:
- return GET_SVE_INT_VEC(1, 16);
-#undef GET_SVE_INT_VEC
-#define GET_SVE_FP_VEC(TY, ISFP16, ELTS) \
- llvm::ScalableVectorType::get( \
- getTypeForFormat(getLLVMContext(), \
- Context.getFloatTypeSemantics(Context.TY), \
- /* UseNativeHalf = */ ISFP16), \
- ELTS);
case BuiltinType::SveFloat16:
- return GET_SVE_FP_VEC(HalfTy, true, 8);
case BuiltinType::SveFloat16x2:
- return GET_SVE_FP_VEC(HalfTy, true, 16);
case BuiltinType::SveFloat16x3:
- return GET_SVE_FP_VEC(HalfTy, true, 24);
case BuiltinType::SveFloat16x4:
- return GET_SVE_FP_VEC(HalfTy, true, 32);
case BuiltinType::SveFloat32:
- return GET_SVE_FP_VEC(FloatTy, false, 4);
case BuiltinType::SveFloat32x2:
- return GET_SVE_FP_VEC(FloatTy, false, 8);
case BuiltinType::SveFloat32x3:
- return GET_SVE_FP_VEC(FloatTy, false, 12);
case BuiltinType::SveFloat32x4:
- return GET_SVE_FP_VEC(FloatTy, false, 16);
case BuiltinType::SveFloat64:
- return GET_SVE_FP_VEC(DoubleTy, false, 2);
case BuiltinType::SveFloat64x2:
- return GET_SVE_FP_VEC(DoubleTy, false, 4);
case BuiltinType::SveFloat64x3:
- return GET_SVE_FP_VEC(DoubleTy, false, 6);
case BuiltinType::SveFloat64x4:
- return GET_SVE_FP_VEC(DoubleTy, false, 8);
case BuiltinType::SveBFloat16:
- return GET_SVE_FP_VEC(BFloat16Ty, false, 8);
case BuiltinType::SveBFloat16x2:
- return GET_SVE_FP_VEC(BFloat16Ty, false, 16);
case BuiltinType::SveBFloat16x3:
- return GET_SVE_FP_VEC(BFloat16Ty, false, 24);
- case BuiltinType::SveBFloat16x4:
- return GET_SVE_FP_VEC(BFloat16Ty, false, 32);
-#undef GET_SVE_FP_VEC
+ case BuiltinType::SveBFloat16x4: {
+ ASTContext::BuiltinVectorTypeInfo Info =
+ Context.getBuiltinVectorTypeInfo(cast<BuiltinType>(Ty));
+ return llvm::ScalableVectorType::get(ConvertType(Info.ElementType),
+ Info.EC.Min * Info.NumVectors);
+ }
case BuiltinType::Dependent:
#define BUILTIN_TYPE(Id, SingletonId)
#define PLACEHOLDER_TYPE(Id, SingletonId) \
Modified: vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Arch/Sparc.cpp
==============================================================================
--- vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Arch/Sparc.cpp Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Arch/Sparc.cpp Tue Sep 15 18:55:37 2020 (r365757)
@@ -21,12 +21,19 @@ using namespace llvm::opt;
const char *sparc::getSparcAsmModeForCPU(StringRef Name,
const llvm::Triple &Triple) {
if (Triple.getArch() == llvm::Triple::sparcv9) {
+ const char *DefV9CPU;
+
+ if (Triple.isOSLinux() || Triple.isOSFreeBSD() || Triple.isOSOpenBSD())
+ DefV9CPU = "-Av9a";
+ else
+ DefV9CPU = "-Av9";
+
return llvm::StringSwitch<const char *>(Name)
.Case("niagara", "-Av9b")
.Case("niagara2", "-Av9b")
.Case("niagara3", "-Av9d")
.Case("niagara4", "-Av9d")
- .Default("-Av9");
+ .Default(DefV9CPU);
} else {
return llvm::StringSwitch<const char *>(Name)
.Case("v8", "-Av8")
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 Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/Clang.cpp Tue Sep 15 18:55:37 2020 (r365757)
@@ -498,7 +498,7 @@ static codegenoptions::DebugInfoKind DebugLevelToInfoK
return codegenoptions::DebugLineTablesOnly;
if (A.getOption().matches(options::OPT_gline_directives_only))
return codegenoptions::DebugDirectivesOnly;
- return codegenoptions::DebugInfoConstructor;
+ return codegenoptions::LimitedDebugInfo;
}
static bool mustUseNonLeafFramePointerForTarget(const llvm::Triple &Triple) {
@@ -2380,7 +2380,7 @@ static void CollectArgsForIntegratedAssembler(Compilat
CmdArgs.push_back(Value.data());
} else {
RenderDebugEnablingArgs(Args, CmdArgs,
- codegenoptions::DebugInfoConstructor,
+ codegenoptions::LimitedDebugInfo,
DwarfVersion, llvm::DebuggerKind::Default);
}
} else if (Value.startswith("-mcpu") || Value.startswith("-mfpu") ||
@@ -3653,7 +3653,7 @@ static void RenderDebugOptions(const ToolChain &TC, co
if (const Arg *A =
Args.getLastArg(options::OPT_g_Group, options::OPT_gsplit_dwarf,
options::OPT_gsplit_dwarf_EQ)) {
- DebugInfoKind = codegenoptions::DebugInfoConstructor;
+ DebugInfoKind = codegenoptions::LimitedDebugInfo;
// If the last option explicitly specified a debug-info level, use it.
if (checkDebugInfoOption(A, Args, D, TC) &&
@@ -3758,7 +3758,7 @@ static void RenderDebugOptions(const ToolChain &TC, co
if (checkDebugInfoOption(A, Args, D, TC)) {
if (DebugInfoKind != codegenoptions::DebugLineTablesOnly &&
DebugInfoKind != codegenoptions::DebugDirectivesOnly) {
- DebugInfoKind = codegenoptions::DebugInfoConstructor;
+ DebugInfoKind = codegenoptions::LimitedDebugInfo;
CmdArgs.push_back("-dwarf-ext-refs");
CmdArgs.push_back("-fmodule-format=obj");
}
@@ -3778,9 +3778,7 @@ static void RenderDebugOptions(const ToolChain &TC, co
TC.GetDefaultStandaloneDebug());
if (const Arg *A = Args.getLastArg(options::OPT_fstandalone_debug))
(void)checkDebugInfoOption(A, Args, D, TC);
- if ((DebugInfoKind == codegenoptions::LimitedDebugInfo ||
- DebugInfoKind == codegenoptions::DebugInfoConstructor) &&
- NeedFullDebug)
+ if (DebugInfoKind == codegenoptions::LimitedDebugInfo && NeedFullDebug)
DebugInfoKind = codegenoptions::FullDebugInfo;
if (Args.hasFlag(options::OPT_gembed_source, options::OPT_gno_embed_source,
@@ -6566,7 +6564,7 @@ void Clang::AddClangCLArgs(const ArgList &Args, types:
options::OPT_gline_tables_only)) {
*EmitCodeView = true;
if (DebugInfoArg->getOption().matches(options::OPT__SLASH_Z7))
- *DebugInfoKind = codegenoptions::DebugInfoConstructor;
+ *DebugInfoKind = codegenoptions::LimitedDebugInfo;
else
*DebugInfoKind = codegenoptions::DebugLineTablesOnly;
} else {
@@ -6863,7 +6861,7 @@ void ClangAs::ConstructJob(Compilation &C, const JobAc
// the guard for source type, however there is a test which asserts
// that some assembler invocation receives no -debug-info-kind,
// and it's not clear whether that test is just overly restrictive.
- DebugInfoKind = (WantDebug ? codegenoptions::DebugInfoConstructor
+ DebugInfoKind = (WantDebug ? codegenoptions::LimitedDebugInfo
: codegenoptions::NoDebugInfo);
// Add the -fdebug-compilation-dir flag if needed.
addDebugCompDirArg(Args, CmdArgs, C.getDriver().getVFS());
Modified: vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/OpenBSD.cpp
==============================================================================
--- vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/OpenBSD.cpp Tue Sep 15 17:13:29 2020 (r365756)
+++ vendor/llvm-project/release-11.x/clang/lib/Driver/ToolChains/OpenBSD.cpp Tue Sep 15 18:55:37 2020 (r365757)
@@ -10,10 +10,12 @@
#include "Arch/Mips.h"
#include "Arch/Sparc.h"
#include "CommonArgs.h"
+#include "clang/Config/config.h"
#include "clang/Driver/Compilation.h"
#include "clang/Driver/Options.h"
#include "clang/Driver/SanitizerArgs.h"
#include "llvm/Option/ArgList.h"
+#include "llvm/Support/Path.h"
using namespace clang::driver;
using namespace clang::driver::tools;
@@ -41,15 +43,6 @@ void openbsd::Assembler::ConstructJob(Compilation &C,
CmdArgs.push_back("-many");
break;
- case llvm::Triple::sparc:
- case llvm::Triple::sparcel: {
- CmdArgs.push_back("-32");
- std::string CPU = getCPUName(Args, getToolChain().getTriple());
- CmdArgs.push_back(sparc::getSparcAsmModeForCPU(CPU, getToolChain().getTriple()));
- AddAssemblerKPIC(getToolChain(), Args, CmdArgs);
- break;
- }
-
case llvm::Triple::sparcv9: {
CmdArgs.push_back("-64");
std::string CPU = getCPUName(Args, getToolChain().getTriple());
@@ -256,6 +249,45 @@ OpenBSD::OpenBSD(const Driver &D, const llvm::Triple &
getFilePaths().push_back(getDriver().SysRoot + "/usr/lib");
}
+void OpenBSD::AddClangSystemIncludeArgs(
+ const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args) const {
+ const Driver &D = getDriver();
+
+ if (DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
+ return;
+
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-all
mailing list