Merge llvm-project release/16.x llvmorg-16.0.2-0-g18ddebe1a1a9
This updates llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-16.0.2-0-g18ddebe1a1a9 (aka 16.0.2 release). PR: 271047 MFC after: 1 month
This commit is contained in:
commit
9e7101a856
@ -721,23 +721,23 @@ template <> struct MappingTraits<FormatStyle::TrailingCommentsAlignmentStyle> {
|
||||
FormatStyle::TrailingCommentsAlignmentStyle &Value) {
|
||||
IO.enumCase(Value, "Leave",
|
||||
FormatStyle::TrailingCommentsAlignmentStyle(
|
||||
{FormatStyle::TCAS_Leave, 1}));
|
||||
{FormatStyle::TCAS_Leave, 0}));
|
||||
|
||||
IO.enumCase(Value, "Always",
|
||||
FormatStyle::TrailingCommentsAlignmentStyle(
|
||||
{FormatStyle::TCAS_Always, 1}));
|
||||
{FormatStyle::TCAS_Always, 0}));
|
||||
|
||||
IO.enumCase(Value, "Never",
|
||||
FormatStyle::TrailingCommentsAlignmentStyle(
|
||||
{FormatStyle::TCAS_Never, 1}));
|
||||
{FormatStyle::TCAS_Never, 0}));
|
||||
|
||||
// For backwards compatibility
|
||||
IO.enumCase(Value, "true",
|
||||
FormatStyle::TrailingCommentsAlignmentStyle(
|
||||
{FormatStyle::TCAS_Always, 1}));
|
||||
{FormatStyle::TCAS_Always, 0}));
|
||||
IO.enumCase(Value, "false",
|
||||
FormatStyle::TrailingCommentsAlignmentStyle(
|
||||
{FormatStyle::TCAS_Never, 1}));
|
||||
{FormatStyle::TCAS_Never, 0}));
|
||||
}
|
||||
|
||||
static void mapping(IO &IO,
|
||||
|
@ -399,8 +399,7 @@ class AnnotatingParser {
|
||||
FormatToken *Next = CurrentToken->Next;
|
||||
if (PrevPrev && PrevPrev->is(tok::identifier) &&
|
||||
Prev->isOneOf(tok::star, tok::amp, tok::ampamp) &&
|
||||
CurrentToken->is(tok::identifier) &&
|
||||
!Next->isOneOf(tok::equal, tok::l_brace)) {
|
||||
CurrentToken->is(tok::identifier) && Next->isNot(tok::equal)) {
|
||||
Prev->setType(TT_BinaryOperator);
|
||||
LookForDecls = false;
|
||||
}
|
||||
@ -2399,12 +2398,6 @@ class AnnotatingParser {
|
||||
return TT_PointerOrReference;
|
||||
}
|
||||
|
||||
// if (Class* obj { function() })
|
||||
if (PrevToken->Tok.isAnyIdentifier() && NextToken->Tok.isAnyIdentifier() &&
|
||||
NextToken->Next && NextToken->Next->is(tok::l_brace)) {
|
||||
return TT_PointerOrReference;
|
||||
}
|
||||
|
||||
if (PrevToken->endsSequence(tok::r_square, tok::l_square, tok::kw_delete))
|
||||
return TT_UnaryOperator;
|
||||
|
||||
|
@ -257,12 +257,36 @@ static void ClearShadowMemoryForContextStack(uptr stack, uptr ssize) {
|
||||
PoisonShadow(bottom, ssize, 0);
|
||||
}
|
||||
|
||||
INTERCEPTOR(int, getcontext, struct ucontext_t *ucp) {
|
||||
// API does not requires to have ucp clean, and sets only part of fields. We
|
||||
// use ucp->uc_stack to unpoison new stack. We prefer to have zeroes then
|
||||
// uninitialized bytes.
|
||||
ResetContextStack(ucp);
|
||||
return REAL(getcontext)(ucp);
|
||||
INTERCEPTOR(void, makecontext, struct ucontext_t *ucp, void (*func)(), int argc,
|
||||
...) {
|
||||
va_list ap;
|
||||
uptr args[64];
|
||||
// We don't know a better way to forward ... into REAL function. We can
|
||||
// increase args size if neccecary.
|
||||
CHECK_LE(argc, ARRAY_SIZE(args));
|
||||
internal_memset(args, 0, sizeof(args));
|
||||
va_start(ap, argc);
|
||||
for (int i = 0; i < argc; ++i) args[i] = va_arg(ap, uptr);
|
||||
va_end(ap);
|
||||
|
||||
# define ENUMERATE_ARRAY_4(start) \
|
||||
args[start], args[start + 1], args[start + 2], args[start + 3]
|
||||
# define ENUMERATE_ARRAY_16(start) \
|
||||
ENUMERATE_ARRAY_4(start), ENUMERATE_ARRAY_4(start + 4), \
|
||||
ENUMERATE_ARRAY_4(start + 8), ENUMERATE_ARRAY_4(start + 12)
|
||||
# define ENUMERATE_ARRAY_64() \
|
||||
ENUMERATE_ARRAY_16(0), ENUMERATE_ARRAY_16(16), ENUMERATE_ARRAY_16(32), \
|
||||
ENUMERATE_ARRAY_16(48)
|
||||
|
||||
REAL(makecontext)
|
||||
((struct ucontext_t *)ucp, func, argc, ENUMERATE_ARRAY_64());
|
||||
|
||||
# undef ENUMERATE_ARRAY_4
|
||||
# undef ENUMERATE_ARRAY_16
|
||||
# undef ENUMERATE_ARRAY_64
|
||||
|
||||
// Sign the stack so we can identify it for unpoisoning.
|
||||
SignContextStack(ucp);
|
||||
}
|
||||
|
||||
INTERCEPTOR(int, swapcontext, struct ucontext_t *oucp,
|
||||
@ -279,9 +303,6 @@ INTERCEPTOR(int, swapcontext, struct ucontext_t *oucp,
|
||||
ReadContextStack(ucp, &stack, &ssize);
|
||||
ClearShadowMemoryForContextStack(stack, ssize);
|
||||
|
||||
// See getcontext interceptor.
|
||||
ResetContextStack(oucp);
|
||||
|
||||
# if __has_attribute(__indirect_return__) && \
|
||||
(defined(__x86_64__) || defined(__i386__))
|
||||
int (*real_swapcontext)(struct ucontext_t *, struct ucontext_t *)
|
||||
@ -658,11 +679,11 @@ void InitializeAsanInterceptors() {
|
||||
// Intecept jump-related functions.
|
||||
ASAN_INTERCEPT_FUNC(longjmp);
|
||||
|
||||
#if ASAN_INTERCEPT_SWAPCONTEXT
|
||||
ASAN_INTERCEPT_FUNC(getcontext);
|
||||
# if ASAN_INTERCEPT_SWAPCONTEXT
|
||||
ASAN_INTERCEPT_FUNC(swapcontext);
|
||||
#endif
|
||||
#if ASAN_INTERCEPT__LONGJMP
|
||||
ASAN_INTERCEPT_FUNC(makecontext);
|
||||
# endif
|
||||
# if ASAN_INTERCEPT__LONGJMP
|
||||
ASAN_INTERCEPT_FUNC(_longjmp);
|
||||
#endif
|
||||
#if ASAN_INTERCEPT___LONGJMP_CHK
|
||||
|
@ -105,8 +105,8 @@ void AsanApplyToGlobals(globals_op_fptr op, const void *needle);
|
||||
|
||||
void AsanOnDeadlySignal(int, void *siginfo, void *context);
|
||||
|
||||
void SignContextStack(void *context);
|
||||
void ReadContextStack(void *context, uptr *stack, uptr *ssize);
|
||||
void ResetContextStack(void *context);
|
||||
void StopInitOrderChecking();
|
||||
|
||||
// Wrapper for TLS/TSD.
|
||||
|
@ -15,55 +15,56 @@
|
||||
#if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD || \
|
||||
SANITIZER_SOLARIS
|
||||
|
||||
#include "asan_interceptors.h"
|
||||
#include "asan_internal.h"
|
||||
#include "asan_premap_shadow.h"
|
||||
#include "asan_thread.h"
|
||||
#include "sanitizer_common/sanitizer_flags.h"
|
||||
#include "sanitizer_common/sanitizer_freebsd.h"
|
||||
#include "sanitizer_common/sanitizer_libc.h"
|
||||
#include "sanitizer_common/sanitizer_procmaps.h"
|
||||
# include <dlfcn.h>
|
||||
# include <fcntl.h>
|
||||
# include <limits.h>
|
||||
# include <pthread.h>
|
||||
# include <stdio.h>
|
||||
# include <sys/mman.h>
|
||||
# include <sys/resource.h>
|
||||
# include <sys/syscall.h>
|
||||
# include <sys/time.h>
|
||||
# include <sys/types.h>
|
||||
# include <unistd.h>
|
||||
# include <unwind.h>
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <sys/types.h>
|
||||
#include <dlfcn.h>
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <unwind.h>
|
||||
# include "asan_interceptors.h"
|
||||
# include "asan_internal.h"
|
||||
# include "asan_premap_shadow.h"
|
||||
# include "asan_thread.h"
|
||||
# include "sanitizer_common/sanitizer_flags.h"
|
||||
# include "sanitizer_common/sanitizer_freebsd.h"
|
||||
# include "sanitizer_common/sanitizer_hash.h"
|
||||
# include "sanitizer_common/sanitizer_libc.h"
|
||||
# include "sanitizer_common/sanitizer_procmaps.h"
|
||||
|
||||
#if SANITIZER_FREEBSD
|
||||
#include <sys/link_elf.h>
|
||||
#endif
|
||||
# if SANITIZER_FREEBSD
|
||||
# include <sys/link_elf.h>
|
||||
# endif
|
||||
|
||||
#if SANITIZER_SOLARIS
|
||||
#include <link.h>
|
||||
#endif
|
||||
# if SANITIZER_SOLARIS
|
||||
# include <link.h>
|
||||
# endif
|
||||
|
||||
#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS
|
||||
#include <ucontext.h>
|
||||
extern "C" void* _DYNAMIC;
|
||||
#elif SANITIZER_NETBSD
|
||||
#include <link_elf.h>
|
||||
#include <ucontext.h>
|
||||
# if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS
|
||||
# include <ucontext.h>
|
||||
extern "C" void *_DYNAMIC;
|
||||
# elif SANITIZER_NETBSD
|
||||
# include <link_elf.h>
|
||||
# include <ucontext.h>
|
||||
extern Elf_Dyn _DYNAMIC;
|
||||
#else
|
||||
#include <sys/ucontext.h>
|
||||
#include <link.h>
|
||||
# else
|
||||
# include <link.h>
|
||||
# include <sys/ucontext.h>
|
||||
extern ElfW(Dyn) _DYNAMIC[];
|
||||
#endif
|
||||
# endif
|
||||
|
||||
// x86-64 FreeBSD 9.2 and older define 'ucontext_t' incorrectly in
|
||||
// 32-bit mode.
|
||||
#if SANITIZER_FREEBSD && (SANITIZER_WORDSIZE == 32) && \
|
||||
__FreeBSD_version <= 902001 // v9.2
|
||||
#define ucontext_t xucontext_t
|
||||
#endif
|
||||
# if SANITIZER_FREEBSD && (SANITIZER_WORDSIZE == 32) && \
|
||||
__FreeBSD_version <= 902001 // v9.2
|
||||
# define ucontext_t xucontext_t
|
||||
# endif
|
||||
|
||||
typedef enum {
|
||||
ASAN_RT_VERSION_UNDEFINED = 0,
|
||||
@ -74,21 +75,21 @@ typedef enum {
|
||||
// FIXME: perhaps also store abi version here?
|
||||
extern "C" {
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
asan_rt_version_t __asan_rt_version;
|
||||
asan_rt_version_t __asan_rt_version;
|
||||
}
|
||||
|
||||
namespace __asan {
|
||||
|
||||
void InitializePlatformInterceptors() {}
|
||||
void InitializePlatformExceptionHandlers() {}
|
||||
bool IsSystemHeapAddress (uptr addr) { return false; }
|
||||
bool IsSystemHeapAddress(uptr addr) { return false; }
|
||||
|
||||
void *AsanDoesNotSupportStaticLinkage() {
|
||||
// This will fail to link with -static.
|
||||
return &_DYNAMIC;
|
||||
}
|
||||
|
||||
#if ASAN_PREMAP_SHADOW
|
||||
# if ASAN_PREMAP_SHADOW
|
||||
uptr FindPremappedShadowStart(uptr shadow_size_bytes) {
|
||||
uptr granularity = GetMmapGranularity();
|
||||
uptr shadow_start = reinterpret_cast<uptr>(&__asan_shadow);
|
||||
@ -98,14 +99,14 @@ uptr FindPremappedShadowStart(uptr shadow_size_bytes) {
|
||||
UnmapFromTo(shadow_start + shadow_size, shadow_start + premap_shadow_size);
|
||||
return shadow_start;
|
||||
}
|
||||
#endif
|
||||
# endif
|
||||
|
||||
uptr FindDynamicShadowStart() {
|
||||
uptr shadow_size_bytes = MemToShadowSize(kHighMemEnd);
|
||||
#if ASAN_PREMAP_SHADOW
|
||||
# if ASAN_PREMAP_SHADOW
|
||||
if (!PremapShadowFailed())
|
||||
return FindPremappedShadowStart(shadow_size_bytes);
|
||||
#endif
|
||||
# endif
|
||||
|
||||
return MapDynamicShadow(shadow_size_bytes, ASAN_SHADOW_SCALE,
|
||||
/*min_shadow_base_alignment*/ 0, kHighMemEnd);
|
||||
@ -121,11 +122,11 @@ void FlushUnneededASanShadowMemory(uptr p, uptr size) {
|
||||
ReleaseMemoryPagesToOS(MemToShadow(p), MemToShadow(p + size));
|
||||
}
|
||||
|
||||
#if SANITIZER_ANDROID
|
||||
# if SANITIZER_ANDROID
|
||||
// FIXME: should we do anything for Android?
|
||||
void AsanCheckDynamicRTPrereqs() {}
|
||||
void AsanCheckIncompatibleRT() {}
|
||||
#else
|
||||
# else
|
||||
static int FindFirstDSOCallback(struct dl_phdr_info *info, size_t size,
|
||||
void *data) {
|
||||
VReport(2, "info->dlpi_name = %s\tinfo->dlpi_addr = %p\n", info->dlpi_name,
|
||||
@ -154,7 +155,7 @@ static int FindFirstDSOCallback(struct dl_phdr_info *info, size_t size,
|
||||
|
||||
static bool IsDynamicRTName(const char *libname) {
|
||||
return internal_strstr(libname, "libclang_rt.asan") ||
|
||||
internal_strstr(libname, "libasan.so");
|
||||
internal_strstr(libname, "libasan.so");
|
||||
}
|
||||
|
||||
static void ReportIncompatibleRT() {
|
||||
@ -170,9 +171,10 @@ void AsanCheckDynamicRTPrereqs() {
|
||||
const char *first_dso_name = nullptr;
|
||||
dl_iterate_phdr(FindFirstDSOCallback, &first_dso_name);
|
||||
if (first_dso_name && first_dso_name[0] && !IsDynamicRTName(first_dso_name)) {
|
||||
Report("ASan runtime does not come first in initial library list; "
|
||||
"you should either link runtime to your application or "
|
||||
"manually preload it with LD_PRELOAD.\n");
|
||||
Report(
|
||||
"ASan runtime does not come first in initial library list; "
|
||||
"you should either link runtime to your application or "
|
||||
"manually preload it with LD_PRELOAD.\n");
|
||||
Die();
|
||||
}
|
||||
}
|
||||
@ -190,13 +192,14 @@ void AsanCheckIncompatibleRT() {
|
||||
// as early as possible, otherwise ASan interceptors could bind to
|
||||
// the functions in dynamic ASan runtime instead of the functions in
|
||||
// system libraries, causing crashes later in ASan initialization.
|
||||
MemoryMappingLayout proc_maps(/*cache_enabled*/true);
|
||||
MemoryMappingLayout proc_maps(/*cache_enabled*/ true);
|
||||
char filename[PATH_MAX];
|
||||
MemoryMappedSegment segment(filename, sizeof(filename));
|
||||
while (proc_maps.Next(&segment)) {
|
||||
if (IsDynamicRTName(segment.filename)) {
|
||||
Report("Your application is linked against "
|
||||
"incompatible ASan runtimes.\n");
|
||||
Report(
|
||||
"Your application is linked against "
|
||||
"incompatible ASan runtimes.\n");
|
||||
Die();
|
||||
}
|
||||
}
|
||||
@ -206,25 +209,36 @@ void AsanCheckIncompatibleRT() {
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // SANITIZER_ANDROID
|
||||
# endif // SANITIZER_ANDROID
|
||||
|
||||
# if ASAN_INTERCEPT_SWAPCONTEXT
|
||||
void ReadContextStack(void *context, uptr *stack, uptr *ssize) {
|
||||
ucontext_t *ucp = (ucontext_t*)context;
|
||||
*stack = (uptr)ucp->uc_stack.ss_sp;
|
||||
*ssize = ucp->uc_stack.ss_size;
|
||||
constexpr u32 kAsanContextStackFlagsMagic = 0x51260eea;
|
||||
|
||||
static int HashContextStack(const ucontext_t &ucp) {
|
||||
MurMur2Hash64Builder hash(kAsanContextStackFlagsMagic);
|
||||
hash.add(reinterpret_cast<uptr>(ucp.uc_stack.ss_sp));
|
||||
hash.add(ucp.uc_stack.ss_size);
|
||||
return static_cast<int>(hash.get());
|
||||
}
|
||||
|
||||
void ResetContextStack(void *context) {
|
||||
ucontext_t *ucp = (ucontext_t *)context;
|
||||
ucp->uc_stack.ss_sp = nullptr;
|
||||
ucp->uc_stack.ss_size = 0;
|
||||
void SignContextStack(void *context) {
|
||||
ucontext_t *ucp = reinterpret_cast<ucontext_t *>(context);
|
||||
ucp->uc_stack.ss_flags = HashContextStack(*ucp);
|
||||
}
|
||||
|
||||
void ReadContextStack(void *context, uptr *stack, uptr *ssize) {
|
||||
const ucontext_t *ucp = reinterpret_cast<const ucontext_t *>(context);
|
||||
if (HashContextStack(*ucp) == ucp->uc_stack.ss_flags) {
|
||||
*stack = reinterpret_cast<uptr>(ucp->uc_stack.ss_sp);
|
||||
*ssize = ucp->uc_stack.ss_size;
|
||||
return;
|
||||
}
|
||||
*stack = 0;
|
||||
*ssize = 0;
|
||||
}
|
||||
# endif // ASAN_INTERCEPT_SWAPCONTEXT
|
||||
|
||||
void *AsanDlSymNext(const char *sym) {
|
||||
return dlsym(RTLD_NEXT, sym);
|
||||
}
|
||||
void *AsanDlSymNext(const char *sym) { return dlsym(RTLD_NEXT, sym); }
|
||||
|
||||
bool HandleDlopenInit() {
|
||||
// Not supported on this platform.
|
||||
@ -233,7 +247,7 @@ bool HandleDlopenInit() {
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace __asan
|
||||
} // namespace __asan
|
||||
|
||||
#endif // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD ||
|
||||
// SANITIZER_SOLARIS
|
||||
|
@ -38,7 +38,7 @@
|
||||
// _LIBCPP_VERSION represents the version of libc++, which matches the version of LLVM.
|
||||
// Given a LLVM release LLVM XX.YY.ZZ (e.g. LLVM 16.0.1 == 16.00.01), _LIBCPP_VERSION is
|
||||
// defined to XXYYZZ.
|
||||
# define _LIBCPP_VERSION 160001
|
||||
# define _LIBCPP_VERSION 160002
|
||||
|
||||
# define _LIBCPP_CONCAT_IMPL(_X, _Y) _X##_Y
|
||||
# define _LIBCPP_CONCAT(_X, _Y) _LIBCPP_CONCAT_IMPL(_X, _Y)
|
||||
|
@ -1221,8 +1221,8 @@ DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind19Registers_loongarch6jumptoEv)
|
||||
ld.d $r\i, $a0, (8 * \i)
|
||||
.endr
|
||||
|
||||
ld.d $r4, $a0, (8 * 4) // restore $a0 last
|
||||
ld.d $r1, $a0, (8 * 32) // load new pc into $ra
|
||||
ld.d $ra, $a0, (8 * 32) // load new pc into $ra
|
||||
ld.d $a0, $a0, (8 * 4) // restore $a0 last
|
||||
|
||||
jr $ra
|
||||
|
||||
|
@ -177,7 +177,7 @@ inline constexpr ExtensionInfo Extensions[] = {
|
||||
{"brbe", AArch64::AEK_BRBE, "+brbe", "-brbe", FEAT_MAX, "", 0},
|
||||
{"bti", AArch64::AEK_NONE, {}, {}, FEAT_BTI, "+bti", 510},
|
||||
{"crc", AArch64::AEK_CRC, "+crc", "-crc", FEAT_CRC, "+crc", 110},
|
||||
{"crypto", AArch64::AEK_CRYPTO, "+crypto", "-crypto", FEAT_MAX, "", 0},
|
||||
{"crypto", AArch64::AEK_CRYPTO, "+crypto", "-crypto", FEAT_MAX, "+aes,+sha2", 0},
|
||||
{"cssc", AArch64::AEK_CSSC, "+cssc", "-cssc", FEAT_MAX, "", 0},
|
||||
{"d128", AArch64::AEK_D128, "+d128", "-d128", FEAT_MAX, "", 0},
|
||||
{"dgh", AArch64::AEK_NONE, {}, {}, FEAT_DGH, "", 260},
|
||||
|
@ -455,18 +455,15 @@ bool StackProtector::InsertStackProtectors() {
|
||||
if (&BB == FailBB)
|
||||
continue;
|
||||
Instruction *CheckLoc = dyn_cast<ReturnInst>(BB.getTerminator());
|
||||
if (!CheckLoc && !DisableCheckNoReturn) {
|
||||
for (auto &Inst : BB) {
|
||||
auto *CB = dyn_cast<CallBase>(&Inst);
|
||||
if (!CB)
|
||||
continue;
|
||||
if (!CB->doesNotReturn())
|
||||
continue;
|
||||
// Do stack check before non-return calls (e.g: __cxa_throw)
|
||||
CheckLoc = CB;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!CheckLoc && !DisableCheckNoReturn)
|
||||
for (auto &Inst : BB)
|
||||
if (auto *CB = dyn_cast<CallBase>(&Inst))
|
||||
// Do stack check before noreturn calls that aren't nounwind (e.g:
|
||||
// __cxa_throw).
|
||||
if (CB->doesNotReturn() && !CB->doesNotThrow()) {
|
||||
CheckLoc = CB;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!CheckLoc)
|
||||
continue;
|
||||
|
@ -84,8 +84,15 @@ raw_ostream::~raw_ostream() {
|
||||
}
|
||||
|
||||
size_t raw_ostream::preferred_buffer_size() const {
|
||||
#ifdef _WIN32
|
||||
// On Windows BUFSIZ is only 512 which results in more calls to write. This
|
||||
// overhead can cause significant performance degradation. Therefore use a
|
||||
// better default.
|
||||
return (16 * 1024);
|
||||
#else
|
||||
// BUFSIZ is intended to be a reasonable default.
|
||||
return BUFSIZ;
|
||||
#endif
|
||||
}
|
||||
|
||||
void raw_ostream::SetBuffered() {
|
||||
|
@ -1581,15 +1581,17 @@ static void rewriteMemOpOfSelect(SelectInst &SI, T &I,
|
||||
bool IsThen = SuccBB == HeadBI->getSuccessor(0);
|
||||
int SuccIdx = IsThen ? 0 : 1;
|
||||
auto *NewMemOpBB = SuccBB == Tail ? Head : SuccBB;
|
||||
auto &CondMemOp = cast<T>(*I.clone());
|
||||
if (NewMemOpBB != Head) {
|
||||
NewMemOpBB->setName(Head->getName() + (IsThen ? ".then" : ".else"));
|
||||
if (isa<LoadInst>(I))
|
||||
++NumLoadsPredicated;
|
||||
else
|
||||
++NumStoresPredicated;
|
||||
} else
|
||||
} else {
|
||||
CondMemOp.dropUndefImplyingAttrsAndUnknownMetadata();
|
||||
++NumLoadsSpeculated;
|
||||
auto &CondMemOp = cast<T>(*I.clone());
|
||||
}
|
||||
CondMemOp.insertBefore(NewMemOpBB->getTerminator());
|
||||
Value *Ptr = SI.getOperand(1 + SuccIdx);
|
||||
if (auto *PtrTy = Ptr->getType();
|
||||
|
@ -1,10 +1,10 @@
|
||||
// $FreeBSD$
|
||||
|
||||
#define LLVM_REVISION "llvmorg-16.0.1-0-gcd89023f7979"
|
||||
#define LLVM_REVISION "llvmorg-16.0.2-0-g18ddebe1a1a9"
|
||||
#define LLVM_REPOSITORY "https://github.com/llvm/llvm-project.git"
|
||||
|
||||
#define CLANG_REVISION "llvmorg-16.0.1-0-gcd89023f7979"
|
||||
#define CLANG_REVISION "llvmorg-16.0.2-0-g18ddebe1a1a9"
|
||||
#define CLANG_REPOSITORY "https://github.com/llvm/llvm-project.git"
|
||||
|
||||
#define LLDB_REVISION "llvmorg-16.0.1-0-gcd89023f7979"
|
||||
#define LLDB_REVISION "llvmorg-16.0.2-0-g18ddebe1a1a9"
|
||||
#define LLDB_REPOSITORY "https://github.com/llvm/llvm-project.git"
|
||||
|
@ -1,10 +1,10 @@
|
||||
/* $FreeBSD$ */
|
||||
|
||||
#define CLANG_VERSION 16.0.1
|
||||
#define CLANG_VERSION_STRING "16.0.1"
|
||||
#define CLANG_VERSION 16.0.2
|
||||
#define CLANG_VERSION_STRING "16.0.2"
|
||||
#define CLANG_VERSION_MAJOR 16
|
||||
#define CLANG_VERSION_MAJOR_STRING "16"
|
||||
#define CLANG_VERSION_MINOR 0
|
||||
#define CLANG_VERSION_PATCHLEVEL 1
|
||||
#define CLANG_VERSION_PATCHLEVEL 2
|
||||
|
||||
#define CLANG_VENDOR "FreeBSD "
|
||||
|
@ -1,4 +1,4 @@
|
||||
// Local identifier in __FreeBSD_version style
|
||||
#define LLD_FREEBSD_VERSION 1400006
|
||||
|
||||
#define LLD_VERSION_STRING "16.0.1 (FreeBSD llvmorg-16.0.1-0-gcd89023f7979-" __XSTRING(LLD_FREEBSD_VERSION) ")"
|
||||
#define LLD_VERSION_STRING "16.0.2 (FreeBSD llvmorg-16.0.2-0-g18ddebe1a1a9-" __XSTRING(LLD_FREEBSD_VERSION) ")"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#define LLDB_VERSION 16.0.1
|
||||
#define LLDB_VERSION_STRING "16.0.1"
|
||||
#define LLDB_VERSION 16.0.2
|
||||
#define LLDB_VERSION_STRING "16.0.2"
|
||||
#define LLDB_VERSION_MAJOR 16
|
||||
#define LLDB_VERSION_MINOR 0
|
||||
#define LLDB_VERSION_PATCH 1
|
||||
#define LLDB_VERSION_PATCH 2
|
||||
/* #undef LLDB_FULL_VERSION_STRING */
|
||||
|
@ -348,10 +348,10 @@
|
||||
#define PACKAGE_NAME "LLVM"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "LLVM 16.0.1"
|
||||
#define PACKAGE_STRING "LLVM 16.0.2"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "16.0.1"
|
||||
#define PACKAGE_VERSION "16.0.2"
|
||||
|
||||
/* Define to the vendor of this package. */
|
||||
/* #undef PACKAGE_VENDOR */
|
||||
|
@ -74,10 +74,10 @@
|
||||
#define LLVM_VERSION_MINOR 0
|
||||
|
||||
/* Patch version of the LLVM API */
|
||||
#define LLVM_VERSION_PATCH 1
|
||||
#define LLVM_VERSION_PATCH 2
|
||||
|
||||
/* LLVM version string */
|
||||
#define LLVM_VERSION_STRING "16.0.1"
|
||||
#define LLVM_VERSION_STRING "16.0.2"
|
||||
|
||||
/* Whether LLVM records statistics for use with GetStatistics(),
|
||||
* PrintStatistics() or PrintStatisticsJSON()
|
||||
|
@ -1,3 +1,3 @@
|
||||
/* $FreeBSD$ */
|
||||
#define LLVM_REVISION "llvmorg-16.0.1-0-gcd89023f7979"
|
||||
#define LLVM_REVISION "llvmorg-16.0.2-0-g18ddebe1a1a9"
|
||||
#define LLVM_REPOSITORY "https://github.com/llvm/llvm-project.git"
|
||||
|
Loading…
Reference in New Issue
Block a user