Multiple fixes / improvements for LLVM backend

Authored by kavon on Oct 4 2018, 12:44 PM.

Description

Multiple fixes / improvements for LLVM backend

  • Fix for Trac #13904 -- stop "trashing" callee-saved registers, since it is not actually doing anything useful.
  • Fix for Trac #14251 -- fixes the calling convention for functions passing raw SSE-register values by adding padding as needed to get the values in the right registers. This problem cropped up when some args were unused an dropped from the live list.
  • Fixed a typo in 'readnone' attribute
  • Added 'lower-expect' pass to level 0 LLVM optimization passes to improve block layout in LLVM for stack checks, etc.

Test Plan: make test WAYS=optllvm and make test WAYS=llvm

Reviewers: bgamari, simonmar, angerman

Reviewed By: angerman

Subscribers: rwbarton, carter

GHC Trac Issues: Trac #13904, Trac #14251

Differential Revision: https://phabricator.haskell.org/D5190