<div dir="rtl"><div dir="ltr">Hi,</div><div dir="ltr"><br></div><div dir="ltr">clang uses PassManagerBuilder via EmitAssemblyHelper::CreatePasses() to create a collection of passes.<br></div><div dir="ltr"><br></div><div dir="ltr">llvm (MCJIT) uses TargetPassConfig via addPassesToGenerateCode for the same purpose.<br></div><div dir="ltr"><br></div><div dir="ltr">There seems to some duplication and many differences between PassManagerBuilder and TargetPassConfig, some aren't clear at all.</div><div dir="ltr"><br></div><div dir="ltr">Two small examples:</div><div dir="ltr"><br></div><div dir="ltr">1) PassManagerBuilder adds createScalarReplAggregatesPass but TargetPassConfig does not.</div><div dir="ltr"><br></div><div dir="ltr">2)  TargetPassConfig adds createLoopStrengthReducePass right after the initial analysis but TargetPassConfig  does not. </div><div dir="ltr"><br></div><div dir="ltr">I would expect that the optimization passes would be identical based on optimization level only but they are quite different between PassManagerBuilder and TargetPassConfig.<br></div><div dir="ltr"><div dir="ltr"><br></div><div>Yaron</div><div><br></div></div><div dir="ltr"><br></div></div>