-andBinderInfo (OneOcc posn1 dup1 scc1 n_alts1 ar_1)
- (OneOcc posn2 dup2 scc2 n_alts2 ar_2)
- = OneOcc (combine_posns posn1 posn2)
- (combine_dups dup1 dup2)
- (combine_sccs scc1 scc2)
- (n_alts1 + n_alts2)
- ar_1 -- Min arity just from orig
-andBinderInfo info1 info2 = ManyOcc (getBinderInfoArity info1)
+andBinderInfo (OneOcc posn1 dup1 scc1 (I# n_alts1#) (I# ar_1#))
+ (OneOcc posn2 dup2 scc2 (I# n_alts2#) ar_2)
+ = let
+ -- Perversly maligned in order to make it stricter.
+ posn = combine_posns posn1 posn2
+ scc = combine_sccs scc1 scc2
+ dup = combine_dups dup1 dup2
+ alts = I# (n_alts1# +# n_alts2#)
+
+ -- No CSE, please!
+ cont1 = case scc of { InsideSCC -> cont2; _ -> cont2 }
+ cont2 = case dup of { DupDanger -> cont3; _ -> cont3 }
+ cont3 = case alts of { (I# 0#) -> cont4; _ -> cont4 }
+ cont4 = OneOcc posn dup scc alts (I# ar_1#)
+ in
+ case posn of {FunOcc -> cont1; _ -> cont1}
+
+andBinderInfo info1 info2 =
+ case getBinderInfoArity info1 of
+ (I# i#) -> ManyOcc (I# i#)
+ --ManyOcc (getBinderInfoArity info1)