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