aboutsummaryrefslogtreecommitdiff
path: root/lldb/source
diff options
context:
space:
mode:
authorDavid Salinas <david.salinas@amd.com>2021-12-23 17:32:31 +0000
committerDavid Salinas <David.Salinas@amd.com>2022-01-05 17:57:32 +0000
commit859ebca744e634dcc89a2294ffa41574f947bd62 (patch)
treeb63d4ed4573856d0f933e2294e59cddce191a12e /lldb/source
parentdabc101ec0c5492f4ed5fd6ad2f5380233a1bc72 (diff)
downloadllvm-859ebca744e634dcc89a2294ffa41574f947bd62.tar.gz
llvm-859ebca744e634dcc89a2294ffa41574f947bd62.tar.bz2
llvm-859ebca744e634dcc89a2294ffa41574f947bd62.zip
Revert D109159 "[amdgpu] Enable selection of `s_cselect_b64`."
This reverts commit 640beb38e7710b939b3cfb3f4c54accc694b1d30. That commit caused performance degradtion in Quicksilver test QS:sGPU and a functional test failure in (rocPRIM rocprim.device_segmented_radix_sort). Reverting until we have a better solution to s_cselect_b64 codegen cleanup Change-Id: Ibf8e397df94001f248fba609f072088a46abae08 Reviewed By: kzhuravl Differential Revision: https://reviews.llvm.org/D115960 Change-Id: Id169459ce4dfffa857d5645a0af50b0063ce1105
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp84
-rw-r--r--lldb/source/lldb.cpp77
2 files changed, 161 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp
new file mode 100644
index 000000000000..c0c819632851
--- /dev/null
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp
@@ -0,0 +1,84 @@
+//===-- LibCxxOptional.cpp ------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "LibCxx.h"
+#include "lldb/DataFormatters/FormattersHelpers.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+namespace {
+
+class OptionalFrontEnd : public SyntheticChildrenFrontEnd {
+public:
+ OptionalFrontEnd(ValueObject &valobj) : SyntheticChildrenFrontEnd(valobj) {
+ Update();
+ }
+
+ size_t GetIndexOfChildWithName(ConstString name) override {
+ return formatters::ExtractIndexFromString(name.GetCString());
+ }
+
+ bool MightHaveChildren() override { return true; }
+ bool Update() override;
+ size_t CalculateNumChildren() override { return m_has_value ? 1U : 0U; }
+ ValueObjectSP GetChildAtIndex(size_t idx) override;
+
+private:
+ /// True iff the option contains a value.
+ bool m_has_value = false;
+};
+} // namespace
+
+bool OptionalFrontEnd::Update() {
+ ValueObjectSP engaged_sp(
+ m_backend.GetChildMemberWithName(ConstString("__engaged_"), true));
+
+ if (!engaged_sp)
+ return false;
+
+ // __engaged_ is a bool flag and is true if the optional contains a value.
+ // Converting it to unsigned gives us a size of 1 if it contains a value
+ // and 0 if not.
+ m_has_value = engaged_sp->GetValueAsUnsigned(0) == 1;
+
+ return false;
+}
+
+ValueObjectSP OptionalFrontEnd::GetChildAtIndex(size_t idx) {
+ if (!m_has_value)
+ return ValueObjectSP();
+
+ // __val_ contains the underlying value of an optional if it has one.
+ // Currently because it is part of an anonymous union GetChildMemberWithName()
+ // does not peer through and find it unless we are at the parent itself.
+ // We can obtain the parent through __engaged_.
+ ValueObjectSP val_sp(
+ m_backend.GetChildMemberWithName(ConstString("__engaged_"), true)
+ ->GetParent()
+ ->GetChildAtIndex(0, true)
+ ->GetChildMemberWithName(ConstString("__val_"), true));
+
+ if (!val_sp)
+ return ValueObjectSP();
+
+ CompilerType holder_type = val_sp->GetCompilerType();
+
+ if (!holder_type)
+ return ValueObjectSP();
+
+ return val_sp->Clone(ConstString("Value"));
+}
+
+SyntheticChildrenFrontEnd *
+formatters::LibcxxOptionalFrontEndCreator(CXXSyntheticChildren *,
+ lldb::ValueObjectSP valobj_sp) {
+ if (valobj_sp)
+ return new OptionalFrontEnd(*valobj_sp);
+ return nullptr;
+}
diff --git a/lldb/source/lldb.cpp b/lldb/source/lldb.cpp
new file mode 100644
index 000000000000..371902f6c1b5
--- /dev/null
+++ b/lldb/source/lldb.cpp
@@ -0,0 +1,77 @@
+//===-- lldb.cpp ----------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "VCSVersion.inc"
+#include "lldb/lldb-private.h"
+#include "clang/Basic/Version.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+// LLDB_VERSION_STRING is set through a define so unlike the other defines
+// expanded with CMake, it lacks the double quotes.
+#define QUOTE(str) #str
+#define EXPAND_AND_QUOTE(str) QUOTE(str)
+
+static const char *GetLLDBVersion() {
+#ifdef LLDB_VERSION_STRING
+ return EXPAND_AND_QUOTE(LLDB_VERSION_STRING);
+#else
+ return "lldb version " CLANG_VERSION_STRING;
+#endif
+}
+
+static const char *GetLLDBRevision() {
+#ifdef LLDB_REVISION
+ return LLDB_REVISION;
+#else
+ return NULL;
+#endif
+}
+
+static const char *GetLLDBRepository() {
+#ifdef LLDB_REPOSITORY
+ return LLDB_REPOSITORY;
+#else
+ return NULL;
+#endif
+}
+
+const char *lldb_private::GetVersion() {
+ static std::string g_version_str;
+ if (g_version_str.empty()) {
+ const char *lldb_version = GetLLDBVersion();
+ const char *lldb_repo = GetLLDBRepository();
+ const char *lldb_rev = GetLLDBRevision();
+ g_version_str += lldb_version;
+ if (lldb_repo || lldb_rev) {
+ g_version_str += " (";
+ if (lldb_repo)
+ g_version_str += lldb_repo;
+ if (lldb_repo && lldb_rev)
+ g_version_str += " ";
+ if (lldb_rev) {
+ g_version_str += "revision ";
+ g_version_str += lldb_rev;
+ }
+ g_version_str += ")";
+ }
+
+ std::string clang_rev(clang::getClangRevision());
+ if (clang_rev.length() > 0) {
+ g_version_str += "\n clang revision ";
+ g_version_str += clang_rev;
+ }
+ std::string llvm_rev(clang::getLLVMRevision());
+ if (llvm_rev.length() > 0) {
+ g_version_str += "\n llvm revision ";
+ g_version_str += llvm_rev;
+ }
+ }
+ return g_version_str.c_str();
+}