Commit c1c2d849 authored by ian@well-typed.com's avatar ian@well-typed.com
Browse files

Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghc

parents 86e2a2a4 4f7027d6
...@@ -294,7 +294,7 @@ canDoGenerics1_w rep_tc ...@@ -294,7 +294,7 @@ canDoGenerics1_w rep_tc
check_vanilla :: DataCon -> Maybe SDoc check_vanilla :: DataCon -> Maybe SDoc
check_vanilla con | isVanillaDataCon con = Nothing check_vanilla con | isVanillaDataCon con = Nothing
| otherwise = Just (bad con existential) | otherwise = Just (bad con existential)
-- the Bool is if the parameter occurs in the type -- the Bool is if the parameter occurs in the type
ft_check :: DataCon -> FFoldType (Bool, S.State [Name] (Maybe SDoc)) ft_check :: DataCon -> FFoldType (Bool, S.State [Name] (Maybe SDoc))
...@@ -306,7 +306,7 @@ canDoGenerics1_w rep_tc ...@@ -306,7 +306,7 @@ canDoGenerics1_w rep_tc
-- applications, so we must compensate with extra logic -- applications, so we must compensate with extra logic
-- to ensure that the variable only occurs as the last -- to ensure that the variable only occurs as the last
-- argument. -- argument.
, ft_fun = \x y -> if fst x then (True, return $ Just $ bad con wrong_arg) , ft_fun = \x y -> if fst x then (True, return $ Just $ bad con wrong_arg)
else x `bmplus` y else x `bmplus` y
, ft_tup = \_ xs -> , ft_tup = \_ xs ->
if not (null xs) && any fst (init xs) if not (null xs) && any fst (init xs)
......
...@@ -1739,6 +1739,14 @@ ...@@ -1739,6 +1739,14 @@
<entry><option>-fno-unbox-strict-fields</option></entry> <entry><option>-fno-unbox-strict-fields</option></entry>
</row> </row>
<row>
<entry><option>-funbox-strict-primitive-fields</option></entry>
<entry>Flatten strict constructor fields with a
pointer-sized representation</entry>
<entry>dynamic</entry>
<entry><option>-fno-unbox-strict-primitive-fields</option></entry>
</row>
<row> <row>
<entry><option>-funfolding-creation-threshold</option></entry> <entry><option>-funfolding-creation-threshold</option></entry>
<entry>Tweak unfolding settings</entry> <entry>Tweak unfolding settings</entry>
......
...@@ -1860,6 +1860,31 @@ f "2" = 2 ...@@ -1860,6 +1860,31 @@ f "2" = 2
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<option>-funbox-strict-primitive-fields</option>:
<indexterm><primary><option>-funbox-strict-primitive-fields</option></primary></indexterm>
<indexterm><primary>strict constructor fields</primary></indexterm>
<indexterm><primary>constructor fields, strict</primary></indexterm>
</term>
<listitem>
<para>This option causes all constructor fields which are marked
strict (i.e. &ldquo;!&rdquo;) and which representation is smaller or
equal to the size of a pointer to be unpacked if possible. It is
equivalent to adding an <literal>UNPACK</literal> pragma to every
strict constructor field that fullfills the size restriction. (see
<xref linkend="unpack-pragma"/>).
</para>
<para>This option is less of a sledgehammer than
<option>-funbox-strict-fields</option>: it should rarely make things
worse. If you use <option>-funbox-strict-primitive-fields</option>
to turn on unboxing by default you can disable it for certain
constructor fields using the <literal>NOUNPACK</literal> pragma (see
<xref linkend="nounpack-pragma"/>).</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<option>-fspec-constr</option> <option>-fspec-constr</option>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment