[Git][ghc/ghc][cherry-pick-908b4b86] 10 commits: Restore Xmm registers properly in StgCRun.c

Ben Gamari gitlab at gitlab.haskell.org
Fri Apr 19 14:25:14 UTC 2019



Ben Gamari pushed to branch cherry-pick-908b4b86 at Glasgow Haskell Compiler / GHC


Commits:
cb9c0f21 by klebinger.andreas at gmx.at at 2019-04-17T14:57:23Z
Restore Xmm registers properly in StgCRun.c

This fixes #16514: Xmm6-15 was restored based off rax instead of rsp.
The code was introduced in the fix for #14619.

(cherry picked from commit 9b131500371a07626e33edc56700c12322364560)

- - - - -
31654409 by Ben Gamari at 2019-04-17T14:57:23Z
configure: Always use AC_LINK_ELSEIF when testing against assembler

This fixes #16440, where the build system incorrectly concluded that the
`.subsections_via_symbols` assembler directive was supported on a Linux
system. This was caused by the fact that gcc was invoked with `-flto`;
when so-configured gcc does not call the assembler but rather simply
serialises its AST for compilation during the final link.

This is described in Note [autoconf assembler checks and -flto].

(cherry picked from commit 7b090b53fea065d2cfd967ea919426af9ba8d737)

- - - - -
2de84e65 by Matthew Pickering at 2019-04-17T14:57:23Z
Add werror function to Flavour.hs

This function makes it easy to turn on `-Werror` in the correct manner
to mimic how CI turns on -Werror.

(cherry picked from commit 8dcd00cef7782c64b5484b106f4fd77c8c87e40a)

- - - - -
4e734059 by Alp Mestanogullari at 2019-04-17T14:57:23Z
Hadrian: introduce ways to skip some documentation targets

The initial motivation for this is to have a chance to run the binary
distribution rules in our Windows CI without having to install
sphinx-build and xelatex there, while retaining the ability to
generate haddocks. I just ended up extending this idea a little bit so
as to have control over whether we build haddocks, (sphinx) HTML manuals,
(sphinx) PDF manuals and (sphinx) manpages.

(cherry picked from commit 8442103aa575dc1cd25cb3231e729c6365dc1b5c)

- - - - -
7ccdb7de by Ben Gamari at 2019-04-17T14:57:23Z
gitlab-ci: Backport from master

- - - - -
7160a821 by Ben Gamari at 2019-04-17T14:57:23Z
users-guide: Add pretty to package list

- - - - -
e9e1c5a2 by Ben Gamari at 2019-04-17T14:57:23Z
gitlab-ci: Allow failing build jobs to fail

- - - - -
d127dc13 by Ben Gamari at 2019-04-17T14:57:23Z
Allow unregisterised build to fail

- - - - -
d44f54aa by Ben Gamari at 2019-04-17T14:58:05Z
gitlab: Remove doc-tarball job

- - - - -
bdf9d978 by Ömer Sinan Ağacan at 2019-04-19T14:25:09Z
Fix two bugs in stg_ap_0_fast in profiling runtime

This includes two bug fixes in profiling version of stg_ap_0_fast:

- PAPs allocated by stg_ap_0_fast are now correctly tagged. This
  invariant is checked in Sanity.c:checkPAP.

  (This was originally implemented in 2693eb11f5, later reverted with
  ab55b4ddb7 because it revealed the bug below, but it wasn't clear at
  the time whether the bug was the one below or something in the commit)

- The local variable `untaggedfun` is now marked as a pointer so it
  survives GC.

With this we finally fix all known bugs caught in #15508. `concprog001`
now works reliably with prof+threaded and prof runtimes (with and
without -debug).


(cherry picked from commit 908b4b8659713f0b7a1704ce33c7fa30e3e0ffc3)
- - - - -


12 changed files:

- .gitlab-ci.yml
- aclocal.m4
- docs/users_guide/8.8.1-notes.rst
- hadrian/doc/make.md
- hadrian/doc/user-settings.md
- hadrian/src/CommandLine.hs
- hadrian/src/Flavour.hs
- hadrian/src/Rules/Documentation.hs
- hadrian/src/Settings/Default.hs
- hadrian/src/UserSettings.hs
- rts/Apply.cmm
- rts/StgCRun.c


Changes:

=====================================
.gitlab-ci.yml
=====================================
@@ -1,17 +1,31 @@
 variables:
   GIT_SSL_NO_VERIFY: "1"
 
+  # Commit of ghc/ci-images repository from which to pull Docker images
+  DOCKER_REV: cefaee3c742af193e0f7783f87edb0d35374515c
+
 before_script:
   - python3 .gitlab/fix-submodules.py
   - git submodule sync --recursive
   - git submodule update --init --recursive
   - git checkout .gitmodules
+  - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
 
 stages:
-  - lint
-  - build
-  - full-build
-  - cleanup # See Note [Cleanup on Windows]
+  - lint       # Source linting
+  - build      # A quick smoke-test to weed out broken commits
+  - full-build # Build all the things
+  - cleanup    # See Note [Cleanup on Windows]
+  - packaging  # Source distribution, etc.
+  - hackage    # head.hackage testing
+  - deploy     # push documentation
+
+.only-default: &only-default
+  only:
+    - master
+    - /ghc-[0-9]+\.[0-9]+/
+    - merge_requests
+    - tags
 
 ############################################################
 # Runner Tags
@@ -30,44 +44,106 @@ stages:
 ############################################################
 
 ghc-linters:
+  allow_failure: true
   stage: lint
-  image: ghcci/linters:0.1
+  image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
   script:
