fiExpr dflags to_drop (_, AnnCase scrut case_bndr _ [(con,alt_bndrs,rhs)])
  | isUnLiftedType (idType case_bndr)
  , exprOkForSideEffects (deAnnotate scrut)
      -- See PrimOp, Note [PrimOp can_fail and has_side_effects]
  = wrapFloats shared_binds $
    fiExpr dflags (case_float : rhs_binds) rhs
  where
    case_float = FB (mkVarSet (case_bndr : alt_bndrs)) scrut_fvs
                    (FloatCase scrut' case_bndr con alt_bndrs)
    scrut' = fiExpr dflags scrut_binds scrut
    [shared_binds, scrut_binds, rhs_binds]
       = sepBindsByDropPoint dflags False [scrut_fvs, rhs_fvs] to_drop
    rhs_fvs   = freeVarsOf rhs `delVarSetList` (case_bndr : alt_bndrs)
    scrut_fvs = freeVarsOf scrut
fiExpr dflags to_drop (_, AnnCase scrut case_bndr _ [(con,alt_bndrs,rhs)])
  | isUnLiftedType (idType case_bndr)
  , exprOkForSideEffects (deAnnotate scrut)
      -- See PrimOp, Note [PrimOp can_fail and has_side_effects]
  = wrapFloats shared_binds $
    fiExpr dflags (case_float : rhs_binds) rhs
  where
    case_float = FB (mkVarSet (case_bndr : alt_bndrs)) scrut_fvs
                    (FloatCase scrut' case_bndr con alt_bndrs)
    scrut' = fiExpr dflags scrut_binds scrut
    [shared_binds, scrut_binds, rhs_binds]
       = sepBindsByDropPoint dflags False [scrut_fvs, rhs_fvs] to_drop
    rhs_fvs   = freeVarsOf rhs `delVarSetList` (case_bndr : alt_bndrs)
    scrut_fvs = freeVarsOf scrut
fiExpr dflags to_drop (_, AnnCase scrut case_bndr _ [(con,alt_bndrs,rhs)])
  | isUnLiftedType (idType case_bndr)
  , exprOkForSideEffects (deAnnotate scrut)
      -- See PrimOp, Note [PrimOp can_fail and has_side_effects]
  = wrapFloats shared_binds $
    fiExpr dflags (case_float : rhs_binds) rhs
  where
    case_float = FB (mkVarSet (case_bndr : alt_bndrs)) scrut_fvs
                    (FloatCase scrut' case_bndr con alt_bndrs)
    scrut' = fiExpr dflags scrut_binds scrut
    [shared_binds, scrut_binds, rhs_binds]
       = sepBindsByDropPoint dflags False [scrut_fvs, rhs_fvs] to_drop
    rhs_fvs   = freeVarsOf rhs `delVarSetList` (case_bndr : alt_bndrs)
    scrut_fvs = freeVarsOf scrut