#include "config.h"
#include "B3Generate.h"
#if ENABLE(B3_JIT)
#include "AirCode.h"
#include "AirGenerate.h"
#include "AirInstInlines.h"
#include "B3Common.h"
#include "B3DuplicateTails.h"
#include "B3EliminateCommonSubexpressions.h"
#include "B3FixSSA.h"
#include "B3FoldPathConstants.h"
#include "B3LegalizeMemoryOffsets.h"
#include "B3LowerMacros.h"
#include "B3LowerMacrosAfterOptimizations.h"
#include "B3LowerToAir.h"
#include "B3MoveConstants.h"
#include "B3Procedure.h"
#include "B3ReduceDoubleToFloat.h"
#include "B3ReduceStrength.h"
#include "B3TimingScope.h"
#include "B3Validate.h"
#include "PCToCodeOriginMap.h"
namespace JSC { namespace B3 {
void prepareForGeneration(Procedure& procedure, unsigned optLevel)
{
TimingScope timingScope("prepareForGeneration");
generateToAir(procedure, optLevel);
Air::prepareForGeneration(procedure.code());
}
void generate(Procedure& procedure, CCallHelpers& jit)
{
Air::generate(procedure.code(), jit);
}
void generateToAir(Procedure& procedure, unsigned optLevel)
{
TimingScope timingScope("generateToAir");
if (shouldDumpIR(B3Mode) && !shouldDumpIRAtEachPhase(B3Mode)) {
dataLog("Initial B3:\n");
dataLog(procedure);
}
procedure.resetReachability();
if (shouldValidateIR())
validate(procedure);
if (optLevel >= 1) {
reduceDoubleToFloat(procedure);
reduceStrength(procedure);
eliminateCommonSubexpressions(procedure);
duplicateTails(procedure);
fixSSA(procedure);
foldPathConstants(procedure);
}
lowerMacros(procedure);
if (optLevel >= 1) {
reduceStrength(procedure);
}
lowerMacrosAfterOptimizations(procedure);
legalizeMemoryOffsets(procedure);
moveConstants(procedure);
if (shouldValidateIR())
validate(procedure);
if (shouldDumpIR(B3Mode) && !shouldDumpIRAtEachPhase(B3Mode)) {
dataLog("B3 after ", procedure.lastPhaseName(), ", before generation:\n");
dataLog(procedure);
}
lowerToAir(procedure);
}
} }
#endif // ENABLE(B3_JIT)