-    - |
-      if [ -n "$CI_MERGE_REQUEST_ID" ]; then
-        base="$(git merge-base $CI_MERGE_REQUEST_BRANCH_NAME HEAD)"
-        validate-commit-msg .git $(git rev-list $base..$CI_COMMIT_SHA)
-        submodchecker .git $(git rev-list $base..$CI_COMMIT_SHA)
-        validate-whitespace .git $(git rev-list $base..$CI_COMMIT_SHA)
-        .gitlab/linters/check-makefiles.py $base $CI_COMMIT_SHA
-        .gitlab/linters/check-cpp.py $base $CI_COMMIT_SHA
-      fi
+    - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
+    - base="$(git merge-base FETCH_HEAD $CI_COMMIT_SHA)"
+    - "echo Merge base $base"
+    #    - validate-commit-msg .git $(git rev-list $base..$CI_COMMIT_SHA)
+    - validate-whitespace .git $(git rev-list $base..$CI_COMMIT_SHA)
+    - .gitlab/linters/check-makefiles.py $base $CI_COMMIT_SHA
+    - .gitlab/linters/check-cpp.py $base $CI_COMMIT_SHA
+  dependencies: []
+  tags:
+    - lint
+  only:
+    refs:
+      - merge_requests
+
+# We allow the submodule checker to fail when run on merge requests (to
+# accomodate, e.g., haddock changes not yet upstream) but not on `master` or
+# Marge jobs.
+.lint-submods:
+  stage: lint
+  image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
+  script:
+    - submodchecker .git $(git rev-list $base..$CI_COMMIT_SHA)
+  dependencies: []
+  tags:
+    - lint
+
+lint-submods:
+  extends: .lint-submods
+  only:
+    refs:
+      - master
+      - /ghc-[0-9]+\.[0-9]+/
+      - wip/marge_bot_batch_merge_job
+
+lint-submods-mr:
+  extends: .lint-submods
+  allow_failure: true
+  only:
+    refs:
+      - merge_requests
+
+.lint-changelogs:
+  stage: lint
+  image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
   dependencies: []
   tags:
     - lint
