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