[pkg-d-commits] [ldc] 117/149: Cherrypick DMD PR #6582. (#2021)
Matthias Klumpp
mak at moszumanska.debian.org
Sun Apr 23 22:37:04 UTC 2017
This is an automated email from the git hooks/post-receive script.
mak pushed a commit to annotated tag v1.2.0
in repository ldc.
commit b159de0819baf4450d5b1f2d0c29b5ef7e17df7f
Author: Johan Engelen <jbc.engelen at gmail.com>
Date: Sat Mar 4 23:50:48 2017 +0100
Cherrypick DMD PR #6582. (#2021)
Fix dlang Issue 17237 - Wrong alignment for 256-bit vectors.
dlang/dmd at 10eba509d6a5dfbe509fa1ffe7f4c3962a58a490
---
ddmd/aggregate.d | 10 +---------
ddmd/target.d | 7 ++++++-
tests/codegen/simd_alignment.d | 27 +++++++++++++++++++++++++++
3 files changed, 34 insertions(+), 10 deletions(-)
diff --git a/ddmd/aggregate.d b/ddmd/aggregate.d
index 014f381..83ebb85 100644
--- a/ddmd/aggregate.d
+++ b/ddmd/aggregate.d
@@ -640,15 +640,7 @@ extern (C++) abstract class AggregateDeclaration : ScopeDsymbol
if (!isunion)
*nextoffset = ofs;
- if (alignment == STRUCTALIGN_DEFAULT)
- {
- if ((global.params.is64bit || global.params.isOSX) && memalignsize == 16)
- {
- }
- else if (8 < memalignsize)
- memalignsize = 8;
- }
- else
+ if (alignment != STRUCTALIGN_DEFAULT)
{
if (memalignsize < alignment)
memalignsize = alignment;
diff --git a/ddmd/target.d b/ddmd/target.d
index 748acfc..3e994c7 100644
--- a/ddmd/target.d
+++ b/ddmd/target.d
@@ -240,7 +240,12 @@ struct Target
*/
extern (C++) static uint fieldalign(Type type)
{
- return type.alignsize();
+ const size = type.alignsize();
+
+ if ((global.params.is64bit || global.params.isOSX) && (size == 16 || size == 32))
+ return size;
+
+ return (8 < size) ? 8 : size;
}
/***********************************
diff --git a/tests/codegen/simd_alignment.d b/tests/codegen/simd_alignment.d
new file mode 100644
index 0000000..d5459e7
--- /dev/null
+++ b/tests/codegen/simd_alignment.d
@@ -0,0 +1,27 @@
+// RUN: %ldc -c -output-ll -O3 -of=%t.ll %s && FileCheck %s < %t.ll
+
+import core.simd;
+
+struct S17237
+{
+ bool a;
+ struct
+ {
+ bool b;
+ int8 c;
+ }
+}
+
+int4 globalIntFour;
+// CHECK-DAG: globalIntFour{{.*}} = {{.*}} align 16
+S17237 globalStruct;
+// CHECK-DAG: constant %{{.*}}.S17237 zeroinitializer{{(, comdat)?}}, align 32
+// CHECK-DAG: @{{.*}}globalStruct{{.*}}S17237 = {{.*}} zeroinitializer{{(, comdat)?}}, align 32
+
+// CHECK-LABEL: define <8 x i32> @foo(
+extern(C) int8 foo(S17237* s)
+{
+ // CHECK: %[[GEP:[0-9]]] = getelementptr {{.*}}S17237* %s_arg
+ // CHECK: = load {{.*}}<8 x i32>* %[[GEP]], align 32
+ return s.c;
+}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-d/ldc.git
More information about the pkg-d-commits
mailing list