+  script:
+    - |
+      grep TBA libraries/*/changelog.md && (
+          echo "Error: Found \"TBA\"s in changelogs."
+          exit 1
+      )
+
+lint-changelogs:
+  extends: .lint-changelogs
+  allow_failure: true
+  only:
+    refs:
+      - /ghc-[0-9]+\.[0-9]+/
+
+lint-release-changelogs:
+  extends: .lint-changelogs
+  only:
+    - tags
+
 
 ############################################################
 # Validation via Pipelines (hadrian)
 ############################################################
 
 .validate-hadrian:
+  <<: *only-default
   allow_failure: true
   script:
+    - cabal update
     - git clean -xdf && git submodule foreach git clean -xdf
     - bash .circleci/prepare-system.sh
     - if [[ -d ./cabal-cache ]]; then cp -R ./.cabal-cache ~/.cabal-cache; fi
     - ./boot
     - ./configure $CONFIGURE_ARGS
-    - hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh`
+    - hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --docs=no-sphinx binary-dist
+    - mv _build/bindist/ghc*.tar.xz ghc.tar.xz
   cache:
     key: hadrian
     paths:
       - cabal-cache
+  artifacts:
+    when: always
+    paths:
+      - ghc.tar.xz
 
 validate-x86_64-linux-deb8-hadrian:
   extends: .validate-hadrian
   stage: build
-  image: ghcci/x86_64-linux-deb8:0.1
+  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb8:$DOCKER_REV"
   before_script:
     # workaround for docker permissions
     - sudo chown ghc:ghc -R .
@@ -75,14 +151,17 @@ validate-x86_64-linux-deb8-hadrian:
     - git submodule sync --recursive
     - git submodule update --init --recursive
     - git checkout .gitmodules
+    - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
   tags:
     - x86_64-linux
 
+
 ############################################################
 # Validation via Pipelines (make)
 ############################################################
 
 .validate:
+  <<: *only-default
   variables:
     TEST_TYPE: test
   before_script:
@@ -92,22 +171,25 @@ validate-x86_64-linux-deb8-hadrian:
     - ./configure $CONFIGURE_ARGS
     - |
       THREADS=`mk/detect-cpu-count.sh`
-      make V=0 -j$THREADS
+      make V=0 -j$THREADS WERROR=-Werror
     - |
       make binary-dist TAR_COMP_OPTS="-1"
-      mv ghc-*.tar.xz ghc.tar.xz
     - |
       THREADS=`mk/detect-cpu-count.sh`
-      make $TEST_TYPE THREADS=$THREADS JUNIT_FILE=../../junit.xml
+      make $TEST_TYPE THREADS=$THREADS JUNIT_FILE=../../junit.xml METRICS_FILE=$METRICS_FILE
   dependencies: []
   artifacts:
     reports:
       junit: junit.xml
     expire_in: 2 week
     paths:
-      - ghc.tar.xz
+      - ghc-*.tar.xz
       - junit.xml
 
+#################################
+# x86_64-darwin
+#################################
+
 validate-x86_64-darwin:
   extends: .validate
   stage: full-build
@@ -115,17 +197,20 @@ validate-x86_64-darwin:
     - x86_64-darwin
   variables:
     GHC_VERSION: 8.6.3
+    BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-apple-darwin.tar.xz"
     MACOSX_DEPLOYMENT_TARGET: "10.7"
     # Only Sierra and onwards supports clock_gettime. See #12858
     ac_cv_func_clock_gettime: "no"
     LANG: "en_US.UTF-8"
     CONFIGURE_ARGS: --with-intree-gmp
+    TEST_ENV: "x86_64-darwin"
   before_script:
     - git clean -xdf && git submodule foreach git clean -xdf
     - python3 .gitlab/fix-submodules.py
     - git submodule sync --recursive
     - git submodule update --init --recursive
     - git checkout .gitmodules
+    - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
 
     - bash .gitlab/darwin-init.sh
     - PATH="`pwd`/toolchain/bin:$PATH"
@@ -150,6 +235,12 @@ validate-x86_64-darwin:
     - git submodule sync --recursive
     - git submodule update --init --recursive
     - git checkout .gitmodules
+    - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
+      # Build hyperlinked sources for documentation when building releases
+    - |
+      if [[ -n "$CI_COMMIT_TAG" ]]; then
+        echo "EXTRA_HADDOCK_OPTS += --hyperlinked-source --quickjump" >> mk/build.mk
+      fi
 
     - bash .circleci/prepare-system.sh
     # workaround for docker permissions
@@ -162,22 +253,31 @@ validate-x86_64-darwin:
       - cabal-cache
       - toolchain
 
-validate-aarch64-linux-deb9:
+#################################
+# aarch64-linux-deb9
+#################################
+
+.build-aarch64-linux-deb9:
   extends: .validate-linux
   stage: full-build
-  image: ghcci/aarch64-linux-deb9:0.1
+  image: "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-deb9:$DOCKER_REV"
   allow_failure: true
-  artifacts:
-    when: always
-    expire_in: 2 week
+  variables:
+    TEST_ENV: "aarch64-linux-deb9"
+    BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-aarch64-linux-deb9.tar.xz"
   cache:
     key: linux-aarch64-deb9
   tags:
     - aarch64-linux
 
+validate-aarch64-linux-deb9:
+  extends: .build-aarch64-linux-deb9
+  artifacts:
+    when: always
+    expire_in: 2 week
+
 nightly-aarch64-linux-deb9:
-  extends: validate-aarch64-linux-deb9
-  stage: full-build
+  extends: .build-aarch64-linux-deb9
   artifacts:
     expire_in: 2 year
   variables:
@@ -186,22 +286,28 @@ nightly-aarch64-linux-deb9:
     variables:
       - $NIGHTLY
 
-validate-i386-linux-deb9:
+#################################
+# i386-linux-deb9
+#################################
+
+.build-i386-linux-deb9:
   extends: .validate-linux
   stage: full-build
-  image: ghcci/i386-linux-deb9:0.1
-  allow_failure: true
+  image: "registry.gitlab.haskell.org/ghc/ci-images/i386-linux-deb9:$DOCKER_REV"
+  variables:
+    TEST_ENV: "i386-linux-deb9"
+    BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-i386-deb9-linux.tar.xz"
+  cache:
+    key: linux-i386-deb9
+
+validate-i386-linux-deb9:
+  extends: .build-i386-linux-deb9
   artifacts:
     when: always
     expire_in: 2 week
-  cache:
-    key: linux-i386-deb9
 
 nightly-i386-linux-deb9:
-  extends: .validate-linux
-  stage: full-build
-  image: ghcci/i386-linux-deb9:0.1
-  allow_failure: true
+  extends: .build-i386-linux-deb9
   variables:
     TEST_TYPE: slowtest
   artifacts:
@@ -210,22 +316,29 @@ nightly-i386-linux-deb9:
   only:
     variables:
       - $NIGHTLY
+
+#################################
+# x86_64-linux-deb9
+#################################
+
+.build-x86_64-linux-deb9:
+  extends: .validate-linux
+  stage: full-build
+  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb9:$DOCKER_REV"
+  variables:
+    TEST_ENV: "x86_64-linux-deb9"
+    BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb9-linux.tar.xz"
   cache:
-    key: linux-i386-deb9
+    key: linux-x86_64-deb9
 
 validate-x86_64-linux-deb9:
-  extends: .validate-linux
-  stage: build
-  image: ghcci/x86_64-linux-deb9:0.2
+  extends: .build-x86_64-linux-deb9
   artifacts:
     when: always
     expire_in: 2 week
-  cache:
-    key: linux-x86_64-deb9
 
 nightly-x86_64-linux-deb9:
-  extends: validate-x86_64-linux-deb9
-  stage: build
+  extends: .build-x86_64-linux-deb9
   artifacts:
     expire_in: 2 year
   variables:
@@ -234,70 +347,96 @@ nightly-x86_64-linux-deb9:
     variables:
       - $NIGHTLY
 
+# N.B. Has DEBUG assertions enabled in stage2
+validate-x86_64-linux-deb9-debug:
+  extends: .build-x86_64-linux-deb9
+  stage: build
+  variables:
+    BUILD_FLAVOUR: validate
+    TEST_ENV: "x86_64-linux-deb9-debug"
+
 validate-x86_64-linux-deb9-llvm:
-  extends: .validate-linux
+  extends: .build-x86_64-linux-deb9
   stage: full-build
   allow_failure: true
-  image: ghcci/x86_64-linux-deb9:0.2
   variables:
     BUILD_FLAVOUR: perf-llvm
-  cache:
-    key: linux-x86_64-deb9
-
-validate-x86_64-linux-deb8:
-  extends: .validate-linux
-  stage: full-build
-  image: ghcci/x86_64-linux-deb8:0.1
-  cache:
-    key: linux-x86_64-deb8
-  artifacts:
-    when: always
-    expire_in: 2 week
-
-validate-x86_64-linux-fedora27:
-  extends: .validate-linux
-  stage: full-build
-  image: ghcci/x86_64-linux-fedora27:0.1
-  cache:
-    key: linux-x86_64-fedora27
-  artifacts:
-    when: always
-    expire_in: 2 week
+    TEST_ENV: "x86_64-linux-deb9-llvm"
 
 validate-x86_64-linux-deb9-integer-simple:
-  extends: .validate-linux
+  extends: .build-x86_64-linux-deb9
   stage: full-build
+  allow_failure: true
   variables:
     INTEGER_LIBRARY: integer-simple
-  image: ghcci/x86_64-linux-deb9:0.2
-  cache:
-    key: linux-x86_64-deb9
+    TEST_ENV: "x86_64-linux-deb9-integer-simple"
+    BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb9-linux-integer-simple.tar.xz"
 
 nightly-x86_64-linux-deb9-integer-simple:
-  extends: validate-x86_64-linux-deb9-integer-simple
+  extends: .build-x86_64-linux-deb9
   stage: full-build
-  artifacts:
-    expire_in: 2 year
   variables:
+    INTEGER_LIBRARY: integer-simple
+    TEST_ENV: "x86_64-linux-deb9-integer-simple"
     TEST_TYPE: slowtest
+  artifacts:
+    expire_in: 2 year
   only:
     variables:
       - $NIGHTLY
 
 validate-x86_64-linux-deb9-unreg:
-  extends: .validate-linux
+  extends: .build-x86_64-linux-deb9
   stage: full-build
+  allow_failure: true
   variables:
     CONFIGURE_ARGS: --enable-unregisterised
-  image: ghcci/x86_64-linux-deb9:0.2
+    TEST_ENV: "x86_64-linux-deb9-unreg"
+
+
+#################################
+# x86_64-linux-deb8
+#################################
+
+release-x86_64-linux-deb8:
+  extends: .validate-linux
+  stage: full-build
+  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb8:$DOCKER_REV"
+  variables:
+    TEST_ENV: "x86_64-linux-deb8"
+    BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb8-linux.tar.xz"
+  only:
+    - tags
   cache:
-    key: linux-x86_64-deb9
+    key: linux-x86_64-deb8
+  artifacts:
+    when: always
+    expire_in: 2 week
+
+
+#################################
+# x86_64-linux-fedora27
+#################################
+
+validate-x86_64-linux-fedora27:
+  extends: .validate-linux
+  stage: full-build
+  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora27:$DOCKER_REV"
+  variables:
+    TEST_ENV: "x86_64-linux-fedora27"
+    BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-fedora27-linux.tar.xz"
+  cache:
+    key: linux-x86_64-fedora27
+  artifacts:
+    when: always
+    expire_in: 2 week
 
 ############################################################
 # Validation via Pipelines (Windows)
 ############################################################
 
-.validate-windows:
+.build-windows:
+  <<: *only-default
   before_script:
     - git clean -xdf
     - git submodule foreach git clean -xdf
@@ -314,72 +453,132 @@ validate-x86_64-linux-deb9-unreg:
     - git submodule sync --recursive
     - git submodule update --init --recursive
     - git checkout .gitmodules
+    - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
     - bash .gitlab/win32-init.sh
   after_script:
     - rd /s /q tmp
     - robocopy /np /nfl /ndl /e "%APPDATA%\cabal" cabal-cache
     - bash -c 'make clean || true'
   dependencies: []
+  variables:
+    FORCE_SYMLINKS: 1
+    LANG: "en_US.UTF-8"
   cache:
     paths:
       - cabal-cache
       - ghc-8.6.2
       - ghc-tarballs
 
-validate-x86_64-windows-hadrian:
-  extends: .validate-windows
+.build-windows-hadrian:
+  extends: .build-windows
   stage: full-build
+  allow_failure: true
   variables:
     GHC_VERSION: "8.6.2"
-    LANG: "en_US.UTF-8"
   script:
     - |
-      set MSYSTEM=MINGW64
       python boot
       bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex'
-      mkdir -p _build
-      cp -R inplace/mingw _build/mingw
-    - bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --flavour=Quick"
-    # FIXME: Bindist disabled due to #16073
-    #- bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh binary-dist"
+    - bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --flavour=Quick --docs=no-sphinx binary-dist"
+    - mv _build/bindist/ghc*.tar.xz ghc.tar.xz
     # FIXME: Testsuite disabled due to #16156.
-    #- bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
-  cache:
-    key: x86_64-windows
+    # - bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
   tags:
     - x86_64-windows
+  artifacts:
+    when: always
+    paths:
+      - ghc.tar.xz
 
-validate-x86_64-windows:
-  extends: .validate-windows
+validate-x86_64-windows-hadrian:
+  extends: .build-windows-hadrian
+  variables:
+    MSYSTEM: MINGW64
+  cache:
+    key: x86_64-windows-hadrian
+
+nightly-i386-windows-hadrian:
+  extends: .build-windows-hadrian
+  variables:
+    MSYSTEM: MINGW32
+  only:
+    variables:
+      - $NIGHTLY
+  cache:
+    key: i386-windows-hadrian
+
+.build-windows-make:
+  extends: .build-windows
   stage: full-build
   # due to #16084
   allow_failure: true
   variables:
+    BUILD_FLAVOUR: "quick"
     GHC_VERSION: "8.6.2"
-    LANG: "en_US.UTF-8"
+    BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-mingw32.tar.xz"
   script:
     - |
-      set MSYSTEM=MINGW64
       python boot
-      bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex'
-    - bash -c "echo include mk/flavours/quick.mk > mk/build.mk"
+      bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex $CONFIGURE_ARGS'
+    - bash -c "echo include mk/flavours/${BUILD_FLAVOUR}.mk > mk/build.mk"
     - bash -c "PATH=`pwd`/toolchain/bin:$PATH make -j`mk/detect-cpu-count.sh`"
-    - |
-      bash -c "make binary-dist TAR_COMP_OPTS=-1"
-      mv ghc-*.tar.xz ghc.tar.xz
+    - bash -c "PATH=`pwd`/toolchain/bin:$PATH make binary-dist TAR_COMP_OPTS=-1"
     - bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
-  cache:
-    key: x86_64-windows
   tags:
     - x86_64-windows
   artifacts:
     when: always
+    expire_in: 2 week
     reports:
       junit: junit.xml
     paths:
-      - ghc.tar.xz
+      - ghc-*.tar.xz
       - junit.xml
 
+validate-x86_64-windows:
+  extends: .build-windows-make
+  variables:
+    MSYSTEM: MINGW64
+    CONFIGURE_ARGS: "--target=x86_64-unknown-mingw32"
+  cache:
+    key: x86_64-windows
+
+# Normal Windows validate builds are profiled; that won't do for releases.
+release-x86_64-windows:
+  extends: validate-x86_64-windows
+  variables:
+    MSYSTEM: MINGW64
+    BUILD_FLAVOUR: "perf"
+    CONFIGURE_ARGS: "--target=x86_64-unknown-mingw32"
+  only:
+    - tags
+
+release-i386-windows:
+  extends: .build-windows-make
+  only:
+    - tags
+  variables:
+    MSYSTEM: MINGW32
+    BUILD_FLAVOUR: "perf"
+    CONFIGURE_ARGS: "--target=i386-unknown-mingw32"
+  cache:
+    key: i386-windows
+
+nightly-i386-windows:
+  extends: .build-windows-make
+  only:
+    variables:
+      - $NIGHTLY
+  variables:
+    MSYSTEM: MINGW32
+    CONFIGURE_ARGS: "--target=i386-unknown-mingw32"
+  cache:
+    key: i386-windows
+
+############################################################
+# Cleanup
+############################################################
+
 # Note [Cleaning up after shell executor]
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 #
@@ -393,6 +592,7 @@ validate-x86_64-windows:
 
 # See Note [Cleanup after shell executor]
 cleanup-windows:
+  <<: *only-default
   stage: cleanup
   tags:
     - x86_64-windows
@@ -415,10 +615,12 @@ cleanup-windows:
 
 # See Note [Cleanup after shell executor]
 cleanup-darwin:
+  <<: *only-default
   stage: cleanup
   tags:
     - x86_64-darwin
   when: always
+  dependencies: []
   before_script:
     - echo "Time to clean up"
   script:
@@ -430,3 +632,65 @@ cleanup-darwin:
     - rm -Rf $BUILD_DIR/*
     - exit 0
 
+############################################################
+# Packaging
+############################################################
+
+source-tarball:
+  stage: packaging
+  tags:
+    - x86_64-linux
+  image: ghcci/x86_64-linux-deb9:0.2
+  only:
+    - tags
+  artifacts:
+    paths:
+      - ghc-*.tar.xz
+      - version
+  script:
+    - mk/get-win32-tarballs.sh download all
+    - ./boot
+    - ./configure
+    - make sdist
+    - mv sdistprep/*.xz  .
+    - make show VALUE=version > version
+
+
+############################################################
+# Testing via head.hackage
+############################################################
+
+# Triggering jobs in the ghc/head.hackage project requires that we have a job
+# token for that repository. Furthermore the head.hackage CI job must have
+# access to an unprivileged access token with the ability to query the ghc/ghc
+# project such that it can find the job ID of the fedora27 job for the current
+# pipeline.
+
+.hackage:
+  <<: *only-default
+  stage: hackage
+  image: ghcci/x86_64-linux-deb9:0.2
+  tags:
+    - x86_64-linux
+  dependencies: []
+  variables:
+    HEAD_HACKAGE_PROJECT_ID: "78"
+  script:
+    - bash .gitlab/start-head.hackage.sh
+
+hackage:
+  extends: .hackage
+  when: manual
+
+hackage-label:
+  extends: .hackage
+  only:
+    variables:
+      - $CI_MERGE_REQUEST_LABELS =~ /.*user-facing.*/
+
+nightly-hackage:
+  extends: .hackage
+  only:
+    variables:
+      - $NIGHTLY
+


