[GHC] #13513: Incorrect behavior on arm64 with optimisations

GHC ghc-devs at haskell.org
Mon Apr 3 09:45:53 UTC 2017


#13513: Incorrect behavior on arm64 with optimisations
-------------------------------------+-------------------------------------
        Reporter:  achirkin          |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  8.4.1
       Component:  Compiler          |              Version:  8.0.2
      Resolution:                    |             Keywords:
Operating System:  Linux             |         Architecture:  aarch64
 Type of failure:  Incorrect result  |            Test Case:
  at runtime                         |
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by achirkin):

 I feel I need to add more information here for one who decides to work on
 this.

 At first, I use two Ubuntu 16.04 machines to test it: Samsung Chromebook
 plus (arm64) and x86_64 machine with static arm64 qemu (was quite easy to
 set up using following instructions [https://wiki.debian.org/Arm64Qemu]).
 The second one runs quite slow; e.g. fully optimized build of GHC takes
 10-20 hours.

 I compiled several versions of GHC-8.0.2 and saved configuration/build
 options I used; accessible by the following link
 [https://drive.google.com/open?id=1aO4owbg8oAt7F3tjfPXUntmaEXBj_6HH7aNgRFfftik].

 Ticket [https://ghc.haskell.org/trac/ghc/ticket/10174] says that somebody
 failed to compile GHC using quick-llvm, but succeeded using perf-llvm.
 This might be related to my issue.
 In contrast to 10174, [https://ghc.haskell.org/trac/ghc/ticket/10383]
 shows that some tests fail with optimization, but pass without it.

 {{{
 $ ghc --info
 [ ("Project name","The Glorious Glasgow Haskell Compilation System")
  ,("GCC extra via C opts"," -fwrapv -fno-builtin")
  ,("C compiler command","/usr/bin/gcc")
  ,("C compiler flags"," -fno-stack-protector")
  ,("C compiler link flags"," -fuse-ld=gold -Wl,-z,noexecstack")
  ,("C compiler supports -no-pie","YES")
  ,("Haskell CPP command","/usr/bin/gcc")
  ,("Haskell CPP flags","-E -undef -traditional")
  ,("ld command","/usr/bin/ld.gold")
  ,("ld flags"," -z noexecstack")
  ,("ld supports compact unwind","YES")
  ,("ld supports build-id","YES")
  ,("ld supports filelist","NO")
  ,("ld is GNU ld","YES")
  ,("ar command","/usr/bin/ar")
  ,("ar flags","q")
  ,("ar supports at file","YES")
  ,("touch command","touch")
  ,("dllwrap command","/bin/false")
  ,("windres command","/bin/false")
  ,("libtool command","libtool")
  ,("perl command","/usr/bin/perl")
  ,("cross compiling","NO")
  ,("target os","OSLinux")
  ,("target arch","ArchARM64")
  ,("target word size","8")
  ,("target has GNU nonexec stack","True")
  ,("target has .ident directive","True")
  ,("target has subsections via symbols","False")
  ,("Unregisterised","NO")
  ,("LLVM llc command","/usr/bin/llc-3.7")
  ,("LLVM opt command","/usr/bin/opt-3.7")
  ,("Project version","8.0.2")
  ,("Project Git commit id","8c7250379d0d2bad1d07dfd556812ff7aa2c42e8")
  ,("Booter version","8.0.2")
  ,("Stage","2")
  ,("Build platform","aarch64-unknown-linux")
  ,("Host platform","aarch64-unknown-linux")
  ,("Target platform","aarch64-unknown-linux")
  ,("Have interpreter","YES")
  ,("Object splitting supported","NO")
  ,("Have native code generator","NO")
  ,("Support SMP","YES")
  ,("Tables next to code","YES")
  ,("RTS ways","l debug thr thr_debug thr_l thr_p dyn debug_dyn thr_dyn
 thr_debug_dyn l_dyn thr_l_dyn")
  ,("RTS expects libdw","NO")
  ,("Support dynamic-too","YES")
  ,("Support parallel --make","YES")
  ,("Support reexported-modules","YES")
  ,("Support thinning and renaming package flags","YES")
  ,("Requires unified installed package IDs","YES")
  ,("Uses package keys","YES")
  ,("Uses unit IDs","YES")
  ,("Dynamic by default","NO")
  ,("GHC Dynamic","YES")
  ,("GHC Profiled","NO")
  ,("Leading underscore","NO")
  ,("Debug on","False")
  ,("LibDir","/usr/local/ghc-8.0.2/lib/ghc-8.0.2")
  ,("Global Package
 DB","/usr/local/ghc-8.0.2/lib/ghc-8.0.2/package.conf.d")
  ]
 }}}

 Finally, for those who want to try unregisterized build of ghc-8.0.2 on
 arm right now,
 these stack options are working for me (precompiled stack and ghc can be
 found in my google drive):
 {{{
 $ cat ~/.stack/config.yaml
 system-ghc: true
 jobs: 4
 local-bin-path: /home/achirkin/.local/stackbin
 ghc-options:
   "*": -O1 -fllvm -fliberate-case -fregs-graph -fspec-constr -optlc-O3
 apply-ghc-options: everything
 }}}
 The ghc options I specified are the closest ones to `-O2` that do not
 cause the strange bug discussed in this ticket (at least, for me).

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13513#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list