diff options
Diffstat (limited to 'compiler/codeGen/StgCmmUtils.hs')
-rw-r--r-- | compiler/codeGen/StgCmmUtils.hs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/compiler/codeGen/StgCmmUtils.hs b/compiler/codeGen/StgCmmUtils.hs index d44387953e..06b3f9af13 100644 --- a/compiler/codeGen/StgCmmUtils.hs +++ b/compiler/codeGen/StgCmmUtils.hs @@ -524,10 +524,16 @@ emitCmmLitSwitch scrut branches deflt = do dflags <- getDynFlags let cmm_ty = cmmExprType dflags scrut + -- We find the necessary type information in the literals in the branches + let signed = case head branches of + (MachInt _, _) -> True + (MachInt64 _, _) -> True + _ -> False + if isFloatType cmm_ty then emit =<< mk_float_switch scrut' deflt_lbl noBound branches_lbls else emit $ mk_discrete_switch - False -- TODO Remember signedness + signed scrut' [(litValue lit,l) | (lit,l) <- branches_lbls] (Just deflt_lbl) |