diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2023-04-22 13:38:13 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2023-04-22 13:38:13 +0000 |
| commit | 86321b98854d834e516cc65ddd09ef53e930fc4c (patch) | |
| tree | 41cca4d40c59161100bc4ddad210a20a65b90d57 /llvm | |
| parent | 8a37c71e9d8855c91b9ef296ed389248f960bb52 (diff) | |
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/TargetParser/AArch64TargetParser.h | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/StackProtector.cpp | 21 | ||||
| -rw-r--r-- | llvm/lib/Support/raw_ostream.cpp | 7 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SROA.cpp | 6 |
4 files changed, 21 insertions, 15 deletions
diff --git a/llvm/include/llvm/TargetParser/AArch64TargetParser.h b/llvm/include/llvm/TargetParser/AArch64TargetParser.h index 11fce886ffb8..1326968e34de 100644 --- a/llvm/include/llvm/TargetParser/AArch64TargetParser.h +++ b/llvm/include/llvm/TargetParser/AArch64TargetParser.h @@ -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}, diff --git a/llvm/lib/CodeGen/StackProtector.cpp b/llvm/lib/CodeGen/StackProtector.cpp index 46685f7b8208..c5cf6ae6578b 100644 --- a/llvm/lib/CodeGen/StackProtector.cpp +++ b/llvm/lib/CodeGen/StackProtector.cpp @@ -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; diff --git a/llvm/lib/Support/raw_ostream.cpp b/llvm/lib/Support/raw_ostream.cpp index 7b9b8b2f53fb..fae4a4308fd7 100644 --- a/llvm/lib/Support/raw_ostream.cpp +++ b/llvm/lib/Support/raw_ostream.cpp @@ -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() { diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index 8339981e1bdc..818d64725893 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -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(); |
