transformer.cpp revision 4df77d18bf57187f8e7142c6f7a70a9cdd3d581e
14df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni/* 24df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * Copyright 2017, The Android Open Source Project 34df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * 44df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * Licensed under the Apache License, Version 2.0 (the "License"); 54df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * you may not use this file except in compliance with the License. 64df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * You may obtain a copy of the License at 74df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * 84df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * http://www.apache.org/licenses/LICENSE-2.0 94df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * 104df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * Unless required by applicable law or agreed to in writing, software 114df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * distributed under the License is distributed on an "AS IS" BASIS, 124df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * See the License for the specific language governing permissions and 144df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * limitations under the License. 154df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni */ 164df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 174df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni#include "transformer.h" 184df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 194df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni#include "module.h" 204df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 214df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ninamespace android { 224df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ninamespace spirit { 234df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 244df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang NiModule *Transformer::applyTo(Module *m) { 254df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni // TODO fix Module::accept() to have the header serialization code there 264df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni m->SerializeHeader(*mStream); 274df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni m->accept(this); 284df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni std::unique_ptr<InputWordStream> IS( 294df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni InputWordStream::Create(mStream->getWords())); 304df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni return Deserialize<Module>(*IS); 314df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} 324df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 334df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Nistd::vector<uint32_t> Transformer::transformSerialize(Module *m) { 344df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni m->SerializeHeader(*mStream); 354df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni m->accept(this); 364df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni return mStream->getWords(); 374df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} 384df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 394df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Nivoid Transformer::insert(Instruction *inst) { 404df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni // TODO: warn on nullptr inst 414df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni inst->Serialize(*mStream); 424df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} 434df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 444df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} // namespace spirit 454df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} // namespace android 46