Skip to content

Commit

Permalink
For X86-64 linux and PPC64 linux align int128 to 16 bytes.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
echristo committed Feb 10, 2017
1 parent dffd427 commit d11a6cc
Show file tree
Hide file tree
Showing 21 changed files with 29 additions and 19 deletions.
5 changes: 5 additions & 0 deletions lib/Target/PowerPC/PPCTargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
5 changes: 5 additions & 0 deletions lib/Target/X86/X86TargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/LTO/Resolution/X86/Inputs/comdat.ll
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/LTO/Resolution/X86/Inputs/common2.ll
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/LTO/Resolution/X86/Inputs/mixed_lto.ll
Original file line number Diff line number Diff line change
@@ -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() {
Expand Down
2 changes: 1 addition & 1 deletion test/LTO/Resolution/X86/comdat.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/LTO/Resolution/X86/common2.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/LTO/Resolution/X86/lowertypetests.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/LTO/Resolution/X86/mixed_lto.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/ThinLTO/X86/Inputs/debuginfo-compositetype-import.ll
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/ThinLTO/X86/Inputs/linkonce_aliasee_ref_import.ll
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion test/ThinLTO/X86/Inputs/linkonce_resolution_comdat.ll
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/ThinLTO/X86/Inputs/module_asm.ll
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion test/ThinLTO/X86/Inputs/module_asm2.ll
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion test/ThinLTO/X86/cache-config.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
2 changes: 1 addition & 1 deletion test/ThinLTO/X86/debuginfo-compositetype-import.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/ThinLTO/X86/linkonce_aliasee_ref_import.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/ThinLTO/X86/linkonce_resolution_comdat.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/ThinLTO/X86/module_asm2.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/ThinLTO/X86/module_asm_glob.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion test/tools/llvm-lto2/X86/pipeline.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down

0 comments on commit d11a6cc

Please sign in to comment.