[clang] [llvm] [Clang] Use DataLayout from TargetParser (PR #171135)

2025-12-08 Thread Nikita Popov via cfe-commits

https://github.com/nikic auto_merge_enabled 
https://github.com/llvm/llvm-project/pull/171135
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang] Use DataLayout from TargetParser (PR #171135)

2025-12-08 Thread Nikita Popov via cfe-commits

https://github.com/nikic updated 
https://github.com/llvm/llvm-project/pull/171135

>From 79f317ce6770a9a7dcdb65f6ec9ec195baf3d0d0 Mon Sep 17 00:00:00 2001
From: Nikita Popov 
Date: Mon, 8 Dec 2025 14:44:20 +0100
Subject: [PATCH 1/2] [Clang] Use DataLayout from TargetParser

This switches clang to use the data layouts from TargetParser,
instead of maintaining its own copy of data layouts, which are
required to match the backend data layouts.

For now I've kept explicit calls to resetDataLayout(), just
with the argument implied by the triple and ABI. Ideally this
would happen automatically, but the way these classes are
initialized currently doesn't offer a great place to do this.

Previously resetDataLayout() also set the UserLabelPrefix. I've
separated this out, with a reasonable default so that most targets
don't need to worry about it.

I've kept the explicit data layouts for TCE and SPIR (without the V).
These seem to not correspond to real LLVM targets.

I've also fixed the XCore data layout in TargetParser, which was
incorrectly set to the same one as Xtensa. It was previously
unused.
---
 clang/include/clang/Basic/TargetInfo.h   |  8 ++--
 clang/lib/Basic/TargetInfo.cpp   |  9 ++--
 clang/lib/Basic/Targets/AArch64.cpp  | 32 +--
 clang/lib/Basic/Targets/AArch64.h| 10 +
 clang/lib/Basic/Targets/AMDGPU.cpp   | 13 +-
 clang/lib/Basic/Targets/ARC.h|  3 +-
 clang/lib/Basic/Targets/ARM.cpp  | 43 ++--
 clang/lib/Basic/Targets/AVR.h|  2 +-
 clang/lib/Basic/Targets/BPF.h|  6 +--
 clang/lib/Basic/Targets/CSKY.h   |  4 +-
 clang/lib/Basic/Targets/DirectX.h|  6 +--
 clang/lib/Basic/Targets/Hexagon.h|  8 +---
 clang/lib/Basic/Targets/Lanai.h  | 10 +
 clang/lib/Basic/Targets/LoongArch.h  |  4 +-
 clang/lib/Basic/Targets/M68k.cpp | 26 +---
 clang/lib/Basic/Targets/MSP430.h |  2 +-
 clang/lib/Basic/Targets/Mips.h   | 20 +
 clang/lib/Basic/Targets/NVPTX.cpp| 13 ++
 clang/lib/Basic/Targets/OSTargets.h  |  2 +-
 clang/lib/Basic/Targets/PPC.h| 33 ++-
 clang/lib/Basic/Targets/RISCV.h  |  8 ++--
 clang/lib/Basic/Targets/SPIR.h   | 15 +++
 clang/lib/Basic/Targets/Sparc.h  |  6 +--
 clang/lib/Basic/Targets/SystemZ.h|  8 +---
 clang/lib/Basic/Targets/VE.h |  4 +-
 clang/lib/Basic/Targets/WebAssembly.h| 16 +---
 clang/lib/Basic/Targets/X86.h| 40 +-
 clang/lib/Basic/Targets/XCore.h  |  3 +-
 clang/lib/Basic/Targets/Xtensa.h |  2 +-
 llvm/lib/Target/XCore/XCoreTargetMachine.cpp |  7 ++--
 llvm/lib/TargetParser/TargetDataLayout.cpp   |  4 ++
 31 files changed, 71 insertions(+), 296 deletions(-)

diff --git a/clang/include/clang/Basic/TargetInfo.h 
b/clang/include/clang/Basic/TargetInfo.h
index 1f5932225d31e..885325c3379e3 100644
--- a/clang/include/clang/Basic/TargetInfo.h
+++ b/clang/include/clang/Basic/TargetInfo.h
@@ -296,9 +296,11 @@ class TargetInfo : public TransferrableTargetInfo,
   // TargetInfo Constructor.  Default initializes all fields.
   TargetInfo(const llvm::Triple &T);
 
-  // UserLabelPrefix must match DL's getGlobalPrefix() when interpreted
-  // as a DataLayout object.
-  void resetDataLayout(StringRef DL, const char *UserLabelPrefix = "");
+  /// Set the data layout to the given string.
+  void resetDataLayout(StringRef DL);
+
+  /// Set the data layout based on current triple and ABI.
+  void resetDataLayout();
 
   // Target features that are read-only and should not be disabled/enabled
   // by command line options. Such features are for emitting predefined
diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp
index c0ed900ebd45c..7e82213be4479 100644
--- a/clang/lib/Basic/TargetInfo.cpp
+++ b/clang/lib/Basic/TargetInfo.cpp
@@ -156,7 +156,7 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : Triple(T) {
   Float128Format = &llvm::APFloat::IEEEquad();
   Ibm128Format = &llvm::APFloat::PPCDoubleDouble();
   MCountName = "mcount";
-  UserLabelPrefix = "_";
+  UserLabelPrefix = Triple.isOSBinFormatMachO() ? "_" : "";
   RegParmMax = 0;
   SSERegParmMax = 0;
   HasAlignMac68kSupport = false;
@@ -196,9 +196,10 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : Triple(T) {
 // Out of line virtual dtor for TargetInfo.
 TargetInfo::~TargetInfo() {}
 
-void TargetInfo::resetDataLayout(StringRef DL, const char *ULP) {
-  DataLayoutString = DL.str();
-  UserLabelPrefix = ULP;
+void TargetInfo::resetDataLayout(StringRef DL) { DataLayoutString = DL.str(); }
+
+void TargetInfo::resetDataLayout() {
+  DataLayoutString = Triple.computeDataLayout(getABI());
 }
 
 bool
diff --git a/clang/lib/Basic/Targets/AArch64.cpp 
b/clang/lib/Basic/Targets/AArch64.cpp
index 

[clang] [llvm] [Clang] Use DataLayout from TargetParser (PR #171135)

2025-12-08 Thread Matt Arsenault via cfe-commits

https://github.com/arsenm approved this pull request.


https://github.com/llvm/llvm-project/pull/171135
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang] Use DataLayout from TargetParser (PR #171135)

2025-12-08 Thread Matt Arsenault via cfe-commits


@@ -68,16 +68,9 @@ NVPTXTargetInfo::NVPTXTargetInfo(const llvm::Triple &Triple,
   HasFastHalfType = true;
   HasFloat16 = true;
 
-  if (TargetPointerWidth == 32)
-resetDataLayout("e-p:32:32-p6:32:32-p7:32:32-i64:64-i128:128-i256:256-v16:"
-"16-v32:32-n16:32:64");
-  else if (Opts.NVPTXUseShortPointers)
-resetDataLayout("e-p3:32:32-p4:32:32-p5:32:32-p6:32:32-p7:32:32-i64:64-"
-"i128:128-i256:256-v16:"
-"16-v32:32-n16:32:64");
-  else
-resetDataLayout(
-"e-p6:32:32-i64:64-i128:128-i256:256-v16:16-v32:32-n16:32:64");
+  // TODO: Make shortptr a proper ABI?

arsenm wrote:

Or just delete it, this should have been an ancient bringup flag 

https://github.com/llvm/llvm-project/pull/171135
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang] Use DataLayout from TargetParser (PR #171135)

2025-12-08 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-backend-msp430

Author: Nikita Popov (nikic)


Changes

This switches clang to use the data layouts from TargetParser, instead of 
maintaining its own copy of data layouts, which are required to match the 
backend data layouts.

For now I've kept explicit calls to resetDataLayout(), just with the argument 
implied by the triple and ABI. Ideally this would happen automatically, but the 
way these classes are initialized currently doesn't offer a great place to do 
this.

Previously resetDataLayout() also set the UserLabelPrefix. I've separated this 
out, with a reasonable default so that most targets don't need to worry about 
it.

I've kept the explicit data layouts for TCE and SPIR (without the V). These 
seem to not correspond to real LLVM targets.

I've also fixed the XCore data layout in TargetParser, which was incorrectly 
set to the same one as Xtensa. It was previously unused.

---

Patch is 39.11 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/171135.diff


31 Files Affected:

- (modified) clang/include/clang/Basic/TargetInfo.h (+5-3) 
- (modified) clang/lib/Basic/TargetInfo.cpp (+5-4) 
- (modified) clang/lib/Basic/Targets/AArch64.cpp (+1-31) 
- (modified) clang/lib/Basic/Targets/AArch64.h (+1-9) 
- (modified) clang/lib/Basic/Targets/AMDGPU.cpp (+1-12) 
- (modified) clang/lib/Basic/Targets/ARC.h (+1-2) 
- (modified) clang/lib/Basic/Targets/ARM.cpp (+3-40) 
- (modified) clang/lib/Basic/Targets/AVR.h (+1-1) 
- (modified) clang/lib/Basic/Targets/BPF.h (+1-5) 
- (modified) clang/lib/Basic/Targets/CSKY.h (+1-3) 
- (modified) clang/lib/Basic/Targets/DirectX.h (+1-5) 
- (modified) clang/lib/Basic/Targets/Hexagon.h (+1-7) 
- (modified) clang/lib/Basic/Targets/Lanai.h (+1-9) 
- (modified) clang/lib/Basic/Targets/LoongArch.h (+2-2) 
- (modified) clang/lib/Basic/Targets/M68k.cpp (+1-25) 
- (modified) clang/lib/Basic/Targets/MSP430.h (+1-1) 
- (modified) clang/lib/Basic/Targets/Mips.h (+1-19) 
- (modified) clang/lib/Basic/Targets/NVPTX.cpp (+3-10) 
- (modified) clang/lib/Basic/Targets/OSTargets.h (+1-1) 
- (modified) clang/lib/Basic/Targets/PPC.h (+3-30) 
- (modified) clang/lib/Basic/Targets/RISCV.h (+4-4) 
- (modified) clang/lib/Basic/Targets/SPIR.h (+5-10) 
- (modified) clang/lib/Basic/Targets/Sparc.h (+3-3) 
- (modified) clang/lib/Basic/Targets/SystemZ.h (+1-7) 
- (modified) clang/lib/Basic/Targets/VE.h (+1-3) 
- (modified) clang/lib/Basic/Targets/WebAssembly.h (+2-14) 
- (modified) clang/lib/Basic/Targets/X86.h (+11-29) 
- (modified) clang/lib/Basic/Targets/XCore.h (+1-2) 
- (modified) clang/lib/Basic/Targets/Xtensa.h (+1-1) 
- (modified) llvm/lib/Target/XCore/XCoreTargetMachine.cpp (+3-4) 
- (modified) llvm/lib/TargetParser/TargetDataLayout.cpp (+4) 


``diff
diff --git a/clang/include/clang/Basic/TargetInfo.h 
b/clang/include/clang/Basic/TargetInfo.h
index 1f5932225d31e..885325c3379e3 100644
--- a/clang/include/clang/Basic/TargetInfo.h
+++ b/clang/include/clang/Basic/TargetInfo.h
@@ -296,9 +296,11 @@ class TargetInfo : public TransferrableTargetInfo,
   // TargetInfo Constructor.  Default initializes all fields.
   TargetInfo(const llvm::Triple &T);
 
-  // UserLabelPrefix must match DL's getGlobalPrefix() when interpreted
-  // as a DataLayout object.
-  void resetDataLayout(StringRef DL, const char *UserLabelPrefix = "");
+  /// Set the data layout to the given string.
+  void resetDataLayout(StringRef DL);
+
+  /// Set the data layout based on current triple and ABI.
+  void resetDataLayout();
 
   // Target features that are read-only and should not be disabled/enabled
   // by command line options. Such features are for emitting predefined
diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp
index c0ed900ebd45c..7e82213be4479 100644
--- a/clang/lib/Basic/TargetInfo.cpp
+++ b/clang/lib/Basic/TargetInfo.cpp
@@ -156,7 +156,7 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : Triple(T) {
   Float128Format = &llvm::APFloat::IEEEquad();
   Ibm128Format = &llvm::APFloat::PPCDoubleDouble();
   MCountName = "mcount";
-  UserLabelPrefix = "_";
+  UserLabelPrefix = Triple.isOSBinFormatMachO() ? "_" : "";
   RegParmMax = 0;
   SSERegParmMax = 0;
   HasAlignMac68kSupport = false;
@@ -196,9 +196,10 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : Triple(T) {
 // Out of line virtual dtor for TargetInfo.
 TargetInfo::~TargetInfo() {}
 
-void TargetInfo::resetDataLayout(StringRef DL, const char *ULP) {
-  DataLayoutString = DL.str();
-  UserLabelPrefix = ULP;
+void TargetInfo::resetDataLayout(StringRef DL) { DataLayoutString = DL.str(); }
+
+void TargetInfo::resetDataLayout() {
+  DataLayoutString = Triple.computeDataLayout(getABI());
 }
 
 bool
diff --git a/clang/lib/Basic/Targets/AArch64.cpp 
b/clang/lib/Basic/Targets/AArch64.cpp
index d7f36c0f9b79a..476fa829bef61 100644
--- a/clang/lib/Basic/Targets/AArch64.cpp
+++ b/clang/lib/Basic/Targets/AArch64.cpp
@@ -1212,7 +1212,7 @@ bool 

[clang] [llvm] [Clang] Use DataLayout from TargetParser (PR #171135)

2025-12-08 Thread via cfe-commits

llvmbot wrote:



@llvm/pr-subscribers-backend-m68k

@llvm/pr-subscribers-backend-powerpc

Author: Nikita Popov (nikic)


Changes

This switches clang to use the data layouts from TargetParser, instead of 
maintaining its own copy of data layouts, which are required to match the 
backend data layouts.

For now I've kept explicit calls to resetDataLayout(), just with the argument 
implied by the triple and ABI. Ideally this would happen automatically, but the 
way these classes are initialized currently doesn't offer a great place to do 
this.

Previously resetDataLayout() also set the UserLabelPrefix. I've separated this 
out, with a reasonable default so that most targets don't need to worry about 
it.

I've kept the explicit data layouts for TCE and SPIR (without the V). These 
seem to not correspond to real LLVM targets.

I've also fixed the XCore data layout in TargetParser, which was incorrectly 
set to the same one as Xtensa. It was previously unused.

---

Patch is 39.11 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/171135.diff


31 Files Affected:

- (modified) clang/include/clang/Basic/TargetInfo.h (+5-3) 
- (modified) clang/lib/Basic/TargetInfo.cpp (+5-4) 
- (modified) clang/lib/Basic/Targets/AArch64.cpp (+1-31) 
- (modified) clang/lib/Basic/Targets/AArch64.h (+1-9) 
- (modified) clang/lib/Basic/Targets/AMDGPU.cpp (+1-12) 
- (modified) clang/lib/Basic/Targets/ARC.h (+1-2) 
- (modified) clang/lib/Basic/Targets/ARM.cpp (+3-40) 
- (modified) clang/lib/Basic/Targets/AVR.h (+1-1) 
- (modified) clang/lib/Basic/Targets/BPF.h (+1-5) 
- (modified) clang/lib/Basic/Targets/CSKY.h (+1-3) 
- (modified) clang/lib/Basic/Targets/DirectX.h (+1-5) 
- (modified) clang/lib/Basic/Targets/Hexagon.h (+1-7) 
- (modified) clang/lib/Basic/Targets/Lanai.h (+1-9) 
- (modified) clang/lib/Basic/Targets/LoongArch.h (+2-2) 
- (modified) clang/lib/Basic/Targets/M68k.cpp (+1-25) 
- (modified) clang/lib/Basic/Targets/MSP430.h (+1-1) 
- (modified) clang/lib/Basic/Targets/Mips.h (+1-19) 
- (modified) clang/lib/Basic/Targets/NVPTX.cpp (+3-10) 
- (modified) clang/lib/Basic/Targets/OSTargets.h (+1-1) 
- (modified) clang/lib/Basic/Targets/PPC.h (+3-30) 
- (modified) clang/lib/Basic/Targets/RISCV.h (+4-4) 
- (modified) clang/lib/Basic/Targets/SPIR.h (+5-10) 
- (modified) clang/lib/Basic/Targets/Sparc.h (+3-3) 
- (modified) clang/lib/Basic/Targets/SystemZ.h (+1-7) 
- (modified) clang/lib/Basic/Targets/VE.h (+1-3) 
- (modified) clang/lib/Basic/Targets/WebAssembly.h (+2-14) 
- (modified) clang/lib/Basic/Targets/X86.h (+11-29) 
- (modified) clang/lib/Basic/Targets/XCore.h (+1-2) 
- (modified) clang/lib/Basic/Targets/Xtensa.h (+1-1) 
- (modified) llvm/lib/Target/XCore/XCoreTargetMachine.cpp (+3-4) 
- (modified) llvm/lib/TargetParser/TargetDataLayout.cpp (+4) 


``diff
diff --git a/clang/include/clang/Basic/TargetInfo.h 
b/clang/include/clang/Basic/TargetInfo.h
index 1f5932225d31e..885325c3379e3 100644
--- a/clang/include/clang/Basic/TargetInfo.h
+++ b/clang/include/clang/Basic/TargetInfo.h
@@ -296,9 +296,11 @@ class TargetInfo : public TransferrableTargetInfo,
   // TargetInfo Constructor.  Default initializes all fields.
   TargetInfo(const llvm::Triple &T);
 
-  // UserLabelPrefix must match DL's getGlobalPrefix() when interpreted
-  // as a DataLayout object.
-  void resetDataLayout(StringRef DL, const char *UserLabelPrefix = "");
+  /// Set the data layout to the given string.
+  void resetDataLayout(StringRef DL);
+
+  /// Set the data layout based on current triple and ABI.
+  void resetDataLayout();
 
   // Target features that are read-only and should not be disabled/enabled
   // by command line options. Such features are for emitting predefined
diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp
index c0ed900ebd45c..7e82213be4479 100644
--- a/clang/lib/Basic/TargetInfo.cpp
+++ b/clang/lib/Basic/TargetInfo.cpp
@@ -156,7 +156,7 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : Triple(T) {
   Float128Format = &llvm::APFloat::IEEEquad();
   Ibm128Format = &llvm::APFloat::PPCDoubleDouble();
   MCountName = "mcount";
-  UserLabelPrefix = "_";
+  UserLabelPrefix = Triple.isOSBinFormatMachO() ? "_" : "";
   RegParmMax = 0;
   SSERegParmMax = 0;
   HasAlignMac68kSupport = false;
@@ -196,9 +196,10 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : Triple(T) {
 // Out of line virtual dtor for TargetInfo.
 TargetInfo::~TargetInfo() {}
 
-void TargetInfo::resetDataLayout(StringRef DL, const char *ULP) {
-  DataLayoutString = DL.str();
-  UserLabelPrefix = ULP;
+void TargetInfo::resetDataLayout(StringRef DL) { DataLayoutString = DL.str(); }
+
+void TargetInfo::resetDataLayout() {
+  DataLayoutString = Triple.computeDataLayout(getABI());
 }
 
 bool
diff --git a/clang/lib/Basic/Targets/AArch64.cpp 
b/clang/lib/Basic/Targets/AArch64.cpp
index d7f36c0f9b79a..476fa829bef61 100644
--- a/clang/lib/Basic/Targets/AArch64.cpp
+++ b/clang/lib/Basic/Targets/AArch64.cpp
@@ 

[clang] [llvm] [Clang] Use DataLayout from TargetParser (PR #171135)

2025-12-08 Thread Nikita Popov via cfe-commits

https://github.com/nikic created 
https://github.com/llvm/llvm-project/pull/171135

This switches clang to use the data layouts from TargetParser, instead of 
maintaining its own copy of data layouts, which are required to match the 
backend data layouts.

For now I've kept explicit calls to resetDataLayout(), just with the argument 
implied by the triple and ABI. Ideally this would happen automatically, but the 
way these classes are initialized currently doesn't offer a great place to do 
this.

Previously resetDataLayout() also set the UserLabelPrefix. I've separated this 
out, with a reasonable default so that most targets don't need to worry about 
it.

I've kept the explicit data layouts for TCE and SPIR (without the V). These 
seem to not correspond to real LLVM targets.

I've also fixed the XCore data layout in TargetParser, which was incorrectly 
set to the same one as Xtensa. It was previously unused.

>From 79f317ce6770a9a7dcdb65f6ec9ec195baf3d0d0 Mon Sep 17 00:00:00 2001
From: Nikita Popov 
Date: Mon, 8 Dec 2025 14:44:20 +0100
Subject: [PATCH] [Clang] Use DataLayout from TargetParser

This switches clang to use the data layouts from TargetParser,
instead of maintaining its own copy of data layouts, which are
required to match the backend data layouts.

For now I've kept explicit calls to resetDataLayout(), just
with the argument implied by the triple and ABI. Ideally this
would happen automatically, but the way these classes are
initialized currently doesn't offer a great place to do this.

Previously resetDataLayout() also set the UserLabelPrefix. I've
separated this out, with a reasonable default so that most targets
don't need to worry about it.

I've kept the explicit data layouts for TCE and SPIR (without the V).
These seem to not correspond to real LLVM targets.

I've also fixed the XCore data layout in TargetParser, which was
incorrectly set to the same one as Xtensa. It was previously
unused.
---
 clang/include/clang/Basic/TargetInfo.h   |  8 ++--
 clang/lib/Basic/TargetInfo.cpp   |  9 ++--
 clang/lib/Basic/Targets/AArch64.cpp  | 32 +--
 clang/lib/Basic/Targets/AArch64.h| 10 +
 clang/lib/Basic/Targets/AMDGPU.cpp   | 13 +-
 clang/lib/Basic/Targets/ARC.h|  3 +-
 clang/lib/Basic/Targets/ARM.cpp  | 43 ++--
 clang/lib/Basic/Targets/AVR.h|  2 +-
 clang/lib/Basic/Targets/BPF.h|  6 +--
 clang/lib/Basic/Targets/CSKY.h   |  4 +-
 clang/lib/Basic/Targets/DirectX.h|  6 +--
 clang/lib/Basic/Targets/Hexagon.h|  8 +---
 clang/lib/Basic/Targets/Lanai.h  | 10 +
 clang/lib/Basic/Targets/LoongArch.h  |  4 +-
 clang/lib/Basic/Targets/M68k.cpp | 26 +---
 clang/lib/Basic/Targets/MSP430.h |  2 +-
 clang/lib/Basic/Targets/Mips.h   | 20 +
 clang/lib/Basic/Targets/NVPTX.cpp| 13 ++
 clang/lib/Basic/Targets/OSTargets.h  |  2 +-
 clang/lib/Basic/Targets/PPC.h| 33 ++-
 clang/lib/Basic/Targets/RISCV.h  |  8 ++--
 clang/lib/Basic/Targets/SPIR.h   | 15 +++
 clang/lib/Basic/Targets/Sparc.h  |  6 +--
 clang/lib/Basic/Targets/SystemZ.h|  8 +---
 clang/lib/Basic/Targets/VE.h |  4 +-
 clang/lib/Basic/Targets/WebAssembly.h| 16 +---
 clang/lib/Basic/Targets/X86.h| 40 +-
 clang/lib/Basic/Targets/XCore.h  |  3 +-
 clang/lib/Basic/Targets/Xtensa.h |  2 +-
 llvm/lib/Target/XCore/XCoreTargetMachine.cpp |  7 ++--
 llvm/lib/TargetParser/TargetDataLayout.cpp   |  4 ++
 31 files changed, 71 insertions(+), 296 deletions(-)

diff --git a/clang/include/clang/Basic/TargetInfo.h 
b/clang/include/clang/Basic/TargetInfo.h
index 1f5932225d31e..885325c3379e3 100644
--- a/clang/include/clang/Basic/TargetInfo.h
+++ b/clang/include/clang/Basic/TargetInfo.h
@@ -296,9 +296,11 @@ class TargetInfo : public TransferrableTargetInfo,
   // TargetInfo Constructor.  Default initializes all fields.
   TargetInfo(const llvm::Triple &T);
 
-  // UserLabelPrefix must match DL's getGlobalPrefix() when interpreted
-  // as a DataLayout object.
-  void resetDataLayout(StringRef DL, const char *UserLabelPrefix = "");
+  /// Set the data layout to the given string.
+  void resetDataLayout(StringRef DL);
+
+  /// Set the data layout based on current triple and ABI.
+  void resetDataLayout();
 
   // Target features that are read-only and should not be disabled/enabled
   // by command line options. Such features are for emitting predefined
diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp
index c0ed900ebd45c..7e82213be4479 100644
--- a/clang/lib/Basic/TargetInfo.cpp
+++ b/clang/lib/Basic/TargetInfo.cpp
@@ -156,7 +156,7 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : Triple(T) {
   Float128Format =