Add AutoUpgrade function to add new address space datalayout string to existing datalayouts.
Summary:
Add function to AutoUpgrade to change the datalayout of old X86 datalayout strings.
This adds "-p270:32:32-p271:32:32-p272:64:64" to X86 datalayouts that are otherwise valid
and don't already contain it.
This also removes the compatibility changes in https://reviews.llvm.org/D66843.
Datalayout change in https://reviews.llvm.org/D64931.
Reviewers: rnk, echristo
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67631
llvm-svn: 372267
diff --git a/llvm/unittests/Bitcode/CMakeLists.txt b/llvm/unittests/Bitcode/CMakeLists.txt
index 7e9d1bc..e329e98 100644
--- a/llvm/unittests/Bitcode/CMakeLists.txt
+++ b/llvm/unittests/Bitcode/CMakeLists.txt
@@ -8,4 +8,5 @@
add_llvm_unittest(BitcodeTests
BitReaderTest.cpp
+ DataLayoutUpgradeTest.cpp
)
diff --git a/llvm/unittests/Bitcode/DataLayoutUpgradeTest.cpp b/llvm/unittests/Bitcode/DataLayoutUpgradeTest.cpp
new file mode 100644
index 0000000..c924181
--- /dev/null
+++ b/llvm/unittests/Bitcode/DataLayoutUpgradeTest.cpp
@@ -0,0 +1,59 @@
+//===- DataLayoutUpgradeTest.cpp - Tests for DataLayout upgrades ----------===//
+//
+// 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 "llvm/IR/AutoUpgrade.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+namespace {
+
+TEST(DataLayoutUpgradeTest, ValidDataLayoutUpgrade) {
+ std::string DL1 =
+ UpgradeDataLayoutString("e-m:e-p:32:32-i64:64-f80:128-n8:16:32:64-S128",
+ "x86_64-unknown-linux-gnu");
+ std::string DL2 = UpgradeDataLayoutString(
+ "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32", "i686-pc-windows-msvc");
+ std::string DL3 = UpgradeDataLayoutString("e-m:o-i64:64-i128:128-n32:64-S128",
+ "x86_64-apple-macosx");
+ EXPECT_EQ(DL1, "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64"
+ "-f80:128-n8:16:32:64-S128");
+ EXPECT_EQ(DL2, "e-m:w-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64"
+ "-f80:32-n8:16:32-S32");
+ EXPECT_EQ(DL3, "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128"
+ "-n32:64-S128");
+}
+
+TEST(DataLayoutUpgradeTest, NoDataLayoutUpgrade) {
+ std::string DL1 = UpgradeDataLayoutString(
+ "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32"
+ "-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
+ "-n8:16:32:64-S128",
+ "x86_64-unknown-linux-gnu");
+ std::string DL2 = UpgradeDataLayoutString("e-p:32:32", "i686-apple-darwin9");
+ std::string DL3 = UpgradeDataLayoutString("e-m:e-i64:64-n32:64",
+ "powerpc64le-unknown-linux-gnu");
+ std::string DL4 =
+ UpgradeDataLayoutString("e-m:o-i64:64-i128:128-n32:64-S128", "aarch64--");
+ EXPECT_EQ(DL1, "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64"
+ "-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64"
+ "-f80:128:128-n8:16:32:64-S128");
+ EXPECT_EQ(DL2, "e-p:32:32");
+ EXPECT_EQ(DL3, "e-m:e-i64:64-n32:64");
+ EXPECT_EQ(DL4, "e-m:o-i64:64-i128:128-n32:64-S128");
+}
+
+TEST(DataLayoutUpgradeTest, EmptyDataLayout) {
+ std::string DL1 = UpgradeDataLayoutString("", "x86_64-unknown-linux-gnu");
+ std::string DL2 = UpgradeDataLayoutString(
+ "e-m:e-p:32:32-i64:64-f80:128-n8:16:32:64-S128", "");
+ EXPECT_EQ(DL1, "");
+ EXPECT_EQ(DL2, "e-m:e-p:32:32-i64:64-f80:128-n8:16:32:64-S128");
+}
+
+} // end namespace