[GHC] #13724: Clamping of llvm llc to -O1 and -O2

GHC ghc-devs at haskell.org
Fri May 19 01:58:18 UTC 2017


#13724: Clamping of llvm llc to -O1 and -O2
-------------------------------------+-------------------------------------
           Reporter:  angerman       |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:  8.4.1
          Component:  Compiler       |           Version:  8.3
  (LLVM)                             |
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 We currently clamp the optimization level of llvm llc (3.9 and 4.0) within
 `[1,2]`.

 The reason is that with `-O0`, the naive register allocator can topple
 over with

 {{{
     Error while trying to spill R1 from class GPR: Cannot scavenge
 register
     without an emergency spill slot!
 }}}

 and with `-O3` the `llvm::SelectionDAGISel::LowerArguments` may break,
 when compiling
 `rts/HeapStackCheck.cmm` with the stage1 ghc.

 {{{
 0  llc                      0x0000000102ae63e8
 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 40
 1  llc                      0x0000000102ae69a6 SignalHandler(int) + 358
 2  libsystem_platform.dylib 0x00007fffc23f4b3a _sigtramp + 26
 3  libsystem_c.dylib        0x00007fffc226498b __vfprintf + 17876
 4  llc                      0x00000001029d5123
 llvm::SelectionDAGISel::LowerArguments(llvm::Function const&) + 5699
 5  llc                      0x0000000102a21a35
 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 3381
 6  llc                      0x0000000102a202b1
 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) +
 1457
 7  llc                      0x0000000101bdc474 (anonymous
 namespace)::ARMDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&)
 + 20
 8  llc                      0x00000001025573a6
 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 134
 9  llc                      0x000000010274fb12
 llvm::FPPassManager::runOnFunction(llvm::Function&) + 498
 10 llc                      0x000000010274fd23
 llvm::FPPassManager::runOnModule(llvm::Module&) + 67
 11 llc                      0x00000001027501b8
 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 920
 12 llc                      0x000000010195f075 compileModule(char**,
 llvm::LLVMContext&) + 12133
 13 llc                      0x000000010195bf0b main + 491
 14 libdyld.dylib            0x00007fffc21e5235 start + 1
 Stack dump:
 0.  Program arguments: llc -O3 -mtriple=arm-unknown-linux-gnueabihf
 -enable-tbaa
 /var/folders/fv/xqjrpfj516n5xq_m_ljpsjx00000gn/T/ghc33674_0/ghc_6.bc -o
 /var/folders/fv/xqjrpfj516n5xq_m_ljpsjx00000gn/T/ghc33674_0/ghc_7.lm_s
 1.  Running pass 'Function Pass Manager' on module
 '/var/folders/fv/xqjrpfj516n5xq_m_ljpsjx00000gn/T/ghc33674_0/ghc_6.bc'.
 2.  Running pass 'ARM Instruction Selection' on function
 '@"stg_gc_f1$def"'
 }}}

 `opt` and `llc` should respect `-opt_lo` and `-opt_lc`, such that
 `-opt_lc=-O3` can be used to validate the behaviour.

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


More information about the ghc-tickets mailing list