[commit: ghc] master: llvm-targets: drop soft-float (60b0645)

git at git.haskell.org git at git.haskell.org
Wed Sep 27 08:32:54 UTC 2017


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/60b06456ddef08bd8a8a47497a6cbefbb5e359fb/ghc

>---------------------------------------------------------------

commit 60b06456ddef08bd8a8a47497a6cbefbb5e359fb
Author: Moritz Angermann <moritz.angermann at gmail.com>
Date:   Mon Sep 25 14:17:11 2017 +0800

    llvm-targets: drop soft-float
    
    Summary:
    The llvm-targets file records `mattr` values, and
    while interrogating `clang` for the target, we might
    stumble upon `+soft-float-abi`, however ghc does not support
    full soft-float, and as such passing `+soft-float` to `llc`
    will result in segfaults for any function passing float
    registers F1, ... in the ARM Instruction Selection Pass.
    
    Reviewers: bgamari, austin
    
    Reviewed By: bgamari
    
    Subscribers: rwbarton, thomie
    
    Differential Revision: https://phabricator.haskell.org/D4030


>---------------------------------------------------------------

60b06456ddef08bd8a8a47497a6cbefbb5e359fb
 llvm-targets                          |  8 ++++----
 utils/llvm-targets/gen-data-layout.sh | 15 ++++++++++++++-
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/llvm-targets b/llvm-targets
index 2ac0f87..3c9da1e 100644
--- a/llvm-targets
+++ b/llvm-targets
@@ -6,17 +6,17 @@
 ,("armv7-unknown-linux-gnueabihf", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", ""))
 ,("aarch64-unknown-linux-gnu", ("e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", "generic", "+neon"))
 ,("aarch64-unknown-linux", ("e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", "generic", "+neon"))
-,("armv7a-unknown-linux-gnueabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", "+soft-float-abi"))
+,("armv7a-unknown-linux-gnueabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", ""))
 ,("i386-unknown-linux-gnu", ("e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128", "pentium4", ""))
 ,("i386-unknown-linux", ("e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128", "pentium4", ""))
 ,("x86_64-unknown-linux-gnu", ("e-m:e-i64:64-f80:128-n8:16:32:64-S128", "x86-64", ""))
 ,("x86_64-unknown-linux", ("e-m:e-i64:64-f80:128-n8:16:32:64-S128", "x86-64", ""))
-,("armv7-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", "+soft-float-abi"))
+,("armv7-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", ""))
 ,("aarch64-unknown-linux-android", ("e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", "generic", "+neon"))
-,("arm-unknown-nto-qnx-eabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "arm7tdmi", "+soft-float-abi +strict-align"))
+,("arm-unknown-nto-qnx-eabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "arm7tdmi", "+strict-align"))
 ,("i386-apple-darwin", ("e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128", "yonah", ""))
 ,("x86_64-apple-darwin", ("e-m:o-i64:64-f80:128-n8:16:32:64-S128", "core2", ""))
-,("armv7-apple-ios", ("e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32", "generic", "+soft-float-abi"))
+,("armv7-apple-ios", ("e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32", "generic", ""))
 ,("aarch64-apple-ios", ("e-m:o-i64:64-i128:128-n32:64-S128", "generic", "+neon"))
 ,("i386-apple-ios", ("e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128", "yonah", ""))
 ,("x86_64-apple-ios", ("e-m:o-i64:64-f80:128-n8:16:32:64-S128", "core2", ""))
diff --git a/utils/llvm-targets/gen-data-layout.sh b/utils/llvm-targets/gen-data-layout.sh
index 79068e9..95c629c 100755
--- a/utils/llvm-targets/gen-data-layout.sh
+++ b/utils/llvm-targets/gen-data-layout.sh
@@ -36,7 +36,20 @@ function get_cpu_and_attr() {
     while [ "$#" -gt 0 ]; do
         case "$1" in
             -target-cpu) CPU=$2; shift 2;;
-            -target-feature) ATTR+=("$2"); shift 2;;
+            -target-feature)
+                # translate clang to opt/llc target features
+                case "$2" in
+                    # we don't have support in GHC for proper soft-float.
+                    # if we extend the `llvm-target` file to contain two
+                    # additional columns for opt and llc flags, we could
+                    # pass -float-abi=soft; However ghc will use float
+                    # registers unconditionally on arm, and as such true
+                    # soft float with the registered llvm backed will is
+                    # currently not possible.
+                    +soft-float-abi) shift 2;;
+                    *) ATTR+=("$2"); shift 2;;
+                esac
+                ;;
             *) shift 1;;
         esac
     done



More information about the ghc-commits mailing list