From d11a6cc2e7e67840fd733ef7ef22f1f488072b27 Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Fri, 10 Feb 2017 03:32:21 +0000 Subject: [PATCH] For X86-64 linux and PPC64 linux align int128 to 16 bytes. For other platforms we should find out what they need and likely make the same change, however, a smaller additional change is easier for platforms we know have it specified in the ABI. As part of this rewrite some of the handling in the backends for data layout and update a bunch of testcases. Based on a patch by Simonas Kazlauskas! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294702 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/PowerPC/PPCTargetMachine.cpp | 5 +++++ lib/Target/X86/X86TargetMachine.cpp | 5 +++++ test/LTO/Resolution/X86/Inputs/comdat.ll | 2 +- test/LTO/Resolution/X86/Inputs/common2.ll | 2 +- test/LTO/Resolution/X86/Inputs/mixed_lto.ll | 2 +- test/LTO/Resolution/X86/comdat.ll | 2 +- test/LTO/Resolution/X86/common2.ll | 2 +- test/LTO/Resolution/X86/lowertypetests.ll | 2 +- test/LTO/Resolution/X86/mixed_lto.ll | 2 +- test/ThinLTO/X86/Inputs/debuginfo-compositetype-import.ll | 2 +- test/ThinLTO/X86/Inputs/linkonce_aliasee_ref_import.ll | 2 +- test/ThinLTO/X86/Inputs/linkonce_resolution_comdat.ll | 2 +- test/ThinLTO/X86/Inputs/module_asm.ll | 2 +- test/ThinLTO/X86/Inputs/module_asm2.ll | 2 +- test/ThinLTO/X86/cache-config.ll | 2 +- test/ThinLTO/X86/debuginfo-compositetype-import.ll | 2 +- test/ThinLTO/X86/linkonce_aliasee_ref_import.ll | 2 +- test/ThinLTO/X86/linkonce_resolution_comdat.ll | 2 +- test/ThinLTO/X86/module_asm2.ll | 2 +- test/ThinLTO/X86/module_asm_glob.ll | 2 +- test/tools/llvm-lto2/X86/pipeline.ll | 2 +- 21 files changed, 29 insertions(+), 19 deletions(-) diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp index 5d68f32ccc5..8df1a89308f 100644 --- a/lib/Target/PowerPC/PPCTargetMachine.cpp +++ b/lib/Target/PowerPC/PPCTargetMachine.cpp @@ -120,6 +120,11 @@ static std::string getDataLayoutString(const Triple &T) { else Ret += "-f64:32:64"; + // 128 bit integers are always aligned to 128 bits, but only 64-bit matters, + // because __int128 is only supoprted on 64-bit targets. + if (is64Bit && T.isOSLinux()) + Ret += "-i128:128"; + // PPC64 has 32 and 64 bit registers, PPC32 has only 32 bit ones. if (is64Bit) Ret += "-n32:64"; diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp index 7dd878e8a90..585d5433e62 100644 --- a/lib/Target/X86/X86TargetMachine.cpp +++ b/lib/Target/X86/X86TargetMachine.cpp @@ -109,6 +109,11 @@ static std::string computeDataLayout(const Triple &TT) { else Ret += "-f64:32:64"; + // 128 bit integers are always aligned to 128 bits, but only 64-bit matters, + // because __int128 is only supoprted on 64-bit targets. + if (TT.isArch64Bit() && TT.isOSLinux()) + Ret += "-i128:128"; + // Some ABIs align long double to 128 bits, others to 32. if (TT.isOSNaCl() || TT.isOSIAMCU()) ; // No f80 diff --git a/test/LTO/Resolution/X86/Inputs/comdat.ll b/test/LTO/Resolution/X86/Inputs/comdat.ll index ca4bbb4bf81..253b4e74090 100644 --- a/test/LTO/Resolution/X86/Inputs/comdat.ll +++ b/test/LTO/Resolution/X86/Inputs/comdat.ll @@ -1,4 +1,4 @@ -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" $c2 = comdat any diff --git a/test/LTO/Resolution/X86/Inputs/common2.ll b/test/LTO/Resolution/X86/Inputs/common2.ll index c3a7f753684..449f3d5c343 100644 --- a/test/LTO/Resolution/X86/Inputs/common2.ll +++ b/test/LTO/Resolution/X86/Inputs/common2.ll @@ -1,4 +1,4 @@ -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @v = common global i16 0, align 4 diff --git a/test/LTO/Resolution/X86/Inputs/mixed_lto.ll b/test/LTO/Resolution/X86/Inputs/mixed_lto.ll index 2393deb3241..c1c3f8e0655 100644 --- a/test/LTO/Resolution/X86/Inputs/mixed_lto.ll +++ b/test/LTO/Resolution/X86/Inputs/mixed_lto.ll @@ -1,4 +1,4 @@ -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" declare i32 @g() define i32 @main() { diff --git a/test/LTO/Resolution/X86/comdat.ll b/test/LTO/Resolution/X86/comdat.ll index 5124b951bed..32cada5161e 100644 --- a/test/LTO/Resolution/X86/comdat.ll +++ b/test/LTO/Resolution/X86/comdat.ll @@ -22,7 +22,7 @@ ; RUN: -r=%t2.o,a25,px ; RUN: llvm-dis %t3.o.0.2.internalize.bc -o - | FileCheck %s -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" $c1 = comdat any diff --git a/test/LTO/Resolution/X86/common2.ll b/test/LTO/Resolution/X86/common2.ll index 3328d7c5ec3..520ccf27112 100644 --- a/test/LTO/Resolution/X86/common2.ll +++ b/test/LTO/Resolution/X86/common2.ll @@ -70,7 +70,7 @@ ; RUN: -r %t2.bc,bar,px ; RUN: llvm-dis < %t.o.0.0.preopt.bc | FileCheck %s --check-prefix=BOTH-PREVAILED2 -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @v = common global i8 0, align 8 diff --git a/test/LTO/Resolution/X86/lowertypetests.ll b/test/LTO/Resolution/X86/lowertypetests.ll index 3753689a699..7c2230738f0 100644 --- a/test/LTO/Resolution/X86/lowertypetests.ll +++ b/test/LTO/Resolution/X86/lowertypetests.ll @@ -6,7 +6,7 @@ ; MERGED: R __typeid_foo_global_addr ; CHECK: U __typeid_foo_global_addr -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @foo = global i32 0, !type !0 diff --git a/test/LTO/Resolution/X86/mixed_lto.ll b/test/LTO/Resolution/X86/mixed_lto.ll index 02b15c61154..25f7c59620e 100644 --- a/test/LTO/Resolution/X86/mixed_lto.ll +++ b/test/LTO/Resolution/X86/mixed_lto.ll @@ -19,7 +19,7 @@ ; RUN: llvm-nm %t5.o.0 | FileCheck %s --check-prefix=NM0 ; RUN: llvm-nm %t5.o.1 | FileCheck %s --check-prefix=NM1 -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" define i32 @g() { ret i32 0 diff --git a/test/ThinLTO/X86/Inputs/debuginfo-compositetype-import.ll b/test/ThinLTO/X86/Inputs/debuginfo-compositetype-import.ll index 7e80c4d7c44..9e4e303f64b 100644 --- a/test/ThinLTO/X86/Inputs/debuginfo-compositetype-import.ll +++ b/test/ThinLTO/X86/Inputs/debuginfo-compositetype-import.ll @@ -1,6 +1,6 @@ ; ModuleID = 'debuginfo-compositetype-import2.c' source_filename = "debuginfo-compositetype-import2.c" -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" ; Function Attrs: nounwind uwtable diff --git a/test/ThinLTO/X86/Inputs/linkonce_aliasee_ref_import.ll b/test/ThinLTO/X86/Inputs/linkonce_aliasee_ref_import.ll index 66847f50b15..f2ca7e9935b 100644 --- a/test/ThinLTO/X86/Inputs/linkonce_aliasee_ref_import.ll +++ b/test/ThinLTO/X86/Inputs/linkonce_aliasee_ref_import.ll @@ -1,4 +1,4 @@ -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-grtev4-linux-gnu" define i32 @main() #0 { diff --git a/test/ThinLTO/X86/Inputs/linkonce_resolution_comdat.ll b/test/ThinLTO/X86/Inputs/linkonce_resolution_comdat.ll index 59434a81986..744aa5dc2b1 100644 --- a/test/ThinLTO/X86/Inputs/linkonce_resolution_comdat.ll +++ b/test/ThinLTO/X86/Inputs/linkonce_resolution_comdat.ll @@ -1,4 +1,4 @@ -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" $c2 = comdat any diff --git a/test/ThinLTO/X86/Inputs/module_asm.ll b/test/ThinLTO/X86/Inputs/module_asm.ll index 337e8613c6e..e212788bb1c 100644 --- a/test/ThinLTO/X86/Inputs/module_asm.ll +++ b/test/ThinLTO/X86/Inputs/module_asm.ll @@ -1,4 +1,4 @@ -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" define i32 @main({ i64, { i64, i8* }* } %unnamed) #0 { diff --git a/test/ThinLTO/X86/Inputs/module_asm2.ll b/test/ThinLTO/X86/Inputs/module_asm2.ll index a8081cccaf3..69a4732215c 100644 --- a/test/ThinLTO/X86/Inputs/module_asm2.ll +++ b/test/ThinLTO/X86/Inputs/module_asm2.ll @@ -1,4 +1,4 @@ -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" define i32 @main({ i64, { i64, i8* }* } %unnamed) #0 { diff --git a/test/ThinLTO/X86/cache-config.ll b/test/ThinLTO/X86/cache-config.ll index a947969f669..4953b30983d 100644 --- a/test/ThinLTO/X86/cache-config.ll +++ b/test/ThinLTO/X86/cache-config.ll @@ -18,7 +18,7 @@ ; RUN: llvm-lto2 -o %t.o %t.bc -cache-dir %t.cache -r=%t.bc,globalfunc,plx -default-triple=x86_64-unknown-linux-gnu ; RUN: ls %t.cache | count 15 -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" define void @globalfunc() { diff --git a/test/ThinLTO/X86/debuginfo-compositetype-import.ll b/test/ThinLTO/X86/debuginfo-compositetype-import.ll index 0b3a7a45224..758ec8b371d 100644 --- a/test/ThinLTO/X86/debuginfo-compositetype-import.ll +++ b/test/ThinLTO/X86/debuginfo-compositetype-import.ll @@ -34,7 +34,7 @@ ; ModuleID = 'debuginfo-compositetype-import.c' source_filename = "debuginfo-compositetype-import.c" -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" ; Function Attrs: nounwind uwtable diff --git a/test/ThinLTO/X86/linkonce_aliasee_ref_import.ll b/test/ThinLTO/X86/linkonce_aliasee_ref_import.ll index 9b8cc7f7228..ee5737baa41 100644 --- a/test/ThinLTO/X86/linkonce_aliasee_ref_import.ll +++ b/test/ThinLTO/X86/linkonce_aliasee_ref_import.ll @@ -24,7 +24,7 @@ ; Check that we imported a ref (and not def) to baz.clone ; NM2: U baz.clone -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-grtev4-linux-gnu" $baz.clone = comdat any diff --git a/test/ThinLTO/X86/linkonce_resolution_comdat.ll b/test/ThinLTO/X86/linkonce_resolution_comdat.ll index c1ffdf176e5..43ff8654791 100644 --- a/test/ThinLTO/X86/linkonce_resolution_comdat.ll +++ b/test/ThinLTO/X86/linkonce_resolution_comdat.ll @@ -21,7 +21,7 @@ ; and inlined into g() ; NM2-NOT: f -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" $c1 = comdat any diff --git a/test/ThinLTO/X86/module_asm2.ll b/test/ThinLTO/X86/module_asm2.ll index 02404062163..90f4fb3f860 100644 --- a/test/ThinLTO/X86/module_asm2.ll +++ b/test/ThinLTO/X86/module_asm2.ll @@ -64,7 +64,7 @@ ; NM1-NOT: b ; NM1-NOT: x -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @b = internal global i32 1, align 4 diff --git a/test/ThinLTO/X86/module_asm_glob.ll b/test/ThinLTO/X86/module_asm_glob.ll index bcc44c58c9f..4973ed0c0cf 100644 --- a/test/ThinLTO/X86/module_asm_glob.ll +++ b/test/ThinLTO/X86/module_asm_glob.ll @@ -17,7 +17,7 @@ ; NM0: T foo ; NM1-NOT: foo -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" module asm "\09.text" diff --git a/test/tools/llvm-lto2/X86/pipeline.ll b/test/tools/llvm-lto2/X86/pipeline.ll index e0d03bd932f..fba09f6c632 100644 --- a/test/tools/llvm-lto2/X86/pipeline.ll +++ b/test/tools/llvm-lto2/X86/pipeline.ll @@ -10,7 +10,7 @@ ; is accepted). ; RUN: llvm-lto2 %t1.bc -o %t.o -lto-use-new-pm -r %t1.bc,patatino,px -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target datalayout = "e-m:e-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" define void @patatino() { -- 2.50.1