[PATCH] D147016: [PowerPC] Add function pointer alignment to DataLayout

2023-04-18 Thread Thurston Dang via Phabricator via cfe-commits
thurston added a comment.

Ah, I just noticed you had a follow-up commit 
(https://reviews.llvm.org/rG0236564771b432ebf050144eda4ef4b7424db8c3). I'm 
re-running the tests/build.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D147016/new/

https://reviews.llvm.org/D147016

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D147016: [PowerPC] Add function pointer alignment to DataLayout

2023-04-18 Thread Thurston Dang via Phabricator via cfe-commits
thurston added a comment.

This is causing buildbot failures e.g., 
https://lab.llvm.org/buildbot/#/builders/5/builds/33084:

   TEST 'lld :: ELF/lto/ppc.ll' FAILED 
  ...
  ld.lld: 
/b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/MachineFunction.cpp:231:
 void llvm::MachineFunction::init(): Assertion 
`Target.isCompatibleDataLayout(getDataLayout()) && "Can't create a 
MachineFunction using a Module with a " "Target-incompatible DataLayout 
attached\n"' failed.
  
/b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/ELF/lto/Output/ppc.ll.script:
 line 10: 1277639 Aborted (core dumped) 
/b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/ld.lld 
/b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/ELF/lto/Output/ppc.ll.tmp/32le.o
 -o 
/b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/ELF/lto/Output/ppc.ll.tmp/32le

I reproduced the build error locally for this commit 
(8d2e9fc8553c91b1f22e82ffc2c00020f40bb0a2 
), while 
also verifying that the immediately preceding commit 
(221350965a891fc4ce33ea311428448939678112 
) did not 
have this error.

Could you please take a look at this?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D147016/new/

https://reviews.llvm.org/D147016

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D147016: [PowerPC] Add function pointer alignment to DataLayout

2023-04-18 Thread David Tenty via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG8d2e9fc8553c: [PowerPC] Add function pointer alignment to 
DataLayout (authored by daltenty).
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D147016/new/

https://reviews.llvm.org/D147016

Files:
  clang/lib/Basic/Targets/OSTargets.h
  clang/lib/Basic/Targets/PPC.h
  clang/test/CodeGen/target-data.c
  llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
  llvm/test/CodeGen/PowerPC/pr45301.ll
  llvm/test/ThinLTO/X86/builtin-nostrip-aix.ll

Index: llvm/test/ThinLTO/X86/builtin-nostrip-aix.ll
===
--- llvm/test/ThinLTO/X86/builtin-nostrip-aix.ll
+++ llvm/test/ThinLTO/X86/builtin-nostrip-aix.ll
@@ -30,7 +30,7 @@
 ; CHECK-NM: D __ssp_canary_word
 ; CHECK-NM: T __stack_chk_fail
 
-target datalayout = "E-m:a-p:32:32-i64:64-n32"
+target datalayout = "E-m:a-p:32:32-Fi32-i64:64-n32"
 target triple = "powerpc-ibm-aix-xcoff"
 
 define void @bar() {
Index: llvm/test/CodeGen/PowerPC/pr45301.ll
===
--- llvm/test/CodeGen/PowerPC/pr45301.ll
+++ llvm/test/CodeGen/PowerPC/pr45301.ll
@@ -12,21 +12,21 @@
 ; CHECK-NEXT:bl i
 ; CHECK-NEXT:nop
 ; CHECK-NEXT:addis r4, r2, g@toc@ha
-; CHECK-NEXT:addi r4, r4, g@toc@l
-; CHECK-NEXT:ld r5, 16(r4)
-; CHECK-NEXT:std r5, 16(r3)
-; CHECK-NEXT:ld r6, 0(r4)
-; CHECK-NEXT:std r6, 0(r3)
-; CHECK-NEXT:rldicl r6, r6, 32, 32
-; CHECK-NEXT:ld r7, 8(r4)
+; CHECK-NEXT:addi r5, r4, g@toc@l
+; CHECK-NEXT:ld r6, 16(r5)
+; CHECK-NEXT:std r6, 16(r3)
+; CHECK-NEXT:ld r4, g@toc@l(r4)
+; CHECK-NEXT:std r4, 0(r3)
+; CHECK-NEXT:rldicl r4, r4, 32, 32
+; CHECK-NEXT:ld r7, 8(r5)
 ; CHECK-NEXT:std r7, 8(r3)
-; CHECK-NEXT:ld r7, 24(r4)
+; CHECK-NEXT:ld r7, 24(r5)
 ; CHECK-NEXT:std r7, 24(r3)
-; CHECK-NEXT:ld r4, 32(r4)
-; CHECK-NEXT:std r4, 32(r3)
+; CHECK-NEXT:ld r5, 32(r5)
+; CHECK-NEXT:std r5, 32(r3)
+; CHECK-NEXT:stwbrx r4, 0, r3
 ; CHECK-NEXT:li r4, 20
-; CHECK-NEXT:stwbrx r6, 0, r3
-; CHECK-NEXT:stwbrx r5, r3, r4
+; CHECK-NEXT:stwbrx r6, r3, r4
 ; CHECK-NEXT:addi r1, r1, 112
 ; CHECK-NEXT:ld r0, 16(r1)
 ; CHECK-NEXT:mtlr r0
Index: llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
===
--- llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+++ llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
@@ -161,6 +161,17 @@
   if (!is64Bit || T.getOS() == Triple::Lv2)
 Ret += "-p:32:32";
 
+  // If the target ABI uses function descriptors, then the alignment of function
+  // pointers depends on the alignment used to emit the descriptor. Otherwise,
+  // function pointers are aligned to 32 bits because the instructions must be.
+  if ((T.getArch() == Triple::ppc64 && !T.isPPC64ELFv2ABI())) {
+Ret += "-Fi64";
+  } else if (T.isOSAIX()) {
+Ret += is64Bit ? "-Fi64" : "-Fi32";
+  } else {
+Ret += "-Fn32";
+  }
+
   // Note, the alignment values for f64 and i64 on ppc64 in Darwin
   // documentation are wrong; these are correct (i.e. "what gcc does").
   Ret += "-i64:64";
Index: clang/test/CodeGen/target-data.c
===
--- clang/test/CodeGen/target-data.c
+++ clang/test/CodeGen/target-data.c
@@ -88,7 +88,7 @@
 
 // RUN: %clang_cc1 -triple powerpc64-lv2 -o - -emit-llvm %s | \
 // RUN: FileCheck %s -check-prefix=PS3
-// PS3: target datalayout = "E-m:e-p:32:32-i64:64-n32:64"
+// PS3: target datalayout = "E-m:e-p:32:32-Fi64-i64:64-n32:64"
 
 // RUN: %clang_cc1 -triple i686-nacl -o - -emit-llvm %s | \
 // RUN: FileCheck %s -check-prefix=I686-NACL
@@ -120,43 +120,43 @@
 
 // RUN: %clang_cc1 -triple powerpc-unknown -o - -emit-llvm %s | \
 // RUN: FileCheck %s -check-prefix=PPC
-// PPC: target datalayout = "E-m:e-p:32:32-i64:64-n32"
+// PPC: target datalayout = "E-m:e-p:32:32-Fn32-i64:64-n32"
 
 // RUN: %clang_cc1 -triple powerpcle-unknown -o - -emit-llvm %s | \
 // RUN: FileCheck %s -check-prefix=PPCLE
-// PPCLE: target datalayout = "e-m:e-p:32:32-i64:64-n32"
+// PPCLE: target datalayout = "e-m:e-p:32:32-Fn32-i64:64-n32"
 
 // RUN: %clang_cc1 -triple powerpc64-freebsd -o - -emit-llvm %s | \
 // RUN: FileCheck %s -check-prefix=PPC64-FREEBSD
-// PPC64-FREEBSD: target datalayout = "E-m:e-i64:64-n32:64"
+// PPC64-FREEBSD: target datalayout = "E-m:e-Fn32-i64:64-n32:64"
 
 // RUN: %clang_cc1 -triple powerpc64le-freebsd -o - -emit-llvm %s | \
 // RUN: FileCheck %s -check-prefix=PPC64LE-FREEBSD
-// PPC64LE-FREEBSD: target datalayout = "e-m:e-i64:64-n32:64"
+// PPC64LE-FREEBSD: target datalayout = "e-m:e-Fn32-i64:64-n32:64"
 
 // RUN: %clang_cc1 -triple powerpc64-linux -o - -emit-llvm %s | \
 // RUN: FileCheck