huangyu c658ccf319 Update runtime_core code
Issue: https://gitee.com/openharmony/arkcompiler_runtime_core/issues/I5G96F
Test: Test262 suit, ark unittest, rk3568 XTS, ark previewer demo

Signed-off-by: huangyu <huangyu76@huawei.com>
Change-Id: I3f63d129a07deaa27a390f556dcaa5651c098185
2022-07-17 10:20:32 +08:00

66 lines
2.0 KiB
C++

/**
* Copyright (c) 2021-2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef PANDA_BYTECODE_OPT_CANONICALIZATION_H
#define PANDA_BYTECODE_OPT_CANONICALIZATION_H
#include "bytecodeopt_options.h"
#include "compiler/optimizer/ir/graph.h"
#include "compiler/optimizer/pass.h"
#include "compiler/optimizer/ir/graph_visitor.h"
namespace panda::bytecodeopt {
using panda::compiler::BasicBlock;
using panda::compiler::Inst;
using panda::compiler::Opcode;
class Canonicalization : public compiler::Optimization, public compiler::GraphVisitor {
public:
explicit Canonicalization(compiler::Graph *graph) : compiler::Optimization(graph) {}
~Canonicalization() override = default;
bool RunImpl() override;
const char *GetPassName() const override
{
return "Canonicalization";
}
bool IsEnable() const override
{
return options.IsCanonicalization();
}
bool GetStatus() const
{
return result_;
}
const ArenaVector<BasicBlock *> &GetBlocksToVisit() const override
{
return GetGraph()->GetBlocksRPO();
}
void VisitCommutative(Inst *inst);
static void VisitCompare([[maybe_unused]] GraphVisitor *v, Inst *inst);
static bool TrySwapReverseInput(Inst *inst);
static bool TrySwapConstantInput(Inst *inst);
#include "optimizer/ir/visitor.inc"
private:
bool result_ {false};
};
} // namespace panda::bytecodeopt
#endif // PANDA_BYTECODE_OPT_CANONICALIZATION_H