[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