=====================================
aclocal.m4
=====================================
@@ -288,11 +288,31 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
         esac
     }
 
+    dnl Note [autoconf assembler checks and -flto]
+    dnl ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    dnl
+    dnl Autoconf's AC_COMPILE_IFELSE macro is fragile in the case of checks
+    dnl which require that the assembler is run. Specifically, GCC does not run
+    dnl the assembler if invoked with `-c -flto`; it merely dumps its internal
+    dnl AST to the object file, to be compiled and assembled during the final
+    dnl link.
+    dnl
+    dnl This can cause configure checks like that for the
+    dnl .subsections_via_symbols directive to pass unexpected (see #16440),
+    dnl leading the build system to incorrectly conclude that the directive is
+    dnl supported.
+    dnl
+    dnl For this reason, it is important that configure checks that rely on the
+    dnl assembler failing use AC_LINK_IFELSE rather than AC_COMPILE_IFELSE,
+    dnl ensuring that the assembler sees the check.
+    dnl
+
     dnl ** check for Apple-style dead-stripping support
     dnl    (.subsections-via-symbols assembler directive)
 
     AC_MSG_CHECKING(for .subsections_via_symbols)
-    AC_COMPILE_IFELSE(
+    dnl See Note [autoconf assembler checks and -flto]
+    AC_LINK_IFELSE(
         [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
         [AC_MSG_RESULT(yes)
          HaskellHaveSubsectionsViaSymbols=True
@@ -305,8 +325,9 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
     dnl ** check for .ident assembler directive
 
     AC_MSG_CHECKING(whether your assembler supports .ident directive)
-    AC_COMPILE_IFELSE(
-        [AC_LANG_SOURCE([__asm__ (".ident \"GHC x.y.z\"");])],
+    dnl See Note [autoconf assembler checks and -flto]
+    AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM([__asm__ (".ident \"GHC x.y.z\"");], [])],
         [AC_MSG_RESULT(yes)
          HaskellHaveIdentDirective=True],
         [AC_MSG_RESULT(no)
@@ -330,8 +351,15 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
         ;;
     esac
     AC_MSG_CHECKING(for GNU non-executable stack support)
-    AC_COMPILE_IFELSE(
-        [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",$progbits");], [0])],
+    dnl See Note [autoconf assembler checks and -flto]
+    AC_LINK_IFELSE(
+       dnl the `main` function is placed after the .note.GNU-stack directive
+       dnl so we need to ensure that the active segment is correctly set,
+       dnl otherwise `main` will be placed in the wrong segment.
+        [AC_LANG_PROGRAM([
+           __asm__ (".section .note.GNU-stack,\"\",$progbits");
+           __asm__ (".section .text");
+         ], [0])],
         [AC_MSG_RESULT(yes)
          HaskellHaveGnuNonexecStack=True],
         [AC_MSG_RESULT(no)


=====================================
docs/users_guide/8.8.1-notes.rst
=====================================
@@ -206,6 +206,7 @@ for further change information.
     libraries/mtl/mtl.cabal:                 Dependency of ``Cabal`` library
     libraries/parsec/parsec.cabal:           Dependency of ``Cabal`` library
     libraries/process/process.cabal:         Dependency of ``ghc`` library
+    libraries/pretty/pretty.cabal:           Dependency of ``ghc`` library
     libraries/stm/stm.cabal:                 Dependency of ``haskeline`` library
     libraries/template-haskell/template-haskell.cabal:     Core library
     libraries/terminfo/terminfo.cabal:       Dependency of ``haskeline`` library


=====================================
hadrian/doc/make.md
=====================================
@@ -174,6 +174,22 @@ time you fire up a build. This is not possible with the Make build system.
   build docs
   ```
 
+- Build documentation, but without haddocks (resp. without HTML or PDF manuals)
+
+  ``` sh
+  # Make
+  echo 'HADDOCKS_DOCS = NO' > mk/build.mk
+  # For HTML manuals: BUILD_SPHINX_HTML = NO
+  # For PDF manuals: BUILD_SPHINX_PDF = NO
+  make
+
+  # Hadrian
+  build docs --docs=no-haddocks
+  # Append --docs=no-sphinx-pdfs, --docs=no-sphinx-html or
+  # --docs=no-sphinx-man (or --docs=no-sphinx to encompass them all)
+  # to further reduce or even completely disable documentation targets.
+  ```
+
 - Running nofib
 
   ``` sh


=====================================
hadrian/doc/user-settings.md
=====================================
@@ -32,7 +32,10 @@ data Flavour = Flavour {
     -- | Build profiled GHC.
     ghcProfiled :: Bool,
     -- | Build GHC with debug information.
-    ghcDebugged :: Bool }
+    ghcDebugged :: Bool
+    -- | Whether to build docs and which ones
+    --   (haddocks, user manual, haddock manual)
+    ghcDocs :: Action DocTargets }
 ```
 Hadrian provides several built-in flavours (`default`, `quick`, and a few
 others; see `hadrian/doc/flavours.md`), which can be activated from the command line,
@@ -102,6 +105,17 @@ patterns such as `"//Prelude.*"` can be used when matching input and output file
 where `//` matches an arbitrary number of path components and `*` matches an entire
 path component, excluding any separators.
 
+### Enabling -Werror
+
+It is useful to enable `-Werror` when building GHC as this setting is
+used in the CI to ensure a warning free build. The `werror` function can be
+used to easily modify a flavour to turn this setting on.
+
+```
+devel2WerrorFlavour :: Flavour
+devel2WerrorFlavour = werror (developmentFlavour Stage2)
+```
+
 ## Packages
 
 Users can add and remove packages from particular build stages. As an example,
@@ -216,6 +230,45 @@ verboseCommand = output "//rts/sm/*" &&^ way threaded
 verboseCommand = return True
 ```
 
+## Documentation
+
+`Flavour`'s `ghcDocs :: Action DocTargets` field lets you
+customize the "groups" of documentation targets that should
+run when running `build docs` (or, transitively,
+`build binary-dist`).
+
+```haskell
+type DocTargets = Set DocTarget
+data DocTarget = Haddocks | SphinxHTML | SphinxPDFs | SphinxMan
+```
+
+By default, `ghcDocs` contains all of them and `build docs` would
+therefore attempt to build all the haddocks, manuals and manpages.
+If, for some reason (e.g no easy way to install `sphinx-build` or
+`xelatex` on your system), you're just interested in building the
+haddocks, you could define a custom flavour as follows:
+
+```haskell
+justHaddocksFlavour :: Flavour
+justHaddocksFlavour = defaultFlavour
+    { name = "default-haddocks"
+	, ghcDocs = Set.singleton Haddocks }
+```
+
+and then run `build --flavour=default-haddocks`. Alternatively,
+you can use the `--docs` CLI flag to selectively disable some or
+all of the documentation targets:
+
+- `--docs=none`: don't build any docs
+- `--docs=no-haddocks`: don't build haddocks
+- `--docs=no-sphinx`: don't build any user manual or manpage
+- `--docs=no-sphinx-html`: don't build HTML versions of manuals
+- `--docs=no-sphinx-pdfs`: don't build PDF versions of manuals
+- `--docs=no-sphinx-man`: don't build the manpage
+
+You can pass several `--docs=...` flags, Hadrian will combine
+their effects.
+
 ## Miscellaneous
 
 To change the default behaviour of Hadrian with respect to building split


=====================================
hadrian/src/CommandLine.hs
=====================================
@@ -1,17 +1,20 @@
 module CommandLine (
     optDescrs, cmdLineArgsMap, cmdFlavour, lookupFreeze1, cmdIntegerSimple,
     cmdProgressColour, cmdProgressInfo, cmdConfigure, cmdSplitObjects,
-    lookupBuildRoot, TestArgs(..), TestSpeed(..), defaultTestArgs
+    cmdDocsArgs, lookupBuildRoot, TestArgs(..), TestSpeed(..), defaultTestArgs
     ) where
 
 import Data.Either
 import qualified Data.HashMap.Strict as Map
 import Data.List.Extra
 import Development.Shake hiding (Normal)
+import Flavour (DocTargets, DocTarget(..))
 import Hadrian.Utilities hiding (buildRoot)
 import System.Console.GetOpt
 import System.Environment
 
+import qualified Data.Set as Set
+
 data TestSpeed = Slow | Average | Fast deriving (Show, Eq)
 
 -- | All arguments that can be passed to Hadrian via the command line.
@@ -24,7 +27,8 @@ data CommandLineArgs = CommandLineArgs
     , progressInfo   :: ProgressInfo
     , splitObjects   :: Bool
     , buildRoot      :: BuildRoot
-    , testArgs       :: TestArgs }
+    , testArgs       :: TestArgs
+    , docTargets     :: DocTargets }
     deriving (Eq, Show)
 
 -- | Default values for 'CommandLineArgs'.
@@ -38,7 +42,8 @@ defaultCommandLineArgs = CommandLineArgs
     , progressInfo   = Brief
     , splitObjects   = False
     , buildRoot      = BuildRoot "_build"
-    , testArgs       = defaultTestArgs }
+    , testArgs       = defaultTestArgs
+    , docTargets     = Set.fromList [minBound..maxBound] }
 
 -- | These arguments are used by the `test` target.
 data TestArgs = TestArgs
@@ -179,6 +184,25 @@ readTestWay way =
             let newWays = way : testWays (testArgs flags)
             in flags { testArgs = (testArgs flags) {testWays = newWays} }
 
+readDocsArg :: Maybe String -> Either String (CommandLineArgs -> CommandLineArgs)
+readDocsArg ms = maybe (Left "Cannot parse docs argument") (Right . set) (go =<< ms)
+
+  where
+    go :: String -> Maybe (DocTargets -> DocTargets)
+    go "none"           = Just (const Set.empty)
+    go "no-haddocks"    = Just (Set.delete Haddocks)
+    go "no-sphinx-html" = Just (Set.delete SphinxHTML)
+    go "no-sphinx-pdfs" = Just (Set.delete SphinxPDFs)
+    go "no-sphinx-man"  = Just (Set.delete SphinxMan)
+    go "no-sphinx"      = Just (Set.delete SphinxHTML
+                              . Set.delete SphinxPDFs
+                              . Set.delete SphinxMan)
+    go _                = Nothing
+
+    set :: (DocTargets -> DocTargets) -> CommandLineArgs -> CommandLineArgs
+    set tweakTargets flags = flags
+      { docTargets = tweakTargets (docTargets flags) }
+
 -- | Standard 'OptDescr' descriptions of Hadrian's command line arguments.
 optDescrs :: [OptDescr (Either String (CommandLineArgs -> CommandLineArgs))]
 optDescrs =
@@ -198,6 +222,8 @@ optDescrs =
       "Progress info style (None, Brief, Normal or Unicorn)."
     , Option [] ["split-objects"] (NoArg readSplitObjects)
       "Generate split objects (requires a full clean rebuild)."
+    , Option [] ["docs"] (OptArg readDocsArg "TARGET")
+      "Strip down docs targets (none, no-haddocks, no-sphinx[-{html, pdfs, man}]."
     , Option [] ["test-compiler"] (OptArg readTestCompiler "TEST_COMPILER")
       "Use given compiler [Default=stage2]."
     , Option [] ["test-config-file"] (OptArg readTestConfigFile "CONFIG_FILE")
@@ -259,3 +285,6 @@ cmdProgressInfo = progressInfo <$> cmdLineArgs
 
 cmdSplitObjects :: Action Bool
 cmdSplitObjects = splitObjects <$> cmdLineArgs
+
+cmdDocsArgs :: Action DocTargets
+cmdDocsArgs = docTargets <$> cmdLineArgs


=====================================
hadrian/src/Flavour.hs
=====================================
@@ -1,6 +1,10 @@
-module Flavour (Flavour (..)) where
+module Flavour
+  ( Flavour (..), werror
+  , DocTargets, DocTarget(..)
+  ) where
 
 import Expression
+import Data.Set (Set)
 
 -- Please update doc/{flavours.md, user-settings.md} when changing this file.
 -- | 'Flavour' is a collection of build settings that fully define a GHC build.
@@ -31,4 +35,33 @@ data Flavour = Flavour {
     -- | Build profiled GHC.
     ghcProfiled :: Bool,
     -- | Build GHC with debug information.
-    ghcDebugged :: Bool }
+    ghcDebugged :: Bool,
+    -- | Whether to build docs and which ones
+    --   (haddocks, user manual, haddock manual)
+    ghcDocs :: Action DocTargets }
+
+-- | A set of documentation targets
+type DocTargets = Set DocTarget
+
+-- | Documentation targets
+--
+--   While we can't reasonably expose settings or CLI options
+--   to selectively disable, say, base's haddocks, we can offer
+--   a less fine-grained choice:
+--
+--   - haddocks for libraries
+--   - non-haddock html pages (e.g GHC's user manual)
+--   - PDF documents (e.g haddock's manual)
+--   - man pages (GHC's)
+--
+--   The main goal being to have easy ways to do away with the need
+--   for e.g @sphinx-build@ or @xelatex@ and associated packages
+--   while still being able to build a(n almost) complete binary
+--   distribution.
+data DocTarget = Haddocks | SphinxHTML | SphinxPDFs | SphinxMan
+  deriving (Eq, Ord, Show, Bounded, Enum)
+
+-- | Turn on -Werror for packages built with the stage1 compiler.
+-- It mimics the CI settings so is useful to turn on when developing.
+werror :: Flavour -> Flavour
+werror fl = fl { args = args fl <> (builder Ghc ? notStage0 ? arg "-Werror") }


=====================================
hadrian/src/Rules/Documentation.hs
=====================================
@@ -22,6 +22,7 @@ import Target
 import Utilities
 
 import Data.List (union)
+import qualified Data.Set    as Set
 import qualified Text.Parsec as Parsec
 
 docRoot :: FilePath
@@ -79,10 +80,35 @@ documentationRules = do
     -- Haddock's manual, and builds man pages
     "docs" ~> do
         root <- buildRoot
+        doctargets <- ghcDocs =<< flavour
         let html     = htmlRoot -/- "index.html" -- also implies "docs-haddock"
             archives = map pathArchive docPaths
             pdfs     = map pathPdf $ docPaths \\ ["libraries"]
-        need $ map (root -/-) $ [html] ++ archives ++ pdfs ++ [manPageBuildPath]
+
+            targets = -- include PDFs unless --docs=no-sphinx[-pdf] is
+                      -- passed.
+                      concat [ pdfs | SphinxPDFs `Set.member` doctargets ]
+
+                      -- include manpage unless --docs=no-sphinx[-man] is given.
+                   ++ [ manPageBuildPath | SphinxMan `Set.member` doctargets ]
+
+                      -- include toplevel html target uness we neither want
+                      -- haddocks nor html pages produced by sphinx.
+                   ++ [ html | Set.size (doctargets `Set.intersection`
+                                         Set.fromList [Haddocks, SphinxHTML]
+                                        ) > 0 ]
+
+                      -- include archives for whatever targets remain from
+                      -- the --docs arguments we got.
+                   ++ [ ar
+                      | (ar, doc) <- zip archives docPaths
+                      , archiveTarget doc `Set.member` doctargets ]
+
+        need $ map (root -/-) targets
+
+    where archiveTarget "libraries"   = Haddocks
+          archiveTarget _             = SphinxHTML
+
 
 ------------------------------------- HTML -------------------------------------
 
@@ -94,7 +120,16 @@ buildHtmlDocumentation = do
     root <- buildRootRules
 
     root -/- htmlRoot -/- "index.html" %> \file -> do
-        need $ map ((root -/-) . pathIndex) docPaths
+        doctargets <- ghcDocs =<< flavour
+
+        -- We include the HTML output of haddock for libraries unless
+        -- told not to (e.g with --docs=no-haddocks). Likewise for
+        -- the HTML version of the users guide or the Haddock manual.
+        let targets = [ "libraries" | Haddocks `Set.member` doctargets ]
+                   ++ concat [ ["users_guide", "Haddock"]
+                             | SphinxHTML `Set.member` doctargets ]
+        need $ map ((root -/-) . pathIndex) targets
+
         copyFileUntracked "docs/index.html" file
 
 -- | Compile a Sphinx ReStructured Text package to HTML.


=====================================
hadrian/src/Settings/Default.hs
=====================================
@@ -222,7 +222,8 @@ defaultFlavour = Flavour
     , dynamicGhcPrograms = defaultDynamicGhcPrograms
     , ghciWithDebugger   = False
     , ghcProfiled        = False
-    , ghcDebugged        = False }
+    , ghcDebugged        = False
+    , ghcDocs            = cmdDocsArgs }
 
 -- | Default logic for determining whether to build
 --   dynamic GHC programs.


=====================================
hadrian/src/UserSettings.hs
=====================================
@@ -2,6 +2,10 @@
 -- hadrian/src/UserSettings.hs to hadrian/UserSettings.hs and edit your copy.
 -- If you don't copy the file your changes will be tracked by git and you can
 -- accidentally commit them.
+--
+-- See doc/user-settings.md for instructions, and src/Flavour.hs for auxiliary
+-- functions for manipulating flavours.
+-- Please update doc/user-settings.md when committing changes to this file.
 module UserSettings (
     userFlavours, userPackages, userDefaultFlavour,
     verboseCommand, buildProgressColour, successColour, finalStage


=====================================
rts/Apply.cmm
=====================================
@@ -60,7 +60,7 @@ stg_ap_0_fast ( P_ fun )
 
 again:
     W_  info;
-    W_ untaggedfun;
+    P_ untaggedfun;
     W_ arity;
     untaggedfun = UNTAG(fun);
     info = %INFO_PTR(untaggedfun);
@@ -106,6 +106,11 @@ again:
                 pap = Hp - SIZEOF_StgPAP + WDS(1);
                 SET_HDR(pap, stg_PAP_info, CCCS);
                 StgPAP_arity(pap) = arity;
+                if (arity <= TAG_MASK) {
+                  // TODO: Shouldn't this already be tagged? If not why did we
+                  // untag it at the beginning of this function?
+                  fun = untaggedfun + arity;
+                }
                 StgPAP_fun(pap)   = fun;
                 StgPAP_n_args(pap) = 0;
                 return (pap);
@@ -117,9 +122,8 @@ again:
                 return (fun);
             } else {
                 // We're going to copy this PAP, and put the new CCS in it
-                fun = untaggedfun;
                 W_ size;
-                size = SIZEOF_StgPAP + WDS(TO_W_(StgPAP_n_args(fun)));
+                size = SIZEOF_StgPAP + WDS(TO_W_(StgPAP_n_args(untaggedfun)));
                 HP_CHK_GEN(size);
                 TICK_ALLOC_PAP(size, 0);
                 // attribute this allocation to the "overhead of profiling"
@@ -127,13 +131,13 @@ again:
                 P_ pap;
                 pap = Hp - size + WDS(1);
                 // We'll lose the original PAP, so we should enter its CCS
-                ccall enterFunCCS(BaseReg "ptr", StgHeader_ccs(fun) "ptr");
+                ccall enterFunCCS(BaseReg "ptr", StgHeader_ccs(untaggedfun) "ptr");
                 SET_HDR(pap, stg_PAP_info, CCCS);
-                StgPAP_arity(pap) = StgPAP_arity(fun);
-                StgPAP_n_args(pap) = StgPAP_n_args(fun);
+                StgPAP_arity(pap) = StgPAP_arity(untaggedfun);
+                StgPAP_n_args(pap) = StgPAP_n_args(untaggedfun);
                 StgPAP_fun(pap)   = StgPAP_fun(fun);
                 W_ i;
-                i = TO_W_(StgPAP_n_args(fun));
+                i = TO_W_(StgPAP_n_args(untaggedfun));
             loop:
                 if (i == 0) {
                     return (pap);


=====================================
rts/StgCRun.c
=====================================
@@ -494,15 +494,15 @@ StgRunIsImplementedInAssembler(void)
         "movq  48(%%rsp),%%rdi\n\t"
         "movq  56(%%rsp),%%rsi\n\t"
         "movq  64(%%rsp),%%xmm6\n\t"
-        "movq  72(%%rax),%%xmm7\n\t"
-        "movq  80(%%rax),%%xmm8\n\t"
-        "movq  88(%%rax),%%xmm9\n\t"
-        "movq  96(%%rax),%%xmm10\n\t"
-        "movq 104(%%rax),%%xmm11\n\t"
-        "movq 112(%%rax),%%xmm12\n\t"
-        "movq 120(%%rax),%%xmm13\n\t"
-        "movq 128(%%rax),%%xmm14\n\t"
-        "movq 136(%%rax),%%xmm15\n\t"
+        "movq  72(%%rsp),%%xmm7\n\t"
+        "movq  80(%%rsp),%%xmm8\n\t"
+        "movq  88(%%rsp),%%xmm9\n\t"
+        "movq  96(%%rsp),%%xmm10\n\t"
+        "movq 104(%%rsp),%%xmm11\n\t"
+        "movq 112(%%rsp),%%xmm12\n\t"
+        "movq 120(%%rsp),%%xmm13\n\t"
+        "movq 128(%%rsp),%%xmm14\n\t"
+        "movq 136(%%rsp),%%xmm15\n\t"
 #endif
         "addq %1, %%rsp\n\t"
         "retq"



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/2ea424ea10e30105f9cb4f7d4368d055e67c54c2...bdf9d978274a3f624af771b0a519196137871603

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/2ea424ea10e30105f9cb4f7d4368d055e67c54c2...bdf9d978274a3f624af771b0a519196137871603
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20190419/a760d03f/attachment-0001.html>


More information about the ghc-commits mailing list