X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FDynFlags.hs;h=cbed799457318139257a2086d2500bf5c0156eda;hb=2b20c2bbe7d0cff14b7ee60675399c533450175a;hp=c4898a14dbc0868f455334672ed1f52cf37421b3;hpb=91694be875e6aa507dcb02475b5e17d59df5d796;p=ghc-hetmet.git diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index c4898a1..cbed799 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -166,8 +166,8 @@ data DynFlag | Opt_MonomorphismRestriction | Opt_MonoPatBinds | Opt_ExtendedDefaultRules -- Use GHC's extended rules for defaulting - | Opt_GlasgowExts | Opt_FFI + | Opt_UnliftedFFITypes | Opt_PArr -- Syntactic support for parallel arrays | Opt_Arrows -- Arrow-notation syntax | Opt_TH @@ -175,6 +175,7 @@ data DynFlag | Opt_Generics | Opt_ImplicitPrelude | Opt_ScopedTypeVariables + | Opt_UnboxedTuples | Opt_BangPatterns | Opt_TypeFamilies | Opt_OverloadedStrings @@ -183,6 +184,31 @@ data DynFlag | Opt_RecordPuns | Opt_GADTs | Opt_RelaxedPolyRec -- -X=RelaxedPolyRec + | Opt_StandaloneDeriving + | Opt_DeriveDataTypeable + | Opt_TypeSynonymInstances + | Opt_FlexibleContexts + | Opt_FlexibleInstances + | Opt_ConstrainedClassMethods + | Opt_MultiParamTypeClasses + | Opt_FunctionalDependencies + | Opt_UnicodeSyntax + | Opt_PolymorphicComponents + | Opt_ExistentialQuantification + | Opt_MagicHash + | Opt_EmptyDataDecls + | Opt_KindSignatures + | Opt_PatternSignatures + | Opt_ParallelListComp + | Opt_GeneralizedNewtypeDeriving + | Opt_RecursiveDo + | Opt_PatternGuards + | Opt_PartiallyAppliedClosedTypeSynonyms + | Opt_Rank2Types + | Opt_RankNTypes + | Opt_TypeOperators + + | Opt_PrintExplicitForalls -- optimisation opts | Opt_Strictness @@ -624,6 +650,16 @@ minusWallOpts Opt_WarnOrphans ] +-- minuswRemovesOpts should be every warning option +minuswRemovesOpts + = minusWallOpts ++ + [Opt_WarnImplicitPrelude, + Opt_WarnIncompletePatternsRecUpd, + Opt_WarnSimplePatterns, + Opt_WarnMonomorphism, + Opt_WarnTabs + ] + -- ----------------------------------------------------------------------------- -- CoreToDo: abstraction of core-to-core passes to run. @@ -650,6 +686,7 @@ data CoreToDo -- These are diff core-to-core passes, | CoreCSE | CoreDoRuleCheck Int{-CompilerPhase-} String -- Check for non-application of rules -- matching this string + | CoreDoVectorisation | CoreDoNothing -- Useful when building up | CoreDoPasses [CoreToDo] -- lists of these things @@ -685,6 +722,7 @@ getCoreToDo dflags spec_constr = dopt Opt_SpecConstr dflags liberate_case = dopt Opt_LiberateCase dflags rule_check = ruleCheck dflags + vectorisation = dopt Opt_Vectorise dflags core_todo = if opt_level == 0 then @@ -712,6 +750,15 @@ getCoreToDo dflags MaxSimplifierIterations max_iter ], + + -- We run vectorisation here for now, but we might also try to run + -- it later + runWhen vectorisation (CoreDoPasses [ + CoreDoVectorisation, + CoreDoSimplify SimplGently + [NoCaseOfCase, + MaxSimplifierIterations max_iter]]), + -- Specialisation is best done before full laziness -- so that overloaded functions have all their dictionary lambdas manifest CoreDoSpecialising, @@ -973,13 +1020,13 @@ dynamic_flags = [ , ( "dsource-stats", setDumpFlag Opt_D_source_stats) , ( "dverbose-core2core", setDumpFlag Opt_D_verbose_core2core) , ( "dverbose-stg2stg", setDumpFlag Opt_D_verbose_stg2stg) - , ( "ddump-hi-diffs", setDumpFlag Opt_D_dump_hi_diffs) , ( "ddump-hi", setDumpFlag Opt_D_dump_hi) , ( "ddump-minimal-imports", setDumpFlag Opt_D_dump_minimal_imports) , ( "ddump-vect", setDumpFlag Opt_D_dump_vect) , ( "ddump-hpc", setDumpFlag Opt_D_dump_hpc) , ( "ddump-mod-cycles", setDumpFlag Opt_D_dump_mod_cycles) + , ( "ddump-hi-diffs", NoArg (setDynFlag Opt_D_dump_hi_diffs)) , ( "dcore-lint", NoArg (setDynFlag Opt_DoCoreLinting)) , ( "dstg-lint", NoArg (setDynFlag Opt_DoStgLinting)) , ( "dcmm-lint", NoArg (setDynFlag Opt_DoCmmLinting)) @@ -998,7 +1045,7 @@ dynamic_flags = [ , ( "Werror" , NoArg (setDynFlag Opt_WarnIsError) ) , ( "Wall" , NoArg (mapM_ setDynFlag minusWallOpts) ) , ( "Wnot" , NoArg (mapM_ unSetDynFlag minusWallOpts) ) /* DEPREC */ - , ( "w" , NoArg (mapM_ unSetDynFlag minusWallOpts) ) + , ( "w" , NoArg (mapM_ unSetDynFlag minuswRemovesOpts) ) ------ Optimisation flags ------------------------------------------ , ( "O" , NoArg (upd (setOptLevel 1))) @@ -1045,6 +1092,7 @@ dynamic_flags = [ -- these -f flags can all be reversed with -fno- fFlags = [ + ( "warn-dodgy-imports", Opt_WarnDodgyImports ), ( "warn-duplicate-exports", Opt_WarnDuplicateExports ), ( "warn-hi-shadowing", Opt_WarnHiShadows ), ( "warn-implicit-prelude", Opt_WarnImplicitPrelude ), @@ -1064,6 +1112,7 @@ fFlags = [ ( "warn-deprecations", Opt_WarnDeprecations ), ( "warn-orphans", Opt_WarnOrphans ), ( "warn-tabs", Opt_WarnTabs ), + ( "print-explicit-foralls", Opt_PrintExplicitForalls ), ( "strictness", Opt_Strictness ), ( "full-laziness", Opt_FullLaziness ), ( "liberate-case", Opt_LiberateCase ), @@ -1092,14 +1141,30 @@ fFlags = [ -- These -X flags can all be reversed with -Xno- xFlags :: [(String, DynFlag)] xFlags = [ + ( "CPP", Opt_Cpp ), + ( "PatternGuards", Opt_PatternGuards ), + ( "UnicodeSyntax", Opt_UnicodeSyntax ), + ( "MagicHash", Opt_MagicHash ), + ( "PolymorphicComponents", Opt_PolymorphicComponents ), + ( "ExistentialQuantification", Opt_ExistentialQuantification ), + ( "KindSignatures", Opt_KindSignatures ), + ( "PatternSignatures", Opt_PatternSignatures ), + ( "EmptyDataDecls", Opt_EmptyDataDecls ), + ( "ParallelListComp", Opt_ParallelListComp ), ( "FI", Opt_FFI ), -- support `-ffi'... ( "FFI", Opt_FFI ), -- ...and also `-fffi' - ( "ForeignFunctionInterface", Opt_FFI ), -- ...and also `-fffi' - + ( "ForeignFunctionInterface", Opt_FFI ), + ( "UnliftedFFITypes", Opt_UnliftedFFITypes ), + + ( "PartiallyAppliedClosedTypeSynonyms", Opt_PartiallyAppliedClosedTypeSynonyms ), + ( "Rank2Types", Opt_Rank2Types ), + ( "RankNTypes", Opt_RankNTypes ), + ( "TypeOperators", Opt_TypeOperators ), + ( "RecursiveDo", Opt_RecursiveDo ), ( "Arrows", Opt_Arrows ), -- arrow syntax ( "Parr", Opt_PArr ), - ( "TH", Opt_TH ), + ( "TH", Opt_TH ), -- support -fth ( "TemplateHaskelll", Opt_TH ), ( "Generics", Opt_Generics ), @@ -1120,6 +1185,16 @@ xFlags = [ ( "ExtendedDefaultRules", Opt_ExtendedDefaultRules ), ( "ImplicitParams", Opt_ImplicitParams ), ( "ScopedTypeVariables", Opt_ScopedTypeVariables ), + ( "UnboxedTuples", Opt_UnboxedTuples ), + ( "StandaloneDeriving", Opt_StandaloneDeriving ), + ( "DeriveDataTypeable", Opt_DeriveDataTypeable ), + ( "TypeSynonymInstances", Opt_TypeSynonymInstances ), + ( "FlexibleContexts", Opt_FlexibleContexts ), + ( "FlexibleInstances", Opt_FlexibleInstances ), + ( "ConstrainedClassMethods", Opt_ConstrainedClassMethods ), + ( "MultiParamTypeClasses", Opt_MultiParamTypeClasses ), + ( "FunctionalDependencies", Opt_FunctionalDependencies ), + ( "GeneralizedNewtypeDeriving", Opt_GeneralizedNewtypeDeriving ), ( "AllowOverlappingInstances", Opt_AllowOverlappingInstances ), ( "AllowUndecidableInstances", Opt_AllowUndecidableInstances ), ( "AllowIncoherentInstances", Opt_AllowIncoherentInstances ) @@ -1130,11 +1205,36 @@ impliedFlags = [ ( Opt_GADTs, [Opt_RelaxedPolyRec] ) -- We want type-sig variables to be completely rigid for GADTs ] -glasgowExtsFlags = [ Opt_GlasgowExts +glasgowExtsFlags = [ + Opt_PrintExplicitForalls , Opt_FFI + , Opt_UnliftedFFITypes , Opt_GADTs , Opt_ImplicitParams , Opt_ScopedTypeVariables + , Opt_UnboxedTuples + , Opt_TypeSynonymInstances + , Opt_StandaloneDeriving + , Opt_DeriveDataTypeable + , Opt_FlexibleContexts + , Opt_FlexibleInstances + , Opt_ConstrainedClassMethods + , Opt_MultiParamTypeClasses + , Opt_FunctionalDependencies + , Opt_MagicHash + , Opt_PolymorphicComponents + , Opt_ExistentialQuantification + , Opt_UnicodeSyntax + , Opt_PatternGuards + , Opt_PartiallyAppliedClosedTypeSynonyms + , Opt_RankNTypes + , Opt_TypeOperators + , Opt_RecursiveDo + , Opt_ParallelListComp + , Opt_EmptyDataDecls + , Opt_KindSignatures + , Opt_PatternSignatures + , Opt_GeneralizedNewtypeDeriving , Opt_TypeFamilies ] ------------------