[GHC] #10375: arm: ghci hits an illegal instruction

GHC ghc-devs at haskell.org
Sat Sep 5 19:39:04 UTC 2015


#10375: arm: ghci hits an illegal instruction
-------------------------------------+---------------------------------
        Reporter:  erikd             |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  high              |               Milestone:  7.10.3
       Component:  GHCi              |                 Version:  7.10.1
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:  arm
 Type of failure:  GHCi crash        |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:                    |  Differential Revisions:
-------------------------------------+---------------------------------

Comment (by erikd):

 Compiling as above with `-keep-s-file -keep-llvm-file`:

 {{{
 stg_ap_v_fast$def:                      @ @"stg_ap_v_fast$def"
         .fnstart
 .Leh_func_begin69:
 @ BB#0:                                 @ %cmL
         movw    r0, :lower16:MainCapability
         movt    r0, :upper16:MainCapability
         ldr     r1, [r0, #16]
         and     r2, r1, #3
         cmp     r2, #1
         bne     .LBB69_2
 @ BB#1:                                 @ %cmn
         ldr     r0, [r1, #-1]
         ldr     r0, [r0]
 }}}

 and the LLVM code:

 {{{
 @stg_ap_v_fast = alias i8* bitcast (void ()* @stg_ap_v_fast$def to i8*)
 define ccc void @stg_ap_v_fast$def() align 4 nounwind
 {
 cmL:
   %lcmm = alloca i32, i32 1
   %lcmA = alloca i32, i32 1
   %lcmC = alloca i32, i32 1
   %ln3zE = ptrtoint i8* @MainCapability to i32
   %ln3zF = add i32 %ln3zE, 16
   %ln3zG = inttoptr i32 %ln3zF to i32*
   %ln3zH = load i32* %ln3zG, !tbaa !5
   %ln3zI = and i32 %ln3zH, 3
   %ln3zJ = icmp eq i32 %ln3zI, 1
   br i1 %ln3zJ, label %cmn, label %cmp
 cmp:
   %ln3zK = ptrtoint i8* @MainCapability to i32
   %ln3zL = add i32 %ln3zK, 808
   %ln3zM = inttoptr i32 %ln3zL to i32*
   %ln3zN = load i32* %ln3zM, !tbaa !5
   %ln3zO = add i32 %ln3zN, -4
 }}}

 which suggests this is an LLVM Arm code gen bug.

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


More information about the ghc-tickets mailing list