void MoveEliminationPass::runOnKernel(ir::IRKernel& k)
{
	report("Eliminating moves in kernel " << k.name << "");
	
	auto dfg = static_cast<analysis::DataflowGraph*>(
		getAnalysis("DataflowGraphAnalysis"));
	assert(dfg != 0);

	dfg->convertToSSAType(analysis::DataflowGraph::Minimal);

	auto moves = getMoves(dfg);
	
	bool eliminatedAny = false;
	
	report(" Eliminating moves");
	
	for(auto move = moves.begin(); move != moves.end(); ++move)
	{
		if(canEliminate(*move))
		{
			report("  " << (*move)->i->toString());
			eliminate(*move);
			eliminatedAny = true;
		}
	}
	
	if(eliminatedAny)
	{
		invalidateAnalysis("DataflowGraphAnalysis");
	}
	
	report("finished...");
}
Пример #2
0
void MainWindow::zeroVanish()
{
    while(1)
    {
        qDebug() << "In while (1)";
        moveZero();
        qDebug() << "end moveZero";
        if (canEliminate()==false) break;
    }
    qDebug() << "start fillInZero";
    fillInZero();
    qDebug() << "start cannotPlayJudge";
  /*  if (cannotPlay()==true){
        qDebug() << "Start Reset Map";
        resetMap();}*/

    renewPic();
}