• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import {
17    CacheList
18} from "../base/vregisterCache";
19import {
20    IRNode
21} from "../irnodes";
22import { PandaGen } from "../pandagen";
23import { Pass } from "../pass";
24
25
26export class CacheExpander implements Pass {
27    run(pandaGen: PandaGen): void {
28        let insns: IRNode[] = pandaGen.getInsns();
29        let cache = pandaGen.getVregisterCache();
30        for (let i = CacheList.MIN; i < CacheList.MAX; i++) {
31            let item = cache.getCache(i);
32            if (item.isNeeded()) {
33                let expander = item.getExpander();
34                let expansion = expander(pandaGen);
35                if (!expansion) {
36                    continue;
37                }
38                insns.unshift(...expansion);
39            }
40        }
41    }
42}
43