Peter Trommler pushed to branch wip/T26519 at Glasgow Haskell Compiler / GHC

Commits:

1 changed file:

Changes:

  • compiler/GHC/CmmToAsm/PPC/CodeGen.hs
    ... ... @@ -469,22 +469,13 @@ getRegister' _ platform (CmmLoad mem pk _)
    469 469
             return (Any II64 code)
    
    470 470
     
    
    471 471
     -- catch simple cases of zero- or sign-extended load
    
    472
    --- XXX: refactor into separate function
    
    473 472
     getRegister' _ _ (CmmMachOp (MO_UU_Conv src tgt) [CmmLoad mem pk _])
    
    474
    -  | src < tgt = do
    
    475
    -      let format = cmmTypeFormat pk
    
    476
    -      Amode addr addr_code <- getAmode D mem
    
    477
    -      let code dst = assert (format == intFormat src)
    
    478
    -                     $ addr_code `snocOL` LD format dst addr
    
    479
    -      return (Any (intFormat tgt) code)
    
    473
    +  | src < tgt
    
    474
    +  , cmmTypeFormat pk == intFormat src = loadZeroExpand mem pk tgt
    
    480 475
     
    
    481 476
     getRegister' _ _ (CmmMachOp (MO_XX_Conv src tgt) [CmmLoad mem pk _])
    
    482
    -  | src < tgt = do
    
    483
    -      let format = cmmTypeFormat pk
    
    484
    -      Amode addr addr_code <- getAmode D mem
    
    485
    -      let code dst = assert (format == intFormat src)
    
    486
    -                     $ addr_code `snocOL` LD format dst addr
    
    487
    -      return (Any (intFormat tgt) code)
    
    477
    +  | src < tgt =
    
    478
    +  , cmmTypeFormat pk == intFormat src = loadZeroExpand mem pk tgt
    
    488 479
     
    
    489 480
       -- XXX: This is ugly, refactor
    
    490 481
     getRegister' _ _ (CmmMachOp (MO_SS_Conv src tgt) [CmmLoad mem pk _])
    
    ... ... @@ -778,6 +769,12 @@ extendSExpr from to x = CmmMachOp (MO_SS_Conv from to) [x]
    778 769
     extendUExpr :: Width -> Width -> CmmExpr -> CmmExpr
    
    779 770
     extendUExpr from to x = CmmMachOp (MO_UU_Conv from to) [x]
    
    780 771
     
    
    772
    +loadZeroExpand :: CmmExpr -> CmmType -> Format -> NatM Register
    
    773
    +loadZeroExpand mem pk tgt = do
    
    774
    +    Amode addr addr_code <- getAmode D mem
    
    775
    +    let code dst = addr_code `snocOL` LD (cmmTypeFormat pk) dst addr
    
    776
    +    return (Any (intFormat tgt) code)
    
    777
    +
    
    781 778
     -- -----------------------------------------------------------------------------
    
    782 779
     --  The 'Amode' type: Memory addressing modes passed up the tree.
    
    783 780