We are planning to upgrade GitLab to the latest version this Friday morning. Expect some downtime!

Commit c5ee04d0 authored by John van Groningen's avatar John van Groningen

add generic fusion project option

parent 2c254d15
......@@ -115,7 +115,7 @@ where
// generic...
panesOptions = TabControl
( applicationPane
:+: profilingPane
:+: compilerPane
:+: diagnosticsPane
:+: pathsPane ap pp paths False 200 lbpadId c1id r1id root_path
:+: linkerPane
......@@ -125,7 +125,7 @@ where
) [ControlPos (Left,zero)]
panesDefaults = TabControl
( applicationPane
:+: profilingPane
:+: compilerPane
:+: diagnosticsPane
:+: linkerPane
) [ControlPos (Left,zero)]
......@@ -270,7 +270,7 @@ where
:+: TextControl ("Executable produced as: "+++symexepath) [ControlId xpId,ControlPos (Left,zero):if actualProject [] [ControlHide]]
:+: ButtonControl "Set executable..." [ControlFunction setexe,ControlPos (Left,zero):if actualProject [] [ControlHide]]
)
profilingPane = Pane "Profiling"
compilerPane = Pane "Compiler"
( TextControl "Profiling Options" []
:+: RadioControl
[ ("Time Profile and Stack Trace",Nothing,noPS (\l->{l & ao = {l.ao & profiling = True, stack_traces = False}}))
......@@ -294,6 +294,9 @@ where
[("Dynamics",Nothing,toMark ao.dynamics,noPS (\l->{l & ao.dynamics = not l.ao.dynamics}))]
(Columns 1) [ControlPos (Left,zero)]
:+: TextControl "Code Generation Options" [ControlPos (Left,OffsetVector {vx=0,vy=10})]
:+: CheckControl
[("Generic Fusion",Nothing,toMark ao.generic_fusion,noPS (\l->{l & ao.generic_fusion = not l.ao.generic_fusion}))]
(Columns 1) [ControlPos (Left,zero)]
:+: CheckControl
[("Generate descriptors and export labels",Nothing,toMark ao.desc_exl,noPS (\l->{l & ao.desc_exl = not l.ao.desc_exl}))]
(Columns 1) [ControlPos (Left,zero)]
......@@ -827,11 +830,24 @@ where
, ("Reuse Unique Nodes",Nothing,toMark ini.reuseUniqueNodes,noPS (\l->{l & reuseUniqueNodes = not l.reuseUniqueNodes}))
, ("Never Time Profile",Nothing,toMark ini.neverTimeProfile,noPS (\l->{l & neverTimeProfile = not l.neverTimeProfile}))
// , ("Never Memory Profile",Nothing,toMark ini.neverMemoryProfile,noPS (\l->{l & neverMemoryProfile = not l.neverMemoryProfile}))
, ("Fusion (Experimental)",Nothing,toMark ini.fusion,noPS (\l->{l & fusion = not l.fusion}))
]
(Columns 1)
[ ControlPos (Left,zero)
]
:+: TextControl "Fusion" [ControlPos (Left,zero)]
:+: RadioControl
[ ("Default",Nothing,noPS (\l->{l & fusion = FusionDefault}))
, ("Off",Nothing,noPS (\l->{l & fusion = FusionOff}))
, ("On",Nothing,noPS (\l->{l & fusion = FusionOn}))
]
(Rows 1)
(case ini.fusion of
FusionDefault -> 1
FusionOff -> 2
FusionOn -> 3
)
[ ControlPos (Left,zero)
]
)
[ControlPos (Left,zero)]
right = LayoutControl
......
......@@ -28,6 +28,7 @@ import PmCallBack
pco_time_profiling :: !Bool,
pco_desc_exl :: !Bool,
pco_dynamics :: !Bool,
pco_generic_fusion :: !Bool,
pco_link_dynamic :: !Bool
}
......
......@@ -84,7 +84,7 @@ Compile
out_file_name = out_file_path temp_dir 0
errors_file_name = errors_file_path temp_dir 0
# cocl_arguments = compiler_arguments out_file_name errors_file_name compileOrCheckSyntax path paths write_module_times project_compiler_options.pco_memory_profiling project_compiler_options.pco_time_profiling project_compiler_options.pco_link_dynamic co
# cocl_arguments = compiler_arguments out_file_name errors_file_name compileOrCheckSyntax path paths write_module_times project_compiler_options co
cocl_arguments = add_options_string_to_args 0 options2 cocl_arguments
cocl_arguments = add_options_string_to_args 0 options1 cocl_arguments
......@@ -119,7 +119,8 @@ CompilePersistent ::
!(List Pathname) !ProjectCompilerOptions !CompilerOptions !Pathname !*CompilingInfo !*env
-> (!*CompilingInfo,!(!*env, !Pathname, !CompilerMsg))
| FileEnv env
CompilePersistent cocl write_module_times errwin typewin compileOrCheckSyntax mdn paths project_compiler_options co=:{CompilerOptions | listTypes}
CompilePersistent cocl write_module_times errwin typewin compileOrCheckSyntax mdn paths project_compiler_options
co=:{CompilerOptions | listTypes}
startupdir compiling_info env
# (cocl,cocl_dir,options1,options2) = get_path_name_and_options2 cocl startupdir
......@@ -129,7 +130,7 @@ CompilePersistent cocl write_module_times errwin typewin compileOrCheckSyntax md
out_file_name = out_file_path temp_dir 0
errors_file_name = errors_file_path temp_dir 0
# args = makeCompilerOptionsArguments compileOrCheckSyntax write_module_times project_compiler_options.pco_memory_profiling project_compiler_options.pco_time_profiling project_compiler_options.pco_link_dynamic co
# args = makeCompilerOptionsArguments compileOrCheckSyntax write_module_times project_compiler_options co
# args_string = concat_args args+++
" "+++mdn.mdn_name+++
" -P "+++"\""+++concatenate_paths paths+++"\""+++
......@@ -188,7 +189,7 @@ CompileStartCommand cocl write_module_times errwin compileOrCheckSyntax path
out_file_name = out_file_path temp_dir slot
errors_file_name = errors_file_path temp_dir slot
# args = makeCompilerOptionsArguments compileOrCheckSyntax write_module_times project_compiler_options.pco_memory_profiling project_compiler_options.pco_time_profiling project_compiler_options.pco_link_dynamic co
# args = makeCompilerOptionsArguments compileOrCheckSyntax write_module_times project_compiler_options co
# args_string = concat_args args+++
" "+++path+++
" -P "+++concatenate_paths paths+++
......@@ -734,20 +735,21 @@ add_options_string_to_args i s args
= skip_to_space_or_tab (i+1) s
= i
compiler_arguments :: !String !String !CompileOrCheckSyntax !Pathname !(List Pathname) !Bool !Bool !Bool !Bool !CompilerOptions -> [String]
compiler_arguments :: !String !String !CompileOrCheckSyntax !Pathname !(List Pathname) !Bool !ProjectCompilerOptions !CompilerOptions -> [String]
compiler_arguments out_file_name errors_file_name compileOrCheckSyntax path paths
write_module_times projectHeapProfiling projectTimeProfiling projectEagerOrDynamic co
# args = makeCompilerOptionsArguments compileOrCheckSyntax write_module_times projectHeapProfiling projectTimeProfiling projectEagerOrDynamic co
write_module_times project_compiler_options co
# args = makeCompilerOptionsArguments compileOrCheckSyntax write_module_times project_compiler_options co
= args ++ [path,"-P",concatenate_paths paths,"-RE",errors_file_name,"-RO",out_file_name];
concat_args [] = ""
concat_args [arg] = arg
concat_args [arg:args] = arg+++" "+++concat_args args
makeCompilerOptionsArguments :: !CompileOrCheckSyntax !Bool !Bool !Bool !Bool !CompilerOptions -> [String]
makeCompilerOptionsArguments compileOrCheckSyntax write_module_times projectMemoryProfiling projectTimeProfiling projectEagerOrDynamic
{neverMemoryProfile,neverTimeProfile,sa,gw,gc,listTypes,attr,reuseUniqueNodes,fusion}
= write_module_times_arg ++ checksyntax ++ timeProfileSwitch ++ memoryProfileSwitch ++ dynamicLinkSwitch
makeCompilerOptionsArguments :: !CompileOrCheckSyntax !Bool !ProjectCompilerOptions !CompilerOptions -> [String]
makeCompilerOptionsArguments compileOrCheckSyntax write_module_times
{pco_memory_profiling,pco_time_profiling,pco_desc_exl,pco_dynamics,pco_generic_fusion,pco_link_dynamic}
{neverMemoryProfile,neverTimeProfile,sa,gw,gc,listTypes,attr,reuseUniqueNodes,fusion}
= write_module_times_arg ++ checksyntax ++ timeProfileSwitch ++ memoryProfileSwitch ++ descExlSwitch ++ dynamicsSwitch
++ strictness ++ warnings ++ comments ++ listtypes ++ show_attr ++ reuse ++ fusion_arg
where
write_module_times_arg
......@@ -755,18 +757,15 @@ where
= ["-wmt"]
= []
memoryProfileSwitch
| (not neverMemoryProfile && projectMemoryProfiling)
|| projectEagerOrDynamic
| (not neverMemoryProfile && pco_memory_profiling) || pco_desc_exl || pco_link_dynamic
= ["-desc"]
= []
timeProfileSwitch
| not neverTimeProfile && projectTimeProfiling
| not neverTimeProfile && pco_time_profiling
= ["-pt"]
= []
dynamicLinkSwitch
| projectEagerOrDynamic
= ["-exl","-dynamics"]
= []
descExlSwitch = if (pco_desc_exl || pco_link_dynamic) ["-exl"] []
dynamicsSwitch = if (pco_dynamics || pco_link_dynamic) ["-dynamics"] []
strictness
| sa
= []
......@@ -800,9 +799,7 @@ where
= ["-ou"]
= []
fusion_arg
| fusion
= ["-fusion"]
= []
= case fusion of FusionOn -> ["-fusion"]; FusionDefault | pco_generic_fusion -> ["-generic_fusion]"; _ -> []
make_code_generator_arguments genAsmOrCode {ci,cs}
= checkindex++checkstack++genasm
......
......@@ -17,6 +17,7 @@ from PmDirCache import :: DirCache
, abcGenerateComments :: !Bool
, abcReuseUniqueNodes :: !Bool
, abcFusion :: !Bool
, abcGenericFusion :: !Bool
, abc64Bits :: !Bool
, abcDynamics :: !Bool
}
......
......@@ -28,6 +28,7 @@ from StdLibMisc import :: Date{..}, :: Time{..}
, abcGenerateComments :: !Bool
, abcReuseUniqueNodes :: !Bool
, abcFusion :: !Bool
, abcGenericFusion :: !Bool
, abc64Bits :: !Bool
, abcDynamics :: !Bool
}
......@@ -42,6 +43,7 @@ DefaultABCOptions =
, abcGenerateComments = False
, abcReuseUniqueNodes = False
, abcFusion = False
, abcGenericFusion = False
, abc64Bits = False
, abcDynamics = False
}
......@@ -69,9 +71,10 @@ SystemMask :== 8;
FusionOffset :== 9;
Abc64BitsOffset :==10;
DynamicsBitsOffset :==11;
GenericFusionOffset :==12;
MinimumNrOfOptions :== 9;
NrOfOptions :== 12;
NrOfOptions :== 13;
ParseABCInfoAndDependencies :: !Pathname !DATE !ABCCache !Files -> (!((!Bool, !Bool, !Int, !ABCOptions),(!List Modulename, !Maybe ModuleDate, !List ModuleDate, !List LinkObjFileName, !List LinkLibraryName),!ABCCache),!Files)
ParseABCInfoAndDependencies path date abccache files
......@@ -160,6 +163,7 @@ StringToCompilerOptions start end opt
abcGenerateComments = opt .[start+DebugMask] == '1',
abcReuseUniqueNodes = not (opt.[start+DontReuseUniqueNodesMask] == '1'),
abcFusion = start+FusionOffset<end && opt.[start+FusionOffset]=='1',
abcGenericFusion = start+GenericFusionOffset<end && opt.[start+GenericFusionOffset]=='1',
abc64Bits = start+Abc64BitsOffset<end && opt.[start+Abc64BitsOffset]=='1',
abcDynamics = start+DynamicsBitsOffset<end && opt.[start+DynamicsBitsOffset]=='1'
};
......
......@@ -19,7 +19,9 @@ instance fromString ListTypes
, bv :: !Bool // be verbose
, gc :: !Bool // generate commented abc-code
, reuseUniqueNodes :: !Bool
, fusion :: !Bool
, fusion :: !FusionOptions
}
:: FusionOptions = FusionDefault | FusionOff | FusionOn;
DefaultCompilerOptions :: CompilerOptions
......@@ -72,9 +72,11 @@ where
, bv :: !Bool // be verbose
, gc :: !Bool // generate comments
, reuseUniqueNodes :: !Bool // reuse unique nodes
, fusion :: !Bool
, fusion :: !FusionOptions
}
:: FusionOptions = FusionDefault | FusionOff | FusionOn;
DefaultCompilerOptions :: CompilerOptions
DefaultCompilerOptions =
{ neverMemoryProfile = False
......@@ -86,6 +88,6 @@ DefaultCompilerOptions =
, bv = True
, gc = False
, reuseUniqueNodes = True
, fusion = False
, fusion = FusionDefault
}
......@@ -1120,6 +1120,7 @@ UpdateDependencies force mdn rest compinfo dircache ds ps`
pco_time_profiling=ao.profiling,
pco_desc_exl=ao.desc_exl,
pco_dynamics=ao.dynamics,
pco_generic_fusion=ao.generic_fusion,
pco_link_dynamic=link_dynamic}
# (okC,whyC) = check_module_options module_name info co project_compiler_options use_64_bit_processor version
......@@ -1280,6 +1281,7 @@ CTPMcommon module_name project ps
pco_time_profiling=ao.profiling,
pco_desc_exl=ao.desc_exl,
pco_dynamics=ao.dynamics,
pco_generic_fusion=ao.generic_fusion,
pco_link_dynamic=link_dynamic}
= (True,ccstring,write_module_times,updateErrorWindow,typewin module_name,srcpaths,project_compiler_options,co,startupdir,ps)
where
......@@ -1434,8 +1436,10 @@ check_module_options modname info=:{version,abcOptions} co project_compiler_opti
= incorrect_option modname "Generate Comments"
| abcOptions.abcReuseUniqueNodes <> expectedReuseUniqueNodes
= incorrect_option modname "Reuse Unique Nodes"
| abcOptions.abcFusion<>co.fusion
| abcOptions.abcFusion<>case co.fusion of FusionOn -> True; _ -> False
= incorrect_option modname "Fusion"
| abcOptions.abcGenericFusion<>case co.fusion of FusionDefault -> project_compiler_options.pco_generic_fusion; _ -> False
= incorrect_option modname "Generic Fusion"
| abcOptions.abcDynamics <> project_compiler_options.pco_dynamics
= incorrect_option modname "Dynamics"
= (True,"")
......
......@@ -266,6 +266,18 @@ where
, showsync = True
*/ }
instance toString FusionOptions
where
toString FusionDefault = "False"
toString FusionOn = "True"
toString FusionOff = "Off"
instance fromString FusionOptions
where
fromString "True" = FusionOn
fromString "Off" = FusionOff
fromString _ = FusionDefault
CompilerOptionsTable :: OptionsTable CompilerOptions
CompilerOptionsTable =
{
......@@ -303,6 +315,7 @@ ApplicationProfileOptionsTable =
SimpleOption "Time" (\a->a.profiling) (\v a->{a & profiling=v}),
SimpleOption "Stack" (\a->a.stack_traces) (\v a->{a & stack_traces=v}),
SimpleOption "Dynamics" (\a->a.dynamics) (\v a->{a & dynamics=v}),
SimpleOption "GenericFusion" (\a->a.generic_fusion) (\v a->{a & generic_fusion=v}),
SimpleOption "DescExL" (\a->a.desc_exl) (\v a->{a & desc_exl=v})
}
......
......@@ -304,6 +304,7 @@ eqAppOpts ao1 ao2
ao1.memoryProfilingMinimumHeapSize == ao2.memoryProfilingMinimumHeapSize &&
ao1.profiling == ao2.profiling &&
ao1.stack_traces == ao2.stack_traces &&
ao1.generic_fusion == ao2.generic_fusion &&
ao1.dynamics == ao2.dynamics &&
ao1.desc_exl == ao2.desc_exl &&
ao1.standard_rte == ao2.standard_rte
......
......@@ -129,6 +129,7 @@ DefCodeGenOptions :: CodeGenOptions
, profiling :: !Bool // time profiling
, stack_traces :: !Bool // stack traces
, dynamics :: !Bool
, generic_fusion :: !Bool
, desc_exl :: !Bool
, standard_rte :: !Bool // DvA: use standard RTE (only in IDE)
}
......
......@@ -319,7 +319,8 @@ DefCodeGenOptions =
, profiling :: !Bool
, stack_traces :: !Bool
, dynamics :: !Bool
, desc_exl :: !Bool
, generic_fusion :: !Bool
, desc_exl :: !Bool
, standard_rte :: !Bool // DvA: use standard RTE (only in IDE)
}
......@@ -345,6 +346,7 @@ DefApplicationOptions =
, profiling = False
, stack_traces = False
, dynamics = False
, generic_fusion = False
, desc_exl = False
, standard_rte = True
}
......
......@@ -29,6 +29,7 @@ import PmCallBack
pco_time_profiling :: !Bool,
pco_desc_exl :: !Bool,
pco_dynamics :: !Bool,
pco_generic_fusion :: !Bool,
pco_link_dynamic :: !Bool
}
......
......@@ -312,7 +312,6 @@ start_code_generator cgen wf path slot timeprofile cgo tp startupdir ps
# (cgen,cgendir,options) = get_path_name_and_options cgen startupdir
# path_without_suffix = RemoveSuffix path
# cg_arguments = make_code_generator_arguments CodeGeneration cgo
# obj_path = ModuleDirAndNameToObjSystemPathname tp path
# temp_dir = temp_dir_path startupdir
errors_file_name = errors_file_path temp_dir slot
......@@ -781,8 +780,9 @@ concat_args [arg] = arg
concat_args [arg:args] = arg+++" "+++concat_args args
makeCompilerOptionsArguments :: !CompileOrCheckSyntax !Bool !ProjectCompilerOptions !CompilerOptions -> [String]
makeCompilerOptionsArguments compileOrCheckSyntax write_module_times {pco_memory_profiling,pco_time_profiling,pco_desc_exl,pco_dynamics,pco_link_dynamic}
{neverMemoryProfile,neverTimeProfile,sa,gw,gc,listTypes,attr,reuseUniqueNodes,fusion}
makeCompilerOptionsArguments compileOrCheckSyntax write_module_times
{pco_memory_profiling,pco_time_profiling,pco_desc_exl,pco_dynamics,pco_generic_fusion,pco_link_dynamic}
{neverMemoryProfile,neverTimeProfile,sa,gw,gc,listTypes,attr,reuseUniqueNodes,fusion}
= write_module_times_arg ++ checksyntax ++ timeProfileSwitch ++ memoryProfileSwitch ++ descExlSwitch ++ dynamicsSwitch
++ strictness ++ warnings ++ comments ++ listtypes ++ show_attr ++ reuse ++ fusion_arg
where
......@@ -833,9 +833,7 @@ where
= ["-ou"]
= []
fusion_arg
| fusion
= ["-fusion"]
= []
= case fusion of FusionOn -> ["-fusion"]; FusionDefault | pco_generic_fusion -> ["-generic_fusion]"; _ -> []
make_code_generator_arguments genAsmOrCode {ci,cs}
= checkindex++checkstack++genasm
......
......@@ -44,6 +44,7 @@ instance == CompilerMsg
pco_time_profiling :: !Bool,
pco_desc_exl :: !Bool,
pco_dynamics :: !Bool,
pco_generic_fusion :: !Bool,
pco_link_dynamic :: !Bool
}
......
......@@ -166,6 +166,7 @@ where
pco_time_profiling :: !Bool,
pco_desc_exl :: !Bool,
pco_dynamics :: !Bool,
pco_generic_fusion :: !Bool,
pco_link_dynamic :: !Bool
}
......@@ -459,8 +460,9 @@ ReadErrorAndWarningMessages file
= (if is_import_error (Patherror path) path_error,True,Strip string:!errlist,file3)
MakeCompilerOptionsString :: !CompileOrCheckSyntax !ProjectCompilerOptions !CompilerOptions -> String
MakeCompilerOptionsString compileOrCheckSyntax {pco_memory_profiling,pco_time_profiling,pco_desc_exl,pco_dynamics,pco_link_dynamic}
{neverMemoryProfile, neverTimeProfile,sa,gw,gc,listTypes,attr,reuseUniqueNodes,fusion}
MakeCompilerOptionsString compileOrCheckSyntax
{pco_memory_profiling,pco_time_profiling,pco_desc_exl,pco_generic_fusion,pco_dynamics,pco_link_dynamic}
{neverMemoryProfile, neverTimeProfile,sa,gw,gc,listTypes,attr,reuseUniqueNodes,fusion}
= (add_dynamics_option (add_fusion_option (add_exl_option
(checksyntax +++ timeProfileSwitch +++ memoryProfileSwitch +++ strictness +++ warnings +++ comments +++listtypes+++show_attr+++reuse)
))) +++" "
......@@ -506,7 +508,10 @@ where
= " -ou"
= ""
add_exl_option s = if (pco_desc_exl || pco_link_dynamic) (s+++" -exl") s
add_fusion_option s = if fusion (s+++" -fusion") s
add_fusion_option s
= case fusion of FusionOn -> s+++" -fusion"; FusionDefault | pco_generic_fusion -> s+++" -generic_fusion"; _ -> s
add_dynamics_option s = if (pco_dynamics || pco_link_dynamic) (s+++" -dynamics") s
/* Generates code for the given file:
......
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