Merge "Remove unused rsov driver." am: fc3236fd01 am: d96e613260
am: de2c8dd84c

Change-Id: I94c2e5e46d957bbdee53cc556ee8b0e64efc2618
diff --git a/rsov/Android.mk b/rsov/Android.mk
deleted file mode 100644
index 4afbb7c..0000000
--- a/rsov/Android.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-#=====================================================================
-# Include Subdirectories
-#=====================================================================
-
-# Not building RSoV modules in PDK builds, as libSPIRV is not available in PDK.
-ifneq ($(TARGET_BUILD_PDK), true)
-
-LOCAL_PATH:=$(call my-dir)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
-
-endif # TARGET_BUILD_PDK
diff --git a/rsov/compiler/.clang-format b/rsov/compiler/.clang-format
deleted file mode 100644
index 21c0dd4..0000000
--- a/rsov/compiler/.clang-format
+++ /dev/null
@@ -1,95 +0,0 @@
----
-Language:        Cpp
-# BasedOnStyle:  LLVM
-AccessModifierOffset: -2
-AlignAfterOpenBracket: Align
-AlignConsecutiveAssignments: false
-AlignConsecutiveDeclarations: false
-AlignEscapedNewlinesLeft: false
-AlignOperands:   true
-AlignTrailingComments: true
-AllowAllParametersOfDeclarationOnNextLine: true
-AllowShortBlocksOnASingleLine: false
-AllowShortCaseLabelsOnASingleLine: false
-AllowShortFunctionsOnASingleLine: All
-AllowShortIfStatementsOnASingleLine: false
-AllowShortLoopsOnASingleLine: false
-AlwaysBreakAfterDefinitionReturnType: None
-AlwaysBreakAfterReturnType: None
-AlwaysBreakBeforeMultilineStrings: false
-AlwaysBreakTemplateDeclarations: false
-BinPackArguments: true
-BinPackParameters: true
-BraceWrapping:   
-  AfterClass:      false
-  AfterControlStatement: false
-  AfterEnum:       false
-  AfterFunction:   false
-  AfterNamespace:  false
-  AfterObjCDeclaration: false
-  AfterStruct:     false
-  AfterUnion:      false
-  BeforeCatch:     false
-  BeforeElse:      false
-  IndentBraces:    false
-BreakBeforeBinaryOperators: None
-BreakBeforeBraces: Attach
-BreakBeforeTernaryOperators: true
-BreakConstructorInitializersBeforeComma: false
-BreakAfterJavaFieldAnnotations: false
-BreakStringLiterals: true
-ColumnLimit:     80
-CommentPragmas:  '^ IWYU pragma:'
-ConstructorInitializerAllOnOneLineOrOnePerLine: false
-ConstructorInitializerIndentWidth: 4
-ContinuationIndentWidth: 4
-Cpp11BracedListStyle: true
-DerivePointerAlignment: false
-DisableFormat:   false
-ExperimentalAutoDetectBinPacking: false
-ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
-IncludeCategories: 
-  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
-    Priority:        2
-  - Regex:           '^(<|"(gtest|isl|json)/)'
-    Priority:        3
-  - Regex:           '.*'
-    Priority:        1
-IncludeIsMainRegex: '$'
-IndentCaseLabels: false
-IndentWidth:     2
-IndentWrappedFunctionNames: false
-JavaScriptQuotes: Leave
-JavaScriptWrapImports: true
-KeepEmptyLinesAtTheStartOfBlocks: true
-MacroBlockBegin: ''
-MacroBlockEnd:   ''
-MaxEmptyLinesToKeep: 1
-NamespaceIndentation: None
-ObjCBlockIndentWidth: 2
-ObjCSpaceAfterProperty: false
-ObjCSpaceBeforeProtocolList: true
-PenaltyBreakBeforeFirstCallParameter: 19
-PenaltyBreakComment: 300
-PenaltyBreakFirstLessLess: 120
-PenaltyBreakString: 1000
-PenaltyExcessCharacter: 1000000
-PenaltyReturnTypeOnItsOwnLine: 60
-PointerAlignment: Right
-ReflowComments:  true
-SortIncludes:    true
-SpaceAfterCStyleCast: false
-SpaceBeforeAssignmentOperators: true
-SpaceBeforeParens: ControlStatements
-SpaceInEmptyParentheses: false
-SpacesBeforeTrailingComments: 1
-SpacesInAngles:  false
-SpacesInContainerLiterals: true
-SpacesInCStyleCastParentheses: false
-SpacesInParentheses: false
-SpacesInSquareBrackets: false
-Standard:        Cpp11
-TabWidth:        8
-UseTab:          Never
-...
-
diff --git a/rsov/compiler/Android.bp b/rsov/compiler/Android.bp
deleted file mode 100644
index 61dd921..0000000
--- a/rsov/compiler/Android.bp
+++ /dev/null
@@ -1,109 +0,0 @@
-//
-// Copyright (C) 2016 The Android Open Source Project
-//
-// 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.
-//
-
-//=====================================================================
-// Unit tests for Wrapper module
-//=====================================================================
-
-cc_test_host {
-    name: "Wrapper_test",
-    defaults: [
-        "llvm-defaults",
-        "spirit_defaults",
-    ],
-
-    srcs: [
-        "Builtin.cpp",
-        "Context.cpp",
-        "GlobalAllocSPIRITPass.cpp",
-        "RSAllocationUtils.cpp",
-        "Wrapper.cpp",
-        "Wrapper_test.cpp",
-    ],
-
-    shared_libs: [
-        "libLLVM_android",
-        "libbcinfo",
-        "libspirit",
-    ],
-}
-
-//=====================================================================
-// Unit tests for Builtin module
-//=====================================================================
-
-cc_test_host {
-    name: "Builtin_test",
-    defaults: ["spirit_defaults"],
-
-    srcs: [
-        "Builtin.cpp",
-        "Builtin_test.cpp",
-    ],
-
-    shared_libs: ["libspirit"],
-}
-
-//=====================================================================
-// Host and Device Executable rs2spirv
-//=====================================================================
-
-cc_binary {
-    name: "rs2spirv",
-    defaults: [
-        "llvm-defaults",
-        "spirit_defaults",
-    ],
-    host_supported: true,
-    device_supported: false,
-
-    srcs: [
-        "rs2spirv.cpp",
-        "Builtin.cpp",
-        "Context.cpp",
-        "GlobalAllocPass.cpp",
-        "GlobalAllocSPIRITPass.cpp",
-        "GlobalMergePass.cpp",
-        "InlinePreparationPass.cpp",
-        "RemoveNonkernelsPass.cpp",
-        "RSAllocationUtils.cpp",
-        "RSSPIRVWriter.cpp",
-        "Wrapper.cpp",
-    ],
-
-    // TODO: fix the remaining warnings
-    cflags: [
-        "-D_SPIRV_LLVM_API",
-        "-Wno-error=pessimizing-move",
-        "-Wno-error=unused-variable",
-        "-Wno-error=unused-private-field",
-        "-Wno-error=unused-function",
-        "-Wno-error=dangling-else",
-        "-Wno-error=ignored-qualifiers",
-        "-Wno-error=non-virtual-dtor",
-
-        // For debug builds
-        //"-O0",
-        //"-DRS2SPIRV_DEBUG=1",
-    ],
-
-    shared_libs: [
-        "libLLVM_android",
-        "libbcinfo",
-        "libSPIRV",
-        "libspirit",
-    ],
-}
diff --git a/rsov/compiler/Builtin.cpp b/rsov/compiler/Builtin.cpp
deleted file mode 100644
index 02f7546..0000000
--- a/rsov/compiler/Builtin.cpp
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "Builtin.h"
-
-#include "cxxabi.h"
-#include "spirit.h"
-#include "transformer.h"
-
-#include <stdint.h>
-
-#include <map>
-#include <string>
-#include <vector>
-
-namespace android {
-namespace spirit {
-
-namespace {
-
-Instruction *translateClampVector(const char *name,
-                                  const FunctionCallInst *call, Transformer *tr,
-                                  Builder *b, Module *m) {
-  int width = name[10] - '0';
-  if (width < 2 || width > 4) {
-    return nullptr;
-  }
-
-  uint32_t extOpCode = 0;
-  switch (name[strlen(name) - 1]) {
-  case 'f':
-    extOpCode = 43;
-    break; // FClamp
-  // TODO: Do we get _Z5clampDV_uuu at all? Does LLVM convert u into i?
-  case 'u':
-    extOpCode = 44;
-    break; // UClamp
-  case 'i':
-    extOpCode = 45;
-    break; // SClamp
-  default:
-    return nullptr;
-  }
-
-  std::vector<IdRef> minConstituents(width, call->mOperand2[1]);
-  std::unique_ptr<Instruction> min(
-      b->MakeCompositeConstruct(call->mResultType, minConstituents));
-  tr->insert(min.get());
-
-  std::vector<IdRef> maxConstituents(width, call->mOperand2[2]);
-  std::unique_ptr<Instruction> max(
-      b->MakeCompositeConstruct(call->mResultType, maxConstituents));
-  tr->insert(max.get());
-
-  std::vector<IdRef> extOpnds = {call->mOperand2[0], min.get(), max.get()};
-  return b->MakeExtInst(call->mResultType, m->getGLExt(), extOpCode, extOpnds);
-}
-
-Instruction *translateExtInst(const uint32_t extOpCode,
-                              const FunctionCallInst *call, Builder *b,
-                              Module *m) {
-  return b->MakeExtInst(call->mResultType, m->getGLExt(), extOpCode,
-                        {call->mOperand2[0]});
-}
-
-} // anonymous namespace
-
-typedef std::function<Instruction *(const char *, const FunctionCallInst *,
-                                    Transformer *, Builder *, Module *)>
-    InstTrTy;
-
-class BuiltinLookupTable {
-public:
-  BuiltinLookupTable() {
-    for (sNameCode const *p = &mFPMathFuncOpCode[0]; p->name; p++) {
-      const char *name = p->name;
-      const uint32_t extOpCode = p->code;
-      addMapping(name, {"*"}, {{"float+"}}, {1, 2, 3, 4},
-                 [extOpCode](const char *, const FunctionCallInst *call,
-                             Transformer *, Builder *b, Module *m) {
-                   return translateExtInst(extOpCode, call, b, m);
-                 });
-    }
-
-    addMapping("abs", {"*"}, {{"int+"}, {"char+"}}, {1, 2, 3, 4},
-               [](const char *, const FunctionCallInst *call, Transformer *,
-                  Builder *b, Module *m) {
-                 return translateExtInst(5, call, b, m); // SAbs
-               });
-
-    addMapping("clamp", {"*"},
-               {{"int+", "int", "int"}, {"float+", "float", "float"}},
-               {1, 2, 3, 4}, [](const char *name, const FunctionCallInst *call,
-                                Transformer *tr, Builder *b, Module *m) {
-                 return translateClampVector(name, call, tr, b, m);
-               });
-
-    addMapping("convert", {"char+", "int+", "uchar+", "uint+"},
-               {{"char+"}, {"int+"}, {"uchar+"}, {"uint+"}}, {1, 2, 3, 4},
-               [](const char *, const FunctionCallInst *call, Transformer *,
-                  Builder *b, Module *) -> Instruction * {
-                 return b->MakeUConvert(call->mResultType, call->mOperand2[0]);
-               });
-
-    addMapping(
-        "convert", {"char+", "int+", "uchar+", "uint+"}, {{"float+"}},
-        {1, 2, 3, 4}, [](const char *, const FunctionCallInst *call,
-                         Transformer *, Builder *b, Module *) -> Instruction * {
-          return b->MakeConvertFToU(call->mResultType, call->mOperand2[0]);
-        });
-
-    addMapping(
-        "convert", {"float+"}, {{"char+"}, {"int+"}, {"uchar+"}, {"uint+"}},
-        {1, 2, 3, 4}, [](const char *, const FunctionCallInst *call,
-                         Transformer *, Builder *b, Module *) {
-          return b->MakeConvertUToF(call->mResultType, call->mOperand2[0]);
-        });
-
-    addMapping("dot", {"*"}, {{"float+"}}, {1, 2, 3, 4},
-               [](const char *, const FunctionCallInst *call, Transformer *,
-                  Builder *b, Module *) {
-                 return b->MakeDot(call->mResultType, call->mOperand2[0],
-                                   call->mOperand2[1]);
-               });
-
-    addMapping("min", {"*"}, {{"uint+"}, {"uchar+"}}, {1, 2, 3, 4},
-               [](const char *, const FunctionCallInst *call, Transformer *,
-                  Builder *b, Module *m) {
-                 return translateExtInst(38, call, b, m); // UMin
-               });
-
-    addMapping("min", {"*"}, {{"int+"}, {"char+"}}, {1, 2, 3, 4},
-               [](const char *, const FunctionCallInst *call, Transformer *,
-                  Builder *b, Module *m) {
-                 return translateExtInst(39, call, b, m); // SMin
-               });
-
-    addMapping("max", {"*"}, {{"uint+"}, {"uchar+"}}, {1, 2, 3, 4},
-               [](const char *, const FunctionCallInst *call, Transformer *,
-                  Builder *b, Module *m) {
-                 return translateExtInst(41, call, b, m); // UMax
-               });
-
-    addMapping("max", {"*"}, {{"int+"}, {"char+"}}, {1, 2, 3, 4},
-               [](const char *, const FunctionCallInst *call, Transformer *,
-                  Builder *b, Module *m) {
-                 return translateExtInst(42, call, b, m); // SMax
-               });
-
-    addMapping("rsUnpackColor8888", {"*"}, {{"uchar+"}}, {4},
-               [](const char *, const FunctionCallInst *call, Transformer *,
-                  Builder *b, Module *m) {
-                 auto cast = b->MakeBitcast(m->getUnsignedIntType(32),
-                                            call->mOperand2[0]);
-                 return b->MakeExtInst(call->mResultType, m->getGLExt(), 64,
-                                       {cast}); // UnpackUnorm4x8
-               });
-
-    addMapping("rsPackColorTo8888", {"*"}, {{"float+"}}, {4},
-               [](const char *, const FunctionCallInst *call, Transformer *,
-                  Builder *b, Module *m) {
-                 // PackUnorm4x8
-                 auto packed = b->MakeExtInst(call->mResultType, m->getGLExt(),
-                                              55, {call->mOperand2[0]});
-                 return b->MakeBitcast(
-                     m->getVectorType(m->getUnsignedIntType(8), 4), packed);
-               });
-  }
-
-  static const BuiltinLookupTable &getInstance() {
-    static BuiltinLookupTable table;
-    return table;
-  }
-
-  void addMapping(const char *funcName,
-                  const std::vector<std::string> &retTypes,
-                  const std::vector<std::vector<std::string>> &argTypes,
-                  const std::vector<uint8_t> &vecWidths, InstTrTy fp) {
-    for (auto width : vecWidths) {
-      for (auto retType : retTypes) {
-        std::string suffixed(funcName);
-        if (retType != "*") {
-          if (retType.back() == '+') {
-            retType.pop_back();
-            if (width > 1) {
-              retType.append(1, '0' + width);
-            }
-          }
-          suffixed.append("_").append(retType);
-        }
-
-        for (auto argList : argTypes) {
-          std::string args("(");
-          bool first = true;
-          for (auto argType : argList) {
-            if (first) {
-              first = false;
-            } else {
-              args.append(", ");
-            }
-            if (argType.front() == 'u') {
-              argType.replace(0, 1, "unsigned ");
-            }
-            if (argType.back() == '+') {
-              argType.pop_back();
-              if (width > 1) {
-                argType.append(" vector[");
-                argType.append(1, '0' + width);
-                argType.append("]");
-              }
-            }
-            args.append(argType);
-          }
-          args.append(")");
-          mFuncNameMap[suffixed + args] = fp;
-        }
-      }
-    }
-  }
-
-  InstTrTy lookupTranslation(const char *mangled) const {
-    const char *demangled =
-        __cxxabiv1::__cxa_demangle(mangled, nullptr, nullptr, nullptr);
-
-    if (!demangled) {
-      // All RS runtime/builtin functions are overloaded, therefore
-      // name-mangled.
-      return nullptr;
-    }
-
-    std::string strDemangled(demangled);
-
-    auto it = mFuncNameMap.find(strDemangled);
-    if (it == mFuncNameMap.end()) {
-      return nullptr;
-    }
-    return it->second;
-  }
-
-private:
-  std::map<std::string, InstTrTy> mFuncNameMap;
-
-  struct sNameCode {
-    const char *name;
-    uint32_t code;
-  };
-
-  static sNameCode constexpr mFPMathFuncOpCode[] = {
-      {"abs", 4},        {"sin", 13},   {"cos", 14},   {"tan", 15},
-      {"asin", 16},      {"acos", 17},  {"atan", 18},  {"sinh", 19},
-      {"cosh", 20},      {"tanh", 21},  {"asinh", 22}, {"acosh", 23},
-      {"atanh", 24},     {"atan2", 25}, {"pow", 26},   {"exp", 27},
-      {"log", 28},       {"exp2", 29},  {"log2", 30},  {"sqrt", 31},
-      {"modf", 35},      {"min", 37},   {"max", 40},   {"length", 66},
-      {"normalize", 69}, {nullptr, 0},
-  };
-
-}; // BuiltinLookupTable
-
-BuiltinLookupTable::sNameCode constexpr BuiltinLookupTable::mFPMathFuncOpCode[];
-
-class BuiltinTransformer : public Transformer {
-public:
-  // BEGIN: cleanup unrelated to builtin functions, but necessary for LLVM-SPIRV
-  // converter generated code.
-
-  // TODO: Move these in its own pass
-
-  std::vector<uint32_t> runAndSerialize(Module *module, int *error) override {
-    module->addExtInstImport("GLSL.std.450");
-    return Transformer::runAndSerialize(module, error);
-  }
-
-  Instruction *transform(CapabilityInst *inst) override {
-    // Remove capabilities Address, Linkage, and Kernel.
-    if (inst->mOperand1 == Capability::Addresses ||
-        inst->mOperand1 == Capability::Linkage ||
-        inst->mOperand1 == Capability::Kernel) {
-      return nullptr;
-    }
-    return inst;
-  }
-
-  Instruction *transform(ExtInstImportInst *inst) override {
-    if (inst->mOperand1.compare("OpenCL.std") == 0) {
-      return nullptr;
-    }
-    return inst;
-  }
-
-  Instruction *transform(InBoundsPtrAccessChainInst *inst) override {
-    // Transform any OpInBoundsPtrAccessChain instruction to an
-    // OpInBoundsAccessChain instruction, since the former is not allowed by
-    // the Vulkan validation rules.
-    auto newInst = mBuilder.MakeInBoundsAccessChain(inst->mResultType,
-                                                    inst->mOperand1,
-                                                    inst->mOperand3);
-    newInst->setId(inst->getId());
-    return newInst;
-  }
-
-  Instruction *transform(SourceInst *inst) override {
-    if (inst->mOperand1 == SourceLanguage::Unknown) {
-      return nullptr;
-    }
-    return inst;
-  }
-
-  Instruction *transform(DecorateInst *inst) override {
-    if (inst->mOperand2 == Decoration::LinkageAttributes ||
-        inst->mOperand2 == Decoration::Alignment) {
-      return nullptr;
-    }
-    return inst;
-  }
-
-  // END: cleanup unrelated to builtin functions
-
-  Instruction *transform(FunctionCallInst *call) {
-    FunctionInst *func =
-        static_cast<FunctionInst *>(call->mOperand1.mInstruction);
-    // TODO: attach name to the instruction to avoid linear search in the debug
-    // section, i.e.,
-    // const char *name = func->getName();
-    const char *name = getModule()->lookupNameByInstruction(func);
-    if (!name) {
-      return call;
-    }
-
-    // Maps name into a SPIR-V instruction
-    auto fpTranslate =
-        BuiltinLookupTable::getInstance().lookupTranslation(name);
-    if (!fpTranslate) {
-      return call;
-    }
-    Instruction *inst = fpTranslate(name, call, this, &mBuilder, getModule());
-
-    if (inst) {
-      inst->setId(call->getId());
-    }
-
-    return inst;
-  }
-
-private:
-  Builder mBuilder;
-};
-
-} // namespace spirit
-} // namespace android
-
-namespace rs2spirv {
-
-android::spirit::Pass *CreateBuiltinPass() {
-  return new android::spirit::BuiltinTransformer();
-}
-
-} // namespace rs2spirv
-
diff --git a/rsov/compiler/Builtin.h b/rsov/compiler/Builtin.h
deleted file mode 100644
index 2a28097..0000000
--- a/rsov/compiler/Builtin.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 BUILTIN_H
-#define BUILTIN_H
-
-namespace android {
-namespace spirit {
-
-class Pass;
-
-} // namespace spirit
-} // namespace android
-
-namespace rs2spirv {
-
-android::spirit::Pass *CreateBuiltinPass();
-
-} // namespace rs2spirv
-
-#endif // BUILTIN_H
diff --git a/rsov/compiler/Builtin_test.cpp b/rsov/compiler/Builtin_test.cpp
deleted file mode 100644
index 256703b..0000000
--- a/rsov/compiler/Builtin_test.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "Builtin.h"
-
-#include "file_utils.h"
-#include "pass_queue.h"
-#include "spirit.h"
-#include "test_utils.h"
-#include "gtest/gtest.h"
-
-namespace android {
-namespace spirit {
-
-TEST(BuiltinTest, testBuiltinTranslation) {
-  const std::string testFile("greyscale.spv");
-  const std::string testDataPath(
-      "frameworks/rs/rsov/compiler/spirit/test_data/");
-  const std::string &fullPath = getAbsolutePath(testDataPath + testFile);
-  auto words = readFile<uint32_t>(fullPath);
-
-  PassQueue passes;
-  passes.append(rs2spirv::CreateBuiltinPass());
-  auto words1 = passes.run(words);
-
-  std::unique_ptr<Module> m1(Deserialize<Module>(words1));
-
-  ASSERT_NE(nullptr, m1);
-}
-
-} // spirit
-} // android
diff --git a/rsov/compiler/Context.cpp b/rsov/compiler/Context.cpp
deleted file mode 100644
index 858aa8a..0000000
--- a/rsov/compiler/Context.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "Context.h"
-
-#include "llvm/ADT/Triple.h"
-#include "llvm/IR/Module.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include <limits>
-
-#define DEBUG_TYPE "rs2spirv-context"
-
-namespace rs2spirv {
-
-Context &Context::getInstance() {
-  static Context c;
-  return c;
-}
-
-Context::Context() : mInitialized(false) {}
-
-bool Context::Initialize(std::unique_ptr<bcinfo::MetadataExtractor> ME) {
-  if (mInitialized) {
-    return true;
-  }
-
-  mMetadata = std::move(ME);
-
-  if (!mMetadata->extract()) {
-    llvm::errs() << "cannot extract metadata\n";
-    return false;
-  }
-
-  const char **varNames = mMetadata->getExportVarNameList();
-  size_t varCount = mMetadata->getExportVarCount();
-  mExportVarIndices.resize(varCount);
-
-  // Builds the lookup table from a variable name to its slot number
-  for (size_t slot = 0; slot < varCount; slot++) {
-    std::string varName(varNames[slot]);
-    mVarNameToSlot.insert(std::make_pair(varName, (uint32_t)slot));
-  }
-
-  const size_t kernelCount = mMetadata->getExportForEachSignatureCount();
-  const char **kernelNames = mMetadata->getExportForEachNameList();
-  for (size_t slot = 0; slot < kernelCount; slot++) {
-    mForEachNameToSlot.insert(std::make_pair(kernelNames[slot], slot));
-  }
-
-  mInitialized = true;
-
-  return true;
-}
-
-void Context::addExportVarIndex(const char *varName, uint32_t index) {
-  DEBUG(llvm::dbgs() << varName << " index=" << index << '\n');
-  const uint32_t slot = getSlotForExportVar(varName);
-  if (slot == std::numeric_limits<uint32_t>::max()) {
-    return;
-  }
-  addExportVarIndex(slot, index);
-}
-
-
-} // namespace rs2spirv
diff --git a/rsov/compiler/Context.h b/rsov/compiler/Context.h
deleted file mode 100644
index 9b38226..0000000
--- a/rsov/compiler/Context.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 RS2SPIRV_CONTEXT_H
-#define RS2SPIRV_CONTEXT_H
-
-#include "RSAllocationUtils.h"
-#include "bcinfo/MetadataExtractor.h"
-
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/ADT/StringRef.h"
-
-#include <stdint.h>
-
-// Declare a friend relationship in a class with a test. Used rather that
-// FRIEND_TEST to avoid globally importing gtest/gtest.h into the main
-// RSoV header files.
-#ifdef __HOST__
-#define RSOV_FRIEND_TEST(test_set_name, individual_test)                       \
-  friend class test_set_name##_##individual_test##_Test
-#else
-#define RSOV_FRIEND_TEST(test_set_name, individual_test)
-#endif // __HOST__
-
-namespace bcinfo {
-class MetadataExtractor;
-}
-
-namespace llvm {
-class Module;
-}
-
-namespace rs2spirv {
-
-// A singleton that keeps state during the compilation from RS LLVM bitcode to
-// SPIR-V, which provides quick lookup of metadata and shares information
-// between the passes.
-class Context {
-  RSOV_FRIEND_TEST(ContextTest, testInitialize);
-
-public:
-  static Context &getInstance();
-
-  Context();
-
-  // Initialize the internal data struture such as the slot number lookup table,
-  // etc.
-  bool Initialize(std::unique_ptr<bcinfo::MetadataExtractor> ME);
-
-  // Returns the total number of exported variables
-  uint32_t getNumExportVar() const { return mExportVarIndices.size(); }
-
-  // Adds the mapping from the slot number of an exported variable to the index
-  // of its field in the global buffer
-  void addExportVarIndex(uint32_t slot, uint32_t index) {
-    mExportVarIndices[slot] = index;
-  }
-
-  // Adds the mapping from the name of an exported variable to the index of its
-  // field in the global buffer
-  void addExportVarIndex(const char *varName, uint32_t index);
-
-  // Given the slot number of an exported variable, returns the index of its
-  // field in the global buffer
-  uint32_t getExportVarIndex(uint32_t slot) const {
-    return mExportVarIndices[slot];
-  }
-
-  void setGlobalSize(uint64_t size) {
-    mGlobalSize = size;
-  }
-
-  uint64_t getGlobalSize() const {
-    return mGlobalSize;
-  }
-
-  // Returns the total number of foreach kernels
-  uint32_t getNumForEachKernel() const { return mForEachNameToSlot.size(); }
-
-  // Checks if a name refers to a foreach kernel function
-  bool isForEachKernel(llvm::StringRef name) const {
-    return mForEachNameToSlot.count(name) != 0;
-  }
-
-  const bcinfo::MetadataExtractor &getMetadata() const { return *mMetadata; }
-
-  llvm::SmallVectorImpl<RSAllocationInfo> &getGlobalAllocs() {
-    return mGlobalAllocs;
-  }
-
-private:
-  uint32_t getSlotForExportVar(const char *varName) {
-    const llvm::StringRef strVarName(varName);
-    auto it = mVarNameToSlot.find(strVarName);
-    if (it == mVarNameToSlot.end()) {
-      return std::numeric_limits<uint32_t>::max();
-    }
-    return it->second;
-  }
-
-  bool mInitialized;
-  // RenderScript metadata embedded in the input LLVM Moduel
-  std::unique_ptr<bcinfo::MetadataExtractor> mMetadata;
-  // A map from exported variable names to their slot numbers
-  llvm::StringMap<uint32_t> mVarNameToSlot;
-  // The size of memory needed to store all global variables (static variables)
-  uint64_t mGlobalSize;
-  // A map from exported foreach kernel names to their slot numbers
-  llvm::StringMap<uint32_t> mForEachNameToSlot;
-  // These are the indices for each exported variable in the global buffer
-  llvm::SmallVector<uint32_t, 8> mExportVarIndices;
-  // For Global Allocations; carries global variable -> metadata offset
-  // mapping from an LLVM pass to a SPIRIT pass
-  llvm::SmallVector<RSAllocationInfo, 8> mGlobalAllocs;
-};
-
-} // namespace rs2spirv
-
-#endif // RS2SPIRV_CONTEXT_H
diff --git a/rsov/compiler/GlobalAllocPass.cpp b/rsov/compiler/GlobalAllocPass.cpp
deleted file mode 100644
index 92c441a..0000000
--- a/rsov/compiler/GlobalAllocPass.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "GlobalAllocPass.h"
-
-#include "Context.h"
-#include "RSAllocationUtils.h"
-
-#include "llvm/IR/GlobalVariable.h"
-#include "llvm/IR/Module.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/Debug.h"
-
-#define DEBUG_TYPE "rs2spirv-global-alloc"
-
-using namespace llvm;
-
-namespace rs2spirv {
-
-namespace {
-bool collectGlobalAllocs(Module &M,
-                         SmallVectorImpl<GlobalVariable *> &GlobalAllocs) {
-  for (auto &GV : M.globals()) {
-    if (!isRSAllocation(GV))
-      continue;
-
-    DEBUG(GV.dump());
-    GlobalAllocs.push_back(&GV);
-  }
-
-  return !GlobalAllocs.empty();
-}
-
-//
-// This pass would enumerate used global rs_allocations (TBD) and
-// lowers calls to accessors of the following type:
-//
-//    rsGetAllocationDimX(g)
-//
-// to
-//
-//    __rsov_rsGetAllocationDimX(some uninque constant identifying g) */
-//
-// Note the __rsov_* variant is used as a marker for another SPIRIT
-// transformations (see GlobalAllocSPIRITPass.cpp) to expand them into
-// SPIR-V instructions that loads the metadata.
-//
-class GlobalAllocPass : public ModulePass {
-public:
-  static char ID;
-  GlobalAllocPass()
-      : ModulePass(ID), Allocs(Context::getInstance().getGlobalAllocs()) {}
-
-  const char *getPassName() const override { return "GlobalAllocPass"; }
-
-  bool runOnModule(Module &M) override {
-    DEBUG(dbgs() << "RS2SPIRVGlobalAllocPass\n");
-    DEBUG(M.dump());
-
-    SmallVector<GlobalVariable *, 8> GlobalAllocs;
-    const bool CollectRes = collectGlobalAllocs(M, GlobalAllocs);
-    if (!CollectRes)
-      return false; // Module not modified.
-
-    SmallVector<RSAllocationCallInfo, 8> Calls;
-    getRSAllocationInfo(M, Allocs);
-    getRSAllocAccesses(Allocs, Calls);
-
-    // Lower the found accessors
-    for (auto &C : Calls) {
-      assert(C.Kind == RSAllocAccessKind::DIMX &&
-             "Unsupported type of accessor call types");
-      solidifyRSAllocAccess(M, C);
-    }
-    // Return true, as the pass modifies module.
-    DEBUG(dbgs() << "RS2SPIRVGlobalAllocPass end\n");
-    return true;
-  }
-
-private:
-  SmallVectorImpl<RSAllocationInfo> &Allocs;
-};
-
-// A simple pass to remove all global allocations forcibly
-class RemoveAllGlobalAllocPass : public ModulePass {
-public:
-  static char ID;
-  RemoveAllGlobalAllocPass() : ModulePass(ID) {}
-  const char *getPassName() const override {
-    return "RemoveAllGlobalAllocPass";
-  }
-
-  bool runOnModule(Module &M) override {
-    DEBUG(dbgs() << "RemoveAllGlobalAllocPass\n");
-    DEBUG(M.dump());
-
-    SmallVector<GlobalVariable *, 8> GlobalAllocs;
-    const bool CollectRes = collectGlobalAllocs(M, GlobalAllocs);
-    if (!CollectRes)
-      return false; // Module not modified.
-    // Remove global allocations
-    for (auto *G : GlobalAllocs) {
-      G->eraseFromParent();
-    }
-    DEBUG(dbgs() << "RemoveAllGlobalAllocPass end\n");
-    DEBUG(M.dump());
-    // Return true, as the pass modifies module.
-    return true;
-  }
-};
-
-} // namespace
-char GlobalAllocPass::ID = 0;
-char RemoveAllGlobalAllocPass::ID = 0;
-
-ModulePass *createRemoveAllGlobalAllocPass() {
-  return new RemoveAllGlobalAllocPass();
-}
-ModulePass *createGlobalAllocPass() { return new GlobalAllocPass(); }
-
-} // namespace rs2spirv
diff --git a/rsov/compiler/GlobalAllocPass.h b/rsov/compiler/GlobalAllocPass.h
deleted file mode 100644
index 9312c21..0000000
--- a/rsov/compiler/GlobalAllocPass.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 RS2SPIRV_GLOBAL_ALLOC_PASS_H
-#define RS2SPIRV_GLOBAL_ALLOC_PASS_H
-
-namespace llvm {
-class ModulePass;
-} // namespace llvm
-
-namespace rs2spirv {
-
-llvm::ModulePass *createGlobalAllocPass();
-llvm::ModulePass *createRemoveAllGlobalAllocPass();
-
-} // namespace rs2spirv
-
-#endif
diff --git a/rsov/compiler/GlobalAllocSPIRITPass.cpp b/rsov/compiler/GlobalAllocSPIRITPass.cpp
deleted file mode 100644
index 5d2ab15..0000000
--- a/rsov/compiler/GlobalAllocSPIRITPass.cpp
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "GlobalAllocSPIRITPass.h"
-
-#include "Context.h"
-#include "spirit.h"
-#include "transformer.h"
-
-#include <sstream>
-
-namespace android {
-namespace spirit {
-
-namespace {
-
-// Metadata buffer for global allocations
-// struct metadata {
-//  uint32_t element_size;
-//  uint32_t x_size;
-//  uint32_t y_size;
-//  uint32_t unused
-// };
-
-VariableInst *AddGAMetadata(Builder &b, Module *m) {
-  TypeIntInst *UInt32Ty = m->getUnsignedIntType(32);
-  std::vector<Instruction *> metadata{UInt32Ty, UInt32Ty, UInt32Ty, UInt32Ty};
-  auto MetadataStructTy = m->getStructType(metadata.data(), metadata.size());
-  // FIXME: workaround on a weird OpAccessChain member offset problem. Somehow
-  // when given constant indices, OpAccessChain returns pointers that are 4
-  // bytes less than what are supposed to be (at runtime). For now workaround
-  // this with +4 the member offsets.
-  MetadataStructTy->memberDecorate(0, Decoration::Offset)->addExtraOperand(4);
-  MetadataStructTy->memberDecorate(1, Decoration::Offset)->addExtraOperand(8);
-  MetadataStructTy->memberDecorate(2, Decoration::Offset)->addExtraOperand(12);
-  MetadataStructTy->memberDecorate(3, Decoration::Offset)->addExtraOperand(16);
-  // TBD: Implement getArrayType. RuntimeArray requires buffers and hence we
-  // cannot use PushConstant underneath
-  auto MetadataBufSTy = m->getRuntimeArrayType(MetadataStructTy);
-  // Stride of metadata.
-  MetadataBufSTy->decorate(Decoration::ArrayStride)
-      ->addExtraOperand(metadata.size() * sizeof(uint32_t));
-  auto MetadataSSBO = m->getStructType(MetadataBufSTy);
-  MetadataSSBO->decorate(Decoration::BufferBlock);
-  auto MetadataPtrTy = m->getPointerType(StorageClass::Uniform, MetadataSSBO);
-
-  VariableInst *MetadataVar =
-      b.MakeVariable(MetadataPtrTy, StorageClass::Uniform);
-  MetadataVar->decorate(Decoration::DescriptorSet)->addExtraOperand(0);
-  MetadataVar->decorate(Decoration::Binding)->addExtraOperand(1);
-  m->addVariable(MetadataVar);
-
-  return MetadataVar;
-}
-
-std::string CreateGAIDMetadata(
-    const llvm::SmallVectorImpl<rs2spirv::RSAllocationInfo> &Allocs) {
-
-  std::stringstream mapping;
-  bool printed = false;
-
-  mapping << "{\"__RSoV_GA\": {";
-  for (auto &A : Allocs) {
-    // Skip unused GAs
-    if (!A.hasID()) {
-      continue;
-    }
-    if (printed)
-      mapping << ", ";
-    // "GA name" to the ID of the GA
-    mapping << "\"" << A.VarName.substr(1) << "\":" << A.ID;
-    printed = true;
-  }
-  mapping << "}}";
-
-  if (printed)
-    return mapping.str().c_str();
-  else
-    return "";
-}
-} // anonymous namespace
-
-// Replacing calls to lowered accessors, e.g., __rsov_rsAllocationGetDimX
-// which was created from rsAllocationGetDimX by replacing the allocation
-// with an ID in an earlier LLVM pass (see GlobalAllocationPass.cpp),
-// to access the global allocation metadata.
-//
-// For example, the source code may look like:
-//
-// rs_allocation g;
-// ...
-//    uint32_t foo = rsAllocationGetDimX(g);
-//
-// After the  GlobalAllocPass, it would look like the LLVM IR
-// equivalent of:
-//
-//    uint32_t foo = __rsov_rsAllocationGetDimX(0);
-//
-// After that pass, g is removed, and references in intrinsics
-// to g would be replaced with an assigned unique id (0 here), and
-// rsAllocationGetDimX() would be replaced by __rsov_rsAllocationGetDimX()
-// where the only difference is the argument being replaced by the unique
-// ID. __rsov_rsAllocationGetDimX() does not really exist - it is used
-// as a marker for this pass to work on.
-//
-// After this GAAccessTransformer pass, it would look like (in SPIRIT):
-//
-//   uint32_t foo = Metadata[0].size_x;
-//
-// where the OpFunctionCall to __rsov_rsAllocationGetDim() is replaced by
-// an OpAccessChain and OpLoad from the metadata buffer.
-
-class GAAccessorTransformer : public Transformer {
-public:
-  GAAccessorTransformer()
-      : mBuilder(), mMetadata(nullptr),
-        mAllocs(rs2spirv::Context::getInstance().getGlobalAllocs()) {}
-
-  std::vector<uint32_t> runAndSerialize(Module *module, int *error) override {
-    std::string GAMD = CreateGAIDMetadata(mAllocs);
-    if (GAMD.size() > 0) {
-      module->addString(GAMD.c_str());
-    }
-    mMetadata = AddGAMetadata(mBuilder, module);
-    return Transformer::runAndSerialize(module, error);
-  }
-
-  Instruction *transform(FunctionCallInst *call) {
-    FunctionInst *func =
-        static_cast<FunctionInst *>(call->mOperand1.mInstruction);
-    const char *name = getModule()->lookupNameByInstruction(func);
-    if (!name) {
-      return call;
-    }
-
-    Instruction *inst = nullptr;
-    // Maps name into a SPIR-V instruction
-    // TODO: generalize it to support more accessors
-    if (!strcmp(name, "__rsov_rsAllocationGetDimX")) {
-      TypeIntInst *UInt32Ty = getModule()->getUnsignedIntType(32);
-      // TODO: hardcoded layout
-      auto ConstZero = getModule()->getConstant(UInt32Ty, 0U);
-      auto ConstOne = getModule()->getConstant(UInt32Ty, 1U);
-
-      // TODO: Use constant memory later
-      auto resultPtrType =
-          getModule()->getPointerType(StorageClass::Uniform, UInt32Ty);
-      AccessChainInst *LoadPtr = mBuilder.MakeAccessChain(
-          resultPtrType, mMetadata, {ConstZero, ConstZero, ConstOne});
-      insert(LoadPtr);
-
-      inst = mBuilder.MakeLoad(UInt32Ty, LoadPtr);
-      inst->setId(call->getId());
-    } else {
-      inst = call;
-    }
-    return inst;
-  }
-
-private:
-  Builder mBuilder;
-  VariableInst *mMetadata;
-  llvm::SmallVectorImpl<rs2spirv::RSAllocationInfo> &mAllocs;
-};
-
-} // namespace spirit
-} // namespace android
-
-namespace rs2spirv {
-
-android::spirit::Pass *CreateGAPass(void) {
-  return new android::spirit::GAAccessorTransformer();
-}
-
-} // namespace rs2spirv
diff --git a/rsov/compiler/GlobalAllocSPIRITPass.h b/rsov/compiler/GlobalAllocSPIRITPass.h
deleted file mode 100644
index b3a6ecb..0000000
--- a/rsov/compiler/GlobalAllocSPIRITPass.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 GLOBALALLOCSPIRITPASS_H
-#define GLOBALALLOCSPIRITPASS_H
-
-namespace android {
-namespace spirit {
-
-class Pass;
-
-} // namespace spirit
-} // namespace android
-
-namespace rs2spirv {
-
-android::spirit::Pass *CreateGAPass();
-
-} // namespace rs2spirv
-
-#endif // GLOBALALLOCSPIRITPASS_H
diff --git a/rsov/compiler/GlobalMergePass.cpp b/rsov/compiler/GlobalMergePass.cpp
deleted file mode 100644
index deb82f0..0000000
--- a/rsov/compiler/GlobalMergePass.cpp
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright 2016-2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "GlobalMergePass.h"
-
-#include "llvm/IR/Constants.h"
-#include "llvm/IR/DataLayout.h"
-#include "llvm/IR/GlobalVariable.h"
-#include "llvm/IR/IRBuilder.h"
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/Module.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include "Context.h"
-#include "RSAllocationUtils.h"
-
-#include <functional>
-
-#define DEBUG_TYPE "rs2spirv-global-merge"
-
-using namespace llvm;
-
-namespace rs2spirv {
-
-namespace {
-
-class GlobalMergePass : public ModulePass {
-public:
-  static char ID;
-  GlobalMergePass(bool CPU = false) : ModulePass(ID), mForCPU(CPU) {}
-  const char *getPassName() const override { return "GlobalMergePass"; }
-
-  bool runOnModule(Module &M) override {
-    DEBUG(dbgs() << "RS2SPIRVGlobalMergePass\n");
-
-    SmallVector<GlobalVariable *, 8> Globals;
-    if (!collectGlobals(M, Globals)) {
-      return false; // Module not modified.
-    }
-
-    SmallVector<Type *, 8> Tys;
-    Tys.reserve(Globals.size());
-
-    Context &RS2SPIRVCtxt = Context::getInstance();
-
-    uint32_t index = 0;
-    for (GlobalVariable *GV : Globals) {
-      Tys.push_back(GV->getValueType());
-      const char *name = GV->getName().data();
-      RS2SPIRVCtxt.addExportVarIndex(name, index);
-      index++;
-    }
-
-    LLVMContext &LLVMCtxt = M.getContext();
-
-    StructType *MergedTy = StructType::create(LLVMCtxt, "struct.__GPUBuffer");
-    MergedTy->setBody(Tys, false);
-
-    // Size calculation has to consider data layout
-    const DataLayout &DL = M.getDataLayout();
-    const uint64_t BufferSize = DL.getTypeAllocSize(MergedTy);
-    RS2SPIRVCtxt.setGlobalSize(BufferSize);
-
-    Type *BufferVarTy = mForCPU ? static_cast<Type *>(PointerType::getUnqual(
-                                      Type::getInt8Ty(M.getContext())))
-                                : static_cast<Type *>(MergedTy);
-    GlobalVariable *MergedGV =
-        new GlobalVariable(M, BufferVarTy, false, GlobalValue::ExternalLinkage,
-                           nullptr, "__GPUBlock");
-
-    // For CPU, create a constant struct for initial values, which has each of
-    // its fields initialized to the original value of the corresponding global
-    // variable.
-    // During the script initialization, the driver should copy these initial
-    // values to the global buffer.
-    if (mForCPU) {
-      CreateInitFunction(LLVMCtxt, M, MergedGV, MergedTy, BufferSize, Globals);
-    }
-
-    const bool forCPU = mForCPU;
-    IntegerType *const Int32Ty = Type::getInt32Ty(LLVMCtxt);
-    ConstantInt *const Zero = ConstantInt::get(Int32Ty, 0);
-    Value *Idx[] = {Zero, nullptr};
-
-    auto InstMaker = [forCPU, MergedGV, MergedTy,
-                      &Idx](Instruction *InsertBefore) {
-      Value *Base = MergedGV;
-      if (forCPU) {
-        LoadInst *Load = new LoadInst(MergedGV, "", InsertBefore);
-        DEBUG(Load->dump());
-        Base = new BitCastInst(Load, PointerType::getUnqual(MergedTy), "",
-                               InsertBefore);
-        DEBUG(Base->dump());
-      }
-      GetElementPtrInst *GEP = GetElementPtrInst::CreateInBounds(
-          MergedTy, Base, Idx, "", InsertBefore);
-      DEBUG(GEP->dump());
-      return GEP;
-    };
-
-    for (size_t i = 0, e = Globals.size(); i != e; ++i) {
-      GlobalVariable *G = Globals[i];
-      Idx[1] = ConstantInt::get(Int32Ty, i);
-      ReplaceAllUsesWithNewInstructions(G, std::cref(InstMaker));
-      G->eraseFromParent();
-    }
-
-    // Return true, as the pass modifies module.
-    return true;
-  }
-
-private:
-  // In the User of Value Old, replaces all references of Old with Value New
-  static inline void ReplaceUse(User *U, Value *Old, Value *New) {
-    for (unsigned i = 0, n = U->getNumOperands(); i < n; ++i) {
-      if (U->getOperand(i) == Old) {
-        U->getOperandUse(i) = New;
-      }
-    }
-  }
-
-  // Replaces each use of V with new instructions created by
-  // funcCreateAndInsert and inserted right before that use. In the cases where
-  // the use is not an instruction, but a constant expression, recursively
-  // replaces that constant expression with a newly constructed equivalent
-  // instruction, before replacing V in that new instruction.
-  static inline void ReplaceAllUsesWithNewInstructions(
-      Value *V,
-      std::function<Instruction *(Instruction *)> funcCreateAndInsert) {
-    SmallVector<User *, 8> Users(V->user_begin(), V->user_end());
-    for (User *U : Users) {
-      if (Instruction *Inst = dyn_cast<Instruction>(U)) {
-        DEBUG(dbgs() << "\nBefore replacement:\n");
-        DEBUG(Inst->dump());
-        DEBUG(dbgs() << "----\n");
-
-        ReplaceUse(U, V, funcCreateAndInsert(Inst));
-
-        DEBUG(Inst->dump());
-      } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(U)) {
-        auto InstMaker([CE, V, &funcCreateAndInsert](Instruction *UserOfU) {
-          Instruction *Inst = CE->getAsInstruction();
-          Inst->insertBefore(UserOfU);
-          ReplaceUse(Inst, V, funcCreateAndInsert(Inst));
-
-          DEBUG(Inst->dump());
-          return Inst;
-        });
-        ReplaceAllUsesWithNewInstructions(U, InstMaker);
-      } else {
-        DEBUG(U->dump());
-        llvm_unreachable("Expecting only Instruction or ConstantExpr");
-      }
-    }
-  }
-
-  static inline void
-  CreateInitFunction(LLVMContext &LLVMCtxt, Module &M, GlobalVariable *MergedGV,
-                     StructType *MergedTy, const uint64_t BufferSize,
-                     const SmallVectorImpl<GlobalVariable *> &Globals) {
-    SmallVector<Constant *, 8> Initializers;
-    Initializers.reserve(Globals.size());
-    for (size_t i = 0, e = Globals.size(); i != e; ++i) {
-      GlobalVariable *G = Globals[i];
-      Initializers.push_back(G->getInitializer());
-    }
-    ArrayRef<Constant *> ArrInit(Initializers.begin(), Initializers.end());
-    Constant *MergedInitializer = ConstantStruct::get(MergedTy, ArrInit);
-    GlobalVariable *MergedInit =
-        new GlobalVariable(M, MergedTy, true, GlobalValue::InternalLinkage,
-                           MergedInitializer, "__GPUBlock0");
-
-    Function *UserInit = M.getFunction("init");
-    // If there is no user-defined init() function, make the new global
-    // initialization function the init().
-    StringRef FName(UserInit ? ".rsov.global_init" : "init");
-    Function *Func;
-    FunctionType *FTy = FunctionType::get(Type::getVoidTy(LLVMCtxt), false);
-    Func = Function::Create(FTy, GlobalValue::ExternalLinkage, FName, &M);
-    BasicBlock *Blk = BasicBlock::Create(LLVMCtxt, "entry", Func);
-    IRBuilder<> LLVMIRBuilder(Blk);
-    LoadInst *Load = LLVMIRBuilder.CreateLoad(MergedGV);
-    LLVMIRBuilder.CreateMemCpy(Load, MergedInit, BufferSize, 0);
-    LLVMIRBuilder.CreateRetVoid();
-
-    // If there is a user-defined init() function, add a call to the global
-    // initialization function in the beginning of that function.
-    if (UserInit) {
-      BasicBlock &EntryBlk = UserInit->getEntryBlock();
-      CallInst::Create(Func, {}, "", &EntryBlk.front());
-    }
-  }
-
-  bool collectGlobals(Module &M, SmallVectorImpl<GlobalVariable *> &Globals) {
-    for (GlobalVariable &GV : M.globals()) {
-      assert(!GV.hasComdat() && "global variable has a comdat section");
-      assert(!GV.hasSection() && "global variable has a non-default section");
-      assert(!GV.isDeclaration() && "global variable is only a declaration");
-      assert(!GV.isThreadLocal() && "global variable is thread-local");
-      assert(GV.getType()->getAddressSpace() == 0 &&
-             "global variable has non-default address space");
-
-      // TODO: Constants accessed by kernels should be handled differently
-      if (GV.isConstant()) {
-        continue;
-      }
-
-      // Global Allocations are handled differently in separate passes
-      if (isRSAllocation(GV)) {
-        continue;
-      }
-
-      Globals.push_back(&GV);
-    }
-
-    return !Globals.empty();
-  }
-
-  bool mForCPU;
-};
-
-} // namespace
-
-char GlobalMergePass::ID = 0;
-
-ModulePass *createGlobalMergePass(bool CPU) { return new GlobalMergePass(CPU); }
-
-} // namespace rs2spirv
diff --git a/rsov/compiler/GlobalMergePass.h b/rsov/compiler/GlobalMergePass.h
deleted file mode 100644
index e43ab7b..0000000
--- a/rsov/compiler/GlobalMergePass.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2016, The Android Open Source Project
- *
- * 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 RS2SPIRV_GLOBAL_MERGE_PASS_H
-#define RS2SPIRV_GLOBAL_MERGE_PASS_H
-
-namespace llvm {
-class ModulePass;
-} // namespace llvm
-
-namespace rs2spirv {
-
-llvm::ModulePass *createGlobalMergePass(bool CPU = false);
-
-} // namespace rs2spirv
-
-#endif
diff --git a/rsov/compiler/InlinePreparationPass.cpp b/rsov/compiler/InlinePreparationPass.cpp
deleted file mode 100644
index fc1a50d..0000000
--- a/rsov/compiler/InlinePreparationPass.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2016, The Android Open Source Project
- *
- * 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.
- */
-
-#include "InlinePreparationPass.h"
-
-#include "llvm/IR/Module.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include "Context.h"
-
-#define DEBUG_TYPE "rs2spirv-inline"
-
-using namespace llvm;
-
-namespace rs2spirv {
-
-namespace {
-
-class InlinePreparationPass : public ModulePass {
-public:
-  static char ID;
-  explicit InlinePreparationPass() : ModulePass(ID) {}
-
-  const char *getPassName() const override { return "InlinePreparationPass"; }
-
-  bool runOnModule(Module &M) override {
-    DEBUG(dbgs() << "InlinePreparationPass\n");
-
-    rs2spirv::Context &Ctxt = rs2spirv::Context::getInstance();
-
-    for (auto &F : M.functions()) {
-      if (F.isDeclaration()) {
-        continue;
-      }
-
-      if (Ctxt.isForEachKernel(F.getName())) {
-        continue; // Skip kernels.
-      }
-
-      F.addFnAttr(Attribute::AlwaysInline);
-      F.setLinkage(GlobalValue::InternalLinkage);
-
-      DEBUG(dbgs() << "Marked as alwaysinline:\t" << F.getName() << '\n');
-    }
-
-    // Returns true, because this pass modifies the Module.
-    return true;
-  }
-};
-
-} // namespace
-
-char InlinePreparationPass::ID = 0;
-
-ModulePass *createInlinePreparationPass() {
-  return new InlinePreparationPass();
-}
-
-} // namespace rs2spirv
diff --git a/rsov/compiler/InlinePreparationPass.h b/rsov/compiler/InlinePreparationPass.h
deleted file mode 100644
index 12bbfa3..0000000
--- a/rsov/compiler/InlinePreparationPass.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2016, The Android Open Source Project
- *
- * 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 RS2SPIRV_INLINE_PREPARATION_PASS_H
-#define RS2SPIRV_INLINE_PREPARATION_PASS_H
-
-namespace llvm {
-class ModulePass;
-} // namespace llvm
-
-namespace rs2spirv {
-
-llvm::ModulePass *createInlinePreparationPass();
-
-} // namespace rs2spirv
-
-#endif
diff --git a/rsov/compiler/RSAllocationUtils.cpp b/rsov/compiler/RSAllocationUtils.cpp
deleted file mode 100644
index 8b66a6c..0000000
--- a/rsov/compiler/RSAllocationUtils.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright 2016, The Android Open Source Project
- *
- * 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.
- */
-
-#include "RSAllocationUtils.h"
-
-#include "llvm/ADT/StringRef.h"
-#include "llvm/IR/Constants.h"
-#include "llvm/IR/GlobalVariable.h"
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/Module.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include "cxxabi.h"
-
-#include <sstream>
-#include <unordered_map>
-
-#define DEBUG_TYPE "rs2spirv-rs-allocation-utils"
-
-using namespace llvm;
-
-namespace rs2spirv {
-
-bool isRSAllocation(const GlobalVariable &GV) {
-  auto *PT = cast<PointerType>(GV.getType());
-  DEBUG(PT->dump());
-
-  auto *VT = PT->getElementType();
-  DEBUG(VT->dump());
-  std::string TypeName;
-  raw_string_ostream RSO(TypeName);
-  VT->print(RSO);
-  RSO.str(); // Force flush.
-  DEBUG(dbgs() << "TypeName: " << TypeName << '\n');
-
-  return TypeName.find("struct.rs_allocation") != std::string::npos;
-}
-
-bool getRSAllocationInfo(Module &M, SmallVectorImpl<RSAllocationInfo> &Allocs) {
-  DEBUG(dbgs() << "getRSAllocationInfo\n");
-  for (auto &GV : M.globals()) {
-    if (GV.isDeclaration() || !isRSAllocation(GV))
-      continue;
-
-    Allocs.push_back({'%' + GV.getName().str(), None, &GV, -1});
-  }
-
-  return true;
-}
-
-// Collect Allocation access calls into the Calls
-// Also update Allocs with assigned ID.
-// After calling this function, Allocs would contain the mapping from
-// GV name to the corresponding ID.
-bool getRSAllocAccesses(SmallVectorImpl<RSAllocationInfo> &Allocs,
-                        SmallVectorImpl<RSAllocationCallInfo> &Calls) {
-  DEBUG(dbgs() << "getRSGEATCalls\n");
-  DEBUG(dbgs() << "\n\n~~~~~~~~~~~~~~~~~~~~~\n\n");
-
-  std::unordered_map<const Value *, const GlobalVariable *> Mapping;
-  int id_assigned = 0;
-
-  for (auto &A : Allocs) {
-    auto *GV = A.GlobalVar;
-    std::vector<User *> WorkList(GV->user_begin(), GV->user_end());
-    size_t Idx = 0;
-
-    while (Idx < WorkList.size()) {
-      auto *U = WorkList[Idx];
-      DEBUG(dbgs() << "Visiting ");
-      DEBUG(U->dump());
-      ++Idx;
-      auto It = Mapping.find(U);
-      if (It != Mapping.end()) {
-        if (It->second == GV) {
-          continue;
-        } else {
-          errs() << "Duplicate global mapping discovered!\n";
-          errs() << "\nGlobal: ";
-          GV->print(errs());
-          errs() << "\nExisting mapping: ";
-          It->second->print(errs());
-          errs() << "\nUser: ";
-          U->print(errs());
-          errs() << '\n';
-
-          return false;
-        }
-      }
-
-      Mapping[U] = GV;
-      DEBUG(dbgs() << "New mapping: ");
-      DEBUG(U->print(dbgs()));
-      DEBUG(dbgs() << " -> " << GV->getName() << '\n');
-
-      if (auto *FCall = dyn_cast<CallInst>(U)) {
-        if (auto *F = FCall->getCalledFunction()) {
-          const auto FName = F->getName();
-          DEBUG(dbgs() << "Discovered function call to : " << FName << '\n');
-          // Treat memcpy as moves for the purpose of this analysis
-          if (FName.startswith("llvm.memcpy")) {
-            assert(FCall->getNumArgOperands() > 0);
-            Value *CopyDest = FCall->getArgOperand(0);
-            // We are interested in the users of the dest operand of
-            // memcpy here
-            Value *LocalCopy = CopyDest->stripPointerCasts();
-            User *NewU = dyn_cast<User>(LocalCopy);
-            assert(NewU);
-            WorkList.push_back(NewU);
-            continue;
-          }
-
-          char *demangled = __cxxabiv1::__cxa_demangle(
-              FName.str().c_str(), nullptr, nullptr, nullptr);
-          if (!demangled)
-            continue;
-          const StringRef DemangledNameRef(demangled);
-          DEBUG(dbgs() << "Demangled name: " << DemangledNameRef << '\n');
-
-          const StringRef GEAPrefix = "rsGetElementAt_";
-          const StringRef SEAPrefix = "rsSetElementAt_";
-          const StringRef DIMXPrefix = "rsAllocationGetDimX";
-          assert(GEAPrefix.size() == SEAPrefix.size());
-
-          const bool IsGEA = DemangledNameRef.startswith(GEAPrefix);
-          const bool IsSEA = DemangledNameRef.startswith(SEAPrefix);
-          const bool IsDIMX = DemangledNameRef.startswith(DIMXPrefix);
-
-          assert(IsGEA || IsSEA || IsDIMX);
-          if (!A.hasID()) {
-            A.assignID(id_assigned++);
-          }
-
-          if (IsGEA || IsSEA) {
-            DEBUG(dbgs() << "Found rsAlloc function!\n");
-
-            const auto Kind =
-                IsGEA ? RSAllocAccessKind::GEA : RSAllocAccessKind::SEA;
-
-            const auto RSElementTy =
-                DemangledNameRef.drop_front(GEAPrefix.size());
-
-            Calls.push_back({A, FCall, Kind, RSElementTy.str()});
-            continue;
-          } else if (DemangledNameRef.startswith(GEAPrefix.drop_back()) ||
-                     DemangledNameRef.startswith(SEAPrefix.drop_back())) {
-            errs() << "Untyped accesses to global rs_allocations are not "
-                      "supported.\n";
-            return false;
-          } else if (IsDIMX) {
-            DEBUG(dbgs() << "Found rsAllocationGetDimX function!\n");
-            const auto Kind = RSAllocAccessKind::DIMX;
-            Calls.push_back({A, FCall, Kind, ""});
-          }
-        }
-      }
-
-      // TODO: Consider using set-like container to reduce computational
-      // complexity.
-      for (auto *NewU : U->users())
-        if (std::find(WorkList.begin(), WorkList.end(), NewU) == WorkList.end())
-          WorkList.push_back(NewU);
-    }
-  }
-
-  std::unordered_map<const GlobalVariable *, std::string> GVAccessTypes;
-
-  for (auto &Access : Calls) {
-    auto AccessElemTyIt = GVAccessTypes.find(Access.RSAlloc.GlobalVar);
-    if (AccessElemTyIt != GVAccessTypes.end() &&
-        AccessElemTyIt->second != Access.RSElementTy) {
-      errs() << "Could not infere element type for: ";
-      Access.RSAlloc.GlobalVar->print(errs());
-      errs() << '\n';
-      return false;
-    } else if (AccessElemTyIt == GVAccessTypes.end()) {
-      GVAccessTypes.emplace(Access.RSAlloc.GlobalVar, Access.RSElementTy);
-      Access.RSAlloc.RSElementType = Access.RSElementTy;
-    }
-  }
-
-  DEBUG(dbgs() << "\n\n~~~~~~~~~~~~~~~~~~~~~\n\n");
-  return true;
-}
-
-bool solidifyRSAllocAccess(Module &M, RSAllocationCallInfo CallInfo) {
-  DEBUG(dbgs() << "solidifyRSAllocAccess " << CallInfo.RSAlloc.VarName << '\n');
-  auto *FCall = CallInfo.FCall;
-  auto *Fun = FCall->getCalledFunction();
-  assert(Fun);
-
-  StringRef FName;
-  if (CallInfo.Kind == RSAllocAccessKind::DIMX)
-    FName = "rsAllocationGetDimX";
-  else
-    FName = Fun->getName();
-
-  std::ostringstream OSS;
-  OSS << "__rsov_" << FName.str();
-  // Make up uint32_t F(uint32_t)
-  Type *UInt32Ty = IntegerType::get(M.getContext(), 32);
-  auto *NewFT = FunctionType::get(UInt32Ty, ArrayRef<Type *>(UInt32Ty), false);
-
-  auto *NewF = Function::Create(NewFT, // Fun->getFunctionType(),
-                                Function::ExternalLinkage, OSS.str(), &M);
-  FCall->setCalledFunction(NewF);
-  FCall->setArgOperand(0, ConstantInt::get(UInt32Ty, 0, false));
-  NewF->setAttributes(Fun->getAttributes());
-
-  DEBUG(M.dump());
-
-  return true;
-}
-
-} // namespace rs2spirv
diff --git a/rsov/compiler/RSAllocationUtils.h b/rsov/compiler/RSAllocationUtils.h
deleted file mode 100644
index b25cfde..0000000
--- a/rsov/compiler/RSAllocationUtils.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2016, The Android Open Source Project
- *
- * 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 RS2SPIRV_RS_ALLOCATION_UTILS_H
-#define RS2SPIRV_RS_ALLOCATION_UTILS_H
-
-#include "llvm/ADT/Optional.h"
-#include "llvm/ADT/SmallVector.h"
-
-#include <string>
-
-namespace llvm {
-class CallInst;
-class GlobalVariable;
-class Module;
-class Type;
-} // namespace llvm
-
-namespace rs2spirv {
-
-struct RSAllocationInfo {
-  std::string VarName;
-  llvm::Optional<std::string> RSElementType;
-  llvm::GlobalVariable *GlobalVar;
-  // Assigned unique identifier for this allocation;
-  // not the slot #.
-  // Represents the index of this allocation's metadata
-  // in the global allocation metadata Vulkan buffer
-  int ID;
-  bool hasID(void) const { return ID >= 0; }
-  void assignID(int no) { ID = no; }
-};
-
-enum class RSAllocAccessKind { GEA, SEA, DIMX };
-
-struct RSAllocationCallInfo {
-  RSAllocationInfo &RSAlloc;
-  llvm::CallInst *FCall;
-  RSAllocAccessKind Kind;
-  std::string RSElementTy;
-};
-
-bool isRSAllocation(const llvm::GlobalVariable &GV);
-bool getRSAllocationInfo(llvm::Module &M,
-                         llvm::SmallVectorImpl<RSAllocationInfo> &Allocs);
-bool getRSAllocAccesses(llvm::SmallVectorImpl<RSAllocationInfo> &Allocs,
-                        llvm::SmallVectorImpl<RSAllocationCallInfo> &Calls);
-bool solidifyRSAllocAccess(llvm::Module &M, RSAllocationCallInfo CallInfo);
-
-} // namespace rs2spirv
-
-#endif
diff --git a/rsov/compiler/RSSPIRVWriter.cpp b/rsov/compiler/RSSPIRVWriter.cpp
deleted file mode 100644
index e95db6b..0000000
--- a/rsov/compiler/RSSPIRVWriter.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright 2016, The Android Open Source Project
- *
- * 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.
- */
-
-#include "RSSPIRVWriter.h"
-
-#include "Builtin.h"
-#include "Context.h"
-#include "GlobalAllocPass.h"
-#include "GlobalAllocSPIRITPass.h"
-#include "GlobalMergePass.h"
-#include "InlinePreparationPass.h"
-#include "RemoveNonkernelsPass.h"
-#include "SPIRVModule.h"
-#include "Wrapper.h"
-#include "bcinfo/MetadataExtractor.h"
-#include "pass_queue.h"
-
-#include "llvm/ADT/Triple.h"
-#include "llvm/IR/LegacyPassManager.h"
-#include "llvm/IR/Module.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/SPIRV.h"
-#include "llvm/Support/raw_ostream.h"
-#include "llvm/Transforms/IPO.h"
-#include "llvm/Transforms/Scalar.h"
-
-#define DEBUG_TYPE "rs2spirv-writer"
-
-using namespace llvm;
-using namespace SPIRV;
-
-namespace rs2spirv {
-
-void addPassesForRS2SPIRV(llvm::legacy::PassManager &PassMgr) {
-  PassMgr.add(createGlobalMergePass());
-
-  PassMgr.add(createInlinePreparationPass());
-  PassMgr.add(createAlwaysInlinerPass());
-  PassMgr.add(createRemoveNonkernelsPass());
-  // Delete unreachable globals.
-  PassMgr.add(createGlobalDCEPass());
-  // Remove dead debug info.
-  PassMgr.add(createStripDeadDebugInfoPass());
-  // Remove dead func decls.
-  PassMgr.add(createStripDeadPrototypesPass());
-  // Transform global allocations and accessors (rs[GS]etElementAt)
-  PassMgr.add(createGlobalAllocPass());
-  // Removed dead MemCpys in 64-bit targets after global alloc pass
-  PassMgr.add(createDeadStoreEliminationPass());
-  PassMgr.add(createAggressiveDCEPass());
-  // Delete unreachable globals (after removing global allocations)
-  PassMgr.add(createRemoveAllGlobalAllocPass());
-  PassMgr.add(createPromoteMemoryToRegisterPass());
-  PassMgr.add(createTransOCLMD());
-  // TODO: investigate removal of OCLTypeToSPIRV pass.
-  PassMgr.add(createOCLTypeToSPIRV());
-  PassMgr.add(createSPIRVRegularizeLLVM());
-  PassMgr.add(createSPIRVLowerConstExpr());
-  PassMgr.add(createSPIRVLowerBool());
-}
-
-bool WriteSPIRV(Context &Ctxt, Module *M,
-                llvm::raw_ostream &OS, std::string &ErrMsg) {
-  llvm::legacy::PassManager PassMgr;
-  addPassesForRS2SPIRV(PassMgr);
-
-  std::unique_ptr<SPIRVModule> BM(SPIRVModule::createSPIRVModule());
-
-  PassMgr.add(createLLVMToSPIRV(BM.get()));
-  PassMgr.run(*M);
-  DEBUG(M->dump());
-
-  if (BM->getError(ErrMsg) != SPIRVEC_Success) {
-    return false;
-  }
-
-  llvm::SmallString<4096> O;
-  llvm::raw_svector_ostream SVOS(O);
-
-  SVOS << *BM;
-
-  llvm::StringRef str = SVOS.str();
-  std::vector<uint32_t> words(str.size() / 4);
-
-  memcpy(words.data(), str.data(), str.size());
-
-  android::spirit::PassQueue spiritPasses;
-  spiritPasses.append(CreateWrapperPass(*M));
-  spiritPasses.append(CreateBuiltinPass());
-  spiritPasses.append(CreateGAPass());
-
-  int error;
-  auto wordsOut = spiritPasses.run(words, &error);
-
-  if (error != 0) {
-    OS << *BM;
-    ErrMsg = "Failed to generate wrappers for kernels";
-    return false;
-  }
-
-  OS.write(reinterpret_cast<const char *>(wordsOut.data()),
-           wordsOut.size() * 4);
-
-  return true;
-}
-
-} // namespace rs2spirv
diff --git a/rsov/compiler/RSSPIRVWriter.h b/rsov/compiler/RSSPIRVWriter.h
deleted file mode 100644
index f2689fc..0000000
--- a/rsov/compiler/RSSPIRVWriter.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2016, The Android Open Source Project
- *
- * 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 RS_SPIRV_WRITER_H
-#define RS_SPIRV_WRITER_H
-
-#include <string>
-
-namespace llvm {
-class Module;
-class raw_ostream;
-} // namespace llvm
-
-namespace bcinfo {
-class MetadataExtractor;
-} // namespace bcinfo
-
-namespace rs2spirv {
-
-class Context;
-
-bool WriteSPIRV(rs2spirv::Context &Ctxt, llvm::Module *M,
-                llvm::raw_ostream &OS, std::string &ErrMsg);
-
-} // namespace rs2spirv
-
-#endif
diff --git a/rsov/compiler/RemoveNonkernelsPass.cpp b/rsov/compiler/RemoveNonkernelsPass.cpp
deleted file mode 100644
index 82d2a30..0000000
--- a/rsov/compiler/RemoveNonkernelsPass.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "RemoveNonkernelsPass.h"
-
-#include "llvm/ADT/Triple.h"
-#include "llvm/IR/Constants.h"
-#include "llvm/IR/Module.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include "Context.h"
-
-#define DEBUG_TYPE "rs2spirv-remove"
-
-using namespace llvm;
-
-namespace rs2spirv {
-
-namespace {
-
-void HandleTargetTriple(llvm::Module &M) {
-  Triple TT(M.getTargetTriple());
-  auto Arch = TT.getArch();
-
-  StringRef NewTriple;
-  switch (Arch) {
-  default:
-    llvm_unreachable("Unrecognized architecture");
-    break;
-  case Triple::arm:
-    NewTriple = "spir-unknown-unknown";
-    break;
-  case Triple::aarch64:
-    NewTriple = "spir64-unknown-unknown";
-    break;
-  case Triple::spir:
-  case Triple::spir64:
-    DEBUG(dbgs() << "!!! Already a spir triple !!!\n");
-  }
-
-  DEBUG(dbgs() << "New triple:\t" << NewTriple << "\n");
-  M.setTargetTriple(NewTriple);
-}
-
-class RemoveNonkernelsPass : public ModulePass {
-public:
-  static char ID;
-  explicit RemoveNonkernelsPass() : ModulePass(ID) {}
-
-  const char *getPassName() const override { return "RemoveNonkernelsPass"; }
-
-  bool runOnModule(Module &M) override {
-    DEBUG(dbgs() << "RemoveNonkernelsPass\n");
-    DEBUG(M.dump());
-
-    HandleTargetTriple(M);
-
-    rs2spirv::Context &Ctxt = rs2spirv::Context::getInstance();
-
-    if (Ctxt.getNumForEachKernel() == 0) {
-      DEBUG(dbgs() << "RemoveNonkernelsPass detected no kernel\n");
-      // Returns false, since no modification is made to the Module.
-      return false;
-    }
-
-    std::vector<Function *> Functions;
-    for (auto &F : M.functions()) {
-      Functions.push_back(&F);
-    }
-
-    for (auto &F : Functions) {
-      if (F->isDeclaration())
-        continue;
-
-      if (Ctxt.isForEachKernel(F->getName())) {
-        continue; // Skip kernels.
-      }
-
-      F->replaceAllUsesWith(UndefValue::get((Type *)F->getType()));
-      F->eraseFromParent();
-
-      DEBUG(dbgs() << "Removed:\t" << F->getName() << '\n');
-    }
-
-    DEBUG(M.dump());
-    DEBUG(dbgs() << "Done removal\n");
-
-    // Returns true, because the pass modifies the Module.
-    return true;
-  }
-};
-
-} // namespace
-
-char RemoveNonkernelsPass::ID = 0;
-
-ModulePass *createRemoveNonkernelsPass() {
-  return new RemoveNonkernelsPass();
-}
-
-} // namespace rs2spirv
diff --git a/rsov/compiler/RemoveNonkernelsPass.h b/rsov/compiler/RemoveNonkernelsPass.h
deleted file mode 100644
index eed2dc8..0000000
--- a/rsov/compiler/RemoveNonkernelsPass.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 RS2SPIRV_REMOVE_NONKERNELS_PASS_H
-#define RS2SPIRV_REMOVE_NONKERNELS_PASS_H
-
-namespace llvm {
-class ModulePass;
-} // namespace llvm
-
-namespace rs2spirv {
-
-llvm::ModulePass *createRemoveNonkernelsPass();
-
-} // namespace rs2spirv
-
-#endif
diff --git a/rsov/compiler/Wrapper.cpp b/rsov/compiler/Wrapper.cpp
deleted file mode 100644
index 550cc46..0000000
--- a/rsov/compiler/Wrapper.cpp
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "Wrapper.h"
-
-#include "llvm/IR/Module.h"
-
-#include "Builtin.h"
-#include "Context.h"
-#include "GlobalAllocSPIRITPass.h"
-#include "RSAllocationUtils.h"
-#include "bcinfo/MetadataExtractor.h"
-#include "builder.h"
-#include "instructions.h"
-#include "module.h"
-#include "pass.h"
-
-#include <sstream>
-#include <vector>
-
-using bcinfo::MetadataExtractor;
-
-namespace android {
-namespace spirit {
-
-VariableInst *AddBuffer(Instruction *elementType, uint32_t binding, Builder &b,
-                        Module *m) {
-  auto ArrTy = m->getRuntimeArrayType(elementType);
-  const size_t stride = m->getSize(elementType);
-  ArrTy->decorate(Decoration::ArrayStride)->addExtraOperand(stride);
-  auto StructTy = m->getStructType(ArrTy);
-  StructTy->decorate(Decoration::BufferBlock);
-  StructTy->memberDecorate(0, Decoration::Offset)->addExtraOperand(0);
-
-  auto StructPtrTy = m->getPointerType(StorageClass::Uniform, StructTy);
-
-  VariableInst *bufferVar = b.MakeVariable(StructPtrTy, StorageClass::Uniform);
-  bufferVar->decorate(Decoration::DescriptorSet)->addExtraOperand(0);
-  bufferVar->decorate(Decoration::Binding)->addExtraOperand(binding);
-  m->addVariable(bufferVar);
-
-  return bufferVar;
-}
-
-bool AddWrapper(const char *name, const uint32_t signature,
-                const uint32_t numInput, Builder &b, Module *m) {
-  FunctionDefinition *kernel = m->lookupFunctionDefinitionByName(name);
-  if (kernel == nullptr) {
-    // In the metadata for RenderScript LLVM bitcode, the first foreach kernel
-    // is always reserved for the root kernel, even though in the most recent RS
-    // apps it does not exist. Simply bypass wrapper generation here, and return
-    // true for this case.
-    // Otherwise, if a non-root kernel function cannot be found, it is a
-    // fatal internal error which is really unexpected.
-    return (strncmp(name, "root", 4) == 0);
-  }
-
-  // The following three cases are not supported
-  if (!MetadataExtractor::hasForEachSignatureKernel(signature)) {
-    // Not handling old-style kernel
-    return false;
-  }
-
-  if (MetadataExtractor::hasForEachSignatureUsrData(signature)) {
-    // Not handling the user argument
-    return false;
-  }
-
-  if (MetadataExtractor::hasForEachSignatureCtxt(signature)) {
-    // Not handling the context argument
-    return false;
-  }
-
-  TypeVoidInst *VoidTy = m->getVoidType();
-  TypeFunctionInst *FuncTy = m->getFunctionType(VoidTy, nullptr, 0);
-  FunctionDefinition *Func =
-      b.MakeFunctionDefinition(VoidTy, FunctionControl::None, FuncTy);
-  m->addFunctionDefinition(Func);
-
-  Block *Blk = b.MakeBlock();
-  Func->addBlock(Blk);
-
-  Blk->addInstruction(b.MakeLabel());
-
-  TypeIntInst *UIntTy = m->getUnsignedIntType(32);
-
-  Instruction *XValue = nullptr;
-  Instruction *YValue = nullptr;
-  Instruction *ZValue = nullptr;
-  Instruction *Index = nullptr;
-  VariableInst *InvocationId = nullptr;
-  VariableInst *NumWorkgroups = nullptr;
-
-  if (MetadataExtractor::hasForEachSignatureIn(signature) ||
-      MetadataExtractor::hasForEachSignatureOut(signature) ||
-      MetadataExtractor::hasForEachSignatureX(signature) ||
-      MetadataExtractor::hasForEachSignatureY(signature) ||
-      MetadataExtractor::hasForEachSignatureZ(signature)) {
-    TypeVectorInst *V3UIntTy = m->getVectorType(UIntTy, 3);
-    InvocationId = m->getInvocationId();
-    auto IID = b.MakeLoad(V3UIntTy, InvocationId);
-    Blk->addInstruction(IID);
-
-    XValue = b.MakeCompositeExtract(UIntTy, IID, {0});
-    Blk->addInstruction(XValue);
-
-    YValue = b.MakeCompositeExtract(UIntTy, IID, {1});
-    Blk->addInstruction(YValue);
-
-    ZValue = b.MakeCompositeExtract(UIntTy, IID, {2});
-    Blk->addInstruction(ZValue);
-
-    // TODO: Use SpecConstant for workgroup size
-    auto ConstOne = m->getConstant(UIntTy, 1U);
-    auto GroupSize =
-        m->getConstantComposite(V3UIntTy, ConstOne, ConstOne, ConstOne);
-
-    auto GroupSizeX = b.MakeCompositeExtract(UIntTy, GroupSize, {0});
-    Blk->addInstruction(GroupSizeX);
-
-    auto GroupSizeY = b.MakeCompositeExtract(UIntTy, GroupSize, {1});
-    Blk->addInstruction(GroupSizeY);
-
-    NumWorkgroups = m->getNumWorkgroups();
-    auto NumGroup = b.MakeLoad(V3UIntTy, NumWorkgroups);
-    Blk->addInstruction(NumGroup);
-
-    auto NumGroupX = b.MakeCompositeExtract(UIntTy, NumGroup, {0});
-    Blk->addInstruction(NumGroupX);
-
-    auto NumGroupY = b.MakeCompositeExtract(UIntTy, NumGroup, {1});
-    Blk->addInstruction(NumGroupY);
-
-    auto GlobalSizeX = b.MakeIMul(UIntTy, GroupSizeX, NumGroupX);
-    Blk->addInstruction(GlobalSizeX);
-
-    auto GlobalSizeY = b.MakeIMul(UIntTy, GroupSizeY, NumGroupY);
-    Blk->addInstruction(GlobalSizeY);
-
-    auto RowsAlongZ = b.MakeIMul(UIntTy, GlobalSizeY, ZValue);
-    Blk->addInstruction(RowsAlongZ);
-
-    auto NumRows = b.MakeIAdd(UIntTy, YValue, RowsAlongZ);
-    Blk->addInstruction(NumRows);
-
-    auto NumCellsFromYZ = b.MakeIMul(UIntTy, GlobalSizeX, NumRows);
-    Blk->addInstruction(NumCellsFromYZ);
-
-    Index = b.MakeIAdd(UIntTy, NumCellsFromYZ, XValue);
-    Blk->addInstruction(Index);
-  }
-
-  std::vector<IdRef> inputs;
-
-  ConstantInst *ConstZero = m->getConstant(UIntTy, 0);
-
-  for (uint32_t i = 0; i < numInput; i++) {
-    FunctionParameterInst *param = kernel->getParameter(i);
-    Instruction *elementType = param->mResultType.mInstruction;
-    VariableInst *inputBuffer = AddBuffer(elementType, i + 3, b, m);
-
-    TypePointerInst *PtrTy =
-        m->getPointerType(StorageClass::Function, elementType);
-    AccessChainInst *Ptr =
-        b.MakeAccessChain(PtrTy, inputBuffer, {ConstZero, Index});
-    Blk->addInstruction(Ptr);
-
-    Instruction *input = b.MakeLoad(elementType, Ptr);
-    Blk->addInstruction(input);
-
-    inputs.push_back(IdRef(input));
-  }
-
-  // TODO: Convert from unsigned int to signed int if that is what the kernel
-  // function takes for the coordinate parameters
-  if (MetadataExtractor::hasForEachSignatureX(signature)) {
-    inputs.push_back(XValue);
-    if (MetadataExtractor::hasForEachSignatureY(signature)) {
-      inputs.push_back(YValue);
-      if (MetadataExtractor::hasForEachSignatureZ(signature)) {
-        inputs.push_back(ZValue);
-      }
-    }
-  }
-
-  auto resultType = kernel->getReturnType();
-  auto kernelCall =
-      b.MakeFunctionCall(resultType, kernel->getInstruction(), inputs);
-  Blk->addInstruction(kernelCall);
-
-  if (MetadataExtractor::hasForEachSignatureOut(signature)) {
-    VariableInst *OutputBuffer = AddBuffer(resultType, 2, b, m);
-    auto resultPtrType = m->getPointerType(StorageClass::Function, resultType);
-    AccessChainInst *OutPtr =
-        b.MakeAccessChain(resultPtrType, OutputBuffer, {ConstZero, Index});
-    Blk->addInstruction(OutPtr);
-    Blk->addInstruction(b.MakeStore(OutPtr, kernelCall));
-  }
-
-  Blk->addInstruction(b.MakeReturn());
-
-  std::string wrapperName("entry_");
-  wrapperName.append(name);
-
-  EntryPointDefinition *entry = b.MakeEntryPointDefinition(
-      ExecutionModel::GLCompute, Func, wrapperName.c_str());
-
-  entry->setLocalSize(1, 1, 1);
-
-  if (Index != nullptr) {
-    entry->addToInterface(InvocationId);
-    entry->addToInterface(NumWorkgroups);
-  }
-
-  m->addEntryPoint(entry);
-
-  return true;
-}
-
-bool DecorateGlobalBuffer(llvm::Module &LM, Builder &b, Module *m) {
-  Instruction *inst = m->lookupByName("__GPUBlock");
-  if (inst == nullptr) {
-    return true;
-  }
-
-  VariableInst *bufferVar = static_cast<VariableInst *>(inst);
-  bufferVar->decorate(Decoration::DescriptorSet)->addExtraOperand(0);
-  bufferVar->decorate(Decoration::Binding)->addExtraOperand(0);
-
-  TypePointerInst *StructPtrTy =
-      static_cast<TypePointerInst *>(bufferVar->mResultType.mInstruction);
-  TypeStructInst *StructTy =
-      static_cast<TypeStructInst *>(StructPtrTy->mOperand2.mInstruction);
-  StructTy->decorate(Decoration::BufferBlock);
-
-  // Decorate each member with proper offsets
-
-  const auto GlobalsB = LM.globals().begin();
-  const auto GlobalsE = LM.globals().end();
-  const auto Found =
-      std::find_if(GlobalsB, GlobalsE, [](const llvm::GlobalVariable &GV) {
-        return GV.getName() == "__GPUBlock";
-      });
-
-  if (Found == GlobalsE) {
-    return true; // GPUBlock not found - not an error by itself.
-  }
-
-  const llvm::GlobalVariable &G = *Found;
-
-  rs2spirv::Context &Ctxt = rs2spirv::Context::getInstance();
-  bool IsCorrectTy = false;
-  if (const auto *LPtrTy = llvm::dyn_cast<llvm::PointerType>(G.getType())) {
-    if (auto *LStructTy =
-            llvm::dyn_cast<llvm::StructType>(LPtrTy->getElementType())) {
-      IsCorrectTy = true;
-
-      const auto &DLayout = LM.getDataLayout();
-      const auto *SLayout = DLayout.getStructLayout(LStructTy);
-      assert(SLayout);
-      if (SLayout == nullptr) {
-        std::cerr << "struct layout is null" << std::endl;
-        return false;
-      }
-      std::vector<uint32_t> offsets;
-      for (uint32_t i = 0, e = LStructTy->getNumElements(); i != e; ++i) {
-        auto decor = StructTy->memberDecorate(i, Decoration::Offset);
-        if (!decor) {
-          std::cerr << "failed creating member decoration for field " << i
-                    << std::endl;
-          return false;
-        }
-        const uint32_t offset = (uint32_t)SLayout->getElementOffset(i);
-        decor->addExtraOperand(offset);
-        offsets.push_back(offset);
-      }
-      std::stringstream ssOffsets;
-      // TODO: define this string in a central place
-      ssOffsets << ".rsov.ExportedVars:";
-      for(uint32_t slot = 0; slot < Ctxt.getNumExportVar(); slot++) {
-        const uint32_t index = Ctxt.getExportVarIndex(slot);
-        const uint32_t offset = offsets[index];
-        ssOffsets << offset << ';';
-      }
-      m->addString(ssOffsets.str().c_str());
-
-      std::stringstream ssGlobalSize;
-      ssGlobalSize << ".rsov.GlobalSize:" << Ctxt.getGlobalSize();
-      m->addString(ssGlobalSize.str().c_str());
-    }
-  }
-
-  if (!IsCorrectTy) {
-    return false;
-  }
-
-  llvm::SmallVector<rs2spirv::RSAllocationInfo, 2> RSAllocs;
-  if (!getRSAllocationInfo(LM, RSAllocs)) {
-    // llvm::errs() << "Extracting rs_allocation info failed\n";
-    return true;
-  }
-
-  // TODO: clean up the binding number assignment
-  size_t BindingNum = 3;
-  for (const auto &A : RSAllocs) {
-    Instruction *inst = m->lookupByName(A.VarName.c_str());
-    if (inst == nullptr) {
-      return false;
-    }
-    VariableInst *bufferVar = static_cast<VariableInst *>(inst);
-    bufferVar->decorate(Decoration::DescriptorSet)->addExtraOperand(0);
-    bufferVar->decorate(Decoration::Binding)->addExtraOperand(BindingNum++);
-  }
-
-  return true;
-}
-
-void AddHeader(Module *m) {
-  m->addCapability(Capability::Shader);
-  m->setMemoryModel(AddressingModel::Logical, MemoryModel::GLSL450);
-
-  m->addSource(SourceLanguage::GLSL, 450);
-  m->addSourceExtension("GL_ARB_separate_shader_objects");
-  m->addSourceExtension("GL_ARB_shading_language_420pack");
-  m->addSourceExtension("GL_GOOGLE_cpp_style_line_directive");
-  m->addSourceExtension("GL_GOOGLE_include_directive");
-}
-
-namespace {
-
-class StorageClassVisitor : public DoNothingVisitor {
-public:
-  void visit(TypePointerInst *inst) override {
-    matchAndReplace(inst->mOperand1);
-  }
-
-  void visit(TypeForwardPointerInst *inst) override {
-    matchAndReplace(inst->mOperand2);
-  }
-
-  void visit(VariableInst *inst) override { matchAndReplace(inst->mOperand1); }
-
-private:
-  void matchAndReplace(StorageClass &storage) {
-    if (storage == StorageClass::Function) {
-      storage = StorageClass::Uniform;
-    }
-  }
-};
-
-void FixGlobalStorageClass(Module *m) {
-  StorageClassVisitor v;
-  m->getGlobalSection()->accept(&v);
-}
-
-} // anonymous namespace
-
-bool AddWrappers(llvm::Module &LM,
-                 android::spirit::Module *m) {
-  rs2spirv::Context &Ctxt = rs2spirv::Context::getInstance();
-  const bcinfo::MetadataExtractor &metadata = Ctxt.getMetadata();
-  android::spirit::Builder b;
-
-  m->setBuilder(&b);
-
-  FixGlobalStorageClass(m);
-
-  AddHeader(m);
-
-  DecorateGlobalBuffer(LM, b, m);
-
-  const size_t numKernel = metadata.getExportForEachSignatureCount();
-  const char **kernelName = metadata.getExportForEachNameList();
-  const uint32_t *kernelSigature = metadata.getExportForEachSignatureList();
-  const uint32_t *inputCount = metadata.getExportForEachInputCountList();
-
-  for (size_t i = 0; i < numKernel; i++) {
-    bool success =
-        AddWrapper(kernelName[i], kernelSigature[i], inputCount[i], b, m);
-    if (!success) {
-      return false;
-    }
-  }
-
-  m->consolidateAnnotations();
-  return true;
-}
-
-class WrapperPass : public Pass {
-public:
-  WrapperPass(const llvm::Module &LM) : mLLVMModule(const_cast<llvm::Module&>(LM)) {}
-
-  Module *run(Module *m, int *error) override {
-    bool success = AddWrappers(mLLVMModule, m);
-    if (error) {
-      *error = success ? 0 : -1;
-    }
-    return m;
-  }
-
-private:
-  llvm::Module &mLLVMModule;
-};
-
-} // namespace spirit
-} // namespace android
-
-namespace rs2spirv {
-
-android::spirit::Pass* CreateWrapperPass(const llvm::Module &LLVMModule) {
-  return new android::spirit::WrapperPass(LLVMModule);
-}
-
-} // namespace rs2spirv
diff --git a/rsov/compiler/Wrapper.h b/rsov/compiler/Wrapper.h
deleted file mode 100644
index 27aaee8..0000000
--- a/rsov/compiler/Wrapper.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 WRAPPER_H
-#define WRAPPER_H
-
-#include <stdint.h>
-
-namespace llvm {
-class Module;
-}
-
-namespace android {
-namespace spirit {
-
-class Builder;
-class Instruction;
-class Module;
-class Pass;
-class VariableInst;
-
-// TODO: avoid exposing these methods while still unit testing them
-void AddHeader(Module *m);
-VariableInst *AddBuffer(Instruction *elementType, uint32_t binding, Builder &b,
-                        Module *m);
-
-bool AddWrapper(const char *name, const uint32_t signature,
-                const uint32_t numInput, Builder &b, Module *m);
-
-// Find the LLVM generated buffer for all non-allocation glboal variables, and
-// correctly decorate it and its type with annotations for binding numbers, etc.
-bool DecorateGlobalBuffer(llvm::Module &M, Builder &b, Module *m);
-
-} // namespace spirit
-} // namespace android
-
-namespace rs2spirv {
-
-android::spirit::Pass* CreateWrapperPass(const llvm::Module &LLVMModule);
-
-} // namespace rs2spirv
-
-#endif
diff --git a/rsov/compiler/Wrapper_test.cpp b/rsov/compiler/Wrapper_test.cpp
deleted file mode 100644
index 1be643a..0000000
--- a/rsov/compiler/Wrapper_test.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "Wrapper.h"
-#include "bcinfo/MetadataExtractor.h"
-#include "builder.h"
-#include "file_utils.h"
-#include "instructions.h"
-#include "module.h"
-#include "test_utils.h"
-#include "gtest/gtest.h"
-
-namespace android {
-namespace spirit {
-
-class WrapperTest : public ::testing::Test {
-protected:
-  virtual void SetUp() {
-    mWordsGreyscale = readWords("greyscale.spv");
-    mWordsGreyscale2 = readWords("greyscale2.spv");
-    mWordsInvert = readWords("invert.spv");
-  }
-
-  std::vector<uint32_t> mWordsGreyscale;
-  std::vector<uint32_t> mWordsGreyscale2;
-  std::vector<uint32_t> mWordsInvert;
-
-private:
-  std::vector<uint32_t> readWords(const char *testFile) {
-    static const std::string testDataPath(
-        "frameworks/rs/rsov/compiler/spirit/test_data/");
-    const std::string &fullPath = getAbsolutePath(testDataPath + testFile);
-    return readFile<uint32_t>(fullPath);
-  }
-};
-
-TEST_F(WrapperTest, testAddBuffer) {
-  Builder b;
-  Module m(&b);
-  auto elemType = m.getIntType(32);
-  VariableInst *buffer = AddBuffer(elemType, 2, b, &m);
-  ASSERT_NE(nullptr, buffer);
-
-  GlobalSection *gs = m.getGlobalSection();
-
-  EXPECT_EQ(1, countEntity<TypeRuntimeArrayInst>(gs));
-  EXPECT_EQ(1, countEntity<TypeStructInst>(gs));
-  EXPECT_EQ(1, countEntity<VariableInst>(gs));
-}
-
-TEST_F(WrapperTest, testAddWrapper1) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m);
-
-  m->resolveIds();
-
-  Builder b;
-  m->setBuilder(&b);
-
-  constexpr uint32_t sig =
-      bcinfo::MD_SIG_Kernel | bcinfo::MD_SIG_In | bcinfo::MD_SIG_Out;
-
-  EXPECT_FALSE(AddWrapper("foo", sig, 1, b, m.get()));
-
-  EXPECT_TRUE(AddWrapper("greyscale(vf4;", sig, 1, b, m.get()));
-
-  // The input already has an entry point
-  EXPECT_EQ(2, countEntity<EntryPointDefinition>(m.get()));
-}
-
-TEST_F(WrapperTest, testAddWrapper2) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsInvert));
-
-  ASSERT_NE(nullptr, m);
-
-  m->resolveIds();
-
-  Builder b;
-  m->setBuilder(&b);
-
-  uint32_t sig = bcinfo::MD_SIG_Kernel | bcinfo::MD_SIG_In | bcinfo::MD_SIG_Out;
-
-  EXPECT_FALSE(AddWrapper("foo", sig, 1, b, m.get()));
-
-  ASSERT_TRUE(AddWrapper("invert", sig, 1, b, m.get()));
-
-  EXPECT_EQ(1, countEntity<EntryPointDefinition>(m.get()));
-}
-
-TEST_F(WrapperTest, testAddWrapperForRoot) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsInvert));
-
-  ASSERT_NE(nullptr, m);
-
-  Builder b;
-  m->setBuilder(&b);
-
-  bool success = AddWrapper("root", 0, 1, b, m.get());
-  ASSERT_TRUE(success);
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/bcc_rsov.sh b/rsov/compiler/bcc_rsov.sh
deleted file mode 100755
index c09ad57..0000000
--- a/rsov/compiler/bcc_rsov.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#! /system/bin/sh
-#
-# Copyright 2016, The Android Open Source Project
-#
-# 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.
-#
-
-function help() {
-    echo "USAGE: $0 [options] <input>"
-    echo
-    echo "OPTIONS:"
-    echo "  -h        Show this help message."
-    echo "  -o <file> Write output to file."
-}
-
-OUTPUT_FILE=""
-
-while getopts "ho:" opt; do
-    case "$opt" in
-        h)
-            help
-            exit 0
-            ;;
-        o)
-            OUTPUT_FILE=$OPTARG
-            ;;
-    esac
-done
-
-shift $((OPTIND-1))
-
-if [[ "$#" -ne 1 ]]; then
-  help
-  exit -1
-fi
-
-INPUT_FILE=$1
-
-if [[ -z "$OUTPUT_FILE" ]]; then
-    OUTPUT_FILE="${INPUT_FILE%.*}.spv"
-fi
-
-eval rs2spirv $INPUT_FILE -o $OUTPUT_FILE
-
-#rm -f $INPUT_FILE $KERNEL $KERNEL_TXT $WRAPPER $OUTPUT_TXT
-
-exit $?
diff --git a/rsov/compiler/rs2spirv.cpp b/rsov/compiler/rs2spirv.cpp
deleted file mode 100644
index 059f59b..0000000
--- a/rsov/compiler/rs2spirv.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2016, The Android Open Source Project
- *
- * 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.
- */
-
-#include "RSSPIRVWriter.h"
-#include "bcinfo/MetadataExtractor.h"
-#include "spirit/file_utils.h"
-
-#include "llvm/Bitcode/ReaderWriter.h"
-#include "llvm/IR/LegacyPassManager.h"
-#include "llvm/IR/LLVMContext.h"
-#include "llvm/IR/Module.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/Support/DataStream.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/FileSystem.h"
-#include "llvm/Support/PrettyStackTrace.h"
-#include "llvm/Support/Signals.h"
-#include "llvm/Support/ToolOutputFile.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include "Context.h"
-#include "GlobalMergePass.h"
-#include "RSSPIRVWriter.h"
-
-#define DEBUG_TYPE "rs2spirv"
-
-namespace kExt {
-const char SPIRVBinary[] = ".spv";
-} // namespace kExt
-
-using namespace llvm;
-
-static cl::opt<std::string> InputFile(cl::Positional, cl::desc("<input file>"),
-                                      cl::init("-"));
-
-static cl::opt<std::string> OutputFile("o",
-                                       cl::desc("Override output filename"),
-                                       cl::value_desc("filename"));
-
-static cl::opt<std::string> OutputBitcodeFile("bc",
-                                              cl::desc("Override output bitcode filename"),
-                                              cl::value_desc("bitcode filename"));
-
-static std::string removeExt(const std::string &FileName) {
-  size_t Pos = FileName.find_last_of(".");
-  if (Pos != std::string::npos)
-    return FileName.substr(0, Pos);
-  return FileName;
-}
-
-static bool WriteBitcode(rs2spirv::Context &Ctxt, Module *M,
-                         raw_ostream &OS, std::string &ErrMsg) {
-  llvm::legacy::PassManager PassMgr;
-  PassMgr.add(rs2spirv::createGlobalMergePass(true));
-  PassMgr.run(*M);
-
-  WriteBitcodeToFile(M, OS);
-
-  return true;
-}
-
-static int convertLLVMToSPIRV() {
-  LLVMContext Context;
-
-  std::string Err;
-  auto DS = getDataFileStreamer(InputFile, &Err);
-  if (!DS) {
-    errs() << "Fails to open input file: " << Err;
-    return -1;
-  }
-  ErrorOr<std::unique_ptr<Module>> MOrErr =
-      getStreamedBitcodeModule(InputFile, std::move(DS), Context);
-
-  if (std::error_code EC = MOrErr.getError()) {
-    errs() << "Fails to load bitcode: " << EC.message();
-    return -1;
-  }
-
-  std::unique_ptr<Module> M = std::move(*MOrErr);
-
-  if (std::error_code EC = M->materializeAll()) {
-    errs() << "Fails to materialize: " << EC.message();
-    return -1;
-  }
-
-  std::error_code EC;
-
-  std::vector<char> bitcode = android::spirit::readFile<char>(InputFile);
-  std::unique_ptr<bcinfo::MetadataExtractor> ME(
-      new bcinfo::MetadataExtractor(bitcode.data(), bitcode.size()));
-
-  rs2spirv::Context &Ctxt = rs2spirv::Context::getInstance();
-
-  if (!Ctxt.Initialize(std::move(ME))) {
-    return -2;
-  }
-
-  if (!OutputBitcodeFile.empty()) {
-    llvm::StringRef outBCFile(OutputBitcodeFile);
-    llvm::raw_fd_ostream OFS_BC(outBCFile, EC, llvm::sys::fs::F_None);
-    if (!WriteBitcode(Ctxt, M.get(), OFS_BC, Err)) {
-      errs() << "compiler error: " << Err << '\n';
-      return -3;
-    }
-    return 0;
-  }
-
-  if (OutputFile.empty()) {
-    if (InputFile == "-")
-      OutputFile = "-";
-    else
-      OutputFile = removeExt(InputFile) + kExt::SPIRVBinary;
-  }
-
-  llvm::StringRef outFile(OutputFile);
-  llvm::raw_fd_ostream OFS(outFile, EC, llvm::sys::fs::F_None);
-
-  if (!rs2spirv::WriteSPIRV(Ctxt, M.get(), OFS, Err)) {
-    errs() << "compiler error: " << Err << '\n';
-    return -4;
-  }
-
-  return 0;
-}
-
-int main(int ac, char **av) {
-  EnablePrettyStackTrace();
-  sys::PrintStackTraceOnErrorSignal(av[0]);
-  PrettyStackTraceProgram X(ac, av);
-
-  cl::ParseCommandLineOptions(ac, av, "RenderScript to SPIRV translator");
-
-  return convertLLVMToSPIRV();
-}
diff --git a/rsov/compiler/rs2spirv_driver.sh b/rsov/compiler/rs2spirv_driver.sh
deleted file mode 100755
index 7b3b63f..0000000
--- a/rsov/compiler/rs2spirv_driver.sh
+++ /dev/null
@@ -1,75 +0,0 @@
-# Copyright 2016, The Android Open Source Project
-#
-# 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.
-
-#!/bin/bash
-
-ME=$0
-
-function usage {
-  echo >&2 "$ME: $*: Expected [-d|--dump] [-t|--trace] <SPIRV_TOOLS_PATH> <SCRIPT_NAME> <OUTPUT_DIR>)"
-  exit 2
-}
-
-function dump {
-  if [[ -z "${DUMP:-}" ]] ; then
-    return 0
-  fi
-  eval rs2spirv "$output_folder/$script.spv" -print-as-words
-  return $?
-}
-
-DUMP=
-TRACE=
-
-while [[ "${1:-}" = -* ]] ; do
-  case "$1" in
-    -d|--dump)
-      DUMP=t
-      ;;
-    -t|--trace)
-      TRACE=t
-      ;;
-    *)
-      usage "Unexpected option \"$1\""
-      ;;
-  esac
-  shift
-done
-
-if [[ $# -ne 3 ]] ; then
-  usage "Bad argument count (got $#)"
-fi
-
-if [[ -n "${TRACE:-}" ]] ; then
-  set -x
-fi
-
-AND_HOME=$ANDROID_BUILD_TOP
-SPIRV_TOOLS_PATH=$1
-
-script_name="$2"
-script=`basename ${2%.*}` # Remove enclosing directories and extension.
-
-output_folder="$3"
-mkdir -p $output_folder
-
-eval llvm-rs-cc -o "$output_folder" -S -emit-llvm -Wall -Werror -target-api 24 \
-  -I "$AND_HOME/external/clang/lib/Headers" -I "$AND_HOME/frameworks/rs/script_api/include" \
-  "$script_name" &&
-eval llvm-as "$output_folder/bc32/$script.ll" -o "$output_folder/$script.bc" &&
-eval rs2spirv "$output_folder/$script.bc" -o "$output_folder/$script.spv" &&
-dump &&
-eval "$SPIRV_TOOLS_PATH/spirv-val" "$output_folder/$script.spv" &&
-
-exit $?
diff --git a/rsov/compiler/spirit/Android.bp b/rsov/compiler/spirit/Android.bp
deleted file mode 100644
index 043e851..0000000
--- a/rsov/compiler/spirit/Android.bp
+++ /dev/null
@@ -1,172 +0,0 @@
-//
-// Copyright (C) 2017 The Android Open Source Project
-//
-// 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.
-//
-
-cc_defaults {
-    name: "spirit_defaults",
-
-    cflags: [
-        "-Wall",
-        "-Werror",
-    ],
-    target: {
-        host: {
-            compile_multilib: "first",
-        },
-    },
-    product_variables: {
-        pdk: {
-            enabled: false,
-        },
-        unbundled_build: {
-            enabled: false,
-        },
-    },
-}
-
-python_binary_host {
-    name: "libspirit_generate_py",
-    main: "generate.py",
-    srcs: ["generate.py"],
-    version: {
-        py2: {
-            enabled: true,
-            embedded_launcher: true,
-        },
-        py3: {
-            enabled: false,
-        },
-    },
-}
-
-genrule {
-    name: "libspirit_gen",
-    tools: ["libspirit_generate_py"],
-    cmd: "$(location libspirit_generate_py) $(location :spirv.core.grammar.json-1.1) " +
-        "--instructions=$(location instructions_generated.h) " +
-        "--types=$(location types_generated.h) " +
-        "--opcodes=$(location opcodes_generated.h) " +
-        "--instruction_dispatches=$(location instruction_dispatches_generated.h) " +
-        "--enum_dispatches=$(location enum_dispatches_generated.h) " +
-        "--type_inst_dispatches=$(location type_inst_dispatches_generated.h) " +
-        "--const_inst_dispatches=$(location const_inst_dispatches_generated.h) " +
-        "--factory_methods=$(location factory_methods_generated.h)",
-    srcs: [":spirv.core.grammar.json-1.1"],
-    out: [
-        "instructions_generated.h",
-        "types_generated.h",
-        "opcodes_generated.h",
-        "instruction_dispatches_generated.h",
-        "enum_dispatches_generated.h",
-        "type_inst_dispatches_generated.h",
-        "const_inst_dispatches_generated.h",
-        "factory_methods_generated.h",
-    ],
-}
-
-//=====================================================================
-// Host and device shared library libspirit.so
-//=====================================================================
-cc_library_shared {
-    name: "libspirit",
-    defaults: ["spirit_defaults"],
-    host_supported: true,
-
-    srcs: [
-        "builder.cpp",
-        "entity.cpp",
-        "instructions.cpp",
-        "module.cpp",
-        "pass.cpp",
-        "pass_queue.cpp",
-        "transformer.cpp",
-        "visitor.cpp",
-        "word_stream.cpp",
-        "word_stream_impl.cpp",
-    ],
-
-    generated_headers: ["libspirit_gen"],
-    export_generated_headers: ["libspirit_gen"],
-
-    export_include_dirs: ["."],
-
-    target: {
-        android: {
-            cflags: ["-Wno-error=non-virtual-dtor"],
-        },
-    },
-}
-
-//=====================================================================
-// Tests for host module word_stream
-//=====================================================================
-cc_test_host {
-    name: "word_stream_test",
-    defaults: ["spirit_defaults"],
-    srcs: [
-        "word_stream.cpp",
-        "word_stream_impl.cpp",
-        "word_stream_test.cpp",
-    ],
-    generated_headers: ["libspirit_gen"],
-}
-
-//=====================================================================
-// Tests for host module instructions
-//=====================================================================
-
-cc_test_host {
-    name: "instructions_test",
-    defaults: ["spirit_defaults"],
-    srcs: [
-        "entity.cpp",
-        "instructions.cpp",
-        "instructions_test.cpp",
-        "visitor.cpp",
-        "word_stream.cpp",
-        "word_stream_impl.cpp",
-    ],
-    generated_headers: ["libspirit_gen"],
-}
-
-//=====================================================================
-// Tests for host module pass queue
-//=====================================================================
-
-cc_test_host {
-    name: "pass_queue_test",
-    defaults: ["spirit_defaults"],
-    srcs: [
-        "pass.cpp",
-        "pass_queue.cpp",
-        "pass_queue_test.cpp",
-    ],
-    shared_libs: ["libspirit"],
-}
-
-//=====================================================================
-// Tests for host shared library
-//=====================================================================
-
-cc_test_host {
-    name: "libspirit_test",
-    defaults: ["spirit_defaults"],
-    srcs: [
-        "builder_test.cpp",
-        "module_test.cpp",
-        "transformer_test.cpp",
-    ],
-    shared_libs: ["libspirit"],
-}
diff --git a/rsov/compiler/spirit/builder.cpp b/rsov/compiler/spirit/builder.cpp
deleted file mode 100644
index 140b554..0000000
--- a/rsov/compiler/spirit/builder.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "builder.h"
-
-#include "module.h"
-
-namespace android {
-namespace spirit {
-
-Module *Builder::MakeModule() {
-  Module *ret = new Module(this);
-  ret->initialize();
-  return ret;
-}
-
-EntryPointDefinition *
-Builder::MakeEntryPointDefinition(ExecutionModel execModel,
-                                  FunctionDefinition *func, const char *name) {
-  return new EntryPointDefinition(this, execModel, func, name);
-}
-
-DebugInfoSection *Builder::MakeDebugInfoSection() {
-  return new DebugInfoSection(this);
-}
-
-FunctionDefinition *
-Builder::MakeFunctionDefinition(Instruction *retType, FunctionControl ctrl,
-                                TypeFunctionInst *funcType) {
-  FunctionInst *func = MakeFunction(retType, ctrl, funcType);
-  FunctionEndInst *end = MakeFunctionEnd();
-  return new FunctionDefinition(this, func, end);
-}
-
-Block *Builder::MakeBlock() { return new Block(this); }
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/builder.h b/rsov/compiler/spirit/builder.h
deleted file mode 100644
index 816246d..0000000
--- a/rsov/compiler/spirit/builder.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 BUILDER_H
-#define BUILDER_H
-
-#include "instructions.h"
-#include "module.h"
-
-namespace android {
-namespace spirit {
-
-class Builder {
-public:
-  Module *MakeModule();
-  EntryPointDefinition *MakeEntryPointDefinition(ExecutionModel execModel,
-                                                 FunctionDefinition *func,
-                                                 const char *name);
-  DebugInfoSection *MakeDebugInfoSection();
-  FunctionDefinition *MakeFunctionDefinition(Instruction *retType,
-                                             FunctionControl ctrl,
-                                             TypeFunctionInst *funcType);
-  Block *MakeBlock();
-
-#include "factory_methods_generated.h"
-};
-
-} // namespace spirit
-} // namespace android
-
-#endif // BUILDER_H
diff --git a/rsov/compiler/spirit/builder_test.cpp b/rsov/compiler/spirit/builder_test.cpp
deleted file mode 100644
index 4f21310..0000000
--- a/rsov/compiler/spirit/builder_test.cpp
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "builder.h"
-
-#include "file_utils.h"
-#include "instructions.h"
-#include "module.h"
-#include "test_utils.h"
-#include "gtest/gtest.h"
-
-namespace android {
-namespace spirit {
-
-TEST(BuilderTest, testBuildAndSerialize) {
-  Builder b;
-
-  Module *m = b.MakeModule();
-
-  ASSERT_NE(nullptr, m);
-
-  m->addCapability(Capability::Shader);
-  m->addCapability(Capability::Addresses);
-  m->setMemoryModel(AddressingModel::Physical32, MemoryModel::GLSL450);
-
-  m->addExtInstImport("GLSL.std.450");
-
-  // Shall we explicitly create the debug info section first?
-  m->addSource(SourceLanguage::GLSL, 450);
-  m->addSourceExtension("GL_ARB_separate_shader_objects");
-  m->addSourceExtension("GL_ARB_shading_language_420pack");
-  m->addSourceExtension("GL_GOOGLE_cpp_style_line_directive");
-  m->addSourceExtension("GL_GOOGLE_include_directive");
-  m->addString("Foo Bar Baz");
-
-  auto FloatTy = m->getFloatType(32);
-  auto VF4Ty = m->getVectorType(FloatTy, 4);
-  auto ArrTy = m->getRuntimeArrayType(VF4Ty);
-  ArrTy->decorate(Decoration::ArrayStride)->addExtraOperand(16);
-  auto StructTy = m->getStructType(ArrTy);
-  StructTy->decorate(Decoration::BufferBlock);
-  StructTy->memberDecorate(0, Decoration::Offset)->addExtraOperand(0);
-
-  auto StructPtrTy = m->getPointerType(StorageClass::Uniform, StructTy);
-
-  auto InputBuffer = b.MakeVariable(StructPtrTy, StorageClass::Uniform);
-  InputBuffer->decorate(Decoration::DescriptorSet)->addExtraOperand(0);
-  InputBuffer->decorate(Decoration::Binding)->addExtraOperand(2);
-  m->addVariable(InputBuffer);
-
-  auto ArrTy2 = m->getRuntimeArrayType(VF4Ty);
-  ArrTy2->decorate(Decoration::ArrayStride)->addExtraOperand(16);
-
-  auto StructTy2 = m->getStructType(ArrTy2);
-  StructTy2->decorate(Decoration::BufferBlock);
-  StructTy2->memberDecorate(0, Decoration::Offset)->addExtraOperand(0);
-
-  auto StructPtrTy2 = m->getPointerType(StorageClass::Uniform, StructTy2);
-  auto OutputBuffer = b.MakeVariable(StructPtrTy2, StorageClass::Uniform);
-  OutputBuffer->decorate(Decoration::DescriptorSet)->addExtraOperand(0);
-  OutputBuffer->decorate(Decoration::Binding)->addExtraOperand(1);
-  m->addVariable(OutputBuffer);
-
-  auto VoidTy = m->getVoidType();
-  auto FuncTy = m->getFunctionType(VoidTy, nullptr, 0);
-
-  auto UIntTy = m->getUnsignedIntType(32);
-  auto V3UIntTy = m->getVectorType(UIntTy, 3);
-
-  auto InvocationID = m->getInvocationId();
-
-  auto ConstOne = m->getConstant(UIntTy, 1);
-#if 0
-  auto V3UIntPtrTy = m->getPointerType(StorageClass::Input, V3UIntTy);
-  auto GSize = b.MakeVariable(V3UIntPtrTy, StorageClass::Input);
-  GSize->decorate(Decoration::BuiltIn)->addExtraOperand(BuiltIn::WorkgroupSize);
-  m->addVariable(GSize);
-#endif
-
-  auto GNum = m->getNumWorkgroups();
-
-  const char *funcName = "invert";
-
-  auto Func = b.MakeFunctionDefinition(VoidTy, FunctionControl::None, FuncTy);
-  // TODO: Add method setName() to class FunctionDefinition
-  // Func->setName(funcName);  // I.e., OpName %func funcName
-  m->addFunctionDefinition(Func);
-
-  auto Blk = b.MakeBlock();
-  Func->addBlock(Blk);
-
-  Blk->addInstruction(b.MakeLabel());
-
-  auto ConstZero = m->getConstant(UIntTy, 0);
-  auto UIntPtrTy = m->getPointerType(StorageClass::Input, UIntTy);
-
-  auto IID = b.MakeLoad(V3UIntTy, InvocationID);
-  Blk->addInstruction(IID);
-
-  auto XValue = b.MakeCompositeExtract(UIntTy, IID, {0});
-  Blk->addInstruction(XValue);
-
-  auto YValue = b.MakeCompositeExtract(UIntTy, IID, {1});
-  Blk->addInstruction(YValue);
-
-#if 0
-  auto PtrToGSizeX = b.MakeAccessChain(UIntPtrTy, GSize, {ConstZero});
-  Blk->addInstruction(PtrToGSizeX);
-
-  auto GSizeX = b.MakeLoad(UIntTy, PtrToGSizeX);
-  Blk->addInstruction(GSizeX);
-#else
-  auto &GSizeX = ConstOne;
-#endif
-
-  auto Tmp1 = b.MakeIMul(UIntTy, YValue, GSizeX);
-  Blk->addInstruction(Tmp1);
-
-  auto PtrToGNumX = b.MakeAccessChain(UIntPtrTy, GNum, {ConstZero});
-  Blk->addInstruction(PtrToGNumX);
-
-  auto GNumX = b.MakeLoad(UIntTy, PtrToGNumX);
-  Blk->addInstruction(GNumX);
-
-  auto OffsetY = b.MakeIMul(UIntTy, Tmp1, GNumX);
-  Blk->addInstruction(OffsetY);
-
-  auto Index = b.MakeIAdd(UIntTy, OffsetY, XValue);
-  Blk->addInstruction(Index);
-
-  auto VF4PtrTy = m->getPointerType(StorageClass::Function, VF4Ty);
-  auto Ptr = b.MakeAccessChain(VF4PtrTy, InputBuffer, {ConstZero, Index});
-  Blk->addInstruction(Ptr);
-
-  auto Value = b.MakeLoad(VF4Ty, Ptr);
-  Blk->addInstruction(Value);
-
-  // Here is the place to do something about the value. As is, this is a copy
-  // kernel.
-  auto ConstOneF = m->getConstant(FloatTy, 1.0f);
-  auto ConstOneVF4 = m->getConstantComposite(VF4Ty, ConstOneF, ConstOneF,
-                                             ConstOneF, ConstOneF);
-  auto Result = b.MakeFSub(VF4Ty, ConstOneVF4, Value);
-  Blk->addInstruction(Result);
-
-  auto OutPtr = b.MakeAccessChain(VF4PtrTy, OutputBuffer, {ConstZero, Index});
-  Blk->addInstruction(OutPtr);
-
-  Blk->addInstruction(b.MakeStore(OutPtr, Result));
-  Blk->addInstruction(b.MakeReturn());
-
-  m->addEntryPoint(
-      b.MakeEntryPointDefinition(ExecutionModel::GLCompute, Func, funcName)
-          ->addToInterface(InvocationID)
-          ->addToInterface(GNum)
-          //          ->addToInterface(GSize)
-          ->setLocalSize(1, 1, 1));
-
-  EXPECT_EQ(1, countEntity<MemoryModelInst>(m));
-  EXPECT_EQ(1, countEntity<EntryPointInst>(m));
-  EXPECT_EQ(3, countEntity<LoadInst>(m));
-  EXPECT_EQ(1, countEntity<ReturnInst>(m));
-  EXPECT_EQ(1, countEntity<ExecutionModeInst>(m));
-  EXPECT_EQ(2, countEntity<TypeRuntimeArrayInst>(m));
-  EXPECT_EQ(2, countEntity<TypeStructInst>(m));
-  EXPECT_EQ(5, countEntity<TypePointerInst>(m));
-  EXPECT_EQ(1, countEntity<StringInst>(m));
-
-  m->consolidateAnnotations();
-
-  auto words = Serialize<Module>(m);
-
-  auto m1 = Deserialize<Module>(words);
-  ASSERT_NE(nullptr, m1);
-
-  auto words1 = Serialize<Module>(m1);
-
-  EXPECT_TRUE(words == words1);
-}
-
-TEST(BuilderTest, testLoadAndModify) {
-  static const std::string testDataPath(
-      "frameworks/rs/rsov/compiler/spirit/test_data/");
-  const std::string &fullPath = getAbsolutePath(testDataPath + "greyscale.spv");
-
-  Module *m = Deserialize<Module>(readFile<uint32_t>(fullPath.c_str()));
-
-  ASSERT_NE(nullptr, m);
-
-  std::unique_ptr<Module> mDeleter(m);
-
-  Builder b;
-
-  auto IntTy = m->getIntType(32);
-  auto FuncTy = m->getFunctionType(IntTy, {IntTy});
-
-  auto Func = b.MakeFunctionDefinition(IntTy, FunctionControl::None, FuncTy);
-  // TODO: Add method setName() to class FunctionDefinition
-  // Func->setName(funcName);  // I.e., OpName %func funcName
-  m->addFunctionDefinition(Func);
-
-  auto Blk = b.MakeBlock();
-  Func->addBlock(Blk);
-
-  Blk->addInstruction(b.MakeReturn());
-
-  m->consolidateAnnotations();
-
-  auto words = Serialize<Module>(m);
-
-  auto m1 = Deserialize<Module>(words);
-  ASSERT_NE(nullptr, m1);
-
-  auto words1 = Serialize<Module>(m1);
-
-  EXPECT_TRUE(words == words1);
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/core_defs.h b/rsov/compiler/spirit/core_defs.h
deleted file mode 100644
index 06b1d1b..0000000
--- a/rsov/compiler/spirit/core_defs.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 CORE_DEFS_H
-#define CORE_DEFS_H
-
-#include <string>
-
-namespace android {
-namespace spirit {
-
-class Instruction;
-
-typedef int32_t LiteralInteger;
-typedef std::string LiteralString;
-typedef union {
-  int32_t intValue;
-  int64_t longValue;
-  float floatValue;
-  double doubleValue;
-} LiteralContextDependentNumber;
-typedef uint32_t LiteralExtInstInteger;
-typedef uint32_t LiteralSpecConstantOpInteger;
-typedef uint32_t IdResult;
-
-struct IdRef {
-  IdRef() : mId(0), mInstruction(nullptr) {}
-  IdRef(Instruction *inst);
-
-  uint32_t mId;
-  mutable Instruction *mInstruction;
-};
-
-// TODO: specialize these ref types
-// TODO: should only reference type instructions
-struct IdResultType : public IdRef {
-  IdResultType() : IdRef() {}
-  IdResultType(Instruction *inst) : IdRef(inst) {}
-};
-
-// TODO: should only reference int representing memory semeantics
-struct IdMemorySemantics : public IdRef {};
-// TODO: should only reference int representing scopes
-struct IdScope : public IdRef {};
-
-struct OpCodeAndWordCount {
-  OpCodeAndWordCount() : mOpCode(0) {}
-  OpCodeAndWordCount(uint32_t codeAndCount)
-      : mOpCode((uint16_t)codeAndCount),
-        mWordCount((uint32_t)(codeAndCount >> 16)) {}
-  OpCodeAndWordCount(uint32_t opcode, uint32_t wordCount)
-      : mOpCode((uint16_t)opcode), mWordCount((uint16_t)wordCount) {}
-
-  operator uint32_t() const {
-    return ((uint32_t)mWordCount << 16) | (uint32_t)mOpCode;
-  }
-
-  uint16_t mOpCode;
-  uint16_t mWordCount;
-};
-
-} // namespace spirit
-} // namespace android
-
-#endif // CORE_DEFS_H
diff --git a/rsov/compiler/spirit/entity.cpp b/rsov/compiler/spirit/entity.cpp
deleted file mode 100644
index baeb55c..0000000
--- a/rsov/compiler/spirit/entity.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "entity.h"
-
-#include "instructions.h"
-#include "visitor.h"
-#include "word_stream.h"
-
-namespace android {
-namespace spirit {
-
-void Entity::Serialize(OutputWordStream &OS) const {
-  std::unique_ptr<IVisitor> v(CreateInstructionVisitor(
-      [&OS](Instruction *inst) -> void { inst->Serialize(OS); }));
-  v->visit(const_cast<Entity *>(this));
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/entity.h b/rsov/compiler/spirit/entity.h
deleted file mode 100644
index 33c112b..0000000
--- a/rsov/compiler/spirit/entity.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 ENTITY_H
-#define ENTITY_H
-
-#include <memory>
-#include <vector>
-
-#include "word_stream.h"
-
-namespace android {
-namespace spirit {
-
-class Builder;
-class IVisitor;
-
-class Entity {
-public:
-  Entity() {}
-  Entity(Builder *b) : mBuilder(b) {}
-
-  virtual ~Entity() {}
-
-  virtual void accept(IVisitor *visitor) = 0;
-  virtual bool DeserializeInternal(InputWordStream &IS) = 0;
-  virtual void Serialize(OutputWordStream &OS) const;
-  virtual void dump() const {}
-
-  void setBuilder(Builder *builder) { mBuilder = builder; }
-
-protected:
-  Builder *mBuilder;
-};
-
-template <typename T> T *Deserialize(InputWordStream &IS) {
-  std::unique_ptr<T> entity(new T());
-  if (!entity->DeserializeInternal(IS)) {
-    return nullptr;
-  }
-  return entity.release();
-}
-
-template <typename T> T *Deserialize(const std::vector<uint32_t> &words) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(words));
-  return Deserialize<T>(*IS);
-}
-
-template <class T>
-void DeserializeZeroOrMore(InputWordStream &IS, std::vector<T *> &all) {
-  while (auto entity = Deserialize<T>(IS)) {
-    all.push_back(entity);
-  }
-}
-
-template <class T>
-std::vector<uint32_t> Serialize(T* e) {
-  std::unique_ptr<OutputWordStream> OS(OutputWordStream::Create());
-  e->Serialize(*OS);
-  return OS->getWords();
-}
-
-} // namespace spirit
-} // namespace android
-
-#endif // ENTITY_H
diff --git a/rsov/compiler/spirit/file_utils.h b/rsov/compiler/spirit/file_utils.h
deleted file mode 100644
index 4f00c7c..0000000
--- a/rsov/compiler/spirit/file_utils.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 FILE_UTILS_H
-#define FILE_UTILS_H
-
-#include <fstream>
-#include <iostream>
-#include <memory>
-#include <vector>
-
-namespace android {
-namespace spirit {
-
-template <typename T> std::vector<T> readFile(const char *filename) {
-  std::ifstream ifs;
-  std::filebuf *fb = ifs.rdbuf();
-  fb->open(filename, std::ios::in);
-
-  if (!fb->is_open()) {
-    std::cerr << "failed opening " << filename << std::endl;
-    return std::vector<T>();
-  }
-
-  ifs.seekg(0, ifs.end);
-  int length = ifs.tellg();
-  ifs.seekg(0, ifs.beg);
-
-  std::vector<T> ret(length / sizeof(T));
-
-  ifs.read((char *)ret.data(), length);
-
-  fb->close();
-
-  return ret;
-}
-
-template <typename T> std::vector<T> readFile(const std::string &filename) {
-  return readFile<T>(filename.c_str());
-}
-
-template <typename T>
-void writeFile(const char *filename, const std::vector<T> &data) {
-  std::ofstream ofs(filename, std::ios::out);
-
-  ofs.write(reinterpret_cast<const char *>(data.data()),
-            sizeof(T) * data.size());
-}
-
-} // namespace spirit
-} // namespace android
-
-#endif // FILE_UTILS_H
diff --git a/rsov/compiler/spirit/generate.py b/rsov/compiler/spirit/generate.py
deleted file mode 100755
index 22b844d..0000000
--- a/rsov/compiler/spirit/generate.py
+++ /dev/null
@@ -1,507 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (C) 2017 The Android Open Source Project
-#
-# 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.
-#
-
-import getopt
-import json
-import string
-import sys
-
-def generate_header_file(filename, with_guard, printer):
-    f = open(filename, 'w')
-    orig_stdout = sys.stdout
-    sys.stdout = f
-    print '// DO NOT MODIFY. AUTO-GENERATED.\n'
-    if with_guard:
-        print "#pragma once"
-        print
-        print "namespace android {"
-        print "namespace spirit {"
-        print
-    printer()
-    if with_guard:
-        print "} // namespace spirit"
-        print "} // namespace android"
-    f.close()
-    sys.stdout = orig_stdout
-
-
-
-################################################################################
-#
-# Generate Builder class: the .h and .cpp files.
-#
-################################################################################
-
-def factory_method_name(opname, outlined):
-    if outlined:
-        return "Builder::Make%s" % opname_noprefix(opname)
-    else:
-        return "Make%s" % opname_noprefix(opname)
-
-
-
-def factory_method_prototype(inst, outlined):
-    opname = inst['opname']
-    operands = inst.get('operands')
-    str = "%s *%s(" % (class_name(opname), factory_method_name(opname, outlined))
-    first = True;
-    for type, var, quantifier, comment in generate_member_list(operands):
-        if var != "mResult":
-            param = var[1:]
-            if first:
-                first = False
-            else:
-                str += ', '
-            if quantifier == '?':
-                str += '%s *%s=nullptr' % (type, param)
-            elif quantifier == '*':
-                vecTy = "std::vector<%s>" % type
-                str += '%s %s=%s()' % (vecTy, param, vecTy)
-            else:
-                str +=  '%s %s' % (type, param)
-    str += ')'
-    return str
-
-
-
-def factory_method_body(inst):
-    opname = inst['opname']
-    operands = inst.get('operands')
-    clazz = class_name(opname)
-    str = "%s *ret = new %s(" % (clazz, clazz)
-    first = True
-    for type, var, quantifier, comment in generate_member_list(operands):
-        if var != "mResult" and quantifier != '*' and quantifier != '?':
-            param = var[1:]
-            if first:
-                first = False
-            else:
-                str += ', '
-            str += param
-    str += """);
-    if (!ret) {
-        return nullptr;
-    }
-"""
-    str += """
-    if (ret->hasResult()) {
-      ret->setId(Module::getCurrentModule()->nextId());
-    }
-"""
-    for type, var, quantifier, comment in generate_member_list(operands):
-        param = var[1:]
-        # TODO: use vector::swap() or move instead of copy
-        if quantifier == '?' or quantifier == '*':
-            str += "    ret->%s = %s;\n" % (var, param)
-    str += "    return ret;"
-    return str
-
-
-
-def print_factory_method(inst):
-    print """%s {
-    %s
-}""" % (factory_method_prototype(inst, False),
-        factory_method_body(inst))
-
-
-
-def print_factory_methods(insts):
-    for inst in insts:
-        print_factory_method(inst)
-
-
-
-################################################################################
-#
-# Generate type defintions
-#
-################################################################################
-
-def enum_enumerants(ty, enumerants):
-    str = ""
-    for enumerant in enumerants:
-        name = enumerant['enumerant']
-        val = enumerant['value']
-        if name[0].isalpha():
-            str += "  %s = %sU,\n" % (name, val)
-        else:
-            str += "  %s%s = %sU,\n" % (ty, name, val)
-    return str
-
-
-def generate_enum(ty):
-    typeName = ty['kind']
-    print """enum class %s : uint32_t {\n%s};
-""" % (typeName,
-       enum_enumerants(typeName, ty['enumerants']))
-
-
-def generate_composite_fields(bases):
-    str = ""
-    i = 0
-    for field in bases:
-        str += "  %s mField%d;\n" % (field, i)
-        i = i + 1
-    return str
-
-
-
-def print_type_definitions(operand_kinds):
-    for ty in operand_kinds:
-        category = ty['category']
-        if category == 'BitEnum' or category == 'ValueEnum':
-            generate_enum(ty)
-        elif category == 'Composite':
-            print "struct %s {\n%s};\n" % (ty['kind'],
-                                           generate_composite_fields(ty['bases']))
-
-
-
-################################################################################
-#
-# Generate class defintions for all instructions
-#
-################################################################################
-
-def opname_noprefix(opname):
-    return opname[2:]
-
-def class_name(opname):
-    return "%sInst" % opname_noprefix(opname)
-
-
-
-def generate_member_list(operands):
-    members = []
-    if operands is None:
-        return members
-    index = 1
-    for operand in operands:
-        type = operand['kind']
-        if type == 'IdResultType' or type == 'IdResult':
-            varName = "m%s" % type[2:]
-        else:
-            varName = "mOperand%d" % index
-            index = index + 1
-        quantifier = operand.get('quantifier')
-        comment = operand.get('name');
-        members.append((type, varName, quantifier, comment))
-    return members
-
-def fixed_word_count(member_list):
-    wc = 1 # for the first word of opcode and word count
-    for type, var, quant, comment in member_list:
-        if quant != '?' and quant != '*':
-            wc += 1
-    return wc
-
-def string_for_members(opname, member_list):
-    if member_list == []:
-        return ""
-    member_str = "\n  static constexpr OpCode mOpCode=%s;\n" % opname
-    for type, var, quantifier, comment in member_list:
-        if comment is not None and comment.find('\n') != -1:
-            member_str += "  /* %s\n  */\n" % comment
-        member_str += "  "
-        if quantifier == '?':
-            type = type + '*';
-        elif quantifier == '*':
-            type = 'std::vector<%s>' % type;
-        member_str += "%s %s;" % (type, var)
-        if comment is not None and comment.find('\n') == -1:
-            member_str += "  // %s" % comment
-        member_str += "\n"
-    return member_str
-
-def string_for_constructor(opname, opcode, members):
-    # Default constructor
-    initializer = "Instruction(%s, %d)" % (opname, fixed_word_count(members))
-    first = True
-    for type, var, quantifier, comment in members:
-        if quantifier == '?':
-            initializer += ", %s(nullptr)" % var
-    str = "%s() : %s {}" % (class_name(opname), initializer)
-
-    # Constructor with values for members
-    if members == [] or (len(members) == 1 and members[0][0]=='IdResult'):
-        return str
-    nonOptionalOperandExists = False
-    for type, var, quantifier, comment in members:
-        if quantifier is None:
-            nonOptionalOperandExists = True
-    if not nonOptionalOperandExists:
-        return str
-    params = ""
-    initializer = "Instruction(%s, %d)" % (opname, fixed_word_count(members))
-    first = True
-    for type, var, quantifier, comment in members:
-        if var != "mResult" and quantifier != '*':
-            initializer += ", "
-            if quantifier == '?':
-                initializer += "%s(nullptr)" % var
-            else:
-                if first:
-                    first = False
-                else:
-                    params += ", "
-                param = var[1:]  # remove the prefix "m"
-                params += "%s %s" % (type, param)
-                initializer += "%s(%s)" % (var, param)
-    if params != "":
-        str += "\n  %s(%s) :\n    %s {}" % (class_name(opname), params, initializer)
-    str += "\n  virtual ~%s() {}" % class_name(opname)
-    return str
-
-def string_for_serializer_body(opcode, members):
-    body =  "setWordCount();\n"
-    body += "    OS << mCodeAndCount;\n"
-    for type, var, quantifier, comment in members:
-        if quantifier == '?':
-            body += "    if (%s!=nullptr) { OS << *%s; }\n" % (var, var)
-        elif quantifier == '*':
-            body += """    for (auto val : %s) { OS << val; }\n""" % var
-        else:
-            body += "    OS << %s;\n" % var
-    body += "    SerializeExtraOperands(OS);\n"
-    return body
-
-def string_for_deserializer_body(name, members):
-    body = "return DeserializeFirstWord(IS, %s)" % name
-    for type, var, quantifier, comment in members:
-        body += " &&\n           "
-        if quantifier == '?':
-            body += "DeserializeOptionallyOne(IS, &%s)" % var
-        elif quantifier == '*':
-            body += "DeserializeZeroOrMoreOperands(IS, &%s)" % var
-        else:
-            body += "DeserializeExactlyOne(IS, &%s)" % var
-    body += " &&\n           DeserializeExtraOperands(IS);\n"
-    return body
-
-def string_for_get_word_count(members):
-    str = """uint16_t getWordCount() const override {
-    uint16_t count = mFixedWordCount;\n"""
-    for type, var, quantifier, comment in members:
-        if quantifier == '?':
-            str += "    if (%s) count += WordCount(*%s);\n" % (var, var)
-        elif quantifier == '*':
-            str += "    if (!%s.empty()) count += WordCount(%s[0]) * %s.size();\n" % (var, var, var)
-        elif type == 'LiteralString':
-            str += "    count += WordCount(%s) - 1;\n" % var
-
-    str += """    count += mExtraOperands.size();
-    return count;
-  }"""
-    return str
-
-def string_for_accept():
-    return """
-  void accept(IVisitor *v) override { v->visit(this); }
-"""
-
-def has_result(members):
-    for type, val, quantifier, comment in members:
-        if type == 'IdResult':
-            return True
-    return False
-
-
-def string_for_has_result(hasResult):
-    if hasResult:
-        retVal = "true"
-    else:
-        retVal = "false"
-    return "bool hasResult() const override { return %s; }" % retVal
-
-def string_for_get_all_refs(members):
-    str = """std::vector<const IdRef*> getAllIdRefs() const override {
-    std::vector<const IdRef*> ret = {"""
-    first = True
-    # TODO: what if references are in * operands?
-    for type, var, quantifier, comment in members:
-        if type == 'IdRef' or type == 'IdResultType' or type == 'IdMemorySemantics' or type == 'IdScope':
-            if quantifier == '*':
-                pass
-            else:
-                if first:
-                    first = False
-                else:
-                    str += ", "
-                if quantifier == '?':
-                    str += "%s" % var
-                else:
-                    str += "&%s" % var
-    str += """};
-"""
-    for type, var, quantifier, comment in members:
-        if type == 'IdRef' or type == 'IdResultType' or type == 'IdMemorySemantics' or type == 'IdScope':
-            if quantifier == '*':
-                str+="""
-    for(const auto &ref : %s) {
-        ret.push_back(&ref);
-    }
-""" % var
-    str += """
-    return ret;
-  }"""
-    return str
-
-def string_for_get_set_id(hasResult):
-    if hasResult:
-        return """IdResult getId() const override { return mResult; }
-  void setId(IdResult id) override { mResult = id; }"""
-    else:
-        retVal = "0"
-        return """IdResult getId() const override { return 0; }
-  void setId(IdResult) override {}"""
-
-
-def print_instruction_class(inst):
-    opname = inst['opname']
-    opcode = inst['opcode']
-    operands = inst.get('operands')
-    members = generate_member_list(operands)
-    hasResult = has_result(members)
-    print """class %s : public Instruction {
- public:
-  %s
-
-  void Serialize(OutputWordStream &OS) const override {
-    %s  }
-
-  bool DeserializeInternal(InputWordStream &IS) override {
-    %s  }
-
-  void accept(IVisitor *v) override { v->visit(this); }
-
-  %s
-
-  %s
-
-  %s
-
-  %s
-%s};
-""" % (class_name(opname),
-       string_for_constructor(opname, opcode, members),
-       string_for_serializer_body(opcode, members),
-       string_for_deserializer_body(opname, members),
-       string_for_get_word_count(members),
-       string_for_has_result(hasResult),
-       string_for_get_set_id(hasResult),
-       string_for_get_all_refs(members),
-       string_for_members(opname, members))
-
-def print_all_instruction_classes(insts):
-    for inst in insts:
-        print_instruction_class(inst)
-
-################################################################################
-#
-# Generate opcode enum
-#
-################################################################################
-
-def print_opcode_enum(insts):
-    print "enum OpCode {"
-    for inst in insts:
-        opname = inst['opname']
-        opcode = inst['opcode']
-        print "  %s = %d," % (opname, opcode)
-    print "};"
-
-
-
-################################################################################
-#
-# Generate dispatching code
-#
-################################################################################
-
-def print_dispatches(insts):
-    for inst in insts:
-        opname = inst['opname']
-        print "HANDLE_INSTRUCTION(%s,%s)" % (opname, class_name(opname))
-
-def print_type_inst_dispatches(insts):
-    for inst in insts:
-        opname = inst['opname']
-        if opname[:6] == "OpType":
-            print "HANDLE_INSTRUCTION(%s, %s)" % (opname, class_name(opname))
-
-def print_const_inst_dispatches(insts):
-    for inst in insts:
-        opname = inst['opname']
-        if opname[:10] == "OpConstant":
-            print "HANDLE_INSTRUCTION(%s, %s)" % (opname, class_name(opname))
-
-def print_enum_dispatches(operand_kinds):
-    for ty in operand_kinds:
-        category = ty['category']
-        if category == 'BitEnum' or category == 'ValueEnum':
-            print "HANDLE_ENUM(%s)" % ty['kind']
-
-
-
-################################################################################
-#
-# main
-#
-################################################################################
-
-def main():
-    try:
-        opts, args = getopt.getopt(sys.argv[2:],"h",["instructions=",
-                                                     "types=",
-                                                     "opcodes=",
-                                                     "instruction_dispatches=",
-                                                     "enum_dispatches=",
-                                                     "type_inst_dispatches=",
-                                                     "const_inst_dispatches=",
-                                                     "factory_methods="])
-    except getopt.GetoptError:
-        print sys.argv[0], ''
-        sys.exit(2)
-
-    with open(sys.argv[1]) as grammar_file:
-        grammar = json.load(grammar_file)
-
-    instructions = grammar['instructions']
-
-    for opt, arg in opts:
-        if opt == "--instructions":
-            generate_header_file(arg, True, lambda: print_all_instruction_classes(instructions))
-        elif opt == "--types":
-            kinds = grammar['operand_kinds']
-            generate_header_file(arg, True, lambda: print_type_definitions(kinds))
-        elif opt == "--opcodes":
-            generate_header_file(arg, True, lambda: print_opcode_enum(instructions))
-        elif opt == "--instruction_dispatches":
-            generate_header_file(arg, False, lambda: print_dispatches(instructions))
-        elif opt == "--enum_dispatches":
-            kinds = grammar['operand_kinds']
-            generate_header_file(arg, False, lambda: print_enum_dispatches(kinds))
-        elif opt == "--type_inst_dispatches":
-            generate_header_file(arg, False, lambda: print_type_inst_dispatches(instructions))
-        elif opt == "--const_inst_dispatches":
-            generate_header_file(arg, False, lambda: print_const_inst_dispatches(instructions))
-        elif opt == "--factory_methods":
-            generate_header_file(arg, False, lambda: print_factory_methods(instructions))
-
-if __name__ == '__main__':
-    main()
diff --git a/rsov/compiler/spirit/instructions.cpp b/rsov/compiler/spirit/instructions.cpp
deleted file mode 100644
index 2fee620..0000000
--- a/rsov/compiler/spirit/instructions.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "instructions.h"
-
-#include <iostream>
-
-#include "visitor.h"
-
-namespace android {
-namespace spirit {
-
-IdRef::IdRef(Instruction *inst) : mId(inst->getId()), mInstruction(inst) {}
-
-void Instruction::accept(IVisitor *v) { v->visit(this); }
-
-DecorateInst *Instruction::decorate(Decoration decor) {
-  if (mCodeAndCount.mOpCode == OpDecorate) {
-    return nullptr;
-  }
-
-  DecorateInst *decorInst = new DecorateInst(this, decor);
-
-  mDecorations.push_back(decorInst);
-
-  return decorInst;
-}
-
-MemberDecorateInst *Instruction::memberDecorate(int member, Decoration decor) {
-  if (mCodeAndCount.mOpCode != OpTypeStruct) {
-    std::cerr << "OpMemberDecorate applied to non-OpTypeStruct instructions\n";
-    return nullptr;
-  }
-
-  MemberDecorateInst *decorInst = new MemberDecorateInst(this, member, decor);
-
-  mDecorations.push_back(decorInst);
-
-  return decorInst;
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/instructions.h b/rsov/compiler/spirit/instructions.h
deleted file mode 100644
index 6e162a1..0000000
--- a/rsov/compiler/spirit/instructions.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 INSTRUCTIONS_H
-#define INSTRUCTIONS_H
-
-#include <stdint.h>
-
-#include <iostream>
-#include <string>
-#include <vector>
-
-#include "core_defs.h"
-#include "entity.h"
-#include "opcodes_generated.h"
-#include "types_generated.h"
-#include "visitor.h"
-#include "word_stream.h"
-
-namespace android {
-namespace spirit {
-
-// Word count for a serialized operand
-template <typename T> uint16_t WordCount(T) { return 1; }
-
-inline uint16_t WordCount(PairLiteralIntegerIdRef) { return 2; }
-inline uint16_t WordCount(PairIdRefLiteralInteger) { return 2; }
-inline uint16_t WordCount(PairIdRefIdRef) { return 2; }
-inline uint16_t WordCount(const std::string &operand) {
-  return operand.length() / 4 + 1;
-}
-
-class Instruction : public Entity {
-public:
-  Instruction(uint32_t opCode) : mCodeAndCount(opCode) {}
-  Instruction(uint32_t opCode, uint32_t fixedWordCount)
-      : mCodeAndCount(opCode), mFixedWordCount(fixedWordCount) {}
-  virtual ~Instruction() {}
-
-  void accept(IVisitor *v) override;
-
-  void setWordCount() const {
-    if (mCodeAndCount.mWordCount == 0) {
-      mCodeAndCount.mWordCount = getWordCount();
-    }
-  }
-  virtual uint16_t getWordCount() const = 0;
-  virtual bool hasResult() const = 0;
-  virtual IdResult getId() const = 0;
-  virtual void setId(IdResult) = 0;
-  virtual std::vector<const IdRef *> getAllIdRefs() const = 0;
-
-  Instruction *addExtraOperand(uint32_t word) {
-    mExtraOperands.push_back(word);
-    return this;
-  }
-
-  // Adds decoration to the current instruction.
-  // Returns: the result OpDecorate instruction
-  DecorateInst *decorate(Decoration);
-  MemberDecorateInst *memberDecorate(int member, Decoration);
-
-  bool DeserializeFirstWord(InputWordStream &IS, OpCode opcode) {
-    if (IS.empty()) {
-      return false;
-    }
-
-    OpCodeAndWordCount codeAndCount(*IS);
-
-    if (codeAndCount.mOpCode != opcode) {
-      return false;
-    }
-
-    mRemainingWordCount = codeAndCount.mWordCount;
-
-    IS >> &mCodeAndCount;
-
-    mRemainingWordCount--;
-
-    return true;
-  }
-
-  template <typename T>
-  bool DeserializeExactlyOne(InputWordStream &IS, T *operand) {
-    if (IS.empty()) {
-      return false;
-    }
-
-    IS >> operand;
-
-    mRemainingWordCount -= WordCount(*operand);
-
-    return true;
-  }
-
-  template <typename T>
-  bool DeserializeOptionallyOne(InputWordStream &IS, T **operand) {
-    if (mRemainingWordCount == 0) {
-      return true;
-    }
-    *operand = new T();
-    return DeserializeExactlyOne(IS, *operand);
-  }
-
-  template <typename T>
-  bool DeserializeZeroOrMoreOperands(InputWordStream &IS,
-                                     std::vector<T> *operands) {
-    while (mRemainingWordCount > 0) {
-      T tmp;
-      if (!DeserializeExactlyOne(IS, &tmp)) {
-        return false;
-      }
-      operands->push_back(tmp);
-    }
-    return true;
-  }
-
-  bool DeserializeExtraOperands(InputWordStream &IS) {
-    return DeserializeZeroOrMoreOperands(IS, &mExtraOperands);
-  }
-
-  void SerializeExtraOperands(OutputWordStream &OS) const {
-    for (uint32_t w : mExtraOperands) {
-      OS << w;
-    }
-  }
-
-  const std::vector<Instruction *> &getAnnotations() const {
-    return mDecorations;
-  }
-
-  uint16_t getOpCode() const { return mCodeAndCount.mOpCode; }
-
-  mutable OpCodeAndWordCount mCodeAndCount;
-  uint16_t mFixedWordCount;
-  uint16_t mRemainingWordCount;
-  std::vector<uint32_t> mExtraOperands;
-  std::vector<Instruction *> mDecorations;
-};
-
-} // namespace spirit
-} // namespace android
-
-#include "instructions_generated.h"
-
-#endif // INSTRUCTIONS_H
diff --git a/rsov/compiler/spirit/instructions_test.cpp b/rsov/compiler/spirit/instructions_test.cpp
deleted file mode 100644
index ce4325e..0000000
--- a/rsov/compiler/spirit/instructions_test.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "instructions.h"
-
-#include "gtest/gtest.h"
-
-#include <memory>
-#include <vector>
-
-namespace android {
-namespace spirit {
-
-TEST(InstructionTest, testOpCapability) {
-  std::vector<uint32_t> words = {0x00020011, 0x00000001};
-  auto *i = Deserialize<CapabilityInst>(words);
-  EXPECT_NE(nullptr, i);
-}
-
-TEST(InstructionTest, testOpExtension) {
-  uint8_t bytes[] = {0x0a, 0x00, 0x03, 0x00, 0x41, 0x42,
-                     0x43, 0x44, 0x45, 0x46, 'G',  0x00};
-  std::vector<uint32_t> words((uint32_t *)bytes,
-                              (uint32_t *)(bytes + sizeof(bytes)));
-  auto *i = Deserialize<ExtensionInst>(words);
-  ASSERT_NE(nullptr, i);
-  EXPECT_STREQ("ABCDEFG", i->mOperand1.c_str());
-}
-
-TEST(InstructionTest, testOpExtInstImport) {
-  uint8_t bytes[] = {0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00,
-                     0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64,
-                     0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00};
-  std::vector<uint32_t> words((uint32_t *)bytes,
-                              (uint32_t *)(bytes + sizeof(bytes)));
-  auto *i = Deserialize<ExtInstImportInst>(words);
-  ASSERT_NE(nullptr, i);
-  EXPECT_STREQ("GLSL.std.450", i->mOperand1.c_str());
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/module.cpp b/rsov/compiler/spirit/module.cpp
deleted file mode 100644
index d480912..0000000
--- a/rsov/compiler/spirit/module.cpp
+++ /dev/null
@@ -1,989 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "module.h"
-
-#include <set>
-
-#include "builder.h"
-#include "core_defs.h"
-#include "instructions.h"
-#include "types_generated.h"
-#include "word_stream.h"
-
-namespace android {
-namespace spirit {
-
-Module *Module::mInstance = nullptr;
-
-Module *Module::getCurrentModule() {
-  if (mInstance == nullptr) {
-    return mInstance = new Module();
-  }
-  return mInstance;
-}
-
-Module::Module()
-    : mNextId(1), mCapabilitiesDeleter(mCapabilities),
-      mExtensionsDeleter(mExtensions), mExtInstImportsDeleter(mExtInstImports),
-      mEntryPointInstsDeleter(mEntryPointInsts),
-      mExecutionModesDeleter(mExecutionModes),
-      mEntryPointsDeleter(mEntryPoints),
-      mFunctionDefinitionsDeleter(mFunctionDefinitions) {
-  mInstance = this;
-}
-
-Module::Module(Builder *b)
-    : Entity(b), mNextId(1), mCapabilitiesDeleter(mCapabilities),
-      mExtensionsDeleter(mExtensions), mExtInstImportsDeleter(mExtInstImports),
-      mEntryPointInstsDeleter(mEntryPointInsts),
-      mExecutionModesDeleter(mExecutionModes),
-      mEntryPointsDeleter(mEntryPoints),
-      mFunctionDefinitionsDeleter(mFunctionDefinitions) {
-  mInstance = this;
-}
-
-bool Module::resolveIds() {
-  auto &table = mIdTable;
-
-  std::unique_ptr<IVisitor> v0(
-      CreateInstructionVisitor([&table](Instruction *inst) {
-        if (inst->hasResult()) {
-          table.insert(std::make_pair(inst->getId(), inst));
-        }
-      }));
-  v0->visit(this);
-
-  mNextId = mIdTable.rbegin()->first + 1;
-
-  int err = 0;
-  std::unique_ptr<IVisitor> v(
-      CreateInstructionVisitor([&table, &err](Instruction *inst) {
-        for (auto ref : inst->getAllIdRefs()) {
-          if (ref) {
-            auto it = table.find(ref->mId);
-            if (it != table.end()) {
-              ref->mInstruction = it->second;
-            } else {
-              std::cout << "Found no instruction for id " << ref->mId
-                        << std::endl;
-              err++;
-            }
-          }
-        }
-      }));
-  v->visit(this);
-  return err == 0;
-}
-
-bool Module::DeserializeInternal(InputWordStream &IS) {
-  if (IS.empty()) {
-    return false;
-  }
-
-  IS >> &mMagicNumber;
-  if (mMagicNumber != 0x07230203) {
-    errs() << "Wrong Magic Number: " << mMagicNumber;
-    return false;
-  }
-
-  if (IS.empty()) {
-    return false;
-  }
-
-  IS >> &mVersion.mWord;
-  if (mVersion.mBytes[0] != 0 || mVersion.mBytes[3] != 0) {
-    return false;
-  }
-
-  if (IS.empty()) {
-    return false;
-  }
-
-  IS >> &mGeneratorMagicNumber >> &mBound >> &mReserved;
-
-  DeserializeZeroOrMore<CapabilityInst>(IS, mCapabilities);
-  DeserializeZeroOrMore<ExtensionInst>(IS, mExtensions);
-  DeserializeZeroOrMore<ExtInstImportInst>(IS, mExtInstImports);
-
-  mMemoryModel.reset(Deserialize<MemoryModelInst>(IS));
-  if (!mMemoryModel) {
-    errs() << "Missing memory model specification.\n";
-    return false;
-  }
-
-  DeserializeZeroOrMore<EntryPointDefinition>(IS, mEntryPoints);
-  DeserializeZeroOrMore<ExecutionModeInst>(IS, mExecutionModes);
-  for (auto entry : mEntryPoints) {
-    mEntryPointInsts.push_back(entry->getInstruction());
-    for (auto mode : mExecutionModes) {
-      entry->applyExecutionMode(mode);
-    }
-  }
-
-  mDebugInfo.reset(Deserialize<DebugInfoSection>(IS));
-  mAnnotations.reset(Deserialize<AnnotationSection>(IS));
-  mGlobals.reset(Deserialize<GlobalSection>(IS));
-
-  DeserializeZeroOrMore<FunctionDefinition>(IS, mFunctionDefinitions);
-
-  if (mFunctionDefinitions.empty()) {
-    errs() << "Missing function definitions.\n";
-    for (int i = 0; i < 4; i++) {
-      uint32_t w;
-      IS >> &w;
-      std::cout << std::hex << w << " ";
-    }
-    std::cout << std::endl;
-    return false;
-  }
-
-  return true;
-}
-
-void Module::initialize() {
-  mMagicNumber = 0x07230203;
-  mVersion.mMajorMinor = {.mMinorNumber = 1, .mMajorNumber = 1};
-  mGeneratorMagicNumber = 0x00070000;
-  mBound = 0;
-  mReserved = 0;
-  mAnnotations.reset(new AnnotationSection());
-}
-
-void Module::SerializeHeader(OutputWordStream &OS) const {
-  OS << mMagicNumber;
-  OS << mVersion.mWord << mGeneratorMagicNumber;
-  if (mBound == 0) {
-    OS << mIdTable.end()->first + 1;
-  } else {
-    OS << std::max(mBound, mNextId);
-  }
-  OS << mReserved;
-}
-
-void Module::Serialize(OutputWordStream &OS) const {
-  SerializeHeader(OS);
-  Entity::Serialize(OS);
-}
-
-Module *Module::addCapability(Capability cap) {
-  mCapabilities.push_back(mBuilder->MakeCapability(cap));
-  return this;
-}
-
-Module *Module::setMemoryModel(AddressingModel am, MemoryModel mm) {
-  mMemoryModel.reset(mBuilder->MakeMemoryModel(am, mm));
-  return this;
-}
-
-Module *Module::addExtInstImport(const char *extName) {
-  ExtInstImportInst *extInst = mBuilder->MakeExtInstImport(extName);
-  mExtInstImports.push_back(extInst);
-  if (strcmp(extName, "GLSL.std.450") == 0) {
-    mGLExt = extInst;
-  }
-  return this;
-}
-
-Module *Module::addSource(SourceLanguage lang, int version) {
-  if (!mDebugInfo) {
-    mDebugInfo.reset(mBuilder->MakeDebugInfoSection());
-  }
-  mDebugInfo->addSource(lang, version);
-  return this;
-}
-
-Module *Module::addSourceExtension(const char *ext) {
-  if (!mDebugInfo) {
-    mDebugInfo.reset(mBuilder->MakeDebugInfoSection());
-  }
-  mDebugInfo->addSourceExtension(ext);
-  return this;
-}
-
-Module *Module::addString(const char *str) {
-  if (!mDebugInfo) {
-    mDebugInfo.reset(mBuilder->MakeDebugInfoSection());
-  }
-  mDebugInfo->addString(str);
-  return this;
-}
-
-Module *Module::addEntryPoint(EntryPointDefinition *entry) {
-  mEntryPoints.push_back(entry);
-  auto newModes = entry->getExecutionModes();
-  mExecutionModes.insert(mExecutionModes.end(), newModes.begin(),
-                         newModes.end());
-  return this;
-}
-
-const std::string Module::findStringOfPrefix(const char *prefix) const {
-  if (!mDebugInfo) {
-    return std::string();
-  }
-  return mDebugInfo->findStringOfPrefix(prefix);
-}
-
-GlobalSection *Module::getGlobalSection() {
-  if (!mGlobals) {
-    mGlobals.reset(new GlobalSection());
-  }
-  return mGlobals.get();
-}
-
-ConstantInst *Module::getConstant(TypeIntInst *type, int32_t value) {
-  return getGlobalSection()->getConstant(type, value);
-}
-
-ConstantInst *Module::getConstant(TypeIntInst *type, uint32_t value) {
-  return getGlobalSection()->getConstant(type, value);
-}
-
-ConstantInst *Module::getConstant(TypeFloatInst *type, float value) {
-  return getGlobalSection()->getConstant(type, value);
-}
-
-ConstantCompositeInst *Module::getConstantComposite(TypeVectorInst *type,
-                                                    ConstantInst *components[],
-                                                    size_t width) {
-  return getGlobalSection()->getConstantComposite(type, components, width);
-}
-
-ConstantCompositeInst *Module::getConstantComposite(TypeVectorInst *type,
-                                                    ConstantInst *comp0,
-                                                    ConstantInst *comp1,
-                                                    ConstantInst *comp2) {
-  // TODO: verify that component types are the same and consistent with the
-  // resulting vector type
-  ConstantInst *comps[] = {comp0, comp1, comp2};
-  return getConstantComposite(type, comps, 3);
-}
-
-ConstantCompositeInst *Module::getConstantComposite(TypeVectorInst *type,
-                                                    ConstantInst *comp0,
-                                                    ConstantInst *comp1,
-                                                    ConstantInst *comp2,
-                                                    ConstantInst *comp3) {
-  // TODO: verify that component types are the same and consistent with the
-  // resulting vector type
-  ConstantInst *comps[] = {comp0, comp1, comp2, comp3};
-  return getConstantComposite(type, comps, 4);
-}
-
-TypeVoidInst *Module::getVoidType() {
-  return getGlobalSection()->getVoidType();
-}
-
-TypeIntInst *Module::getIntType(int bits, bool isSigned) {
-  return getGlobalSection()->getIntType(bits, isSigned);
-}
-
-TypeIntInst *Module::getUnsignedIntType(int bits) {
-  return getIntType(bits, false);
-}
-
-TypeFloatInst *Module::getFloatType(int bits) {
-  return getGlobalSection()->getFloatType(bits);
-}
-
-TypeVectorInst *Module::getVectorType(Instruction *componentType, int width) {
-  return getGlobalSection()->getVectorType(componentType, width);
-}
-
-TypePointerInst *Module::getPointerType(StorageClass storage,
-                                        Instruction *pointeeType) {
-  return getGlobalSection()->getPointerType(storage, pointeeType);
-}
-
-TypeRuntimeArrayInst *Module::getRuntimeArrayType(Instruction *elementType) {
-  return getGlobalSection()->getRuntimeArrayType(elementType);
-}
-
-TypeStructInst *Module::getStructType(Instruction *fieldType[], int numField) {
-  return getGlobalSection()->getStructType(fieldType, numField);
-}
-
-TypeStructInst *Module::getStructType(Instruction *fieldType) {
-  return getStructType(&fieldType, 1);
-}
-
-TypeFunctionInst *Module::getFunctionType(Instruction *retType,
-                                          Instruction *const argType[],
-                                          size_t numArg) {
-  return getGlobalSection()->getFunctionType(retType, argType, numArg);
-}
-
-TypeFunctionInst *
-Module::getFunctionType(Instruction *retType,
-                        const std::vector<Instruction *> &argTypes) {
-  return getGlobalSection()->getFunctionType(retType, argTypes.data(),
-                                             argTypes.size());
-}
-
-size_t Module::getSize(TypeVoidInst *) { return 0; }
-
-size_t Module::getSize(TypeIntInst *intTy) { return intTy->mOperand1 / 8; }
-
-size_t Module::getSize(TypeFloatInst *fpTy) { return fpTy->mOperand1 / 8; }
-
-size_t Module::getSize(TypeVectorInst *vTy) {
-  return getSize(vTy->mOperand1.mInstruction) * vTy->mOperand2;
-}
-
-size_t Module::getSize(TypePointerInst *) {
-  return 4; // TODO: or 8?
-}
-
-size_t Module::getSize(TypeStructInst *structTy) {
-  size_t sz = 0;
-  for (auto ty : structTy->mOperand1) {
-    sz += getSize(ty.mInstruction);
-  }
-  return sz;
-}
-
-size_t Module::getSize(TypeFunctionInst *) {
-  return 4; // TODO: or 8? Is this just the size of a pointer?
-}
-
-size_t Module::getSize(Instruction *inst) {
-  switch (inst->getOpCode()) {
-  case OpTypeVoid:
-    return getSize(static_cast<TypeVoidInst *>(inst));
-  case OpTypeInt:
-    return getSize(static_cast<TypeIntInst *>(inst));
-  case OpTypeFloat:
-    return getSize(static_cast<TypeFloatInst *>(inst));
-  case OpTypeVector:
-    return getSize(static_cast<TypeVectorInst *>(inst));
-  case OpTypeStruct:
-    return getSize(static_cast<TypeStructInst *>(inst));
-  case OpTypeFunction:
-    return getSize(static_cast<TypeFunctionInst *>(inst));
-  default:
-    return 0;
-  }
-}
-
-Module *Module::addFunctionDefinition(FunctionDefinition *func) {
-  mFunctionDefinitions.push_back(func);
-  return this;
-}
-
-Instruction *Module::lookupByName(const char *name) const {
-  return mDebugInfo->lookupByName(name);
-}
-
-FunctionDefinition *
-Module::getFunctionDefinitionFromInstruction(FunctionInst *inst) const {
-  for (auto fdef : mFunctionDefinitions) {
-    if (fdef->getInstruction() == inst) {
-      return fdef;
-    }
-  }
-  return nullptr;
-}
-
-FunctionDefinition *
-Module::lookupFunctionDefinitionByName(const char *name) const {
-  FunctionInst *inst = static_cast<FunctionInst *>(lookupByName(name));
-  return getFunctionDefinitionFromInstruction(inst);
-}
-
-const char *Module::lookupNameByInstruction(const Instruction *inst) const {
-  return mDebugInfo->lookupNameByInstruction(inst);
-}
-
-VariableInst *Module::getInvocationId() {
-  return getGlobalSection()->getInvocationId();
-}
-
-VariableInst *Module::getNumWorkgroups() {
-  return getGlobalSection()->getNumWorkgroups();
-}
-
-Module *Module::addStructType(TypeStructInst *structType) {
-  getGlobalSection()->addStructType(structType);
-  return this;
-}
-
-Module *Module::addVariable(VariableInst *var) {
-  getGlobalSection()->addVariable(var);
-  return this;
-}
-
-void Module::consolidateAnnotations() {
-  std::vector<Instruction *> annotations(mAnnotations->begin(),
-                                      mAnnotations->end());
-  std::unique_ptr<IVisitor> v(
-      CreateInstructionVisitor([&annotations](Instruction *inst) -> void {
-        const auto &ann = inst->getAnnotations();
-        annotations.insert(annotations.end(), ann.begin(), ann.end());
-      }));
-  v->visit(this);
-  mAnnotations->clear();
-  mAnnotations->addAnnotations(annotations.begin(), annotations.end());
-}
-
-EntryPointDefinition::EntryPointDefinition(Builder *builder,
-                                           ExecutionModel execModel,
-                                           FunctionDefinition *func,
-                                           const char *name)
-    : Entity(builder), mFunction(func->getInstruction()),
-      mExecutionModel(execModel) {
-  mName = strndup(name, strlen(name));
-  mEntryPointInst = mBuilder->MakeEntryPoint(execModel, mFunction, mName);
-  (void)mExecutionModel; // suppress unused private field warning
-}
-
-bool EntryPointDefinition::DeserializeInternal(InputWordStream &IS) {
-  if (IS.empty()) {
-    return false;
-  }
-
-  if ((mEntryPointInst = Deserialize<EntryPointInst>(IS))) {
-    return true;
-  }
-
-  return false;
-}
-
-EntryPointDefinition *
-EntryPointDefinition::applyExecutionMode(ExecutionModeInst *mode) {
-  if (mode->mOperand1.mInstruction == mFunction) {
-    addExecutionMode(mode);
-  }
-  return this;
-}
-
-EntryPointDefinition *EntryPointDefinition::addToInterface(VariableInst *var) {
-  mInterface.push_back(var);
-  mEntryPointInst->mOperand4.push_back(var);
-  return this;
-}
-
-EntryPointDefinition *EntryPointDefinition::setLocalSize(uint32_t width,
-                                                         uint32_t height,
-                                                         uint32_t depth) {
-  mLocalSize.mWidth = width;
-  mLocalSize.mHeight = height;
-  mLocalSize.mDepth = depth;
-
-  auto mode = mBuilder->MakeExecutionMode(mFunction, ExecutionMode::LocalSize);
-  mode->addExtraOperand(width)->addExtraOperand(height)->addExtraOperand(depth);
-
-  addExecutionMode(mode);
-
-  return this;
-}
-
-bool DebugInfoSection::DeserializeInternal(InputWordStream &IS) {
-  while (true) {
-    if (auto str = Deserialize<StringInst>(IS)) {
-      mSources.push_back(str);
-    } else if (auto src = Deserialize<SourceInst>(IS)) {
-      mSources.push_back(src);
-    } else if (auto srcExt = Deserialize<SourceExtensionInst>(IS)) {
-      mSources.push_back(srcExt);
-    } else if (auto srcCont = Deserialize<SourceContinuedInst>(IS)) {
-      mSources.push_back(srcCont);
-    } else {
-      break;
-    }
-  }
-
-  while (true) {
-    if (auto name = Deserialize<NameInst>(IS)) {
-      mNames.push_back(name);
-    } else if (auto memName = Deserialize<MemberNameInst>(IS)) {
-      mNames.push_back(memName);
-    } else {
-      break;
-    }
-  }
-
-  return true;
-}
-
-DebugInfoSection *DebugInfoSection::addSource(SourceLanguage lang,
-                                              int version) {
-  SourceInst *source = mBuilder->MakeSource(lang, version);
-  mSources.push_back(source);
-  return this;
-}
-
-DebugInfoSection *DebugInfoSection::addSourceExtension(const char *ext) {
-  SourceExtensionInst *inst = mBuilder->MakeSourceExtension(ext);
-  mSources.push_back(inst);
-  return this;
-}
-
-DebugInfoSection *DebugInfoSection::addString(const char *str) {
-  StringInst *source = mBuilder->MakeString(str);
-  mSources.push_back(source);
-  return this;
-}
-
-std::string DebugInfoSection::findStringOfPrefix(const char *prefix) {
-  auto it = std::find_if(
-      mSources.begin(), mSources.end(), [prefix](Instruction *inst) -> bool {
-        if (inst->getOpCode() != OpString) {
-          return false;
-        }
-        const StringInst *strInst = static_cast<const StringInst *>(inst);
-        const std::string &str = strInst->mOperand1;
-        return str.find(prefix) == 0;
-      });
-  if (it == mSources.end()) {
-    return "";
-  }
-  StringInst *strInst = static_cast<StringInst *>(*it);
-  return strInst->mOperand1;
-}
-
-Instruction *DebugInfoSection::lookupByName(const char *name) const {
-  for (auto inst : mNames) {
-    if (inst->getOpCode() == OpName) {
-      NameInst *nameInst = static_cast<NameInst *>(inst);
-      if (nameInst->mOperand2.compare(name) == 0) {
-        return nameInst->mOperand1.mInstruction;
-      }
-    }
-    // Ignore member names
-  }
-  return nullptr;
-}
-
-const char *
-DebugInfoSection::lookupNameByInstruction(const Instruction *target) const {
-  for (auto inst : mNames) {
-    if (inst->getOpCode() == OpName) {
-      NameInst *nameInst = static_cast<NameInst *>(inst);
-      if (nameInst->mOperand1.mInstruction == target) {
-        return nameInst->mOperand2.c_str();
-      }
-    }
-    // Ignore member names
-  }
-  return nullptr;
-}
-
-AnnotationSection::AnnotationSection() : mAnnotationsDeleter(mAnnotations) {}
-
-AnnotationSection::AnnotationSection(Builder *b)
-    : Entity(b), mAnnotationsDeleter(mAnnotations) {}
-
-bool AnnotationSection::DeserializeInternal(InputWordStream &IS) {
-  while (true) {
-    if (auto decor = Deserialize<DecorateInst>(IS)) {
-      mAnnotations.push_back(decor);
-    } else if (auto decor = Deserialize<MemberDecorateInst>(IS)) {
-      mAnnotations.push_back(decor);
-    } else if (auto decor = Deserialize<GroupDecorateInst>(IS)) {
-      mAnnotations.push_back(decor);
-    } else if (auto decor = Deserialize<GroupMemberDecorateInst>(IS)) {
-      mAnnotations.push_back(decor);
-    } else if (auto decor = Deserialize<DecorationGroupInst>(IS)) {
-      mAnnotations.push_back(decor);
-    } else {
-      break;
-    }
-  }
-  return true;
-}
-
-GlobalSection::GlobalSection() : mGlobalDefsDeleter(mGlobalDefs) {}
-
-GlobalSection::GlobalSection(Builder *builder)
-    : Entity(builder), mGlobalDefsDeleter(mGlobalDefs) {}
-
-namespace {
-
-template <typename T>
-T *findOrCreate(std::function<bool(T *)> criteria, std::function<T *()> factory,
-                std::vector<Instruction *> *globals) {
-  T *derived;
-  for (auto inst : *globals) {
-    if (inst->getOpCode() == T::mOpCode) {
-      T *derived = static_cast<T *>(inst);
-      if (criteria(derived)) {
-        return derived;
-      }
-    }
-  }
-  derived = factory();
-  globals->push_back(derived);
-  return derived;
-}
-
-} // anonymous namespace
-
-bool GlobalSection::DeserializeInternal(InputWordStream &IS) {
-  while (true) {
-#define HANDLE_INSTRUCTION(OPCODE, INST_CLASS)                                 \
-  if (auto typeInst = Deserialize<INST_CLASS>(IS)) {                           \
-    mGlobalDefs.push_back(typeInst);                                           \
-    continue;                                                                  \
-  }
-#include "const_inst_dispatches_generated.h"
-#include "type_inst_dispatches_generated.h"
-#undef HANDLE_INSTRUCTION
-
-    if (auto globalInst = Deserialize<VariableInst>(IS)) {
-      // Check if this is function scoped
-      if (globalInst->mOperand1 == StorageClass::Function) {
-        Module::errs() << "warning: Variable (id = " << globalInst->mResult;
-        Module::errs() << ") has function scope in global section.\n";
-        // Khronos LLVM-SPIRV convertor emits "Function" storage-class globals.
-        // As a workaround, accept such SPIR-V code here, and fix it up later
-        // in the rs2spirv compiler by correcting the storage class.
-        // In a stricter deserializer, such code should be rejected, and we
-        // should return false here.
-      }
-      mGlobalDefs.push_back(globalInst);
-      continue;
-    }
-
-    if (auto globalInst = Deserialize<UndefInst>(IS)) {
-      mGlobalDefs.push_back(globalInst);
-      continue;
-    }
-    break;
-  }
-  return true;
-}
-
-ConstantInst *GlobalSection::getConstant(TypeIntInst *type, int32_t value) {
-  return findOrCreate<ConstantInst>(
-      [=](ConstantInst *c) { return c->mOperand1.intValue == value; },
-      [=]() -> ConstantInst * {
-        LiteralContextDependentNumber cdn = {.intValue = value};
-        return mBuilder->MakeConstant(type, cdn);
-      },
-      &mGlobalDefs);
-}
-
-ConstantInst *GlobalSection::getConstant(TypeIntInst *type, uint32_t value) {
-  return findOrCreate<ConstantInst>(
-      [=](ConstantInst *c) { return c->mOperand1.intValue == (int)value; },
-      [=]() -> ConstantInst * {
-        LiteralContextDependentNumber cdn = {.intValue = (int)value};
-        return mBuilder->MakeConstant(type, cdn);
-      },
-      &mGlobalDefs);
-}
-
-ConstantInst *GlobalSection::getConstant(TypeFloatInst *type, float value) {
-  return findOrCreate<ConstantInst>(
-      [=](ConstantInst *c) { return c->mOperand1.floatValue == value; },
-      [=]() -> ConstantInst * {
-        LiteralContextDependentNumber cdn = {.floatValue = value};
-        return mBuilder->MakeConstant(type, cdn);
-      },
-      &mGlobalDefs);
-}
-
-ConstantCompositeInst *
-GlobalSection::getConstantComposite(TypeVectorInst *type,
-                                    ConstantInst *components[], size_t width) {
-  return findOrCreate<ConstantCompositeInst>(
-      [=](ConstantCompositeInst *c) {
-        if (c->mOperand1.size() != width) {
-          return false;
-        }
-        for (size_t i = 0; i < width; i++) {
-          if (c->mOperand1[i].mInstruction != components[i]) {
-            return false;
-          }
-        }
-        return true;
-      },
-      [=]() -> ConstantCompositeInst * {
-        ConstantCompositeInst *c = mBuilder->MakeConstantComposite(type);
-        for (size_t i = 0; i < width; i++) {
-          c->mOperand1.push_back(components[i]);
-        }
-        return c;
-      },
-      &mGlobalDefs);
-}
-
-TypeVoidInst *GlobalSection::getVoidType() {
-  return findOrCreate<TypeVoidInst>(
-      [=](TypeVoidInst *) -> bool { return true; },
-      [=]() -> TypeVoidInst * { return mBuilder->MakeTypeVoid(); },
-      &mGlobalDefs);
-}
-
-TypeIntInst *GlobalSection::getIntType(int bits, bool isSigned) {
-  if (isSigned) {
-    switch (bits) {
-#define HANDLE_INT_SIZE(INT_TYPE, BITS, SIGNED)                                \
-  case BITS: {                                                                 \
-    return findOrCreate<TypeIntInst>(                                          \
-        [=](TypeIntInst *intTy) -> bool {                                      \
-          return intTy->mOperand1 == BITS && intTy->mOperand2 == SIGNED;       \
-        },                                                                     \
-        [=]() -> TypeIntInst * {                                               \
-          return mBuilder->MakeTypeInt(BITS, SIGNED);                          \
-        },                                                                     \
-        &mGlobalDefs);                                                         \
-  }
-      HANDLE_INT_SIZE(Int, 8, 1);
-      HANDLE_INT_SIZE(Int, 16, 1);
-      HANDLE_INT_SIZE(Int, 32, 1);
-      HANDLE_INT_SIZE(Int, 64, 1);
-    default:
-      Module::errs() << "unexpected int type";
-    }
-  } else {
-    switch (bits) {
-      HANDLE_INT_SIZE(UInt, 8, 0);
-      HANDLE_INT_SIZE(UInt, 16, 0);
-      HANDLE_INT_SIZE(UInt, 32, 0);
-      HANDLE_INT_SIZE(UInt, 64, 0);
-    default:
-      Module::errs() << "unexpected int type";
-    }
-  }
-#undef HANDLE_INT_SIZE
-  return nullptr;
-}
-
-TypeFloatInst *GlobalSection::getFloatType(int bits) {
-  switch (bits) {
-#define HANDLE_FLOAT_SIZE(BITS)                                                \
-  case BITS: {                                                                 \
-    return findOrCreate<TypeFloatInst>(                                        \
-        [=](TypeFloatInst *floatTy) -> bool {                                  \
-          return floatTy->mOperand1 == BITS;                                   \
-        },                                                                     \
-        [=]() -> TypeFloatInst * { return mBuilder->MakeTypeFloat(BITS); },    \
-        &mGlobalDefs);                                                         \
-  }
-    HANDLE_FLOAT_SIZE(16);
-    HANDLE_FLOAT_SIZE(32);
-    HANDLE_FLOAT_SIZE(64);
-  default:
-    Module::errs() << "unexpeced floating point type";
-  }
-#undef HANDLE_FLOAT_SIZE
-  return nullptr;
-}
-
-TypeVectorInst *GlobalSection::getVectorType(Instruction *componentType,
-                                             int width) {
-  // TODO: verify that componentType is basic numeric types
-
-  return findOrCreate<TypeVectorInst>(
-      [=](TypeVectorInst *vecTy) -> bool {
-        return vecTy->mOperand1.mInstruction == componentType &&
-               vecTy->mOperand2 == width;
-      },
-      [=]() -> TypeVectorInst * {
-        return mBuilder->MakeTypeVector(componentType, width);
-      },
-      &mGlobalDefs);
-}
-
-TypePointerInst *GlobalSection::getPointerType(StorageClass storage,
-                                               Instruction *pointeeType) {
-  return findOrCreate<TypePointerInst>(
-      [=](TypePointerInst *type) -> bool {
-        return type->mOperand1 == storage &&
-               type->mOperand2.mInstruction == pointeeType;
-      },
-      [=]() -> TypePointerInst * {
-        return mBuilder->MakeTypePointer(storage, pointeeType);
-      },
-      &mGlobalDefs);
-}
-
-TypeRuntimeArrayInst *
-GlobalSection::getRuntimeArrayType(Instruction *elemType) {
-  return findOrCreate<TypeRuntimeArrayInst>(
-      [=](TypeRuntimeArrayInst * /*type*/) -> bool {
-        // return type->mOperand1.mInstruction == elemType;
-        return false;
-      },
-      [=]() -> TypeRuntimeArrayInst * {
-        return mBuilder->MakeTypeRuntimeArray(elemType);
-      },
-      &mGlobalDefs);
-}
-
-TypeStructInst *GlobalSection::getStructType(Instruction *fieldType[],
-                                             int numField) {
-  TypeStructInst *structTy = mBuilder->MakeTypeStruct();
-  for (int i = 0; i < numField; i++) {
-    structTy->mOperand1.push_back(fieldType[i]);
-  }
-  mGlobalDefs.push_back(structTy);
-  return structTy;
-}
-
-TypeFunctionInst *GlobalSection::getFunctionType(Instruction *retType,
-                                                 Instruction *const argType[],
-                                                 size_t numArg) {
-  return findOrCreate<TypeFunctionInst>(
-      [=](TypeFunctionInst *type) -> bool {
-        if (type->mOperand1.mInstruction != retType ||
-            type->mOperand2.size() != numArg) {
-          return false;
-        }
-        for (size_t i = 0; i < numArg; i++) {
-          if (type->mOperand2[i].mInstruction != argType[i]) {
-            return false;
-          }
-        }
-        return true;
-      },
-      [=]() -> TypeFunctionInst * {
-        TypeFunctionInst *funcTy = mBuilder->MakeTypeFunction(retType);
-        for (size_t i = 0; i < numArg; i++) {
-          funcTy->mOperand2.push_back(argType[i]);
-        }
-        return funcTy;
-      },
-      &mGlobalDefs);
-}
-
-GlobalSection *GlobalSection::addStructType(TypeStructInst *structType) {
-  mGlobalDefs.push_back(structType);
-  return this;
-}
-
-GlobalSection *GlobalSection::addVariable(VariableInst *var) {
-  mGlobalDefs.push_back(var);
-  return this;
-}
-
-VariableInst *GlobalSection::getInvocationId() {
-  if (mInvocationId) {
-    return mInvocationId.get();
-  }
-
-  TypeIntInst *UIntTy = getIntType(32, false);
-  TypeVectorInst *V3UIntTy = getVectorType(UIntTy, 3);
-  TypePointerInst *V3UIntPtrTy = getPointerType(StorageClass::Input, V3UIntTy);
-
-  VariableInst *InvocationId =
-      mBuilder->MakeVariable(V3UIntPtrTy, StorageClass::Input);
-  InvocationId->decorate(Decoration::BuiltIn)
-      ->addExtraOperand(static_cast<uint32_t>(BuiltIn::GlobalInvocationId));
-
-  mInvocationId.reset(InvocationId);
-
-  return InvocationId;
-}
-
-VariableInst *GlobalSection::getNumWorkgroups() {
-  if (mNumWorkgroups) {
-    return mNumWorkgroups.get();
-  }
-
-  TypeIntInst *UIntTy = getIntType(32, false);
-  TypeVectorInst *V3UIntTy = getVectorType(UIntTy, 3);
-  TypePointerInst *V3UIntPtrTy = getPointerType(StorageClass::Input, V3UIntTy);
-
-  VariableInst *GNum = mBuilder->MakeVariable(V3UIntPtrTy, StorageClass::Input);
-  GNum->decorate(Decoration::BuiltIn)
-      ->addExtraOperand(static_cast<uint32_t>(BuiltIn::NumWorkgroups));
-
-  mNumWorkgroups.reset(GNum);
-
-  return GNum;
-}
-
-bool FunctionDeclaration::DeserializeInternal(InputWordStream &IS) {
-  if (!(mFunc = Deserialize<FunctionInst>(IS))) {
-    return false;
-  }
-
-  DeserializeZeroOrMore<FunctionParameterInst>(IS, mParams);
-
-  if (!(mFuncEnd = Deserialize<FunctionEndInst>(IS))) {
-    return false;
-  }
-
-  return true;
-}
-
-template <> Instruction *Deserialize(InputWordStream &IS) {
-  Instruction *inst;
-
-  switch ((*IS) & 0xFFFF) {
-#define HANDLE_INSTRUCTION(OPCODE, INST_CLASS)                                 \
-  case OPCODE:                                                                 \
-    inst = Deserialize<INST_CLASS>(IS);                                        \
-    break;
-#include "instruction_dispatches_generated.h"
-#undef HANDLE_INSTRUCTION
-  default:
-    Module::errs() << "unrecognized instruction";
-    inst = nullptr;
-  }
-
-  return inst;
-}
-
-bool Block::DeserializeInternal(InputWordStream &IS) {
-  Instruction *inst;
-  while (((*IS) & 0xFFFF) != OpFunctionEnd &&
-         (inst = Deserialize<Instruction>(IS))) {
-    mInsts.push_back(inst);
-    if (inst->getOpCode() == OpBranch ||
-        inst->getOpCode() == OpBranchConditional ||
-        inst->getOpCode() == OpSwitch || inst->getOpCode() == OpKill ||
-        inst->getOpCode() == OpReturn || inst->getOpCode() == OpReturnValue ||
-        inst->getOpCode() == OpUnreachable) {
-      break;
-    }
-  }
-  return !mInsts.empty();
-}
-
-FunctionDefinition::FunctionDefinition()
-    : mParamsDeleter(mParams), mBlocksDeleter(mBlocks) {}
-
-FunctionDefinition::FunctionDefinition(Builder *builder, FunctionInst *func,
-                                       FunctionEndInst *end)
-    : Entity(builder), mFunc(func), mFuncEnd(end), mParamsDeleter(mParams),
-      mBlocksDeleter(mBlocks) {}
-
-bool FunctionDefinition::DeserializeInternal(InputWordStream &IS) {
-  mFunc.reset(Deserialize<FunctionInst>(IS));
-  if (!mFunc) {
-    return false;
-  }
-
-  DeserializeZeroOrMore<FunctionParameterInst>(IS, mParams);
-  DeserializeZeroOrMore<Block>(IS, mBlocks);
-
-  mFuncEnd.reset(Deserialize<FunctionEndInst>(IS));
-  if (!mFuncEnd) {
-    return false;
-  }
-
-  return true;
-}
-
-Instruction *FunctionDefinition::getReturnType() const {
-  return mFunc->mResultType.mInstruction;
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/module.h b/rsov/compiler/spirit/module.h
deleted file mode 100644
index cf0b1e0..0000000
--- a/rsov/compiler/spirit/module.h
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 MODULE_H
-#define MODULE_H
-
-#include <iostream>
-#include <map>
-#include <vector>
-
-#include "core_defs.h"
-#include "entity.h"
-#include "instructions.h"
-#include "stl_util.h"
-#include "types_generated.h"
-#include "visitor.h"
-
-namespace android {
-namespace spirit {
-
-class Builder;
-class AnnotationSection;
-class CapabilityInst;
-class DebugInfoSection;
-class ExtensionInst;
-class ExtInstImportInst;
-class EntryPointInst;
-class ExecutionModeInst;
-class EntryPointDefinition;
-class FunctionDeclaration;
-class FunctionDefinition;
-class GlobalSection;
-class InputWordStream;
-class Instruction;
-class MemoryModelInst;
-
-union VersionNumber {
-  struct {
-    uint8_t mLowZero;
-    uint8_t mMinorNumber;
-    uint8_t mMajorNumber;
-    uint8_t mHighZero;
-  } mMajorMinor;
-  uint8_t mBytes[4];
-  uint32_t mWord;
-};
-
-class Module : public Entity {
-public:
-  static Module *getCurrentModule();
-  uint32_t nextId() { return mNextId++; }
-
-  Module();
-
-  Module(Builder *b);
-
-  virtual ~Module() {}
-
-  bool DeserializeInternal(InputWordStream &IS) override;
-
-  void Serialize(OutputWordStream &OS) const override;
-
-  void SerializeHeader(OutputWordStream &OS) const;
-
-  void registerId(uint32_t id, Instruction *inst) {
-    mIdTable.insert(std::make_pair(id, inst));
-  }
-
-  void initialize();
-
-  bool resolveIds();
-
-  void accept(IVisitor *v) override {
-    for (auto cap : mCapabilities) {
-      v->visit(cap);
-    }
-    for (auto ext : mExtensions) {
-      v->visit(ext);
-    }
-    for (auto imp : mExtInstImports) {
-      v->visit(imp);
-    }
-
-    v->visit(mMemoryModel.get());
-
-    for (auto entry : mEntryPoints) {
-      v->visit(entry);
-    }
-
-    for (auto mode : mExecutionModes) {
-      v->visit(mode);
-    }
-
-    v->visit(mDebugInfo.get());
-    if (mAnnotations) {
-      v->visit(mAnnotations.get());
-    }
-    if (mGlobals) {
-      v->visit(mGlobals.get());
-    }
-
-    for (auto def : mFunctionDefinitions) {
-      v->visit(def);
-    }
-  }
-
-  static std::ostream &errs() { return std::cerr; }
-
-  Module *addCapability(Capability cap);
-  Module *setMemoryModel(AddressingModel am, MemoryModel mm);
-  Module *addExtInstImport(const char *extName);
-  Module *addSource(SourceLanguage lang, int version);
-  Module *addSourceExtension(const char *ext);
-  Module *addString(const char *ext);
-  Module *addEntryPoint(EntryPointDefinition *entry);
-
-  ExtInstImportInst *getGLExt() const { return mGLExt; }
-
-  const std::string findStringOfPrefix(const char *prefix) const;
-
-  GlobalSection *getGlobalSection();
-
-  Instruction *lookupByName(const char *) const;
-  FunctionDefinition *
-  getFunctionDefinitionFromInstruction(FunctionInst *) const;
-  FunctionDefinition *lookupFunctionDefinitionByName(const char *name) const;
-
-  // Find the name of the instruction, e.g., the name of a function (OpFunction
-  // instruction).
-  // The returned string is owned by the OpName instruction, whose first operand
-  // is the instruction being queried on.
-  const char *lookupNameByInstruction(const Instruction *) const;
-
-  VariableInst *getInvocationId();
-  VariableInst *getNumWorkgroups();
-
-  // Adds a struct type built somewhere else.
-  Module *addStructType(TypeStructInst *structType);
-  Module *addVariable(VariableInst *var);
-
-  // Methods to look up types. Create them if not found.
-  TypeVoidInst *getVoidType();
-  TypeIntInst *getIntType(int bits, bool isSigned = true);
-  TypeIntInst *getUnsignedIntType(int bits);
-  TypeFloatInst *getFloatType(int bits);
-  TypeVectorInst *getVectorType(Instruction *componentType, int width);
-  TypePointerInst *getPointerType(StorageClass storage,
-                                  Instruction *pointeeType);
-  TypeRuntimeArrayInst *getRuntimeArrayType(Instruction *elementType);
-
-  // This implies that struct types are strictly structural equivalent, i.e.,
-  // two structs are equivalent i.f.f. their fields are equivalent, recursively.
-  TypeStructInst *getStructType(Instruction *fieldType[], int numField);
-  TypeStructInst *getStructType(const std::vector<Instruction *> &fieldType);
-  TypeStructInst *getStructType(Instruction *field0Type);
-  TypeStructInst *getStructType(Instruction *field0Type,
-                                Instruction *field1Type);
-  TypeStructInst *getStructType(Instruction *field0Type,
-                                Instruction *field1Type,
-                                Instruction *field2Type);
-
-  // TODO: Can function types of different decorations be considered the same?
-  TypeFunctionInst *getFunctionType(Instruction *retType,
-                                    Instruction *const argType[],
-                                    size_t numArg);
-  TypeFunctionInst *getFunctionType(Instruction *retType,
-                                    const std::vector<Instruction *> &argTypes);
-
-  size_t getSize(TypeVoidInst *voidTy);
-  size_t getSize(TypeIntInst *intTy);
-  size_t getSize(TypeFloatInst *fpTy);
-  size_t getSize(TypeVectorInst *vTy);
-  size_t getSize(TypePointerInst *ptrTy);
-  size_t getSize(TypeStructInst *structTy);
-  size_t getSize(TypeFunctionInst *funcTy);
-  size_t getSize(Instruction *inst);
-
-  ConstantInst *getConstant(TypeIntInst *type, int32_t value);
-  ConstantInst *getConstant(TypeIntInst *type, uint32_t value);
-  ConstantInst *getConstant(TypeFloatInst *type, float value);
-
-  ConstantCompositeInst *getConstantComposite(TypeVectorInst *type,
-                                              ConstantInst *components[],
-                                              size_t width);
-  ConstantCompositeInst *
-  getConstantComposite(Instruction *type,
-                       const std::vector<ConstantInst *> &components);
-  ConstantCompositeInst *getConstantComposite(Instruction *type,
-                                              ConstantInst *comp0,
-                                              ConstantInst *comp1);
-  ConstantCompositeInst *getConstantComposite(TypeVectorInst *type,
-                                              ConstantInst *comp0,
-                                              ConstantInst *comp1,
-                                              ConstantInst *comp2);
-  ConstantCompositeInst *getConstantComposite(TypeVectorInst *type,
-                                              ConstantInst *comp0,
-                                              ConstantInst *comp1,
-                                              ConstantInst *comp2,
-                                              ConstantInst *comp3);
-
-  Module *addFunctionDefinition(FunctionDefinition *func);
-
-  void consolidateAnnotations();
-
-private:
-  static Module *mInstance;
-  uint32_t mNextId;
-  std::map<uint32_t, Instruction *> mIdTable;
-
-  uint32_t mMagicNumber;
-  VersionNumber mVersion;
-  uint32_t mGeneratorMagicNumber;
-  uint32_t mBound;
-  uint32_t mReserved;
-
-  std::vector<CapabilityInst *> mCapabilities;
-  std::vector<ExtensionInst *> mExtensions;
-  std::vector<ExtInstImportInst *> mExtInstImports;
-  std::unique_ptr<MemoryModelInst> mMemoryModel;
-  std::vector<EntryPointInst *> mEntryPointInsts;
-  std::vector<ExecutionModeInst *> mExecutionModes;
-  std::vector<EntryPointDefinition *> mEntryPoints;
-  std::unique_ptr<DebugInfoSection> mDebugInfo;
-  std::unique_ptr<AnnotationSection> mAnnotations;
-  std::unique_ptr<GlobalSection> mGlobals;
-  std::vector<FunctionDefinition *> mFunctionDefinitions;
-
-  ExtInstImportInst *mGLExt;
-
-  ContainerDeleter<std::vector<CapabilityInst *>> mCapabilitiesDeleter;
-  ContainerDeleter<std::vector<ExtensionInst *>> mExtensionsDeleter;
-  ContainerDeleter<std::vector<ExtInstImportInst *>> mExtInstImportsDeleter;
-  ContainerDeleter<std::vector<EntryPointInst *>> mEntryPointInstsDeleter;
-  ContainerDeleter<std::vector<ExecutionModeInst *>> mExecutionModesDeleter;
-  ContainerDeleter<std::vector<EntryPointDefinition *>> mEntryPointsDeleter;
-  ContainerDeleter<std::vector<FunctionDefinition *>>
-      mFunctionDefinitionsDeleter;
-};
-
-struct Extent3D {
-  uint32_t mWidth;
-  uint32_t mHeight;
-  uint32_t mDepth;
-};
-
-class EntryPointDefinition : public Entity {
-public:
-  EntryPointDefinition() {}
-  EntryPointDefinition(Builder *builder, ExecutionModel execModel,
-                       FunctionDefinition *func, const char *name);
-
-  virtual ~EntryPointDefinition() {
-    // Nothing to do here since ~Module() will delete entities referenced here
-  }
-
-  void accept(IVisitor *visitor) override {
-    visitor->visit(mEntryPointInst);
-    // Do not visit the ExecutionMode instructions here. They are linked here
-    // for convinience, and for convinience only. They are all grouped, stored,
-    // and serialized directly in the module in a section right after all
-    // EntryPoint instructions. Visit them from there.
-  }
-
-  bool DeserializeInternal(InputWordStream &IS) override;
-
-  EntryPointDefinition *addToInterface(VariableInst *var);
-  EntryPointDefinition *addExecutionMode(ExecutionModeInst *mode) {
-    mExecutionModeInsts.push_back(mode);
-    return this;
-  }
-  const std::vector<ExecutionModeInst *> &getExecutionModes() const {
-    return mExecutionModeInsts;
-  }
-
-  EntryPointDefinition *setLocalSize(uint32_t width, uint32_t height,
-                                     uint32_t depth);
-
-  EntryPointDefinition *applyExecutionMode(ExecutionModeInst *mode);
-
-  EntryPointInst *getInstruction() const { return mEntryPointInst; }
-
-private:
-  const char *mName;
-  FunctionInst *mFunction;
-  ExecutionModel mExecutionModel;
-  std::vector<VariableInst *> mInterface;
-  Extent3D mLocalSize;
-
-  EntryPointInst *mEntryPointInst;
-  std::vector<ExecutionModeInst *> mExecutionModeInsts;
-};
-
-class DebugInfoSection : public Entity {
-public:
-  DebugInfoSection() : mSourcesDeleter(mSources), mNamesDeleter(mNames) {}
-  DebugInfoSection(Builder *b)
-      : Entity(b), mSourcesDeleter(mSources), mNamesDeleter(mNames) {}
-
-  virtual ~DebugInfoSection() {}
-
-  bool DeserializeInternal(InputWordStream &IS) override;
-
-  DebugInfoSection *addSource(SourceLanguage lang, int version);
-  DebugInfoSection *addSourceExtension(const char *ext);
-  DebugInfoSection *addString(const char *str);
-
-  std::string findStringOfPrefix(const char *prefix);
-
-  Instruction *lookupByName(const char *name) const;
-  const char *lookupNameByInstruction(const Instruction *) const;
-
-  void accept(IVisitor *v) override {
-    for (auto source : mSources) {
-      v->visit(source);
-    }
-    for (auto name : mNames) {
-      v->visit(name);
-    }
-  }
-
-private:
-  // (OpString|OpSource|OpSourceExtension|OpSourceContinued)*
-  std::vector<Instruction *> mSources;
-  // (OpName|OpMemberName)*
-  std::vector<Instruction *> mNames;
-
-  ContainerDeleter<std::vector<Instruction *>> mSourcesDeleter;
-  ContainerDeleter<std::vector<Instruction *>> mNamesDeleter;
-};
-
-class AnnotationSection : public Entity {
-public:
-  AnnotationSection();
-  AnnotationSection(Builder *b);
-
-  virtual ~AnnotationSection() {}
-
-  bool DeserializeInternal(InputWordStream &IS) override;
-
-  void accept(IVisitor *v) override {
-    for (auto inst : mAnnotations) {
-      v->visit(inst);
-    }
-  }
-
-  template <typename T> void addAnnotations(T begin, T end) {
-    mAnnotations.insert<T>(std::end(mAnnotations), begin, end);
-  }
-
-  std::vector<Instruction *>::const_iterator begin() const {
-    return mAnnotations.begin();
-  }
-
-  std::vector<Instruction *>::const_iterator end() const {
-    return mAnnotations.end();
-  }
-
-  void clear() { mAnnotations.clear(); }
-
-private:
-  std::vector<Instruction *> mAnnotations; // OpDecorate, etc.
-
-  ContainerDeleter<std::vector<Instruction *>> mAnnotationsDeleter;
-};
-
-// Types, constants, and globals
-class GlobalSection : public Entity {
-public:
-  GlobalSection();
-  GlobalSection(Builder *builder);
-
-  virtual ~GlobalSection() {}
-
-  bool DeserializeInternal(InputWordStream &IS) override;
-
-  void accept(IVisitor *v) override {
-    for (auto inst : mGlobalDefs) {
-      v->visit(inst);
-    }
-
-    if (mInvocationId) {
-      v->visit(mInvocationId.get());
-    }
-
-    if (mNumWorkgroups) {
-      v->visit(mNumWorkgroups.get());
-    }
-  }
-
-  ConstantInst *getConstant(TypeIntInst *type, int32_t value);
-  ConstantInst *getConstant(TypeIntInst *type, uint32_t value);
-  ConstantInst *getConstant(TypeFloatInst *type, float value);
-  ConstantCompositeInst *getConstantComposite(TypeVectorInst *type,
-                                              ConstantInst *components[],
-                                              size_t width);
-
-  // Methods to look up types. Create them if not found.
-  TypeVoidInst *getVoidType();
-  TypeIntInst *getIntType(int bits, bool isSigned = true);
-  TypeFloatInst *getFloatType(int bits);
-  TypeVectorInst *getVectorType(Instruction *componentType, int width);
-  TypePointerInst *getPointerType(StorageClass storage,
-                                  Instruction *pointeeType);
-  TypeRuntimeArrayInst *getRuntimeArrayType(Instruction *elementType);
-
-  // This implies that struct types are strictly structural equivalent, i.e.,
-  // two structs are equivalent i.f.f. their fields are equivalent, recursively.
-  TypeStructInst *getStructType(Instruction *fieldType[], int numField);
-  // TypeStructInst *getStructType(const std::vector<Instruction *>
-  // &fieldTypes);
-
-  // TODO: Can function types of different decorations be considered the same?
-  TypeFunctionInst *getFunctionType(Instruction *retType,
-                                    Instruction *const argType[],
-                                    size_t numArg);
-  // TypeStructInst *addStructType(Instruction *fieldType[], int numField);
-  GlobalSection *addStructType(TypeStructInst *structType);
-  GlobalSection *addVariable(VariableInst *var);
-
-  VariableInst *getInvocationId();
-  VariableInst *getNumWorkgroups();
-
-private:
-  // TODO: Add structure to this.
-  // Separate types, constants, variables, etc.
-  std::vector<Instruction *> mGlobalDefs;
-  std::unique_ptr<VariableInst> mInvocationId;
-  std::unique_ptr<VariableInst> mNumWorkgroups;
-
-  ContainerDeleter<std::vector<Instruction *>> mGlobalDefsDeleter;
-};
-
-class FunctionDeclaration : public Entity {
-public:
-  virtual ~FunctionDeclaration() {}
-
-  bool DeserializeInternal(InputWordStream &IS) override;
-
-  void accept(IVisitor *v) override {
-    v->visit(mFunc);
-    for (auto param : mParams) {
-      v->visit(param);
-    }
-    v->visit(mFuncEnd);
-  }
-
-private:
-  FunctionInst *mFunc;
-  std::vector<FunctionParameterInst *> mParams;
-  FunctionEndInst *mFuncEnd;
-};
-
-class Block : public Entity {
-public:
-  Block() {}
-  Block(Builder *b) : Entity(b) {}
-
-  virtual ~Block() {}
-
-  bool DeserializeInternal(InputWordStream &IS) override;
-
-  void accept(IVisitor *v) override {
-    for (auto inst : mInsts) {
-      v->visit(inst);
-    }
-  }
-
-  Block *addInstruction(Instruction *inst) {
-    mInsts.push_back(inst);
-    return this;
-  }
-
-private:
-  std::vector<Instruction *> mInsts;
-};
-
-class FunctionDefinition : public Entity {
-public:
-  FunctionDefinition();
-  FunctionDefinition(Builder *builder, FunctionInst *func,
-                     FunctionEndInst *end);
-
-  virtual ~FunctionDefinition() {}
-
-  bool DeserializeInternal(InputWordStream &IS) override;
-
-  void accept(IVisitor *v) override {
-    v->visit(mFunc.get());
-    for (auto param : mParams) {
-      v->visit(param);
-    }
-    for (auto block : mBlocks) {
-      v->visit(block);
-    }
-    v->visit(mFuncEnd.get());
-  }
-
-  FunctionDefinition *addBlock(Block *b) {
-    mBlocks.push_back(b);
-    return this;
-  }
-
-  FunctionInst *getInstruction() const { return mFunc.get(); }
-  FunctionParameterInst *getParameter(uint32_t i) const { return mParams[i]; }
-
-  Instruction *getReturnType() const;
-
-private:
-  std::unique_ptr<FunctionInst> mFunc;
-  std::vector<FunctionParameterInst *> mParams;
-  std::vector<Block *> mBlocks;
-  std::unique_ptr<FunctionEndInst> mFuncEnd;
-
-  ContainerDeleter<std::vector<FunctionParameterInst *>> mParamsDeleter;
-  ContainerDeleter<std::vector<Block *>> mBlocksDeleter;
-};
-
-} // namespace spirit
-} // namespace android
-
-#endif // MODULE_H
diff --git a/rsov/compiler/spirit/module_test.cpp b/rsov/compiler/spirit/module_test.cpp
deleted file mode 100644
index 17d3134..0000000
--- a/rsov/compiler/spirit/module_test.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "module.h"
-
-#include "file_utils.h"
-#include "instructions.h"
-#include "test_utils.h"
-#include "gtest/gtest.h"
-
-#include <fstream>
-#include <memory>
-
-namespace android {
-namespace spirit {
-
-class ModuleTest : public ::testing::Test {
-protected:
-  virtual void SetUp() {
-    mWordsGlobal = readWords("global.spv");
-    mWordsGreyscale = readWords("greyscale.spv");
-    mWordsGreyscale2 = readWords("greyscale2.spv");
-    mWordsInvert = readWords("invert.spv");
-  }
-
-  std::vector<uint32_t> mWordsGlobal;
-  std::vector<uint32_t> mWordsGreyscale;
-  std::vector<uint32_t> mWordsGreyscale2;
-  std::vector<uint32_t> mWordsInvert;
-
-private:
-  std::vector<uint32_t> readWords(const char *testFile) {
-    static const std::string testDataPath(
-        "frameworks/rs/rsov/compiler/spirit/test_data/");
-    const std::string &fullPath = getAbsolutePath(testDataPath + testFile);
-    return readFile<uint32_t>(fullPath);
-  }
-};
-
-TEST_F(ModuleTest, testDeserialization1) {
-  auto m = Deserialize<Module>(mWordsGreyscale);
-
-  ASSERT_NE(nullptr, m);
-
-  std::unique_ptr<Module> mDeleter(m);
-
-  int count = 0;
-  std::unique_ptr<IVisitor> v(
-      CreateInstructionVisitor([&count](Instruction *) -> void { count++; }));
-  v->visit(m);
-
-  ASSERT_EQ(count, 123);
-
-  // TODO:: checkCountEntity<Instruction>() does not work correctly
-  //  EXPECT_TRUE(checkCountEntity<Instruction>(m, 123));
-  EXPECT_EQ(5, countEntity<AccessChainInst>(m));
-  EXPECT_EQ(2, countEntity<BitcastInst>(m));
-  EXPECT_EQ(1, countEntity<CapabilityInst>(m));
-  EXPECT_EQ(1, countEntity<CompositeConstructInst>(m));
-  EXPECT_EQ(5, countEntity<ConstantInst>(m));
-  EXPECT_EQ(1, countEntity<ConstantCompositeInst>(m));
-  EXPECT_EQ(11, countEntity<DecorateInst>(m));
-  EXPECT_EQ(1, countEntity<DotInst>(m));
-  EXPECT_EQ(1, countEntity<EntryPointInst>(m));
-  EXPECT_EQ(1, countEntity<ExecutionModeInst>(m));
-  EXPECT_EQ(1, countEntity<ExtInstImportInst>(m));
-  EXPECT_EQ(2, countEntity<FunctionInst>(m));
-  EXPECT_EQ(1, countEntity<FunctionCallInst>(m));
-  EXPECT_EQ(2, countEntity<FunctionEndInst>(m));
-  EXPECT_EQ(1, countEntity<FunctionParameterInst>(m));
-  EXPECT_EQ(1, countEntity<IAddInst>(m));
-  EXPECT_EQ(1, countEntity<IMulInst>(m));
-  EXPECT_EQ(1, countEntity<ImageInst>(m));
-  EXPECT_EQ(1, countEntity<ImageFetchInst>(m));
-  EXPECT_EQ(2, countEntity<LabelInst>(m));
-  EXPECT_EQ(11, countEntity<LoadInst>(m));
-  EXPECT_EQ(4, countEntity<MemberDecorateInst>(m));
-  EXPECT_EQ(4, countEntity<MemberNameInst>(m));
-  EXPECT_EQ(1, countEntity<MemoryModelInst>(m));
-  EXPECT_EQ(14, countEntity<NameInst>(m));
-  EXPECT_EQ(1, countEntity<ReturnInst>(m));
-  EXPECT_EQ(1, countEntity<ReturnValueInst>(m));
-  EXPECT_EQ(1, countEntity<SourceInst>(m));
-  EXPECT_EQ(3, countEntity<SourceExtensionInst>(m));
-  EXPECT_EQ(6, countEntity<StoreInst>(m));
-  EXPECT_EQ(1, countEntity<TypeFloatInst>(m));
-  EXPECT_EQ(2, countEntity<TypeFunctionInst>(m));
-  EXPECT_EQ(1, countEntity<TypeImageInst>(m));
-  EXPECT_EQ(2, countEntity<TypeIntInst>(m));
-  EXPECT_EQ(10, countEntity<TypePointerInst>(m));
-  EXPECT_EQ(1, countEntity<TypeRuntimeArrayInst>(m));
-  EXPECT_EQ(1, countEntity<TypeSampledImageInst>(m));
-  EXPECT_EQ(2, countEntity<TypeStructInst>(m));
-  EXPECT_EQ(4, countEntity<TypeVectorInst>(m));
-  EXPECT_EQ(1, countEntity<TypeVoidInst>(m));
-  EXPECT_EQ(9, countEntity<VariableInst>(m));
-  EXPECT_EQ(1, countEntity<VectorShuffleInst>(m));
-  EXPECT_EQ(1, countEntity<EntryPointDefinition>(m));
-  EXPECT_EQ(1, countEntity<DebugInfoSection>(m));
-  EXPECT_EQ(1, countEntity<GlobalSection>(m));
-  EXPECT_EQ(2, countEntity<FunctionDefinition>(m));
-}
-
-TEST_F(ModuleTest, testDeserialization2) {
-  Module *m = Deserialize<Module>(mWordsInvert);
-  ASSERT_NE(nullptr, m);
-
-  std::unique_ptr<Module> mDeleter(m);
-
-  auto outwords = Serialize<Module>(m);
-
-  EXPECT_TRUE(mWordsInvert == outwords);
-}
-
-TEST_F(ModuleTest, testSerialization1) {
-  Module *m = Deserialize<Module>(mWordsGreyscale);
-  ASSERT_NE(nullptr, m);
-
-  std::unique_ptr<Module> mDeleter(m);
-
-  EXPECT_EQ(2, countEntity<FunctionDefinition>(m));
-
-  auto outwords = Serialize<Module>(m);
-
-  EXPECT_TRUE(mWordsGreyscale == outwords);
-}
-
-TEST_F(ModuleTest, testSerialization2) {
-  Module *m = Deserialize<Module>(mWordsGreyscale2);
-  ASSERT_NE(nullptr, m);
-
-  std::unique_ptr<Module> mDeleter(m);
-
-  EXPECT_EQ(1, countEntity<FunctionDefinition>(m));
-
-  auto outwords = Serialize<Module>(m);
-
-  EXPECT_TRUE(mWordsGreyscale2 == outwords);
-}
-
-TEST_F(ModuleTest, testLookupByName) {
-  Module *m = Deserialize<Module>(mWordsGreyscale);
-
-  ASSERT_NE(nullptr, m);
-
-  std::unique_ptr<Module> mDeleter(m);
-
-  m->resolveIds();
-
-  Instruction *mainFunc = m->lookupByName("main");
-
-  EXPECT_NE(nullptr, mainFunc);
-  EXPECT_STREQ("main", m->lookupNameByInstruction(mainFunc));
-
-  auto i = static_cast<FunctionInst *>(m->lookupByName("greyscale(vf4;"));
-  ASSERT_NE(nullptr, i);
-
-  auto kernel = m->getFunctionDefinitionFromInstruction(i);
-  ASSERT_NE(nullptr, kernel);
-
-  EXPECT_NE(nullptr, kernel->getParameter(0));
-  EXPECT_NE(nullptr, kernel->getReturnType());
-
-  EXPECT_NE(nullptr, m->lookupFunctionDefinitionByName("greyscale(vf4;"));
-}
-
-TEST_F(ModuleTest, testGetSize) {
-  std::unique_ptr<Module> m(new Module());
-  EXPECT_EQ(4UL, m->getSize(m->getIntType(32)));
-  EXPECT_EQ(4UL, m->getSize(m->getIntType(32, 0)));
-  EXPECT_EQ(4UL, m->getSize(m->getFloatType(32)));
-  EXPECT_EQ(16UL, m->getSize(m->getVectorType(m->getFloatType(32), 4)));
-}
-
-TEST_F(ModuleTest, testFindStringOfPrefix) {
-  Module *m = Deserialize<Module>(mWordsGlobal);
-
-  ASSERT_NE(nullptr, m);
-
-  std::unique_ptr<Module> mDeleter(m);
-  ASSERT_STREQ(".rsov.ExportedVars:0;",
-               m->findStringOfPrefix(".rsov.ExportedVars:").c_str());
-
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/pass.cpp b/rsov/compiler/spirit/pass.cpp
deleted file mode 100644
index d8c3afe..0000000
--- a/rsov/compiler/spirit/pass.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "pass.h"
-
-#include "module.h"
-
-namespace android {
-namespace spirit {
-
-Module *Pass::run(Module *module, int *error) {
-  int intermediateError;
-  auto words = runAndSerialize(module, &intermediateError);
-  if (intermediateError) {
-    if (error) {
-      *error = intermediateError;
-    }
-    return nullptr;
-  }
-  return Deserialize<Module>(words);
-}
-
-std::vector<uint32_t> Pass::runAndSerialize(Module *module, int *error) {
-  int intermediateError;
-  auto m1 = run(module, &intermediateError);
-  if (intermediateError) {
-    if (error) {
-      *error = intermediateError;
-    }
-    return std::vector<uint32_t>();
-  }
-  return Serialize<Module>(m1);
-}
-
-} // namespace spirit
-} // namespace android
-
diff --git a/rsov/compiler/spirit/pass.h b/rsov/compiler/spirit/pass.h
deleted file mode 100644
index 1d493a1..0000000
--- a/rsov/compiler/spirit/pass.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 RSOV_COMPILER_SPIRIT_PASS_H
-#define RSOV_COMPILER_SPIRIT_PASS_H
-
-#include <stdint.h>
-
-#include <vector>
-
-namespace android {
-namespace spirit {
-
-class Module;
-
-// The base class for a pass, either an analysis or a transformation of a
-// Module. An instanace of a derived class can be added to a PassQueue and
-// applied to a Module, and produce a result Module with other passes.
-class Pass {
-public:
-  virtual ~Pass() {}
-
-  // Runs the pass  on the input module and returns the result module.
-  // If argument error is not null, set the error code. On a successful run,
-  // error code is set to zero.
-  virtual Module *run(Module *module, int *error);
-
-  // Runs the pass  on the input module, serializes the result module, and
-  // returns the words as a vector.
-  // If argument error is not null, set the error code. On a successful run,
-  // error code is set to zero.
-  virtual std::vector<uint32_t> runAndSerialize(Module *module, int *error);
-};
-
-} // namespace spirit
-} // namespace android
-
-#endif // RSOV_COMPILER_SPIRIT_PASS_H
diff --git a/rsov/compiler/spirit/pass_queue.cpp b/rsov/compiler/spirit/pass_queue.cpp
deleted file mode 100644
index 1bbdd2c..0000000
--- a/rsov/compiler/spirit/pass_queue.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "pass_queue.h"
-
-#include "module.h"
-
-namespace android {
-namespace spirit {
-
-bool PassQueue::append(Pass *pass) {
-  mPasses.push_back(pass);
-  mPassSet.insert(pass);
-  return true;
-}
-
-Module *PassQueue::run(Module *module, int *error) {
-  if (mPasses.empty()) {
-    return module;
-  }
-
-  // A unique ptr to keep intermediate modules from leaking
-  std::unique_ptr<Module> tempModule;
-
-  for (auto pass : mPasses) {
-    int intermediateError = 0;
-    Module* newModule = pass->run(module, &intermediateError);
-    // Some passes modify the input module in place, while others create a new
-    // module. Release memory only when it is necessary.
-    if (newModule != module) {
-      tempModule.reset(newModule);
-    }
-    module = newModule;
-    if (intermediateError) {
-      if (error) {
-        *error = intermediateError;
-      }
-      return nullptr;
-    }
-    if (!module || !module->resolveIds()) {
-      if (error) {
-        *error = -1;
-      }
-      return nullptr;
-    }
-  }
-
-  if (tempModule == nullptr) {
-    return module;
-  }
-
-  return tempModule.release();
-}
-
-std::vector<uint32_t> PassQueue::run(const std::vector<uint32_t> &spirvWords,
-                                     int *error) {
-  if (mPasses.empty()) {
-    return spirvWords;
-  }
-
-  Module *module = Deserialize<Module>(spirvWords);
-  if (!module || !module->resolveIds()) {
-    return std::vector<uint32_t>();
-  }
-
-  return runAndSerialize(module, error);
-}
-
-std::vector<uint32_t> PassQueue::runAndSerialize(Module *module, int *error) {
-  const int n = mPasses.size();
-  if (n < 1) {
-    return Serialize<Module>(module);
-  }
-
-  // A unique ptr to keep intermediate modules from leaking
-  std::unique_ptr<Module> tempModule;
-
-  for (int i = 0; i < n - 1; i++) {
-    int intermediateError = 0;
-    Module *newModule = mPasses[i]->run(module, &intermediateError);
-    // Some passes modify the input module in place, while others create a new
-    // module. Release memory only when it is necessary.
-    if (newModule != module) {
-      tempModule.reset(newModule);
-    }
-    module = newModule;
-    if (intermediateError) {
-      if (error) {
-        *error = intermediateError;
-      }
-      return std::vector<uint32_t>();
-    }
-    if (!module || !module->resolveIds()) {
-      if (error) {
-        *error = -1;
-      }
-      return std::vector<uint32_t>();
-    }
-  }
-  return mPasses[n - 1]->runAndSerialize(module, error);
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/pass_queue.h b/rsov/compiler/spirit/pass_queue.h
deleted file mode 100644
index f00dcf7..0000000
--- a/rsov/compiler/spirit/pass_queue.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 RSOV_COMPILER_SPIRIT_PASS_QUEUE_H
-#define RSOV_COMPILER_SPIRIT_PASS_QUEUE_H
-
-#include "module.h"
-#include "pass.h"
-#include "stl_util.h"
-
-#include <stdint.h>
-
-#include <memory>
-#include <set>
-#include <vector>
-
-namespace android {
-namespace spirit {
-
-// A FIFO of passes. Passes are appended to the end of the FIFO and run in the
-// first-in first-out order. Once appended to a pass queue, Passes are owned by
-// the queue.
-class PassQueue {
-public:
-  PassQueue() : mPassesDeleter(mPassSet) {}
-
-  // Appends a pass to the end of the queue
-  bool append(Pass *pass);
-
-  // Runs all passes in the queue in the first-in first-out order on a Module.
-  // Returns the result Module after all passes have run.
-  // If argument error is not null, sets the error code. On a successful run,
-  // error code is set to zero.
-  Module *run(Module *module, int *error = nullptr);
-
-  // Deserialize the input vector of words into a Module, and runs all passes in
-  // the queue in the first-in first-out order on the Module.
-  // for a serialized Module.
-  // After all the passes have run, returns the words from the serialized result
-  // Module.
-  // If argument error is not null, sets the error code. On a successful run,
-  // error code is set to zero.
-  std::vector<uint32_t> run(const std::vector<uint32_t> &spirvWords,
-                            int *error = nullptr);
-
-  // Runs all passes in the queue in the first-in first-out order on a Module.
-  // After all the passes have run, serializes the result Module, and returns
-  // the words as a vector.
-  // If argument error is not null, sets the error code. On a successful run,
-  // error code is set to zero.
-  std::vector<uint32_t> runAndSerialize(Module *module, int *error = nullptr);
-
-private:
-  std::vector<Pass *> mPasses;
-  // Keep all passes in a set so that we can delete them on destruction without
-  // worrying about duplicates
-  std::set<Pass *> mPassSet;
-  ContainerDeleter<std::set<Pass *>> mPassesDeleter;
-};
-
-} // spirit
-} // android
-
-#endif // RSOV_COMPILER_SPIRIT_PASS_QUEUE_H
diff --git a/rsov/compiler/spirit/pass_queue_test.cpp b/rsov/compiler/spirit/pass_queue_test.cpp
deleted file mode 100644
index 23e18e2..0000000
--- a/rsov/compiler/spirit/pass_queue_test.cpp
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "pass_queue.h"
-
-#include "file_utils.h"
-#include "spirit.h"
-#include "test_utils.h"
-#include "transformer.h"
-#include "gtest/gtest.h"
-
-#include <stdint.h>
-
-namespace android {
-namespace spirit {
-
-namespace {
-
-class MulToAddTransformer : public Transformer {
-public:
-  Instruction *transform(IMulInst *mul) override {
-    auto ret = new IAddInst(mul->mResultType, mul->mOperand1, mul->mOperand2);
-    ret->setId(mul->getId());
-    return ret;
-  }
-};
-
-class AddToDivTransformer : public Transformer {
-public:
-  Instruction *transform(IAddInst *add) override {
-    auto ret = new SDivInst(add->mResultType, add->mOperand1, add->mOperand2);
-    ret->setId(add->getId());
-    return ret;
-  }
-};
-
-class AddMulAfterAddTransformer : public Transformer {
-public:
-  Instruction *transform(IAddInst *add) override {
-    insert(add);
-    auto ret = new IMulInst(add->mResultType, add, add);
-    ret->setId(add->getId());
-    return ret;
-  }
-};
-
-class Deleter : public Transformer {
-public:
-  Instruction *transform(IMulInst *) override { return nullptr; }
-};
-
-class InPlaceModifyingPass : public Pass {
-public:
-  Module *run(Module *m, int *error) override {
-    m->getFloatType(64);
-    if (error) {
-      *error = 0;
-    }
-    return m;
-  }
-};
-
-} // annonymous namespace
-
-class PassQueueTest : public ::testing::Test {
-protected:
-  virtual void SetUp() { mWordsGreyscale = readWords("greyscale.spv"); }
-
-  std::vector<uint32_t> mWordsGreyscale;
-
-private:
-  std::vector<uint32_t> readWords(const char *testFile) {
-    static const std::string testDataPath(
-        "frameworks/rs/rsov/compiler/spirit/test_data/");
-    const std::string &fullPath = getAbsolutePath(testDataPath + testFile);
-    return readFile<uint32_t>(fullPath);
-  }
-};
-
-TEST_F(PassQueueTest, testMulToAdd) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m);
-
-  EXPECT_EQ(1, countEntity<IAddInst>(m.get()));
-  EXPECT_EQ(1, countEntity<IMulInst>(m.get()));
-
-  PassQueue passes;
-  passes.append(new MulToAddTransformer());
-  auto m1 = passes.run(m.get());
-
-  ASSERT_NE(nullptr, m1);
-
-  ASSERT_TRUE(m1->resolveIds());
-
-  EXPECT_EQ(2, countEntity<IAddInst>(m1));
-  EXPECT_EQ(0, countEntity<IMulInst>(m1));
-}
-
-TEST_F(PassQueueTest, testInPlaceModifying) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m);
-
-  EXPECT_EQ(1, countEntity<IAddInst>(m.get()));
-  EXPECT_EQ(1, countEntity<IMulInst>(m.get()));
-  EXPECT_EQ(1, countEntity<TypeFloatInst>(m.get()));
-
-  PassQueue passes;
-  passes.append(new InPlaceModifyingPass());
-  auto m1 = passes.run(m.get());
-
-  ASSERT_NE(nullptr, m1);
-
-  ASSERT_TRUE(m1->resolveIds());
-
-  EXPECT_EQ(1, countEntity<IAddInst>(m1));
-  EXPECT_EQ(1, countEntity<IMulInst>(m1));
-  EXPECT_EQ(2, countEntity<TypeFloatInst>(m1));
-}
-
-TEST_F(PassQueueTest, testDeletion) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m.get());
-
-  EXPECT_EQ(1, countEntity<IMulInst>(m.get()));
-
-  PassQueue passes;
-  passes.append(new Deleter());
-  auto m1 = passes.run(m.get());
-
-  // One of the ids from the input module is missing now.
-  ASSERT_EQ(nullptr, m1);
-}
-
-TEST_F(PassQueueTest, testMulToAddToDiv) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m);
-
-  EXPECT_EQ(1, countEntity<IAddInst>(m.get()));
-  EXPECT_EQ(1, countEntity<IMulInst>(m.get()));
-
-  PassQueue passes;
-  passes.append(new MulToAddTransformer());
-  passes.append(new AddToDivTransformer());
-  auto m1 = passes.run(m.get());
-
-  ASSERT_NE(nullptr, m1);
-
-  ASSERT_TRUE(m1->resolveIds());
-
-  EXPECT_EQ(0, countEntity<IAddInst>(m1));
-  EXPECT_EQ(0, countEntity<IMulInst>(m1));
-  EXPECT_EQ(2, countEntity<SDivInst>(m1));
-}
-
-TEST_F(PassQueueTest, testAMix) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m);
-
-  EXPECT_EQ(1, countEntity<IAddInst>(m.get()));
-  EXPECT_EQ(1, countEntity<IMulInst>(m.get()));
-  EXPECT_EQ(0, countEntity<SDivInst>(m.get()));
-  EXPECT_EQ(1, countEntity<TypeFloatInst>(m.get()));
-
-  PassQueue passes;
-  passes.append(new MulToAddTransformer());
-  passes.append(new AddToDivTransformer());
-  passes.append(new InPlaceModifyingPass());
-
-  std::unique_ptr<Module> m1(passes.run(m.get()));
-
-  ASSERT_NE(nullptr, m1);
-
-  ASSERT_TRUE(m1->resolveIds());
-
-  EXPECT_EQ(0, countEntity<IAddInst>(m1.get()));
-  EXPECT_EQ(0, countEntity<IMulInst>(m1.get()));
-  EXPECT_EQ(2, countEntity<SDivInst>(m1.get()));
-  EXPECT_EQ(2, countEntity<TypeFloatInst>(m1.get()));
-}
-
-TEST_F(PassQueueTest, testAnotherMix) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m);
-
-  EXPECT_EQ(1, countEntity<IAddInst>(m.get()));
-  EXPECT_EQ(1, countEntity<IMulInst>(m.get()));
-  EXPECT_EQ(0, countEntity<SDivInst>(m.get()));
-  EXPECT_EQ(1, countEntity<TypeFloatInst>(m.get()));
-
-  PassQueue passes;
-  passes.append(new InPlaceModifyingPass());
-  passes.append(new MulToAddTransformer());
-  passes.append(new AddToDivTransformer());
-  auto outputWords = passes.runAndSerialize(m.get());
-
-  std::unique_ptr<Module> m1(Deserialize<Module>(outputWords));
-
-  ASSERT_NE(nullptr, m1);
-
-  ASSERT_TRUE(m1->resolveIds());
-
-  EXPECT_EQ(0, countEntity<IAddInst>(m1.get()));
-  EXPECT_EQ(0, countEntity<IMulInst>(m1.get()));
-  EXPECT_EQ(2, countEntity<SDivInst>(m1.get()));
-  EXPECT_EQ(2, countEntity<TypeFloatInst>(m1.get()));
-}
-
-TEST_F(PassQueueTest, testMulToAddToDivFromWords) {
-  PassQueue passes;
-  passes.append(new MulToAddTransformer());
-  passes.append(new AddToDivTransformer());
-  auto outputWords = passes.run(std::move(mWordsGreyscale));
-
-  std::unique_ptr<Module> m1(Deserialize<Module>(outputWords));
-
-  ASSERT_NE(nullptr, m1);
-
-  ASSERT_TRUE(m1->resolveIds());
-
-  EXPECT_EQ(0, countEntity<IAddInst>(m1.get()));
-  EXPECT_EQ(0, countEntity<IMulInst>(m1.get()));
-  EXPECT_EQ(2, countEntity<SDivInst>(m1.get()));
-}
-
-TEST_F(PassQueueTest, testMulToAddToDivToWords) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m);
-
-  EXPECT_EQ(1, countEntity<IAddInst>(m.get()));
-  EXPECT_EQ(1, countEntity<IMulInst>(m.get()));
-
-  PassQueue passes;
-  passes.append(new MulToAddTransformer());
-  passes.append(new AddToDivTransformer());
-  auto outputWords = passes.runAndSerialize(m.get());
-
-  std::unique_ptr<Module> m1(Deserialize<Module>(outputWords));
-
-  ASSERT_NE(nullptr, m1);
-
-  ASSERT_TRUE(m1->resolveIds());
-
-  EXPECT_EQ(0, countEntity<IAddInst>(m1.get()));
-  EXPECT_EQ(0, countEntity<IMulInst>(m1.get()));
-  EXPECT_EQ(2, countEntity<SDivInst>(m1.get()));
-}
-
-TEST_F(PassQueueTest, testAddMulAfterAdd) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m);
-
-  EXPECT_EQ(1, countEntity<IAddInst>(m.get()));
-  EXPECT_EQ(1, countEntity<IMulInst>(m.get()));
-
-  constexpr int kNumMulToAdd = 100;
-
-  PassQueue passes;
-  for (int i = 0; i < kNumMulToAdd; i++) {
-    passes.append(new AddMulAfterAddTransformer());
-  }
-  auto outputWords = passes.runAndSerialize(m.get());
-
-  std::unique_ptr<Module> m1(Deserialize<Module>(outputWords));
-
-  ASSERT_NE(nullptr, m1);
-
-  ASSERT_TRUE(m1->resolveIds());
-
-  EXPECT_EQ(1, countEntity<IAddInst>(m1.get()));
-  EXPECT_EQ(1 + kNumMulToAdd, countEntity<IMulInst>(m1.get()));
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/spirit.h b/rsov/compiler/spirit/spirit.h
deleted file mode 100644
index 7f631b1..0000000
--- a/rsov/compiler/spirit/spirit.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 SPIRIT_H
-#define SPIRIT_H
-
-#include "builder.h"
-#include "instructions.h"
-#include "module.h"
-#include "word_stream.h"
-
-#endif // SPIRIT_H
diff --git a/rsov/compiler/spirit/stl_util.h b/rsov/compiler/spirit/stl_util.h
deleted file mode 100644
index 0e59d05..0000000
--- a/rsov/compiler/spirit/stl_util.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 STL_UTIL_H
-#define STL_UTIL_H
-
-namespace android {
-namespace spirit {
-
-template <class T> class ContainerDeleter {
-public:
-  ContainerDeleter(T &container) : mContainer(container) {}
-  ~ContainerDeleter() {
-    for (auto *ptr : mContainer) {
-      delete ptr;
-    }
-  }
-
-private:
-  T &mContainer;
-};
-
-} // namespace spirit
-} // namespace android
-
-#endif // STL_UTIL_H
diff --git a/rsov/compiler/spirit/test_data/greyscale.spt b/rsov/compiler/spirit/test_data/greyscale.spt
deleted file mode 100644
index 3cfde69..0000000
--- a/rsov/compiler/spirit/test_data/greyscale.spt
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 1
-; Bound: 75
-; Schema: 0
-               OpCapability Shader
-          %1 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID
-               OpExecutionMode %main LocalSize 4 1 1
-               OpSource GLSL 450
-               OpSourceExtension "GL_ARB_shading_language_420pack"
-               OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
-               OpSourceExtension "GL_GOOGLE_include_directive"
-               OpName %main "main"
-               OpName %greyscale_vf4_ "greyscale(vf4;"
-               OpName %p "p"
-               OpName %globalBuffer "globalBuffer"
-               OpMemberName %globalBuffer 0 "coeff"
-               OpMemberName %globalBuffer 1 "width"
-               OpMemberName %globalBuffer 2 "height"
-               OpName %globalBlock "globalBlock"
-               OpName %xy "xy"
-               OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
-               OpName %inputPixel "inputPixel"
-               OpName %inputTexture "inputTexture"
-               OpName %res "res"
-               OpName %x "x"
-               OpName %y "y"
-               OpName %outputBufferS "outputBufferS"
-               OpMemberName %outputBufferS 0 "buf"
-               OpName %outputBuffer "outputBuffer"
-               OpMemberDecorate %globalBuffer 0 Offset 0
-               OpMemberDecorate %globalBuffer 1 Offset 16
-               OpMemberDecorate %globalBuffer 2 Offset 20
-               OpDecorate %globalBuffer BufferBlock
-               OpDecorate %globalBlock DescriptorSet 0
-               OpDecorate %globalBlock Binding 2
-               OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
-               OpDecorate %inputTexture DescriptorSet 0
-               OpDecorate %inputTexture Binding 0
-               OpDecorate %_runtimearr_v4float ArrayStride 16
-               OpMemberDecorate %outputBufferS 0 Offset 0
-               OpDecorate %outputBufferS BufferBlock
-               OpDecorate %outputBuffer DescriptorSet 0
-               OpDecorate %outputBuffer Binding 1
-               OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
-       %void = OpTypeVoid
-          %3 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-          %8 = OpTypeFunction %v4float %v4float
-        %int = OpTypeInt 32 1
-%globalBuffer = OpTypeStruct %v4float %int %int
-%_ptr_Uniform_globalBuffer = OpTypePointer Uniform %globalBuffer
-%globalBlock = OpVariable %_ptr_Uniform_globalBuffer Uniform
-         %16 = OpConstant %int 0
-%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
-     %v2uint = OpTypeVector %uint 2
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %37 = OpTypeImage %float 2D 0 0 0 1 Unknown
-         %38 = OpTypeSampledImage %37
-%_ptr_UniformConstant_38 = OpTypePointer UniformConstant %38
-%inputTexture = OpVariable %_ptr_UniformConstant_38 UniformConstant
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %50 = OpConstant %uint 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-         %55 = OpConstant %uint 1
-%_runtimearr_v4float = OpTypeRuntimeArray %v4float
-%outputBufferS = OpTypeStruct %_runtimearr_v4float
-%_ptr_Uniform_outputBufferS = OpTypePointer Uniform %outputBufferS
-%outputBuffer = OpVariable %_ptr_Uniform_outputBufferS Uniform
-         %63 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-         %73 = OpConstant %uint 4
-%gl_WorkGroupSize = OpConstantComposite %v3uint %73 %55 %55
-       %main = OpFunction %void None %3
-          %5 = OpLabel
-         %xy = OpVariable %_ptr_Function_v2int Function
- %inputPixel = OpVariable %_ptr_Function_v4float Function
-        %res = OpVariable %_ptr_Function_v4float Function
-          %x = OpVariable %_ptr_Function_uint Function
-          %y = OpVariable %_ptr_Function_uint Function
-         %32 = OpLoad %v3uint %gl_GlobalInvocationID
-         %33 = OpVectorShuffle %v2uint %32 %32 0 1
-         %34 = OpBitcast %v2int %33
-               OpStore %xy %34
-         %41 = OpLoad %38 %inputTexture
-         %42 = OpLoad %v2int %xy
-         %43 = OpImage %37 %41
-         %44 = OpImageFetch %v4float %43 %42 Lod %16
-               OpStore %inputPixel %44
-         %46 = OpLoad %v4float %inputPixel
-         %47 = OpFunctionCall %v4float %greyscale_vf4_ %46
-               OpStore %res %47
-         %52 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %50
-         %53 = OpLoad %uint %52
-               OpStore %x %53
-         %56 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %55
-         %57 = OpLoad %uint %56
-               OpStore %y %57
-         %62 = OpLoad %uint %y
-         %65 = OpAccessChain %_ptr_Uniform_int %globalBlock %63
-         %66 = OpLoad %int %65
-         %67 = OpBitcast %uint %66
-         %68 = OpIMul %uint %62 %67
-         %69 = OpLoad %uint %x
-         %70 = OpIAdd %uint %68 %69
-         %71 = OpLoad %v4float %res
-         %72 = OpAccessChain %_ptr_Uniform_v4float %outputBuffer %16 %70
-               OpStore %72 %71
-               OpReturn
-               OpFunctionEnd
-%greyscale_vf4_ = OpFunction %v4float None %8
-          %p = OpFunctionParameter %v4float
-         %11 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_v4float %globalBlock %16
-         %19 = OpLoad %v4float %18
-         %20 = OpDot %float %p %19
-         %21 = OpCompositeConstruct %v4float %20 %20 %20 %20
-               OpReturnValue %21
-               OpFunctionEnd
diff --git a/rsov/compiler/spirit/test_data/greyscale.spv b/rsov/compiler/spirit/test_data/greyscale.spv
deleted file mode 100644
index 97e39c1..0000000
--- a/rsov/compiler/spirit/test_data/greyscale.spv
+++ /dev/null
Binary files differ
diff --git a/rsov/compiler/spirit/test_data/greyscale2.spt b/rsov/compiler/spirit/test_data/greyscale2.spt
deleted file mode 100644
index 51dc530..0000000
--- a/rsov/compiler/spirit/test_data/greyscale2.spt
+++ /dev/null
@@ -1,118 +0,0 @@
-; SPIR-V
-; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 1
-; Bound: 67
-; Schema: 0
-               OpCapability Shader
-          %1 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID
-               OpExecutionMode %main LocalSize 2 1 1
-               OpSource GLSL 450
-               OpSourceExtension "GL_ARB_shading_language_420pack"
-               OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
-               OpSourceExtension "GL_GOOGLE_include_directive"
-               OpName %main "main"
-               OpName %xy "xy"
-               OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
-               OpName %inputPixel "inputPixel"
-               OpName %inputTexture "inputTexture"
-               OpName %res "res"
-               OpName %globalBuffer "globalBuffer"
-               OpMemberName %globalBuffer 0 "coeff"
-               OpMemberName %globalBuffer 1 "width"
-               OpMemberName %globalBuffer 2 "height"
-               OpName %globalBlock "globalBlock"
-               OpName %x "x"
-               OpName %y "y"
-               OpName %outputBufferS "outputBufferS"
-               OpMemberName %outputBufferS 0 "buf"
-               OpName %outputBuffer "outputBuffer"
-               OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
-               OpDecorate %inputTexture DescriptorSet 0
-               OpDecorate %inputTexture Binding 0
-               OpMemberDecorate %globalBuffer 0 Offset 0
-               OpMemberDecorate %globalBuffer 1 Offset 16
-               OpMemberDecorate %globalBuffer 2 Offset 20
-               OpDecorate %globalBuffer BufferBlock
-               OpDecorate %globalBlock DescriptorSet 0
-               OpDecorate %globalBlock Binding 2
-               OpDecorate %_runtimearr_v4float ArrayStride 16
-               OpMemberDecorate %outputBufferS 0 Offset 0
-               OpDecorate %outputBufferS BufferBlock
-               OpDecorate %outputBuffer DescriptorSet 0
-               OpDecorate %outputBuffer Binding 1
-               OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
-       %void = OpTypeVoid
-          %3 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
-     %v2uint = OpTypeVector %uint 2
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %22 = OpTypeImage %float 2D 0 0 0 1 Unknown
-         %23 = OpTypeSampledImage %22
-%_ptr_UniformConstant_23 = OpTypePointer UniformConstant %23
-%inputTexture = OpVariable %_ptr_UniformConstant_23 UniformConstant
-         %28 = OpConstant %int 0
-%globalBuffer = OpTypeStruct %v4float %int %int
-%_ptr_Uniform_globalBuffer = OpTypePointer Uniform %globalBuffer
-%globalBlock = OpVariable %_ptr_Uniform_globalBuffer Uniform
-%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %42 = OpConstant %uint 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-         %47 = OpConstant %uint 1
-%_runtimearr_v4float = OpTypeRuntimeArray %v4float
-%outputBufferS = OpTypeStruct %_runtimearr_v4float
-%_ptr_Uniform_outputBufferS = OpTypePointer Uniform %outputBufferS
-%outputBuffer = OpVariable %_ptr_Uniform_outputBufferS Uniform
-         %55 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-         %65 = OpConstant %uint 2
-%gl_WorkGroupSize = OpConstantComposite %v3uint %65 %47 %47
-       %main = OpFunction %void None %3
-          %5 = OpLabel
-         %xy = OpVariable %_ptr_Function_v2int Function
- %inputPixel = OpVariable %_ptr_Function_v4float Function
-        %res = OpVariable %_ptr_Function_v4float Function
-          %x = OpVariable %_ptr_Function_uint Function
-          %y = OpVariable %_ptr_Function_uint Function
-         %15 = OpLoad %v3uint %gl_GlobalInvocationID
-         %16 = OpVectorShuffle %v2uint %15 %15 0 1
-         %17 = OpBitcast %v2int %16
-               OpStore %xy %17
-         %26 = OpLoad %23 %inputTexture
-         %27 = OpLoad %v2int %xy
-         %29 = OpImageFetch %v4float %26 %27 Lod %28
-               OpStore %inputPixel %29
-         %31 = OpLoad %v4float %inputPixel
-         %36 = OpAccessChain %_ptr_Uniform_v4float %globalBlock %28
-         %37 = OpLoad %v4float %36
-         %38 = OpDot %float %31 %37
-         %39 = OpCompositeConstruct %v4float %38 %38 %38 %38
-               OpStore %res %39
-         %44 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %42
-         %45 = OpLoad %uint %44
-               OpStore %x %45
-         %48 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %47
-         %49 = OpLoad %uint %48
-               OpStore %y %49
-         %54 = OpLoad %uint %y
-         %57 = OpAccessChain %_ptr_Uniform_int %globalBlock %55
-         %58 = OpLoad %int %57
-         %59 = OpBitcast %uint %58
-         %60 = OpIMul %uint %54 %59
-         %61 = OpLoad %uint %x
-         %62 = OpIAdd %uint %60 %61
-         %63 = OpLoad %v4float %res
-         %64 = OpAccessChain %_ptr_Uniform_v4float %outputBuffer %28 %62
-               OpStore %64 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/rsov/compiler/spirit/test_data/greyscale2.spv b/rsov/compiler/spirit/test_data/greyscale2.spv
deleted file mode 100644
index 088d96c..0000000
--- a/rsov/compiler/spirit/test_data/greyscale2.spv
+++ /dev/null
Binary files differ
diff --git a/rsov/compiler/spirit/test_data/greyscale3.spt b/rsov/compiler/spirit/test_data/greyscale3.spt
deleted file mode 100644
index ef60d11..0000000
--- a/rsov/compiler/spirit/test_data/greyscale3.spt
+++ /dev/null
@@ -1,115 +0,0 @@
-; SPIR-V
-; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 1
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-          %1 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID
-               OpExecutionMode %main LocalSize 1 1 1
-               OpSource GLSL 450
-               OpSourceExtension "GL_ARB_shading_language_420pack"
-               OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
-               OpSourceExtension "GL_GOOGLE_include_directive"
-               OpName %main "main"
-               OpName %xy "xy"
-               OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
-               OpName %inputPixel "inputPixel"
-               OpName %inputTexture "inputTexture"
-               OpName %res "res"
-               OpName %globalBuffer "globalBuffer"
-               OpMemberName %globalBuffer 0 "coeff"
-               OpMemberName %globalBuffer 1 "width"
-               OpMemberName %globalBuffer 2 "height"
-               OpName %globalBlock "globalBlock"
-               OpName %x "x"
-               OpName %y "y"
-               OpName %outputBufferS "outputBufferS"
-               OpMemberName %outputBufferS 0 "buf"
-               OpName %outputBuffer "outputBuffer"
-               OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
-               OpDecorate %inputTexture DescriptorSet 0
-               OpDecorate %inputTexture Binding 0
-               OpMemberDecorate %globalBuffer 0 Offset 0
-               OpMemberDecorate %globalBuffer 1 Offset 16
-               OpMemberDecorate %globalBuffer 2 Offset 20
-               OpDecorate %globalBuffer BufferBlock
-               OpDecorate %globalBlock DescriptorSet 0
-               OpDecorate %globalBlock Binding 2
-               OpDecorate %_runtimearr_v4float ArrayStride 16
-               OpMemberDecorate %outputBufferS 0 Offset 0
-               OpDecorate %outputBufferS BufferBlock
-               OpDecorate %outputBuffer DescriptorSet 0
-               OpDecorate %outputBuffer Binding 1
-       %void = OpTypeVoid
-          %3 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
-     %v2uint = OpTypeVector %uint 2
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %22 = OpTypeImage %float 2D 0 0 0 1 Unknown
-         %23 = OpTypeSampledImage %22
-%_ptr_UniformConstant_23 = OpTypePointer UniformConstant %23
-%inputTexture = OpVariable %_ptr_UniformConstant_23 UniformConstant
-         %28 = OpConstant %int 0
-%globalBuffer = OpTypeStruct %v4float %int %int
-%_ptr_Uniform_globalBuffer = OpTypePointer Uniform %globalBuffer
-%globalBlock = OpVariable %_ptr_Uniform_globalBuffer Uniform
-%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %42 = OpConstant %uint 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-         %47 = OpConstant %uint 1
-%_runtimearr_v4float = OpTypeRuntimeArray %v4float
-%outputBufferS = OpTypeStruct %_runtimearr_v4float
-%_ptr_Uniform_outputBufferS = OpTypePointer Uniform %outputBufferS
-%outputBuffer = OpVariable %_ptr_Uniform_outputBufferS Uniform
-         %55 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %main = OpFunction %void None %3
-          %5 = OpLabel
-         %xy = OpVariable %_ptr_Function_v2int Function
- %inputPixel = OpVariable %_ptr_Function_v4float Function
-        %res = OpVariable %_ptr_Function_v4float Function
-          %x = OpVariable %_ptr_Function_uint Function
-          %y = OpVariable %_ptr_Function_uint Function
-         %15 = OpLoad %v3uint %gl_GlobalInvocationID
-         %16 = OpVectorShuffle %v2uint %15 %15 0 1
-         %17 = OpBitcast %v2int %16
-               OpStore %xy %17
-         %26 = OpLoad %23 %inputTexture
-         %27 = OpLoad %v2int %xy
-         %29 = OpImageFetch %v4float %26 %27 Lod %28
-               OpStore %inputPixel %29
-         %31 = OpLoad %v4float %inputPixel
-         %36 = OpAccessChain %_ptr_Uniform_v4float %globalBlock %28
-         %37 = OpLoad %v4float %36
-         %38 = OpDot %float %31 %37
-         %39 = OpCompositeConstruct %v4float %38 %38 %38 %38
-               OpStore %res %39
-         %44 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %42
-         %45 = OpLoad %uint %44
-               OpStore %x %45
-         %48 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %47
-         %49 = OpLoad %uint %48
-               OpStore %y %49
-         %54 = OpLoad %uint %y
-         %57 = OpAccessChain %_ptr_Uniform_int %globalBlock %55
-         %58 = OpLoad %int %57
-         %59 = OpBitcast %uint %58
-         %60 = OpIMul %uint %54 %59
-         %61 = OpLoad %uint %x
-         %62 = OpIAdd %uint %60 %61
-         %63 = OpLoad %v4float %res
-         %64 = OpAccessChain %_ptr_Uniform_v4float %outputBuffer %28 %62
-               OpStore %64 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/rsov/compiler/spirit/test_data/greyscale3.spv b/rsov/compiler/spirit/test_data/greyscale3.spv
deleted file mode 100644
index 5f5cc8b..0000000
--- a/rsov/compiler/spirit/test_data/greyscale3.spv
+++ /dev/null
Binary files differ
diff --git a/rsov/compiler/spirit/test_data/invert.spv b/rsov/compiler/spirit/test_data/invert.spv
deleted file mode 100644
index 604c589..0000000
--- a/rsov/compiler/spirit/test_data/invert.spv
+++ /dev/null
Binary files differ
diff --git a/rsov/compiler/spirit/test_utils.h b/rsov/compiler/spirit/test_utils.h
deleted file mode 100644
index c255e1b..0000000
--- a/rsov/compiler/spirit/test_utils.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 TEST_UTILS_H
-#define TEST_UTILS_H
-
-#include "gtest/gtest.h"
-
-namespace android {
-namespace spirit {
-
-template <typename T> class EntityCounter : public DoNothingVisitor {
-public:
-  EntityCounter() : mCount(0) {}
-
-  void visit(T *) override { mCount++; }
-
-  int getCount() const { return mCount; }
-
-private:
-  int mCount;
-};
-
-template <typename T> int countEntity(Entity *e) {
-  EntityCounter<T> v;
-  e->accept(&v);
-  return v.getCount();
-}
-
-// Returns a caller owned string for the full path to the relative path inside
-// the Android source tree
-static inline std::string getAbsolutePath(const std::string &relativePath) {
-  std::string full(getenv("ANDROID_BUILD_TOP"));
-  return full.append("/").append(relativePath);
-}
-
-} // namespace spirit
-} // namespace android
-
-#endif // TEST_UTILS_H
diff --git a/rsov/compiler/spirit/transformer.cpp b/rsov/compiler/spirit/transformer.cpp
deleted file mode 100644
index 0eb9621..0000000
--- a/rsov/compiler/spirit/transformer.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "transformer.h"
-
-#include "module.h"
-
-namespace android {
-namespace spirit {
-
-Module *Transformer::run(Module *module, int *error) {
-  auto words = runAndSerialize(module, error);
-  return Deserialize<Module>(words);
-}
-
-std::vector<uint32_t> Transformer::runAndSerialize(Module *m, int *error) {
-  mModule = m;
-
-  // Since contents in the decoration or global section may change, transform
-  // and serialize the function definitions first.
-  mVisit = 0;
-  mShouldRecord = false;
-  mStream = mStreamFunctions.get();
-  m->accept(this);
-
-  // Record in the annotation section any new annotations added
-  m->consolidateAnnotations();
-
-  // After the functions are transformed, serialize the other sections to
-  // capture any changes made during the function transformation, and append
-  // the new words from function serialization.
-
-  mVisit = 1;
-  mShouldRecord = true;
-  mStream = mStreamFinal.get();
-
-  // TODO fix Module::accept() to have the header serialization code there
-  m->SerializeHeader(*mStream);
-  m->accept(this);
-
-  auto output = mStream->getWords();
-  auto functions = mStreamFunctions->getWords();
-  output.insert(output.end(), functions.begin(), functions.end());
-
-  if (error) {
-    *error = 0;
-  }
-
-  return output;
-}
-
-void Transformer::insert(Instruction *inst) {
-  // TODO: warn on nullptr inst
-  inst->Serialize(*mStream);
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/transformer.h b/rsov/compiler/spirit/transformer.h
deleted file mode 100644
index e2293f7..0000000
--- a/rsov/compiler/spirit/transformer.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 TRANSFORMER_H
-#define TRANSFORMER_H
-
-#include <vector>
-
-#include "instructions.h"
-#include "pass.h"
-#include "visitor.h"
-#include "word_stream.h"
-
-namespace android {
-namespace spirit {
-
-// Transformer is the base class for a transformation that transforms a Module.
-// An instance of a derived class can be added to a PassQueue and applied to a
-// Module.
-class Transformer : public Pass, public DoNothingVisitor {
-public:
-  Transformer()
-      : mStreamFunctions(WordStream::Create()),
-        mStreamFinal(WordStream::Create()) {}
-
-  virtual ~Transformer() {}
-
-  Module *run(Module *m, int *error = nullptr) override;
-
-  std::vector<uint32_t> runAndSerialize(Module *module,
-                                        int *error = nullptr) override;
-
-  // Returns the module being transformed
-  Module *getModule() const { return mModule; }
-
-  // Inserts a new instruction before the current instruction.
-  // Call this from a transform() method in a derived class.
-  void insert(Instruction *);
-
-  void visit(FunctionDefinition *fdef) override {
-    mShouldRecord = (mVisit == 0);
-    DoNothingVisitor::visit(fdef);
-  }
-
-  // Transforms the current instruction into a new instruction as specified by
-  // the return value. If returns nullptr, deletes the current instruction.
-  // Override this in a derived class for desired behavior.
-#define HANDLE_INSTRUCTION(OPCODE, INST_CLASS)                                 \
-  virtual Instruction *transform(INST_CLASS *inst) {                           \
-    return static_cast<Instruction *>(inst);                                   \
-  }                                                                            \
-  virtual void visit(INST_CLASS *inst) {                                       \
-    if (!mShouldRecord) {                                                      \
-      return;                                                                  \
-    }                                                                          \
-    if (Instruction *transformed = transform(inst)) {                          \
-      transformed->Serialize(*mStream);                                        \
-    }                                                                          \
-  }
-#include "instruction_dispatches_generated.h"
-#undef HANDLE_INSTRUCTION
-
-private:
-  Module *mModule;
-  int mVisit;
-  bool mShouldRecord;
-  std::unique_ptr<WordStream> mStreamFunctions;
-  std::unique_ptr<WordStream> mStreamFinal;
-  WordStream *mStream;
-};
-
-} // namespace spirit
-} // namespace android
-
-#endif // TRANSFORMER_H
diff --git a/rsov/compiler/spirit/transformer_test.cpp b/rsov/compiler/spirit/transformer_test.cpp
deleted file mode 100644
index a78969f..0000000
--- a/rsov/compiler/spirit/transformer_test.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "transformer.h"
-
-#include "file_utils.h"
-#include "spirit.h"
-#include "test_utils.h"
-#include "gtest/gtest.h"
-
-#include <stdint.h>
-
-namespace android {
-namespace spirit {
-
-namespace {
-
-class MulToAddTransformer : public Transformer {
-public:
-  Instruction *transform(IMulInst *mul) override {
-    auto ret = new IAddInst(mul->mResultType, mul->mOperand1, mul->mOperand2);
-    ret->setId(mul->getId());
-    return ret;
-  }
-};
-
-class Deleter : public Transformer {
-public:
-  Instruction *transform(IMulInst *) override { return nullptr; }
-};
-
-class NewDataTypeTransformer : public Transformer {
-public:
-  Instruction *transform(IMulInst *mul) override {
-    insert(mul);
-    auto *DoubleTy = getModule()->getFloatType(64);
-    ConstantInst *ConstDouble2 = getModule()->getConstant(DoubleTy, 2.0);
-    auto ret = new IAddInst(DoubleTy, mul, ConstDouble2);
-
-    IdResult id = ret->getId();
-    ret->setId(mul->getId());
-    mul->setId(id);
-
-    return ret;
-  }
-};
-
-} // annonymous namespace
-
-class TransformerTest : public ::testing::Test {
-protected:
-  virtual void SetUp() { mWordsGreyscale = readWords("greyscale.spv"); }
-
-  std::vector<uint32_t> mWordsGreyscale;
-
-private:
-  std::vector<uint32_t> readWords(const char *testFile) {
-    static const std::string testDataPath(
-        "frameworks/rs/rsov/compiler/spirit/test_data/");
-    const std::string &fullPath = getAbsolutePath(testDataPath + testFile);
-    return readFile<uint32_t>(fullPath);
-  }
-};
-
-TEST_F(TransformerTest, testMulToAdd) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m);
-
-  EXPECT_EQ(1, countEntity<IAddInst>(m.get()));
-  EXPECT_EQ(1, countEntity<IMulInst>(m.get()));
-
-  MulToAddTransformer trans;
-  std::unique_ptr<Module> m1(trans.run(m.get()));
-
-  ASSERT_NE(nullptr, m1);
-
-  ASSERT_TRUE(m1->resolveIds());
-
-  EXPECT_EQ(2, countEntity<IAddInst>(m1.get()));
-  EXPECT_EQ(0, countEntity<IMulInst>(m1.get()));
-}
-
-TEST_F(TransformerTest, testDeletion) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m.get());
-
-  EXPECT_EQ(1, countEntity<IMulInst>(m.get()));
-
-  Deleter trans;
-  std::unique_ptr<Module> m1(trans.run(m.get()));
-
-  ASSERT_NE(nullptr, m1.get());
-
-  EXPECT_EQ(1, countEntity<IAddInst>(m1.get()));
-  EXPECT_EQ(0, countEntity<IMulInst>(m1.get()));
-}
-
-TEST_F(TransformerTest, testAddInstructionUsingNewDataType) {
-  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
-
-  ASSERT_NE(nullptr, m.get());
-
-  EXPECT_EQ(5, countEntity<ConstantInst>(m.get()));
-  EXPECT_EQ(1, countEntity<TypeFloatInst>(m.get()));
-  EXPECT_EQ(1, countEntity<IMulInst>(m.get()));
-
-  NewDataTypeTransformer trans;
-  std::unique_ptr<Module> m1(trans.run(m.get()));
-
-  ASSERT_NE(nullptr, m1.get());
-
-  EXPECT_EQ(6, countEntity<ConstantInst>(m.get()));
-  EXPECT_EQ(2, countEntity<TypeFloatInst>(m1.get()));
-  EXPECT_EQ(2, countEntity<IAddInst>(m1.get()));
-  EXPECT_EQ(1, countEntity<IMulInst>(m1.get()));
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/visitor.cpp b/rsov/compiler/spirit/visitor.cpp
deleted file mode 100644
index dcc6322..0000000
--- a/rsov/compiler/spirit/visitor.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "visitor.h"
-
-#include "instructions.h"
-#include "module.h"
-
-namespace android {
-namespace spirit {
-
-void DoNothingVisitor::visit(Entity *e) { e->accept(this); }
-
-void DoNothingVisitor::visit(Module *m) { m->accept(this); }
-
-void DoNothingVisitor::visit(EntryPointDefinition *entry) {
-  entry->accept(this);
-}
-
-void DoNothingVisitor::visit(DebugInfoSection *dinfo) { dinfo->accept(this); }
-
-void DoNothingVisitor::visit(AnnotationSection *a) { a->accept(this); }
-
-void DoNothingVisitor::visit(GlobalSection *g) { g->accept(this); }
-void DoNothingVisitor::visit(FunctionDeclaration *fdecl) {
-  fdecl->accept(this);
-}
-void DoNothingVisitor::visit(Block *b) { b->accept(this); }
-void DoNothingVisitor::visit(FunctionDefinition *fdef) { fdef->accept(this); }
-void DoNothingVisitor::visit(Instruction *inst) { inst->accept(this); }
-#define HANDLE_INSTRUCTION(OPCODE, INST_CLASS)                                 \
-  void DoNothingVisitor::visit(INST_CLASS *) {}
-#include "instruction_dispatches_generated.h"
-#undef HANDLE_INSTRUCTION
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/visitor.h b/rsov/compiler/spirit/visitor.h
deleted file mode 100644
index 0e41537..0000000
--- a/rsov/compiler/spirit/visitor.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 VISITOR_H
-#define VISITOR_H
-
-#include <functional>
-
-namespace android {
-namespace spirit {
-
-class Entity;
-class Module;
-class EntryPointDefinition;
-class DebugInfoSection;
-class AnnotationSection;
-class GlobalSection;
-class FunctionDeclaration;
-class Block;
-class FunctionDefinition;
-class Instruction;
-#define HANDLE_INSTRUCTION(OPCODE, INST_CLASS) class INST_CLASS;
-#include "instruction_dispatches_generated.h"
-#undef HANDLE_INSTRUCTION
-
-class IVisitor {
-public:
-  virtual ~IVisitor() {}
-
-  virtual void visit(Entity *) = 0;
-  virtual void visit(Module *) = 0;
-  virtual void visit(EntryPointDefinition *) = 0;
-  virtual void visit(DebugInfoSection *) = 0;
-  virtual void visit(AnnotationSection *) = 0;
-  virtual void visit(GlobalSection *) = 0;
-  virtual void visit(FunctionDeclaration *) = 0;
-  virtual void visit(Block *) = 0;
-  virtual void visit(FunctionDefinition *) = 0;
-  virtual void visit(Instruction *) = 0;
-#define HANDLE_INSTRUCTION(OPCODE, INST_CLASS)                                 \
-  virtual void visit(INST_CLASS *) = 0;
-#include "instruction_dispatches_generated.h"
-#undef HANDLE_INSTRUCTION
-};
-
-class DoNothingVisitor : public IVisitor {
-public:
-  virtual ~DoNothingVisitor() {}
-
-  virtual void visit(Entity *e);
-  virtual void visit(Module *m);
-  virtual void visit(EntryPointDefinition *);
-  virtual void visit(DebugInfoSection *dinfo);
-  virtual void visit(AnnotationSection *a);
-  virtual void visit(GlobalSection *g);
-  virtual void visit(FunctionDeclaration *fdecl);
-  virtual void visit(Block *b);
-  virtual void visit(FunctionDefinition *fdef);
-  // This visit(Instruction *) necessary?
-  virtual void visit(Instruction *inst);
-#define HANDLE_INSTRUCTION(OPCODE, INST_CLASS) virtual void visit(INST_CLASS *);
-#include "instruction_dispatches_generated.h"
-#undef HANDLE_INSTRUCTION
-};
-
-template <typename T> class InstructionVisitor : public DoNothingVisitor {
-public:
-  InstructionVisitor(T action) : mAction(action) {}
-
-  virtual ~InstructionVisitor() {}
-
-#define HANDLE_INSTRUCTION(OPCODE, INST_CLASS)                                 \
-  void visit(INST_CLASS *inst) override { mAction((Instruction *)inst); }
-#include "instruction_dispatches_generated.h"
-#undef HANDLE_INSTRUCTION
-
-private:
-  T mAction;
-};
-
-template <typename T> static IVisitor *CreateInstructionVisitor(T action) {
-  return new InstructionVisitor<decltype(action)>(action);
-}
-
-} // namespace spirit
-} // namespace android
-
-#endif // VISITOR_H
diff --git a/rsov/compiler/spirit/word_stream.cpp b/rsov/compiler/spirit/word_stream.cpp
deleted file mode 100644
index 7061577..0000000
--- a/rsov/compiler/spirit/word_stream.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "word_stream.h"
-
-#include "file_utils.h"
-#include "word_stream_impl.h"
-
-namespace android {
-namespace spirit {
-
-InputWordStream *InputWordStream::Create() { return new WordStreamImpl(); }
-
-InputWordStream *InputWordStream::Create(std::vector<uint32_t> &&words) {
-  return new WordStreamImpl(words);
-}
-
-InputWordStream *InputWordStream::Create(const std::vector<uint32_t> &words) {
-  return new WordStreamImpl(words);
-}
-
-InputWordStream *InputWordStream::Create(const std::vector<uint8_t> &bytes) {
-  std::vector<uint32_t> words((uint32_t *)bytes.data(),
-                              (uint32_t *)(bytes.data() + bytes.size()));
-  return InputWordStream::Create(words);
-}
-
-InputWordStream *InputWordStream::Create(const char *filePath) {
-  return InputWordStream::Create(readFile<uint32_t>(filePath));
-}
-
-OutputWordStream *OutputWordStream::Create() { return new WordStreamImpl(); }
-
-WordStream *WordStream::Create() { return new WordStreamImpl(); }
-
-WordStream *WordStream::Create(const std::vector<uint32_t> &words) {
-  return new WordStreamImpl(words);
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/word_stream.h b/rsov/compiler/spirit/word_stream.h
deleted file mode 100644
index 94333bb..0000000
--- a/rsov/compiler/spirit/word_stream.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 WORD_STREAM_H
-#define WORD_STREAM_H
-
-#include "core_defs.h"
-#include "types_generated.h"
-
-#include <stdint.h>
-
-#include <string>
-#include <vector>
-
-namespace android {
-namespace spirit {
-
-struct IdRef;
-class Instruction;
-
-class InputWordStream {
-public:
-  static InputWordStream *Create();
-  static InputWordStream *Create(std::vector<uint32_t> &&words);
-  static InputWordStream *Create(const std::vector<uint32_t> &words);
-  static InputWordStream *Create(const std::vector<uint8_t> &bytes);
-  static InputWordStream *Create(const char *fileName);
-
-  virtual ~InputWordStream() {}
-
-  virtual bool empty() const = 0;
-  virtual uint32_t operator*() = 0;
-
-  virtual InputWordStream &operator>>(uint32_t *RHS) = 0;
-  virtual InputWordStream &operator>>(LiteralContextDependentNumber *num) = 0;
-  virtual InputWordStream &operator>>(std::string *str) = 0;
-
-  InputWordStream &operator>>(int32_t *RHS) { return *this >> (uint32_t *)RHS; }
-
-  InputWordStream &operator>>(OpCodeAndWordCount *codeCount) {
-    uint32_t word;
-    *this >> &word;
-    *codeCount = word;
-    return *this;
-  }
-
-  InputWordStream &operator>>(IdRef *RHS) {
-    // The referred instruction will be resolved later towards the end of the
-    // deserialization of the module after all instructions have been
-    // deserialized.
-    // It cannot be resolved here because it may be a forward reference.
-    RHS->mInstruction = nullptr;
-    return *this >> &RHS->mId;
-    ;
-  }
-
-  InputWordStream &operator>>(PairLiteralIntegerIdRef *RHS) {
-    return *this >> &RHS->mField0 >> &RHS->mField1;
-  }
-
-  InputWordStream &operator>>(PairIdRefLiteralInteger *RHS) {
-    return *this >> &RHS->mField0 >> &RHS->mField1;
-  }
-
-  InputWordStream &operator>>(PairIdRefIdRef *RHS) {
-    return *this >> &RHS->mField0 >> &RHS->mField1;
-  }
-
-#define HANDLE_ENUM(Enum)                                                      \
-  InputWordStream &operator>>(Enum *RHS) { return *this >> (uint32_t *)RHS; }
-#include "enum_dispatches_generated.h"
-#undef HANDLE_ENUM
-};
-
-class OutputWordStream {
-public:
-  static OutputWordStream *Create();
-
-  virtual ~OutputWordStream() {}
-
-  virtual std::vector<uint32_t> getWords() = 0;
-
-  virtual OutputWordStream &operator<<(const uint32_t RHS) = 0;
-  virtual OutputWordStream &
-  operator<<(const LiteralContextDependentNumber &RHS) = 0;
-  virtual OutputWordStream &operator<<(const std::string &str) = 0;
-
-  OutputWordStream &operator<<(const int32_t RHS) {
-    return *this << (uint32_t)RHS;
-  }
-
-  OutputWordStream &operator<<(const OpCodeAndWordCount codeCount) {
-    return *this << (uint32_t)codeCount;
-  }
-
-  OutputWordStream &operator<<(const IdRef &RHS) {
-    return *this << RHS.mId;
-  }
-
-  OutputWordStream &operator<<(const PairLiteralIntegerIdRef &RHS) {
-    return *this << RHS.mField0 << RHS.mField1;
-  }
-
-  OutputWordStream &operator<<(const PairIdRefLiteralInteger &RHS) {
-    return *this << RHS.mField0 << RHS.mField1;
-  }
-
-  OutputWordStream &operator<<(const PairIdRefIdRef &RHS) {
-    return *this << RHS.mField0 << RHS.mField1;
-  }
-
-#define HANDLE_ENUM(Enum)                                                      \
-  OutputWordStream &operator<<(const Enum RHS) {                               \
-    return *this << static_cast<uint32_t>(RHS);                                \
-  }
-#include "enum_dispatches_generated.h"
-#undef HANDLE_ENUM
-};
-
-class WordStream : public InputWordStream, public OutputWordStream {
-public:
-  static WordStream *Create();
-  static WordStream *Create(const std::vector<uint32_t> &words);
-
-  virtual ~WordStream() {}
-};
-
-} // namespace spirit
-} // namespace android
-
-#endif // WORD_STREAM_H
diff --git a/rsov/compiler/spirit/word_stream_impl.cpp b/rsov/compiler/spirit/word_stream_impl.cpp
deleted file mode 100644
index 33749e7..0000000
--- a/rsov/compiler/spirit/word_stream_impl.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "word_stream_impl.h"
-
-namespace android {
-namespace spirit {
-
-WordStreamImpl::WordStreamImpl() {}
-
-WordStreamImpl::WordStreamImpl(const std::vector<uint32_t> &words)
-    : mWords(words), mIter(mWords.begin()) {}
-
-WordStreamImpl::WordStreamImpl(std::vector<uint32_t> &&words)
-    : mWords(words), mIter(mWords.begin()) {}
-
-WordStreamImpl &WordStreamImpl::operator<<(const std::string &str) {
-  const size_t len = str.length();
-  const uint32_t *begin = (uint32_t *)str.c_str();
-  const uint32_t *end = begin + (len / 4);
-  mWords.insert(mWords.end(), begin, end);
-
-  uint32_t lastWord = *end;
-  uint32_t mask = 0xFF;
-  bool clear = false;
-  for (int i = 0; i < 4; i++, mask <<= 8) {
-    if (clear) {
-      lastWord &= ~mask;
-    } else {
-      clear = ((lastWord & mask) == 0);
-    }
-  }
-  mWords.push_back(lastWord);
-  return *this;
-}
-
-WordStreamImpl &WordStreamImpl::operator>>(std::string *str) {
-  const char *s = (const char *)&*mIter;
-  str->assign(s);
-  while (*mIter++ & 0xFF000000) {
-  }
-  return *this;
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/spirit/word_stream_impl.h b/rsov/compiler/spirit/word_stream_impl.h
deleted file mode 100644
index 365e3d5..0000000
--- a/rsov/compiler/spirit/word_stream_impl.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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 WORD_STREAM_IMPL_H
-#define WORD_STREAM_IMPL_H
-
-#include "word_stream.h"
-
-#include <string>
-
-namespace android {
-namespace spirit {
-
-class WordStreamImpl : public WordStream {
-public:
-  WordStreamImpl();
-  WordStreamImpl(const std::vector<uint32_t> &words);
-  WordStreamImpl(std::vector<uint32_t> &&words);
-
-  bool empty() const override {
-    return mWords.empty() || mIter == mWords.end();
-  }
-
-  uint32_t operator*() { return *mIter; }
-
-  WordStreamImpl &operator>>(uint32_t *RHS) override {
-    *RHS = *mIter++;
-    return *this;
-  }
-
-  WordStreamImpl &operator>>(LiteralContextDependentNumber *RHS) override {
-    // TODO: check context in the instruction class to decide the actual size.
-    return *this >> (uint32_t *)(&RHS->intValue);
-  }
-
-  WordStreamImpl &operator>>(std::string *str) override;
-
-  std::vector<uint32_t> getWords() override { return mWords; }
-
-  WordStreamImpl &operator<<(const uint32_t RHS) override {
-    mWords.push_back(RHS);
-    return *this;
-  }
-
-  WordStreamImpl &
-  operator<<(const LiteralContextDependentNumber &RHS) override {
-    // TODO: check context in the instruction class to decide the actual size.
-    // TODO: maybe a word stream class should never take a context dependent
-    // type as argument. Always take concrete types such as int32, int64, float,
-    // double, etc.
-    return *this << (uint32_t)(RHS.intValue);
-  }
-  WordStreamImpl &operator<<(const std::string &str) override;
-
-private:
-  std::vector<uint32_t> mWords;
-  std::vector<uint32_t>::const_iterator mIter;
-};
-
-} // namespace spirit
-} // namespace android
-
-#endif // WORD_STREAM_IMPL_H
diff --git a/rsov/compiler/spirit/word_stream_test.cpp b/rsov/compiler/spirit/word_stream_test.cpp
deleted file mode 100644
index 2735e15..0000000
--- a/rsov/compiler/spirit/word_stream_test.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2017, The Android Open Source Project
- *
- * 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.
- */
-
-#include "word_stream.h"
-
-#include "gtest/gtest.h"
-
-#include <vector>
-
-namespace android {
-namespace spirit {
-
-TEST(WordStreamTest, testStringOutput1) {
-  std::unique_ptr<OutputWordStream> OS(OutputWordStream::Create());
-  *OS << "ABCDEFG";
-  auto words = OS->getWords();
-  const std::vector<uint8_t> bytes((uint8_t *)words.data(),
-                                   (uint8_t *)(words.data() + words.size()));
-  const std::vector<uint8_t> bytesExpected = {0x41, 0x42, 0x43, 0x44,
-                                              0x45, 0x46, 0x47, 0x00};
-  EXPECT_EQ(bytesExpected, bytes);
-}
-
-TEST(WordStreamTest, testStringOutput2) {
-  std::unique_ptr<OutputWordStream> OS(OutputWordStream::Create());
-  *OS << "GLSL.std.450";
-  auto words = OS->getWords();
-  const std::vector<uint8_t> bytes((uint8_t *)words.data(),
-                                   (uint8_t *)(words.data() + words.size()));
-  const std::vector<uint8_t> bytesExpected = {
-      0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64,
-      0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00};
-  EXPECT_EQ(bytesExpected, bytes);
-}
-
-TEST(WordStreamTest, testStringInput1) {
-  uint8_t bytes[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x00};
-  std::vector<uint32_t> words((uint32_t *)bytes,
-                              (uint32_t *)(bytes + sizeof(bytes)));
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(words));
-  std::string s;
-  *IS >> &s;
-  EXPECT_STREQ("ABCDEFG", s.c_str());
-}
-
-TEST(WordStreamTest, testStringInput2) {
-  uint8_t bytes[] = {0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64,
-                     0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00};
-  std::vector<uint32_t> words((uint32_t *)bytes,
-                              (uint32_t *)(bytes + sizeof(bytes)));
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(words));
-  std::string s;
-  *IS >> &s;
-  EXPECT_STREQ("GLSL.std.450", s.c_str());
-}
-
-} // namespace spirit
-} // namespace android
diff --git a/rsov/compiler/tests/arguments/foreach_multi_simple.ll b/rsov/compiler/tests/arguments/foreach_multi_simple.ll
deleted file mode 100644
index ee6284e..0000000
--- a/rsov/compiler/tests/arguments/foreach_multi_simple.ll
+++ /dev/null
@@ -1,46 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-; Decorations
-; CHECK: OpDecorate %[[BUF_0S:.*]] BufferBlock
-; CHECK: OpDecorate %[[BUF_VAR0:.*]] Binding 3
-; CHECK: OpDecorate %[[BUF_1S:.*]] BufferBlock
-; CHECK: OpDecorate %[[BUF_VAR1:.*]] Binding 4
-
-; CHECK:%[[BUF_PTR_TY0:.*]] = OpTypePointer Uniform %[[BUF_0S]]
-; CHECK:%[[BUF_VAR0]] = OpVariable %[[BUF_PTR_TY0]] Uniform
-; CHECK:%[[BUF_PTR_TY1:.*]] = OpTypePointer Uniform %[[BUF_1S]]
-; CHECK:%[[BUF_VAR1]] = OpVariable %[[BUF_PTR_TY1]] Uniform
-
-; Wrapper
-; CHECK: %[[ADDR0:.*]] = OpAccessChain %{{.*}} %[[BUF_VAR0]]
-; CHECK:OpLoad {{.*}} %[[ADDR0]]
-; CHECK: %[[ADDR1:.*]] = OpAccessChain %{{.*}} %[[BUF_VAR1]]
-; CHECK:OpLoad {{.*}} %[[ADDR1]]
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; Function Attrs: norecurse nounwind readnone
-define float @sum2(float %in0, float %in1, i32 %x) local_unnamed_addr #0 {
-entry:
-  %add = fadd float %in0, %in1
-  ret float %add
-}
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4}
-!\23rs_export_foreach_name = !{!5, !6}
-!\23rs_export_foreach = !{!7, !8}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.275480  (based on LLVM 3.8.275480)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"com.android.rs.rsov.test"}
-!5 = !{!"root"}
-!6 = !{!"sum2"}
-!7 = !{!"0"}
-!8 = !{!"43"}
diff --git a/rsov/compiler/tests/arguments/signedness.ll b/rsov/compiler/tests/arguments/signedness.ll
deleted file mode 100644
index c173114..0000000
--- a/rsov/compiler/tests/arguments/signedness.ll
+++ /dev/null
@@ -1,130 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-; CHECK: OpDecorate [[InVar1:%.*]] Binding 3
-; CHECK: OpDecorate [[OutVar1:%.*]] Binding 2
-
-; CHECK: OpDecorate [[InVar2:%.*]] Binding 3
-; CHECK: OpDecorate [[OutVar2:%.*]] Binding 2
-
-; CHECK: OpDecorate [[InVar3:%.*]] Binding 3
-; CHECK: OpDecorate [[OutVar3:%.*]] Binding 2
-
-; CHECK: OpDecorate [[InVar4:%.*]] Binding 3
-; CHECK: OpDecorate [[OutVar4:%.*]] Binding 2
-
-; CHECK: [[MemberTy1:%.*]] = OpTypeRuntimeArray %v4uint
-; CHECK: [[Struct1:%.*]] = OpTypeStruct [[MemberTy1]]
-; CHECK: [[PtrTy1:%.*]] = OpTypePointer Uniform [[Struct1]]
-; CHECK: [[InVar1]] = OpVariable [[PtrTy1]]
-
-; CHECK: [[OutMemberTy1:%.*]] = OpTypeRuntimeArray %v4uint
-; CHECK: [[OutStruct1:%.*]] = OpTypeStruct [[OutMemberTy1]]
-; CHECK: [[OutPtrTy1:%.*]] = OpTypePointer Uniform [[OutStruct1]]
-; CHECK: [[OutVar1]] = OpVariable [[OutPtrTy1]]
-
-; CHECK: [[MemberTy2:%.*]] = OpTypeRuntimeArray %v4uint
-; CHECK: [[Struct2:%.*]] = OpTypeStruct [[MemberTy2]]
-; CHECK: [[PtrTy2:%.*]] = OpTypePointer Uniform [[Struct2]]
-; CHECK: [[InVar2]] = OpVariable [[PtrTy2]]
-
-; CHECK: [[OutMemberTy2:%.*]] = OpTypeRuntimeArray %v4uint
-; CHECK: [[OutStruct2:%.*]] = OpTypeStruct [[OutMemberTy2]]
-; CHECK: [[OutPtrTy2:%.*]] = OpTypePointer Uniform [[OutStruct2]]
-; CHECK: [[OutVar2]] = OpVariable [[OutPtrTy2]]
-
-; CHECK: [[MemberTy3:%.*]] = OpTypeRuntimeArray %uint
-; CHECK: [[Struct3:%.*]] = OpTypeStruct [[MemberTy3]]
-; CHECK: [[PtrTy3:%.*]] = OpTypePointer Uniform [[Struct3]]
-; CHECK: [[InVar3]] = OpVariable [[PtrTy3]]
-
-; CHECK: [[OutMemberTy3:%.*]] = OpTypeRuntimeArray %uint
-; CHECK: [[OutStruct3:%.*]] = OpTypeStruct [[OutMemberTy3]]
-; CHECK: [[OutPtrTy3:%.*]] = OpTypePointer Uniform [[OutStruct3]]
-; CHECK: [[OutVar3]] = OpVariable [[OutPtrTy3]]
-
-; CHECK: [[MemberTy4:%.*]] = OpTypeRuntimeArray %uint
-; CHECK: [[Struct4:%.*]] = OpTypeStruct [[MemberTy4]]
-; CHECK: [[PtrTy4:%.*]] = OpTypePointer Uniform [[Struct4]]
-; CHECK: [[InVar4]] = OpVariable [[PtrTy4]]
-
-; CHECK: [[OutMemberTy4:%.*]] = OpTypeRuntimeArray %uint
-; CHECK: [[OutStruct4:%.*]] = OpTypeStruct [[OutMemberTy4]]
-; CHECK: [[OutPtrTy4:%.*]] = OpTypePointer Uniform [[OutStruct4]]
-; CHECK: [[OutVar4]] = OpVariable [[OutPtrTy4]]
-
-; // the RS the .rs from which this .ll is generated
-; #pragma version(1)
-; #pragma rs java_package_name(com.android.rs.test)
-
-; int4 RS_KERNEL increment4(int4 in)
-; {
-;     return in + 1;
-; }
-
-; uint4 RS_KERNEL uincrement4(uint4 in)
-; {
-;     return in + 1;
-; }
-
-; int RS_KERNEL increment(int in)
-; {
-;     return in + 1;
-; }
-
-; unsigned RS_KERNEL uincrement(unsigned in)
-; {
-;     return in + 1;
-; }
-
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; Function Attrs: norecurse nounwind readnone
-define <4 x i32> @increment4(<4 x i32> %in) local_unnamed_addr #0 {
-entry:
-  %add = add <4 x i32> %in, <i32 1, i32 1, i32 1, i32 1>
-  ret <4 x i32> %add
-}
-
-; Function Attrs: norecurse nounwind readnone
-define <4 x i32> @uincrement4(<4 x i32> %in) local_unnamed_addr #0 {
-entry:
-  %add = add <4 x i32> %in, <i32 1, i32 1, i32 1, i32 1>
-  ret <4 x i32> %add
-}
-
-; Function Attrs: norecurse nounwind readnone
-define i32 @increment(i32 %in) local_unnamed_addr #0 {
-entry:
-  %add = add nsw i32 %in, 1
-  ret i32 %add
-}
-
-; Function Attrs: norecurse nounwind readnone
-define i32 @uincrement(i32 %in) local_unnamed_addr #0 {
-entry:
-  %add = add i32 %in, 1
-  ret i32 %add
-}
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4}
-!\23rs_export_foreach_name = !{!5, !6, !7, !8, !9}
-!\23rs_export_foreach = !{!10, !11, !11, !11, !11}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.275480  (based on LLVM 3.8.275480)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"com.android.rs.test"}
-!5 = !{!"root"}
-!6 = !{!"increment4"}
-!7 = !{!"uincrement4"}
-!8 = !{!"increment"}
-!9 = !{!"uincrement"}
-!10 = !{!"0"}
-!11 = !{!"35"}
diff --git a/rsov/compiler/tests/errors/unsupported_type.rs b/rsov/compiler/tests/errors/unsupported_type.rs
deleted file mode 100644
index a5af55d..0000000
--- a/rsov/compiler/tests/errors/unsupported_type.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma version(1)
-#pragma rs java_package_name(identity)
-
-#define TYPE short
-
-TYPE RS_KERNEL tSet(TYPE v) { return v; }
diff --git a/rsov/compiler/tests/globals/mul.ll b/rsov/compiler/tests/globals/mul.ll
deleted file mode 100644
index e0710fb..0000000
--- a/rsov/compiler/tests/globals/mul.ll
+++ /dev/null
@@ -1,52 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: OpString ".rsov.ExportedVars:0;"
-
-; CHECK-DAG: OpDecorate [[GPUBlockVar:%[a-zA-Z_0-9]+]] Binding 0
-; CHECK-DAG: OpDecorate [[STRUCT:%struct__.*]] BufferBlock
-; CHECK-DAG: OpMemberDecorate [[STRUCT]] 0 Offset 0
-
-; CHECK: [[STRUCT]] = OpTypeStruct %float
-; CHECK: [[STRUCT_PTR_TY:%[a-zA-Z_0-9]+]] = OpTypePointer Uniform [[STRUCT]]
-
-; CHECK: [[GPUBlockVar]] = OpVariable [[STRUCT_PTR_TY]] Uniform
-
-@c1 = common global float 0.000000e+00, align 4
-
-; Function Attrs: norecurse nounwind readonly
-define <4 x float> @k1(<4 x float> %in) #0 {
-entry:
-  %0 = load float, float* @c1, align 4, !tbaa !11
-  %splat.splatinsert = insertelement <4 x float> undef, float %0, i32 0
-  %splat.splat = shufflevector <4 x float> %splat.splatinsert, <4 x float> undef, <4 x i32> zeroinitializer
-  %mul = fmul <4 x float> %splat.splat, %in
-  ret <4 x float> %mul
-}
-
-attributes #0 = { norecurse nounwind readonly "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_var = !{!6}
-!\23rs_object_slots = !{}
-!\23rs_export_foreach_name = !{!7, !8}
-!\23rs_export_foreach = !{!9, !10}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!"c1", !"1"}
-!7 = !{!"root"}
-!8 = !{!"k1"}
-!9 = !{!"0"}
-!10 = !{!"35"}
-!11 = !{!12, !12, i64 0}
-!12 = !{!"float", !13, i64 0}
-!13 = !{!"omnipotent char", !14, i64 0}
-!14 = !{!"Simple C/C++ TBAA"}
diff --git a/rsov/compiler/tests/globals/mul.rs b/rsov/compiler/tests/globals/mul.rs
deleted file mode 100644
index 77c5c52..0000000
--- a/rsov/compiler/tests/globals/mul.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (C) 2016 The Android Open Source Project
-//
-// 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.
-
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-float c1;
-
-float4 __attribute__((kernel)) k1(float4 in) {
-  return c1 * in;
-}
diff --git a/rsov/compiler/tests/globals/mul2.ll b/rsov/compiler/tests/globals/mul2.ll
deleted file mode 100644
index ee47542..0000000
--- a/rsov/compiler/tests/globals/mul2.ll
+++ /dev/null
@@ -1,64 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: OpString ".rsov.ExportedVars:0;24;8;28;"
-
-; CHECK-DAG: OpDecorate [[GPUBlockVar:%[a-zA-Z_0-9]+]] Binding 0
-; CHECK-DAG: OpDecorate [[STRUCT:%struct__.*]] BufferBlock
-; CHECK-DAG: OpMemberDecorate [[STRUCT]] 0 Offset 0
-; CHECK-DAG: OpMemberDecorate [[STRUCT]] 1 Offset 8
-; CHECK-DAG: OpMemberDecorate [[STRUCT]] 2 Offset 24
-; CHECK-DAG: OpMemberDecorate [[STRUCT]] 3 Offset 28
-
-; CHECK: [[STRUCT]] = OpTypeStruct %float %v4float %uchar %uint{{.*}}
-; CHECK: [[STRUCT_PTR_TY:%[a-zA-Z_0-9]+]] = OpTypePointer Uniform [[STRUCT]]
-
-; CHECK: [[GPUBlockVar]] = OpVariable [[STRUCT_PTR_TY]] Uniform
-
-@c1 = common global float 0.000000e+00, align 4
-@c2 = common global <4 x float> zeroinitializer, align 16
-@d = common global i8 0, align 1
-@i = common global i32 0, align 4
-
-; Function Attrs: norecurse nounwind readonly
-define <4 x float> @k1(<4 x float> %in) #0 {
-entry:
-  %0 = load float, float* @c1, align 4, !tbaa !14
-  %splat.splatinsert = insertelement <4 x float> undef, float %0, i32 0
-  %splat.splat = shufflevector <4 x float> %splat.splatinsert, <4 x float> undef, <4 x i32> zeroinitializer
-  %mul = fmul <4 x float> %splat.splat, %in
-  %1 = load <4 x float>, <4 x float>* @c2, align 16, !tbaa !18
-  %mul1 = fmul <4 x float> %1, %mul
-  ret <4 x float> %mul1
-}
-
-attributes #0 = { norecurse nounwind readonly "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_var = !{!6, !7, !8, !9}
-!\23rs_object_slots = !{}
-!\23rs_export_foreach_name = !{!10, !11}
-!\23rs_export_foreach = !{!12, !13}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!"c1", !"1"}
-!7 = !{!"d", !"7"}
-!8 = !{!"c2", !"float4"}
-!9 = !{!"i", !"5"}
-!10 = !{!"root"}
-!11 = !{!"k1"}
-!12 = !{!"0"}
-!13 = !{!"35"}
-!14 = !{!15, !15, i64 0}
-!15 = !{!"float", !16, i64 0}
-!16 = !{!"omnipotent char", !17, i64 0}
-!17 = !{!"Simple C/C++ TBAA"}
-!18 = !{!16, !16, i64 0}
diff --git a/rsov/compiler/tests/globals/mul2.rs b/rsov/compiler/tests/globals/mul2.rs
deleted file mode 100644
index 78e67ac..0000000
--- a/rsov/compiler/tests/globals/mul2.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2016 The Android Open Source Project
-//
-// 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.
-
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-float c1;
-uchar d;
-float4 c2;
-int i;
-
-float4 __attribute__((kernel)) k1(float4 in) {
-  return c1 * in * c2;
-}
diff --git a/rsov/compiler/tests/image/blend.ll b/rsov/compiler/tests/image/blend.ll
deleted file mode 100644
index 1788845..0000000
--- a/rsov/compiler/tests/image/blend.ll
+++ /dev/null
@@ -1,62 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: OpEntryPoint GLCompute [[WrapperId:%[a-zA-Z_0-9]*]] "entry_setImageAlpha"
-
-; CHECK-NOT: OpFunctionCall %v4uchar %__Z14convert_uchar4Dv4_j
-; CHECK-NOT: OpFunctionCall %v4uint %__Z13convert_uint4Dv4_h
-
-; CHECK: OpUConvert %v4uint
-; CHECK: OpUConvert %v4uchar
-
-@alpha = global i8 0, align 1
-
-; Function Attrs: nounwind readonly
-define <4 x i8> @setImageAlpha(<4 x i8> %in, i32 %x, i32 %y) #0 {
-entry:
-  %call = tail call <4 x i32> @_Z13convert_uint4Dv4_h(<4 x i8> %in) #2
-  %0 = load i8, i8* @alpha, align 1, !tbaa !11
-  %conv = zext i8 %0 to i32
-  %splat.splatinsert = insertelement <4 x i32> undef, i32 %conv, i32 0
-  %splat.splat = shufflevector <4 x i32> %splat.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer
-  %mul = mul <4 x i32> %splat.splat, %call
-  %shr = lshr <4 x i32> %mul, <i32 8, i32 8, i32 8, i32 8>
-  %call1 = tail call <4 x i8> @_Z14convert_uchar4Dv4_j(<4 x i32> %shr) #2
-  %1 = insertelement <4 x i8> %call1, i8 %0, i32 3
-  ret <4 x i8> %1
-}
-
-; Function Attrs: nounwind readnone
-declare <4 x i8> @_Z14convert_uchar4Dv4_j(<4 x i32>) #1
-
-; Function Attrs: nounwind readnone
-declare <4 x i32> @_Z13convert_uint4Dv4_h(<4 x i8>) #1
-
-attributes #0 = { nounwind readonly "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { nounwind readnone }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_var = !{!6}
-!\23rs_object_slots = !{}
-!\23rs_export_foreach_name = !{!7, !8}
-!\23rs_export_foreach = !{!9, !10}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!"alpha", !"7"}
-!7 = !{!"root"}
-!8 = !{!"setImageAlpha"}
-!9 = !{!"0"}
-!10 = !{!"59"}
-!11 = !{!12, !12, i64 0}
-!12 = !{!"omnipotent char", !13, i64 0}
-!13 = !{!"Simple C/C++ TBAA"}
diff --git a/rsov/compiler/tests/image/blend.rs b/rsov/compiler/tests/image/blend.rs
deleted file mode 100644
index ea1d323..0000000
--- a/rsov/compiler/tests/image/blend.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2011 The Android Open Source Project
-//
-// 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.
-
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-uchar alpha = 0x0;
-
-uchar4 __attribute__((kernel)) setImageAlpha(uchar4 in, uint32_t x, uint32_t y) {
-    uchar4 out;
-    out.rgba = convert_uchar4((convert_uint4(in.rgba) * alpha) >> (uint4)8);
-    out.a = alpha;
-    return out;
-}
diff --git a/rsov/compiler/tests/image/contrast.ll b/rsov/compiler/tests/image/contrast.ll
deleted file mode 100644
index 77cee16..0000000
--- a/rsov/compiler/tests/image/contrast.ll
+++ /dev/null
@@ -1,101 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: [[GLSL_EXT_INS:%.*]] = OpExtInstImport "GLSL.std.450"
-; CHECK: OpEntryPoint GLCompute [[WrapperId:%[a-zA-Z_0-9]*]] "entry_contrast"
-
-; CHECK-NOT: OpFunctionCall %v3float %_Z14convert_float3Dv3_h
-; CHECK-NOT: OpFunctionCall %v3float %_Z5clampDv3_fff
-; CHECK-NOT: OpFunctionCall %v3uchar %_Z14convert_uchar3Dv3_f
-
-; CHECK: OpConvertUToF %v3float
-; CHECK: OpExtInst %v3float [[GLSL_EXT_INS]] FClamp
-; CHECK: OpConvertFToU %v3uchar
-
-
-@brightM = internal unnamed_addr global float 0.000000e+00, align 4
-@brightC = internal unnamed_addr global float 0.000000e+00, align 4
-
-; Function Attrs: nounwind
-define void @setBright(float %v) #0 {
-entry:
-  %div = fdiv float %v, 1.000000e+02
-  %call = tail call float @_Z3powff(float 2.000000e+00, float %div) #4
-  store float %call, float* @brightM, align 4, !tbaa !11
-  %mul = fmul float %call, 1.270000e+02
-  %sub = fsub float 1.270000e+02, %mul
-  store float %sub, float* @brightC, align 4, !tbaa !11
-  ret void
-}
-
-; Function Attrs: nounwind readnone
-declare float @_Z3powff(float, float) #1
-
-; Function Attrs: nounwind readonly
-define <4 x i8> @contrast(<4 x i8> %in) #2 {
-entry:
-  %0 = shufflevector <4 x i8> %in, <4 x i8> undef, <3 x i32> <i32 0, i32 1, i32 2>
-  %call = tail call <3 x float> @_Z14convert_float3Dv3_h(<3 x i8> %0) #4
-  %1 = load float, float* @brightM, align 4, !tbaa !11
-  %splat.splatinsert = insertelement <3 x float> undef, float %1, i32 0
-  %splat.splat = shufflevector <3 x float> %splat.splatinsert, <3 x float> undef, <3 x i32> zeroinitializer
-  %mul = fmul <3 x float> %call, %splat.splat
-  %2 = load float, float* @brightC, align 4, !tbaa !11
-  %splat.splatinsert1 = insertelement <3 x float> undef, float %2, i32 0
-  %splat.splat2 = shufflevector <3 x float> %splat.splatinsert1, <3 x float> undef, <3 x i32> zeroinitializer
-  %add = fadd <3 x float> %mul, %splat.splat2
-  %call4 = tail call <3 x float> @_Z5clampDv3_fff(<3 x float> %add, float 0.000000e+00, float 2.550000e+02) #4
-  %call5 = tail call <3 x i8> @_Z14convert_uchar3Dv3_f(<3 x float> %call4) #4
-  %3 = shufflevector <3 x i8> %call5, <3 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
-  %4 = insertelement <4 x i8> %3, i8 -1, i32 3
-  ret <4 x i8> %4
-}
-
-; Function Attrs: nounwind readnone
-declare <3 x float> @_Z14convert_float3Dv3_h(<3 x i8>) #1
-
-; Function Attrs: nounwind readnone
-declare <3 x i8> @_Z14convert_uchar3Dv3_f(<3 x float>) #1
-
-; Function Attrs: nounwind readnone
-declare <3 x float> @_Z5clampDv3_fff(<3 x float>, float, float) #1
-
-; Function Attrs: noinline nounwind
-define void @.helper_setBright({ float }* nocapture) #3 {
-entry:
-  %1 = getelementptr inbounds { float }, { float }* %0, i32 0, i32 0
-  %2 = load float, float* %1, align 4
-  tail call void @setBright(float %2)
-  ret void
-}
-
-attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { nounwind readonly "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #3 = { noinline nounwind }
-attributes #4 = { nounwind readnone }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_func = !{!6}
-!\23rs_export_foreach_name = !{!7, !8}
-!\23rs_export_foreach = !{!9, !10}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!".helper_setBright"}
-!7 = !{!"root"}
-!8 = !{!"contrast"}
-!9 = !{!"0"}
-!10 = !{!"35"}
-!11 = !{!12, !12, i64 0}
-!12 = !{!"float", !13, i64 0}
-!13 = !{!"omnipotent char", !14, i64 0}
-!14 = !{!"Simple C/C++ TBAA"}
diff --git a/rsov/compiler/tests/image/contrast.rs b/rsov/compiler/tests/image/contrast.rs
deleted file mode 100644
index dd95ad3..0000000
--- a/rsov/compiler/tests/image/contrast.rs
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.
- */
-
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-static float brightM = 0.f;
-static float brightC = 0.f;
-
-void setBright(float v) {
-    brightM = pow(2.f, v / 100.f);
-    brightC = 127.f - brightM * 127.f;
-}
-
-uchar4 __attribute__((kernel)) contrast(uchar4 in) {
-    float3 v = convert_float3(in.rgb) * brightM + brightC;
-    uchar4 o;
-    o.rgb = convert_uchar3(clamp(v, 0.f, 255.f));
-    o.a = 0xff;
-    return o;
-}
\ No newline at end of file
diff --git a/rsov/compiler/tests/image/copy.ll b/rsov/compiler/tests/image/copy.ll
deleted file mode 100644
index 62617c9..0000000
--- a/rsov/compiler/tests/image/copy.ll
+++ /dev/null
@@ -1,37 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: OpEntryPoint GLCompute [[WrapperId:%[a-zA-Z_0-9]*]] "entry_copy"
-; CHECK: [[KernelId:%[a-zA-Z_0-9]+]] = OpFunction {{.*}}
-
-; Function Attrs: norecurse nounwind readnone
-define <4 x i8> @copy(<4 x i8> %v_in) #0 {
-entry:
-  ret <4 x i8> %v_in
-}
-
-; CHECK: [[WrapperId]] = OpFunction {{.*}}
-; CHECK-NEXT: OpLabel
-; CHECK: %{{[0-9]+}} = OpFunctionCall %{{.*}} [[KernelId]]
-; CHECK: OpReturn
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_foreach_name = !{!6, !7}
-!\23rs_export_foreach = !{!8, !9}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!"root"}
-!7 = !{!"copy"}
-!8 = !{!"0"}
-!9 = !{!"35"}
diff --git a/rsov/compiler/tests/image/copy.rs b/rsov/compiler/tests/image/copy.rs
deleted file mode 100644
index 1f3ae2e..0000000
--- a/rsov/compiler/tests/image/copy.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-uchar4 __attribute__((kernel)) copy(uchar4 v_in) {
-    return v_in;
-}
diff --git a/rsov/compiler/tests/lit.cfg b/rsov/compiler/tests/lit.cfg
deleted file mode 100644
index 66ef028..0000000
--- a/rsov/compiler/tests/lit.cfg
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- Python -*-
-
-# Configuration file for the 'lit' test runner.
-
-import re
-
-# name: The name of this test suite.
-config.name = 'rs2spirv'
-
-# suffixes: A list of file extensions to treat as test files.
-config.suffixes = ['.ll']
-
-# testFormat: The test format to use to interpret tests.
-import lit.formats
-config.test_format = lit.formats.ShTest()
-
-ANDROID_HOST_OUT = os.getenv("ANDROID_HOST_OUT")
-
-if not ANDROID_HOST_OUT:
-    import sys
-    sys.exit(1)
-
-# test_source_root: The path where tests are located (default is the test suite
-# root).
-config.test_source_root = None
-# test_exec_root: The root path where tests should be run.
-config.test_exec_root = os.path.join(ANDROID_HOST_OUT, 'tests', 'rs2spirv')
-
-tools_dir = os.pathsep.join([os.path.join(ANDROID_HOST_OUT, 'bin'),])
diff --git a/rsov/compiler/tests/llvm-lit b/rsov/compiler/tests/llvm-lit
deleted file mode 100755
index cc6f58e..0000000
--- a/rsov/compiler/tests/llvm-lit
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-
-# In the Android tree, use the environment variables set by envsetup.sh
-# to determine correct path for the root of the source tree.
-# TODO: To run clang tests, @LLVM_BINARY_DIR@ must be substituted also.
-android_source_root = os.getenv('ANDROID_BUILD_TOP', ".")
-llvm_source_root = os.path.join(android_source_root, 'external', 'llvm')
-
-# Make sure we can find the lit package.
-sys.path.append(os.path.join(llvm_source_root, 'utils', 'lit'))
-
-# Set up some builtin parameters, so that by default the LLVM test suite
-# configuration file knows how to find the object tree.
-builtin_parameters = {
-    'llvm_site_config' : os.path.join('./', 'lit.site.cfg')
-}
-
-if __name__=='__main__':
-    import lit
-    lit.main(builtin_parameters)
diff --git a/rsov/compiler/tests/multi_function/blend_mf.ll b/rsov/compiler/tests/multi_function/blend_mf.ll
deleted file mode 100644
index 650d661..0000000
--- a/rsov/compiler/tests/multi_function/blend_mf.ll
+++ /dev/null
@@ -1,68 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: OpEntryPoint GLCompute %[[WrapperId:[a-zA-Z_0-9]*]] "entry_setImageAlpha"
-
-; Function Attrs: norecurse nounwind readnone
-define void @NOP() #0 {
-entry:
-  ret void
-}
-
-; CHECK: [[KernelId:%[a-zA-Z_0-9]+]] = OpFunction {{.*}}
-
-; Function calls to _Z14convert_uchar4Dv4_j should be translated into OpUConvert instructions
-; CHECK-NOT: OpFunctionCall %v4uchar %_Z14convert_uchar4Dv4_j
-; CHECK-NOT: OpFunctionCall %v4uint %_Z13convert_uint4Dv4_h
-; CHECK: OpUConvert %v4uint
-; CHECK: OpUConvert %v4uchar
-
-; Function Attrs: nounwind readnone
-define <4 x i8> @setImageAlpha(<4 x i8> %in) #1 {
-entry:
-  %call = tail call <4 x i32> @_Z13convert_uint4Dv4_h(<4 x i8> %in) #2
-  %mul = mul <4 x i32> %call, <i32 37, i32 37, i32 37, i32 37>
-  %shr = lshr <4 x i32> %mul, <i32 8, i32 8, i32 8, i32 8>
-  %call1 = tail call <4 x i8> @_Z14convert_uchar4Dv4_j(<4 x i32> %shr) #2
-  %call2 = tail call fastcc <4 x i8> @twice(<4 x i8> %call1)
-  %0 = insertelement <4 x i8> %call2, i8 37, i32 3
-  ret <4 x i8> %0
-}
-
-; Function Attrs: norecurse nounwind readnone
-define internal fastcc <4 x i8> @twice(<4 x i8> %in) #0 {
-entry:
-  %mul = shl <4 x i8> %in, <i8 1, i8 1, i8 1, i8 1>
-  ret <4 x i8> %mul
-}
-
-; Function Attrs: nounwind readnone
-declare <4 x i8> @_Z14convert_uchar4Dv4_j(<4 x i32>) #1
-
-; Function Attrs: nounwind readnone
-declare <4 x i32> @_Z13convert_uint4Dv4_h(<4 x i8>) #1
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { nounwind readnone }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_func = !{!6}
-!\23rs_export_foreach_name = !{!7, !8}
-!\23rs_export_foreach = !{!9, !10}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!"NOP"}
-!7 = !{!"root"}
-!8 = !{!"setImageAlpha"}
-!9 = !{!"0"}
-!10 = !{!"35"}
diff --git a/rsov/compiler/tests/multi_function/blend_mf.rs b/rsov/compiler/tests/multi_function/blend_mf.rs
deleted file mode 100644
index 1769208..0000000
--- a/rsov/compiler/tests/multi_function/blend_mf.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (C) 2011 The Android Open Source Project
-//
-// 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.
-
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-static uchar4 twice(uchar4 in) {
-  return in * 2;
-}
-
-static uchar getConstant() {
-  return 37;
-}
-
-void NOP() {
-  uchar3 x = {1, 2, 3};
-  (void) convert_float3(x);
-}
-
-uchar4 __attribute__((kernel)) setImageAlpha(uchar4 in) {
-  uchar4 out;
-  out.rgba = twice(convert_uchar4((convert_uint4(in.rgba) * 37) >> (uint4)8));
-  out.a = getConstant();
-  NOP();
-  return out;
-}
diff --git a/rsov/compiler/tests/multi_kernel/invert.ll b/rsov/compiler/tests/multi_kernel/invert.ll
deleted file mode 100644
index 4f0bae7..0000000
--- a/rsov/compiler/tests/multi_kernel/invert.ll
+++ /dev/null
@@ -1,52 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: OpEntryPoint GLCompute [[FuncId1:%[0-9]+]] "entry_invert" %gl_GlobalInvocationID
-; CHECK-NEXT: OpEntryPoint GLCompute [[FuncId2:%[0-9]+]] "entry_scalebytwo" %gl_GlobalInvocationID
-
-; Multi-kernel testcase
-;float4 RS_KERNEL invert(float4 a) {
-;    return 1.0f - a;
-;}
-
-; CHECK: [[FuncId1]] = OpFunction %void None
-; Function Attrs: norecurse nounwind readnone
-define <4 x float> @invert(<4 x float> %a) local_unnamed_addr #0 {
-entry:
-  %sub = fsub <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %a
-  ret <4 x float> %sub
-}
-
-
-; CHECK: [[FuncId2]] = OpFunction %void None
-;float RS_KERNEL scalebytwo(float a) {
-;    return a*2;
-;}
-
-; Function Attrs: norecurse nounwind readnone
-define float @scalebytwo(float %a) local_unnamed_addr #0 {
-entry:
-  %mul = fmul float %a, 2.000000e+00
-  ret float %mul
-}
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4}
-!\23rs_export_foreach_name = !{!5, !6, !7}
-!\23rs_export_foreach = !{!8, !9, !9}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.275480  (based on LLVM 3.8.275480)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"com.android.rs.rsov.test"}
-!5 = !{!"root"}
-!6 = !{!"invert"}
-!7 = !{!"scalebytwo"}
-!8 = !{!"0"}
-!9 = !{!"35"}
diff --git a/rsov/compiler/tests/rs2spirv_lit_driver.sh b/rsov/compiler/tests/rs2spirv_lit_driver.sh
deleted file mode 100755
index afd6ff3..0000000
--- a/rsov/compiler/tests/rs2spirv_lit_driver.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/bash
-
-# Copyright 2016, The Android Open Source Project
-#
-# 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.
-
-# TODO: Consider rewriting as a native binary instead of shell script.
-
-if [ $# -lt 1 ]; then
-  echo 1>&2 "$0: not enough arguments"
-  echo 1>&2 $#
-  exit 2
-fi
-
-script_path="$1"
-script_name=$(basename $script_path)
-script=${script_name%.*} # Remove extension.
-
-output_folder="driver_out"
-mkdir -p $output_folder
-
-eval llvm-as "$script_path" -o "$output_folder/$script.bc" &&
-eval rs2spirv "$output_folder/$script.bc" -o "$output_folder/$script.spv" &&
-eval spirv-val "$output_folder/$script.spv"
-
-if [ $? -ne 0 ]; then
-  echo 1>&2 "Generated SPIR-V failed validation"
-  exit -1
-fi
-
-eval spirv-dis --no-color "$output_folder/$script.spv"
-
-RET=$?
-
-#eval rm "$output_folder/$script.*"
-
-exit $RET
diff --git a/rsov/compiler/tests/rs_allocation/access_same.ll b/rsov/compiler/tests/rs_allocation/access_same.ll
deleted file mode 100644
index 34dd334..0000000
--- a/rsov/compiler/tests/rs_allocation/access_same.ll
+++ /dev/null
@@ -1,84 +0,0 @@
-; XFAIL: *
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: %struct___GPUBuffer = OpTypeStruct %uchar
-; CHECK: [[PTR_TYPE:%[a-zA-Z_0-9]+]] = OpTypePointer Uniform %struct___GPUBuffer
-
-; CHECK: %__GPUBlock = OpVariable [[PTR_TYPE]] Uniform
-
-%struct.rs_allocation = type { i32* }
-
-@a1 = common global %struct.rs_allocation zeroinitializer, align 4
-@c1 = common global i8 0, align 1
-
-; Function Attrs: nounwind
-define <4 x i8> @k1(<4 x i8> %in) #0 {
-entry:
-  %0 = extractelement <4 x i8> %in, i32 0
-  %conv = zext i8 %0 to i32
-  %1 = extractelement <4 x i8> %in, i32 1
-  %conv1 = zext i8 %1 to i32
-  %.unpack = load i32, i32* bitcast (%struct.rs_allocation* @a1 to i32*), align 4
-  %2 = insertvalue [1 x i32] undef, i32 %.unpack, 0
-  %call = tail call <4 x i8> @_Z21rsGetElementAt_uchar413rs_allocationjj([1 x i32] %2, i32 %conv, i32 %conv1) #2
-  %3 = extractelement <4 x i8> %in, i32 2
-  %conv2 = zext i8 %3 to i32
-  %4 = extractelement <4 x i8> %in, i32 3
-  %conv3 = zext i8 %4 to i32
-  %.unpack14 = load i32, i32* bitcast (%struct.rs_allocation* @a1 to i32*), align 4
-  %5 = insertvalue [1 x i32] undef, i32 %.unpack14, 0
-  tail call void @_Z21rsSetElementAt_uchar413rs_allocationDv4_hjj([1 x i32] %5, <4 x i8> %call, i32 %conv2, i32 %conv3) #2
-  %6 = load i8, i8* @c1, align 1, !tbaa !13
-  %conv4 = zext i8 %6 to i32
-  %7 = extractelement <4 x i8> %call, i32 2
-  %conv5 = zext i8 %7 to i32
-  %add = add nuw nsw i32 %conv4, %conv5
-  %conv6 = trunc i32 %add to i8
-  %8 = insertelement <4 x i8> %call, i8 %conv6, i32 2
-  ret <4 x i8> %8
-}
-
-declare <4 x i8> @_Z21rsGetElementAt_uchar413rs_allocationjj([1 x i32], i32, i32) #1
-
-declare void @_Z21rsSetElementAt_uchar413rs_allocationDv4_hjj([1 x i32], <4 x i8>, i32, i32) #1
-
-; Function Attrs: nounwind
-define void @.rs.dtor() #0 {
-entry:
-  tail call void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation* nonnull @a1) #2
-  ret void
-}
-
-declare void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation*) #1
-
-attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { nounwind }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_var = !{!6, !7}
-!\23rs_object_slots = !{!8}
-!\23rs_export_foreach_name = !{!9, !10}
-!\23rs_export_foreach = !{!11, !12}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!"c1", !"7"}
-!7 = !{!"a1", !"20"}
-!8 = !{!"1"}
-!9 = !{!"root"}
-!10 = !{!"k1"}
-!11 = !{!"0"}
-!12 = !{!"35"}
-!13 = !{!14, !14, i64 0}
-!14 = !{!"omnipotent char", !15, i64 0}
-!15 = !{!"Simple C/C++ TBAA"}
diff --git a/rsov/compiler/tests/rs_allocation/access_same.rs b/rsov/compiler/tests/rs_allocation/access_same.rs
deleted file mode 100644
index 7fce3bb..0000000
--- a/rsov/compiler/tests/rs_allocation/access_same.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (C) 2016 The Android Open Source Project
-//
-// 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.
-
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-uchar c1;
-rs_allocation a1;
-
-uchar4 __attribute__((kernel)) k1(uchar4 in) {
-  uchar4 res = rsGetElementAt_uchar4(a1, in.r, in.g);
-  rsSetElementAt_uchar4(a1, res, in.b, in.a);
-  res.b += c1;
-  return res;
-}
-
diff --git a/rsov/compiler/tests/rs_allocation/copy_coords.ll b/rsov/compiler/tests/rs_allocation/copy_coords.ll
deleted file mode 100644
index b29e288..0000000
--- a/rsov/compiler/tests/rs_allocation/copy_coords.ll
+++ /dev/null
@@ -1,37 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: [[InvocationID:%.*]] = OpLoad %v3uint %gl_GlobalInvocationID
-; CHECK: {{%.*}} = OpCompositeExtract %uint [[InvocationID]] 0
-; CHECK: {{%.*}} = OpCompositeExtract %uint [[InvocationID]] 1
-
-; Function Attrs: norecurse nounwind readnone
-define <4 x i8> @copy_coords(<4 x i8> %in, i32 %x, i32 %y) #0 {
-entry:
-  %conv = trunc i32 %x to i8
-  %0 = insertelement <4 x i8> %in, i8 %conv, i32 0
-  %conv1 = trunc i32 %y to i8
-  %1 = insertelement <4 x i8> %0, i8 %conv1, i32 1
-  ret <4 x i8> %1
-}
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_foreach_name = !{!6, !7}
-!\23rs_export_foreach = !{!8, !9}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!"root"}
-!7 = !{!"copy_coords"}
-!8 = !{!"0"}
-!9 = !{!"59"}
diff --git a/rsov/compiler/tests/rs_allocation/copy_coords.rs b/rsov/compiler/tests/rs_allocation/copy_coords.rs
deleted file mode 100644
index 2b36ee7..0000000
--- a/rsov/compiler/tests/rs_allocation/copy_coords.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (C) 2016 The Android Open Source Project
-//
-// 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.
-
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-uchar4 __attribute__((kernel)) copy_coords(uchar4 in, uint32_t x, uint32_t y) {
-  uchar4 res = in;
-  res.r = (uchar) x;
-  res.g = (uchar) y;
-  return res;
-}
diff --git a/rsov/compiler/tests/rs_allocation/getdimx.ll b/rsov/compiler/tests/rs_allocation/getdimx.ll
deleted file mode 100644
index 6fdeca8..0000000
--- a/rsov/compiler/tests/rs_allocation/getdimx.ll
+++ /dev/null
@@ -1,76 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-; rs_allocation g;
-; extern uint32_t __rsov_rsAllocationGetDimX(uint32_t ga);
-; int32_t RS_KERNEL getDim(int32_t dummy) {
-;    // lowered accessor by an earlier LLVM pass
-;    return __rsov_rsAllocationGetDimX(0);
-;}
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-%struct.rs_allocation = type { i32* }
-; CHECK-NOT OpCapability Kernel
-; CHECK-NOT OpDecorate %{{[a-zA-Z_0-9]*}} Alignment {{[0-9]*}}
-; CHECK: OpMemberDecorate [[MetadataS:%[a-zA-Z_0-9]*]] 0 Offset 4
-; CHECK: OpMemberDecorate [[MetadataS]] 1 Offset 8
-; CHECK: OpMemberDecorate [[MetadataS]] 2 Offset 12
-; CHECK: OpMemberDecorate [[MetadataS]] 3 Offset 16
-; CHECK: OpDecorate [[RuntimeArrS:%[a-zA-Z_0-9]*]] ArrayStride {{[0-9]*}}
-; CHECK: OpDecorate [[MetadataSSBO:%[a-zA-Z_0-9]*]] BufferBlock
-; CHECK: OpDecorate [[Metadata:%[a-zA-Z_0-9]*]] DescriptorSet 0
-; CHECK: OpDecorate [[Metadata]] Binding 1
-
-
-; CHECK: [[MetadataSSBO]] = OpTypeStruct [[RuntimeArrS]]
-; CHECK: [[MetadataPtr:%[a-zA-Z_0-9]*]] = OpTypePointer Uniform [[MetadataSSBO]]
-; CHECK: [[Metadata]] = OpVariable [[MetadataPtr]]
-
-@g = common global %struct.rs_allocation zeroinitializer, align 4
-
-
-; CHECK-NOT OpFunctionCall %uint %__rsov_rsAllocationGetDimX %{{[a-zA-Z_0-9]*}}
-; CHECK: [[DimX:%[a-zA-Z_0-9]*]] = OpAccessChain %_ptr_Uniform_uint [[Metadata]]
-; CHECK: [[Res:%[a-zA-Z_0-9]*]] = OpLoad %uint [[DimX]]
-; CHECK: OpReturnValue [[Res]]
-
-; Function Attrs: nounwind
-define i32 @getDim(i32 %dummy) local_unnamed_addr #0 {
-entry:
-  %call = tail call i32 @__rsov_rsAllocationGetDimX(i32 0) #2
-  ret i32 %call
-}
-
-declare i32 @__rsov_rsAllocationGetDimX(i32) local_unnamed_addr #1
-
-; Function Attrs: nounwind
-define void @.rs.dtor() local_unnamed_addr #0 {
-entry:
-  tail call void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation* nonnull @g) #2
-  ret void
-}
-
-declare void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation*) local_unnamed_addr #1
-
-attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { nounwind }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4}
-!\23rs_export_var = !{!5}
-!\23rs_object_slots = !{!6}
-!\23rs_export_foreach_name = !{!7, !8}
-!\23rs_export_foreach = !{!6, !9}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.275480  (based on LLVM 3.8.275480)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"com.android.rs.rsov.test"}
-!5 = !{!"g", !"20"}
-!6 = !{!"0"}
-!7 = !{!"root"}
-!8 = !{!"getDim"}
-!9 = !{!"35"}
diff --git a/rsov/compiler/tests/rs_allocation/getdimx_64.ll b/rsov/compiler/tests/rs_allocation/getdimx_64.ll
deleted file mode 100644
index c7792cb..0000000
--- a/rsov/compiler/tests/rs_allocation/getdimx_64.ll
+++ /dev/null
@@ -1,76 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-; Source:
-; rs_allocation g;
-; int32_t RS_KERNEL getDim(int32_t dummy) {
-;    return rsAllocationGetDimX(g);
-; }
-target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
-target triple = "aarch64-none-linux-gnueabi"
-
-; CHECK: OpString "{\"__RSoV_GA\": {\"g\":0}}"
-; CHECK: OpMemberDecorate [[MetadataS:%[a-zA-Z_0-9]*]] 0 Offset 4
-; CHECK: OpMemberDecorate [[MetadataS]] 1 Offset 8
-; CHECK: OpMemberDecorate [[MetadataS]] 2 Offset 12
-; CHECK: OpMemberDecorate [[MetadataS]] 3 Offset 16
-; CHECK: OpDecorate [[RuntimeArrS:%[a-zA-Z_0-9]*]] ArrayStride {{[0-9]*}}
-; CHECK: OpDecorate [[MetadataSSBO:%[a-zA-Z_0-9]*]] BufferBlock
-; CHECK: OpDecorate [[Metadata:%[a-zA-Z_0-9]*]] DescriptorSet 0
-; CHECK: OpDecorate [[Metadata]] Binding 1
-
-%struct.rs_allocation.1 = type { i64*, i64*, i64*, i64* }
-
-@g = common global %struct.rs_allocation.1 zeroinitializer, align 8
-; CHECK-NOT: %g = OpVariable %{{.*}} Uniform
-; CHECK-NOT: OpCopyMemorySized
-; CHECK-NOT: OpFunctionCall %uint %__rsov_rsAllocationGetDimX
-; CHECK: [[DimX:%[a-zA-Z_0-9]*]] = OpAccessChain %_ptr_Uniform_uint [[Metadata]]
-; CHECK: [[Res:%[a-zA-Z_0-9]*]] = OpLoad %uint [[DimX]]
-; CHECK: OpReturnValue [[Res]]
-
-; Function Attrs: nounwind
-define i32 @getDim(i32 %dummy) unnamed_addr #0 {
-entry:
-  %tmp = alloca %struct.rs_allocation.1, align 8
-  %0 = bitcast %struct.rs_allocation.1* %tmp to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* bitcast (%struct.rs_allocation.1* @g to i8*), i64 32, i32 8, i1 false), !tbaa.struct !8
-  %call = call i32 @_Z19rsAllocationGetDimX13rs_allocation(%struct.rs_allocation.1* %tmp) #0
-  ret i32 %call
-}
-
-declare i32 @_Z19rsAllocationGetDimX13rs_allocation(%struct.rs_allocation.1*) unnamed_addr
-
-; Function Attrs: argmemonly nounwind
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #1
-
-; Function Attrs: nounwind
-define void @.rs.dtor() unnamed_addr #0 {
-entry:
-  tail call void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation.1* @g) #0
-  ret void
-}
-
-declare void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation.1*) unnamed_addr
-
-attributes #0 = { nounwind }
-attributes #1 = { argmemonly nounwind }
-
-!llvm.ident = !{!0}
-!\23pragma = !{!1, !2}
-!\23rs_export_var = !{!3}
-!\23rs_object_slots = !{!4}
-!\23rs_export_foreach_name = !{!5, !6}
-!\23rs_export_foreach = !{!4, !7}
-
-!0 = !{!"Android clang version 3.8.275480  (based on LLVM 3.8.275480)"}
-!1 = !{!"version", !"1"}
-!2 = !{!"java_package_name", !"com.android.rs.rsov.test"}
-!3 = !{!"g", !"20"}
-!4 = !{!"0"}
-!5 = !{!"root"}
-!6 = !{!"getDim"}
-!7 = !{!"35"}
-!8 = !{i64 0, i64 8, !9, i64 8, i64 8, !9, i64 16, i64 8, !9, i64 24, i64 8, !9}
-!9 = !{!10, !10, i64 0}
-!10 = !{!"any pointer", !11, i64 0}
-!11 = !{!"omnipotent char", !12, i64 0}
-!12 = !{!"Simple C/C++ TBAA"}
diff --git a/rsov/compiler/tests/rs_allocation/multi_read.ll b/rsov/compiler/tests/rs_allocation/multi_read.ll
deleted file mode 100644
index 3e960f5..0000000
--- a/rsov/compiler/tests/rs_allocation/multi_read.ll
+++ /dev/null
@@ -1,87 +0,0 @@
-; XFAIL: *
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: %struct___GPUBuffer = OpTypeStruct %uchar
-; CHECK: [[PTR_TYPE:%[a-zA-Z_0-9]+]] = OpTypePointer Uniform %struct___GPUBuffer
-
-; CHECK: %__GPUBlock = OpVariable [[PTR_TYPE]] Uniform
-
-%struct.rs_allocation = type { i32* }
-
-@a1 = common global %struct.rs_allocation zeroinitializer, align 4
-@a2 = common global %struct.rs_allocation zeroinitializer, align 4
-@c1 = common global i8 0, align 1
-
-; Function Attrs: nounwind
-define <4 x i8> @k1(<4 x i8> %in) #0 {
-entry:
-  %0 = extractelement <4 x i8> %in, i32 0
-  %conv = zext i8 %0 to i32
-  %1 = extractelement <4 x i8> %in, i32 1
-  %conv1 = zext i8 %1 to i32
-  %.unpack = load i32, i32* bitcast (%struct.rs_allocation* @a1 to i32*), align 4
-  %2 = insertvalue [1 x i32] undef, i32 %.unpack, 0
-  %call = tail call <4 x i8> @_Z21rsGetElementAt_uchar413rs_allocationjj([1 x i32] %2, i32 %conv, i32 %conv1) #2
-  %3 = extractelement <4 x i8> %in, i32 2
-  %conv2 = zext i8 %3 to i32
-  %4 = extractelement <4 x i8> %in, i32 3
-  %conv3 = zext i8 %4 to i32
-  %.unpack16 = load i32, i32* bitcast (%struct.rs_allocation* @a2 to i32*), align 4
-  %5 = insertvalue [1 x i32] undef, i32 %.unpack16, 0
-  %call4 = tail call <4 x i8> @_Z21rsGetElementAt_uchar413rs_allocationjj([1 x i32] %5, i32 %conv2, i32 %conv3) #2
-  %add = add <4 x i8> %call4, %call
-  %6 = load i8, i8* @c1, align 1, !tbaa !15
-  %conv5 = zext i8 %6 to i32
-  %7 = extractelement <4 x i8> %add, i32 2
-  %conv6 = zext i8 %7 to i32
-  %add7 = add nuw nsw i32 %conv6, %conv5
-  %conv8 = trunc i32 %add7 to i8
-  %8 = insertelement <4 x i8> %add, i8 %conv8, i32 2
-  ret <4 x i8> %8
-}
-
-declare <4 x i8> @_Z21rsGetElementAt_uchar413rs_allocationjj([1 x i32], i32, i32) #1
-
-; Function Attrs: nounwind
-define void @.rs.dtor() #0 {
-entry:
-  tail call void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation* nonnull @a1) #2
-  tail call void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation* nonnull @a2) #2
-  ret void
-}
-
-declare void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation*) #1
-
-attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { nounwind }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_var = !{!6, !7, !8}
-!\23rs_object_slots = !{!9, !10}
-!\23rs_export_foreach_name = !{!11, !12}
-!\23rs_export_foreach = !{!13, !14}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!"c1", !"7"}
-!7 = !{!"a1", !"20"}
-!8 = !{!"a2", !"20"}
-!9 = !{!"1"}
-!10 = !{!"2"}
-!11 = !{!"root"}
-!12 = !{!"k1"}
-!13 = !{!"0"}
-!14 = !{!"35"}
-!15 = !{!16, !16, i64 0}
-!16 = !{!"omnipotent char", !17, i64 0}
-!17 = !{!"Simple C/C++ TBAA"}
diff --git a/rsov/compiler/tests/rs_allocation/multi_read.rs b/rsov/compiler/tests/rs_allocation/multi_read.rs
deleted file mode 100644
index bebb0f9..0000000
--- a/rsov/compiler/tests/rs_allocation/multi_read.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (C) 2016 The Android Open Source Project
-//
-// 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.
-
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-uchar c1;
-rs_allocation a1;
-rs_allocation a2;
-
-uchar4 __attribute__((kernel)) k1(uchar4 in) {
-  uchar4 res = rsGetElementAt_uchar4(a1, in.r, in.g);
-  res += rsGetElementAt_uchar4(a2, in.b, in.a);
-  res.b += c1;
-  return res;
-}
-
diff --git a/rsov/compiler/tests/rs_allocation/read.ll b/rsov/compiler/tests/rs_allocation/read.ll
deleted file mode 100644
index 178fdf7..0000000
--- a/rsov/compiler/tests/rs_allocation/read.ll
+++ /dev/null
@@ -1,75 +0,0 @@
-; XFAIL: *
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: %struct___GPUBuffer = OpTypeStruct %uchar
-; CHECK: [[PTR_TYPE:%[a-zA-Z_0-9]+]] = OpTypePointer Uniform %struct___GPUBuffer
-
-; CHECK: %__GPUBlock = OpVariable [[PTR_TYPE]] Uniform
-
-%struct.rs_allocation = type { i32* }
-
-@alloc = common global %struct.rs_allocation zeroinitializer, align 4
-@c1 = common global i8 0, align 1
-
-; Function Attrs: nounwind
-define <4 x i8> @k1(<4 x i8> %in) #0 {
-entry:
-  %0 = extractelement <4 x i8> %in, i32 0
-  %conv = zext i8 %0 to i32
-  %1 = extractelement <4 x i8> %in, i32 1
-  %conv1 = zext i8 %1 to i32
-  %.unpack = load i32, i32* bitcast (%struct.rs_allocation* @alloc to i32*), align 4
-  %2 = insertvalue [1 x i32] undef, i32 %.unpack, 0
-  %call = tail call <4 x i8> @_Z21rsGetElementAt_uchar413rs_allocationjj([1 x i32] %2, i32 %conv, i32 %conv1) #2
-  %3 = load i8, i8* @c1, align 1, !tbaa !13
-  %conv2 = zext i8 %3 to i32
-  %4 = extractelement <4 x i8> %call, i32 2
-  %conv3 = zext i8 %4 to i32
-  %add = add nuw nsw i32 %conv3, %conv2
-  %conv4 = trunc i32 %add to i8
-  %5 = insertelement <4 x i8> %call, i8 %conv4, i32 2
-  ret <4 x i8> %5
-}
-
-declare <4 x i8> @_Z21rsGetElementAt_uchar413rs_allocationjj([1 x i32], i32, i32) #1
-
-; Function Attrs: nounwind
-define void @.rs.dtor() #0 {
-entry:
-  tail call void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation* nonnull @alloc) #2
-  ret void
-}
-
-declare void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation*) #1
-
-attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { nounwind }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_var = !{!6, !7}
-!\23rs_object_slots = !{!8}
-!\23rs_export_foreach_name = !{!9, !10}
-!\23rs_export_foreach = !{!11, !12}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!"c1", !"7"}
-!7 = !{!"alloc", !"20"}
-!8 = !{!"1"}
-!9 = !{!"root"}
-!10 = !{!"k1"}
-!11 = !{!"0"}
-!12 = !{!"35"}
-!13 = !{!14, !14, i64 0}
-!14 = !{!"omnipotent char", !15, i64 0}
-!15 = !{!"Simple C/C++ TBAA"}
diff --git a/rsov/compiler/tests/rs_allocation/read.rs b/rsov/compiler/tests/rs_allocation/read.rs
deleted file mode 100644
index 0cde99f..0000000
--- a/rsov/compiler/tests/rs_allocation/read.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2016 The Android Open Source Project
-//
-// 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.
-
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-uchar c1;
-rs_allocation alloc;
-
-uchar4 __attribute__((kernel)) k1(uchar4 in) {
-  uchar4 res = rsGetElementAt_uchar4(alloc, in.r, in.g);
-  res.b += c1;
-  return res;
-}
diff --git a/rsov/compiler/tests/rs_allocation/read_write.ll b/rsov/compiler/tests/rs_allocation/read_write.ll
deleted file mode 100644
index 3f0e47f..0000000
--- a/rsov/compiler/tests/rs_allocation/read_write.ll
+++ /dev/null
@@ -1,78 +0,0 @@
-; XFAIL: *
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: %struct___GPUBuffer = OpTypeStruct %uchar
-; CHECK: [[PTR_TYPE:%[a-zA-Z_0-9]+]] = OpTypePointer Uniform %struct___GPUBuffer
-
-; CHECK: %__GPUBlock = OpVariable [[PTR_TYPE]] Uniform
-
-%struct.rs_allocation = type { i32* }
-
-@r = common global %struct.rs_allocation zeroinitializer, align 4
-@w = common global %struct.rs_allocation zeroinitializer, align 4
-@c1 = common global i8 0, align 1
-
-; Function Attrs: nounwind
-define <4 x i8> @k1(<4 x i8> %in, i32 %x, i32 %y) #0 {
-entry:
-  %.unpack = load i32, i32* bitcast (%struct.rs_allocation* @r to i32*), align 4
-  %0 = insertvalue [1 x i32] undef, i32 %.unpack, 0
-  %call = tail call <4 x i8> @_Z21rsGetElementAt_uchar413rs_allocationjj([1 x i32] %0, i32 %x, i32 %y) #2
-  %1 = load i8, i8* @c1, align 1, !tbaa !15
-  %splat.splatinsert = insertelement <4 x i8> undef, i8 %1, i32 0
-  %splat.splat = shufflevector <4 x i8> %splat.splatinsert, <4 x i8> undef, <4 x i32> zeroinitializer
-  %add = add <4 x i8> %call, %in
-  %add1 = add <4 x i8> %add, %splat.splat
-  %.unpack6 = load i32, i32* bitcast (%struct.rs_allocation* @w to i32*), align 4
-  %2 = insertvalue [1 x i32] undef, i32 %.unpack6, 0
-  tail call void @_Z21rsSetElementAt_uchar413rs_allocationDv4_hjj([1 x i32] %2, <4 x i8> %add1, i32 %x, i32 %y) #2
-  ret <4 x i8> %in
-}
-
-declare <4 x i8> @_Z21rsGetElementAt_uchar413rs_allocationjj([1 x i32], i32, i32) #1
-
-declare void @_Z21rsSetElementAt_uchar413rs_allocationDv4_hjj([1 x i32], <4 x i8>, i32, i32) #1
-
-; Function Attrs: nounwind
-define void @.rs.dtor() #0 {
-entry:
-  tail call void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation* nonnull @r) #2
-  tail call void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation* nonnull @w) #2
-  ret void
-}
-
-declare void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation*) #1
-
-attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { nounwind }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_var = !{!6, !7, !8}
-!\23rs_object_slots = !{!9, !10}
-!\23rs_export_foreach_name = !{!11, !12}
-!\23rs_export_foreach = !{!13, !14}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!"c1", !"7"}
-!7 = !{!"r", !"20"}
-!8 = !{!"w", !"20"}
-!9 = !{!"1"}
-!10 = !{!"2"}
-!11 = !{!"root"}
-!12 = !{!"k1"}
-!13 = !{!"0"}
-!14 = !{!"59"}
-!15 = !{!16, !16, i64 0}
-!16 = !{!"omnipotent char", !17, i64 0}
-!17 = !{!"Simple C/C++ TBAA"}
diff --git a/rsov/compiler/tests/rs_allocation/read_write.rs b/rsov/compiler/tests/rs_allocation/read_write.rs
deleted file mode 100644
index 8852c82..0000000
--- a/rsov/compiler/tests/rs_allocation/read_write.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (C) 2016 The Android Open Source Project
-//
-// 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.
-
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-uchar c1;
-rs_allocation r;
-rs_allocation w;
-
-uchar4 __attribute__((kernel)) k1(uchar4 in, uint32_t x, uint32_t y) {
-  uchar4 read = rsGetElementAt_uchar4(r, x, y);
-  rsSetElementAt_uchar4(w, in + c1 + read, x, y);
-  return in;
-}
diff --git a/rsov/compiler/tests/rs_allocation/rewrite_getdim.ll b/rsov/compiler/tests/rs_allocation/rewrite_getdim.ll
deleted file mode 100644
index c2a9534..0000000
--- a/rsov/compiler/tests/rs_allocation/rewrite_getdim.ll
+++ /dev/null
@@ -1,71 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-; Source:
-; rs_allocation g;
-; int32_t RS_KERNEL getDim(int32_t dummy) {
-;    return rsAllocationGetDimX(g);
-; }
-source_filename = "global_query4_out/bc32/global_query4.ll"
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: OpMemberDecorate [[MetadataS:%[a-zA-Z_0-9]*]] 0 Offset 4
-; CHECK: OpMemberDecorate [[MetadataS]] 1 Offset 8
-; CHECK: OpMemberDecorate [[MetadataS]] 2 Offset 12
-; CHECK: OpMemberDecorate [[MetadataS]] 3 Offset 16
-; CHECK: OpDecorate [[RuntimeArrS:%[a-zA-Z_0-9]*]] ArrayStride {{[0-9]*}}
-; CHECK: OpDecorate [[MetadataSSBO:%[a-zA-Z_0-9]*]] BufferBlock
-; CHECK: OpDecorate [[Metadata:%[a-zA-Z_0-9]*]] DescriptorSet 0
-; CHECK: OpDecorate [[Metadata]] Binding 1
-
-%struct.rs_allocation = type { i32* }
-
-@g = common global %struct.rs_allocation zeroinitializer, align 4
-
-; CHECK-NOT: %g = OpVariable %{{.*}} Uniform
-; CHECK-NOT: OpFunctionCall %uint %__rsov_rsAllocationGetDimX
-; CHECK: [[DimX:%[a-zA-Z_0-9]*]] = OpAccessChain %_ptr_Uniform_uint [[Metadata]]
-; CHECK: [[Res:%[a-zA-Z_0-9]*]] = OpLoad %uint [[DimX]]
-; CHECK: OpReturnValue [[Res]]
-
-; Function Attrs: nounwind
-define i32 @getDim(i32 %dummy) local_unnamed_addr #0 {
-entry:
-  %.unpack = load i32, i32* bitcast (%struct.rs_allocation* @g to i32*), align 4
-  %0 = insertvalue [1 x i32] undef, i32 %.unpack, 0
-  %call = tail call i32 @_Z19rsAllocationGetDimX13rs_allocation([1 x i32] %0) #2
-  ret i32 %call
-}
-
-declare i32 @_Z19rsAllocationGetDimX13rs_allocation([1 x i32]) local_unnamed_addr #1
-
-; Function Attrs: nounwind
-define void @.rs.dtor() local_unnamed_addr #0 {
-entry:
-  tail call void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation* nonnull @g) #2
-  ret void
-}
-
-declare void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation*) local_unnamed_addr #1
-
-attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { nounwind }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4}
-!\23rs_export_var = !{!5}
-!\23rs_object_slots = !{!6}
-!\23rs_export_foreach_name = !{!7, !8}
-!\23rs_export_foreach = !{!6, !9}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.275480  (based on LLVM 3.8.275480)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"com.android.rs.rsov.test"}
-!5 = !{!"g", !"20"}
-!6 = !{!"0"}
-!7 = !{!"root"}
-!8 = !{!"getDim"}
-!9 = !{!"35"}
diff --git a/rsov/compiler/tests/rs_allocation/write.ll b/rsov/compiler/tests/rs_allocation/write.ll
deleted file mode 100644
index 8865fb6..0000000
--- a/rsov/compiler/tests/rs_allocation/write.ll
+++ /dev/null
@@ -1,68 +0,0 @@
-; XFAIL: *
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-; CHECK: %struct___GPUBuffer = OpTypeStruct {{.*}}
-; CHECK: [[PTR_TYPE:%[a-zA-Z_0-9]+]] = OpTypePointer Uniform %struct___GPUBuffer
-
-; CHECK: %__GPUBlock = OpVariable [[PTR_TYPE]] Uniform
-
-%struct.rs_allocation = type { i32* }
-
-@alloc = common global %struct.rs_allocation zeroinitializer, align 4
-@c1 = common global i8 0, align 1
-
-; Function Attrs: nounwind
-define <4 x i8> @k1(<4 x i8> %in, i32 %x, i32 %y) #0 {
-entry:
-  %0 = load i8, i8* @c1, align 1, !tbaa !13
-  %splat.splatinsert = insertelement <4 x i8> undef, i8 %0, i32 0
-  %splat.splat = shufflevector <4 x i8> %splat.splatinsert, <4 x i8> undef, <4 x i32> zeroinitializer
-  %add = add <4 x i8> %splat.splat, %in
-  %.unpack = load i32, i32* bitcast (%struct.rs_allocation* @alloc to i32*), align 4
-  %1 = insertvalue [1 x i32] undef, i32 %.unpack, 0
-  tail call void @_Z21rsSetElementAt_uchar413rs_allocationDv4_hjj([1 x i32] %1, <4 x i8> %add, i32 %x, i32 %y) #2
-  ret <4 x i8> %in
-}
-
-declare void @_Z21rsSetElementAt_uchar413rs_allocationDv4_hjj([1 x i32], <4 x i8>, i32, i32) #1
-
-; Function Attrs: nounwind
-define void @.rs.dtor() #0 {
-entry:
-  tail call void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation* nonnull @alloc) #2
-  ret void
-}
-
-declare void @_Z13rsClearObjectP13rs_allocation(%struct.rs_allocation*) #1
-
-attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "target-features"="+long64" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { nounwind }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4, !5}
-!\23rs_export_var = !{!6, !7}
-!\23rs_object_slots = !{!8}
-!\23rs_export_foreach_name = !{!9, !10}
-!\23rs_export_foreach = !{!11, !12}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!"rs_fp_relaxed", !""}
-!6 = !{!"c1", !"7"}
-!7 = !{!"alloc", !"20"}
-!8 = !{!"1"}
-!9 = !{!"root"}
-!10 = !{!"k1"}
-!11 = !{!"0"}
-!12 = !{!"59"}
-!13 = !{!14, !14, i64 0}
-!14 = !{!"omnipotent char", !15, i64 0}
-!15 = !{!"Simple C/C++ TBAA"}
diff --git a/rsov/compiler/tests/rs_allocation/write.rs b/rsov/compiler/tests/rs_allocation/write.rs
deleted file mode 100644
index ef87c7a..0000000
--- a/rsov/compiler/tests/rs_allocation/write.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (C) 2016 The Android Open Source Project
-//
-// 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.
-
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-uchar c1;
-rs_allocation alloc;
-
-uchar4 __attribute__((kernel)) k1(uchar4 in, uint32_t x, uint32_t y) {
-  rsSetElementAt_uchar4(alloc, in + c1, x, y);
-  return in;
-}
diff --git a/rsov/compiler/tests/run-lit-tests.sh b/rsov/compiler/tests/run-lit-tests.sh
deleted file mode 100755
index 54bb559..0000000
--- a/rsov/compiler/tests/run-lit-tests.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash -e
-
-current_dir=$(pwd)
-export PATH=$current_dir:$PATH
-LIT_PATH=$current_dir/llvm-lit
-LIBSPIRV_TESTS=$current_dir
-
-for arg in $@ ; do
-  if [[ -a "$arg" ]] ; then
-    # Looks like the user specified one or more files,
-    # so don't implicitly specify the current directory.
-    LIBSPIRV_TESTS=
-    break
-  fi
-done
-
-$LIT_PATH $LIBSPIRV_TESTS $@
diff --git a/rsov/compiler/tests/single_kernel/duff.ll b/rsov/compiler/tests/single_kernel/duff.ll
deleted file mode 100644
index 535888b..0000000
--- a/rsov/compiler/tests/single_kernel/duff.ll
+++ /dev/null
@@ -1,104 +0,0 @@
-; Expecting validation failure
-; RUN: not rs2spirv_lit_driver.sh %s
-
-target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
-target triple = "aarch64-none-linux-gnueabi"
-
-; CHECK: OpEntryPoint GLCompute %[[WrapperId:[a-zA-Z_0-9]*]] "entry_duff"
-; CHECK: [[KernelId:%[a-zA-Z_0-9]+]] = OpFunction {{.*}}
-; Function Attrs: norecurse nounwind readnone
-define i32 @duff(i32 %count) #0 {
-entry:
-  %add = add nsw i32 %count, 7
-  %div = sdiv i32 %add, 8
-  %rem = srem i32 %count, 8
-  switch i32 %rem, label %sw.epilog [
-    i32 0, label %do.body
-    i32 7, label %sw.bb1
-    i32 6, label %sw.bb2
-    i32 5, label %sw.bb3
-    i32 4, label %sw.bb6
-    i32 3, label %sw.bb8
-    i32 2, label %sw.bb12
-    i32 1, label %sw.bb14
-  ]
-
-do.body:                                          ; preds = %entry, %sw.bb14
-  %n.0 = phi i32 [ %dec15, %sw.bb14 ], [ %div, %entry ]
-  %x.0 = phi i32 [ %shl, %sw.bb14 ], [ 321, %entry ]
-  %mul = mul nsw i32 %x.0, 5
-  br label %sw.bb1
-
-sw.bb1:                                           ; preds = %entry, %do.body
-  %n.1 = phi i32 [ %n.0, %do.body ], [ %div, %entry ]
-  %x.1 = phi i32 [ %mul, %do.body ], [ 321, %entry ]
-  %dec = add nsw i32 %x.1, -1
-  br label %sw.bb2
-
-sw.bb2:                                           ; preds = %entry, %sw.bb1
-  %n.2 = phi i32 [ %n.1, %sw.bb1 ], [ %div, %entry ]
-  %x.2 = phi i32 [ %dec, %sw.bb1 ], [ 321, %entry ]
-  %xor = xor i32 %x.2, 27
-  br label %sw.bb3
-
-sw.bb3:                                           ; preds = %entry, %sw.bb2
-  %n.3 = phi i32 [ %n.2, %sw.bb2 ], [ %div, %entry ]
-  %x.3 = phi i32 [ %xor, %sw.bb2 ], [ 321, %entry ]
-  %mul4 = mul nsw i32 %x.3, %x.3
-  %sub.neg = add i32 %x.3, 12
-  %sub5 = sub i32 %sub.neg, %mul4
-  br label %sw.bb6
-
-sw.bb6:                                           ; preds = %entry, %sw.bb3
-  %n.4 = phi i32 [ %n.3, %sw.bb3 ], [ %div, %entry ]
-  %x.4 = phi i32 [ %sub5, %sw.bb3 ], [ 321, %entry ]
-  %add7 = add nsw i32 %x.4, 2
-  br label %sw.bb8
-
-sw.bb8:                                           ; preds = %entry, %sw.bb6
-  %n.5 = phi i32 [ %n.4, %sw.bb6 ], [ %div, %entry ]
-  %x.5 = phi i32 [ %add7, %sw.bb6 ], [ 321, %entry ]
-  %rem9 = srem i32 %x.5, 32
-  %mul10 = mul nsw i32 %x.5, %x.5
-  %add11 = add nsw i32 %rem9, %mul10
-  br label %sw.bb12
-
-sw.bb12:                                          ; preds = %entry, %sw.bb8
-  %n.6 = phi i32 [ %n.5, %sw.bb8 ], [ %div, %entry ]
-  %x.6 = phi i32 [ %add11, %sw.bb8 ], [ 321, %entry ]
-  %sub13 = add nsw i32 %x.6, -2
-  br label %sw.bb14
-
-sw.bb14:                                          ; preds = %entry, %sw.bb12
-  %n.7 = phi i32 [ %div, %entry ], [ %n.6, %sw.bb12 ]
-  %x.7 = phi i32 [ 321, %entry ], [ %sub13, %sw.bb12 ]
-  %shl = shl i32 %x.7, 3
-  %dec15 = add nsw i32 %n.7, -1
-  %cmp = icmp sgt i32 %n.7, 1
-  br i1 %cmp, label %do.body, label %sw.epilog
-
-sw.epilog:                                        ; preds = %sw.bb14, %entry
-  %x.8 = phi i32 [ 321, %entry ], [ %shl, %sw.bb14 ]
-  ret i32 %x.8
-}
-
-; CHECK: %[[WrapperId]] = OpFunction {{.*}}
-; CHECK-NEXT: OpLabel
-; CHECK: %{{[0-9]+}} = OpFunctionCall %{{.*}} [[KernelId]]
-; CHECK: OpReturn
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.ident = !{!0}
-!\23pragma = !{!1, !2, !3}
-!\23rs_export_foreach_name = !{!4, !5}
-!\23rs_export_foreach = !{!6, !7}
-
-!0 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!1 = !{!"version", !"1"}
-!2 = !{!"java_package_name", !"rs2spirv"}
-!3 = !{!"rs_fp_relaxed", !""}
-!4 = !{!"root"}
-!5 = !{!"duff"}
-!6 = !{!"0"}
-!7 = !{!"35"}
diff --git a/rsov/compiler/tests/single_kernel/fib.ll b/rsov/compiler/tests/single_kernel/fib.ll
deleted file mode 100644
index fe62505..0000000
--- a/rsov/compiler/tests/single_kernel/fib.ll
+++ /dev/null
@@ -1,45 +0,0 @@
-; Expecting validation failure
-; RUN: not rs2spirv_lit_driver.sh %s
-
-target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
-target triple = "aarch64-none-linux-gnueabi"
-
-; Function Attrs: nounwind readnone
-; CHECK: OpEntryPoint GLCompute %{{[a-zA-Z_0-9]*}} "entry_fib" %gl_GlobalInvocationID
-define i32 @fib(i32 %n) #0 {
-entry:
-  %n.off8 = add i32 %n, -1
-  %0 = icmp ult i32 %n.off8, 2
-  br i1 %0, label %return, label %if.end
-
-if.end:                                           ; preds = %entry, %if.end
-  %n.tr10 = phi i32 [ %sub2, %if.end ], [ %n, %entry ]
-  %accumulator.tr9 = phi i32 [ %add, %if.end ], [ 1, %entry ]
-  %sub = add nsw i32 %n.tr10, -1
-  %call = tail call i32 @fib(i32 %sub)
-  %sub2 = add nsw i32 %n.tr10, -2
-  %add = add nsw i32 %call, %accumulator.tr9
-  %n.off = add i32 %n.tr10, -3
-  %1 = icmp ult i32 %n.off, 2
-  br i1 %1, label %return, label %if.end
-
-return:                                           ; preds = %if.end, %entry
-  %accumulator.tr.lcssa = phi i32 [ 1, %entry ], [ %add, %if.end ]
-  ret i32 %accumulator.tr.lcssa
-}
-
-attributes #0 = { nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.ident = !{!0}
-!\23pragma = !{!1, !2, !3}
-!\23rs_export_foreach_name = !{!4, !5}
-!\23rs_export_foreach = !{!6, !7}
-
-!0 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!1 = !{!"version", !"1"}
-!2 = !{!"java_package_name", !"rs2spirv"}
-!3 = !{!"rs_fp_relaxed", !""}
-!4 = !{!"root"}
-!5 = !{!"fib"}
-!6 = !{!"0"}
-!7 = !{!"35"}
diff --git a/rsov/compiler/tests/single_kernel/identity.ll b/rsov/compiler/tests/single_kernel/identity.ll
deleted file mode 100644
index 4195442..0000000
--- a/rsov/compiler/tests/single_kernel/identity.ll
+++ /dev/null
@@ -1,27 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
-target triple = "aarch64-none-linux-gnueabi"
-
-; Function Attrs: norecurse nounwind readnone
-; CHECK: OpEntryPoint GLCompute %{{[a-zA-Z_0-9]*}} "entry_foo" %gl_GlobalInvocationID{{.*}}
-define i32 @foo(i32 %in) #0 {
-; CHECK: OpReturnValue {{.*}}
-  ret i32 %in
-}
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.ident = !{!0}
-!\23pragma = !{!1, !2, !3}
-!\23rs_export_foreach_name = !{!4, !5}
-!\23rs_export_foreach = !{!6, !7}
-
-!0 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!1 = !{!"version", !"1"}
-!2 = !{!"java_package_name", !"rs2spirv"}
-!3 = !{!"rs_fp_relaxed", !""}
-!4 = !{!"root"}
-!5 = !{!"foo"}
-!6 = !{!"0"}
-!7 = !{!"35"}
diff --git a/rsov/compiler/tests/single_kernel/identity.rs b/rsov/compiler/tests/single_kernel/identity.rs
deleted file mode 100644
index a3bdb6e..0000000
--- a/rsov/compiler/tests/single_kernel/identity.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-// TODO: Complete the test.
-
-#pragma version(1)
-#pragma rs java_package_name(rs2srpiv)
-#pragma rs_fp_relaxed
-
-int __attribute__((kernel)) foo(int in) {
-  return in;
-}
diff --git a/rsov/compiler/tests/single_kernel/invert.ll b/rsov/compiler/tests/single_kernel/invert.ll
deleted file mode 100644
index 8a9efdb..0000000
--- a/rsov/compiler/tests/single_kernel/invert.ll
+++ /dev/null
@@ -1,46 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
-target triple = "aarch64-none-linux-gnueabi"
-
-; Function Attrs: norecurse nounwind readnone
-; CHECK:OpDecorate %[[BUF_S:.*]] BufferBlock
-; CHECK:OpDecorate %[[BUF_VAR:.*]] DescriptorSet {{[0-9]}}
-; CHECK:OpDecorate %[[BUF_VAR]] Binding {{[0-9]}}
-; CHECK:%[[BUF_PTR_TY:.*]] = OpTypePointer Uniform %[[BUF_S]]
-; CHECK:%[[BUF_VAR]] = OpVariable %[[BUF_PTR_TY]] Uniform
-; CHECK:%[[ADDR:.*]] = OpAccessChain {{.*}} %[[BUF_VAR]]
-; CHECK:OpLoad {{.*}} %[[ADDR]]
-
-define <4 x float> @invert(<4 x float> %in) #0 {
-entry:
-  %0 = extractelement <4 x float> %in, i64 0
-  %sub = fsub float 1.000000e+00, %0
-  %1 = insertelement <4 x float> undef, float %sub, i64 0
-  %2 = extractelement <4 x float> %in, i64 1
-  %sub1 = fsub float 1.000000e+00, %2
-  %3 = insertelement <4 x float> %1, float %sub1, i64 1
-  %4 = extractelement <4 x float> %in, i64 2
-  %sub2 = fsub float 1.000000e+00, %4
-  %5 = insertelement <4 x float> %3, float %sub2, i64 2
-  %6 = extractelement <4 x float> %in, i64 3
-  %sub3 = fsub float 1.000000e+00, %6
-  %7 = insertelement <4 x float> %5, float %sub3, i64 3
-  ret <4 x float> %7
-}
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.ident = !{!0}
-!\23pragma = !{!1, !2, !3}
-!\23rs_export_foreach_name = !{!4, !5}
-!\23rs_export_foreach = !{!6, !7}
-
-!0 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!1 = !{!"version", !"1"}
-!2 = !{!"java_package_name", !"rs2spirv"}
-!3 = !{!"rs_fp_relaxed", !""}
-!4 = !{!"root"}
-!5 = !{!"invert"}
-!6 = !{!"0"}
-!7 = !{!"35"}
diff --git a/rsov/compiler/tests/single_kernel/kernel.ll b/rsov/compiler/tests/single_kernel/kernel.ll
deleted file mode 100644
index 03bea0e..0000000
--- a/rsov/compiler/tests/single_kernel/kernel.ll
+++ /dev/null
@@ -1,32 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
-target triple = "aarch64-none-linux-gnueabi"
-
-; CHECK: OpEntryPoint GLCompute [[WrapperId:%[a-zA-Z_0-9]*]] "entry_foo"
-; CHECK: [[KernelId:%[a-zA-Z_0-9]+]] = OpFunction {{.*}}
-
-; Function Attrs: norecurse nounwind readnone
-define void @foo() #0 {
-  ret void
-}
-; CHECK: [[WrapperId]] = OpFunction {{.*}}
-; CHECK-NEXT: OpLabel
-; CHECK-NEXT: %{{[0-9]+}} = OpFunctionCall %{{.*}} [[KernelId]]
-; CHECK-NEXT: OpReturn
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.ident = !{!0}
-!\23pragma = !{!1, !2, !3}
-!\23rs_export_foreach_name = !{!4, !5}
-!\23rs_export_foreach = !{!6, !7}
-
-!0 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!1 = !{!"version", !"1"}
-!2 = !{!"java_package_name", !"rs2srpiv"}
-!3 = !{!"rs_fp_relaxed", !""}
-!4 = !{!"root"}
-!5 = !{!"foo"}
-!6 = !{!"0"}
-!7 = !{!"32"}
diff --git a/rsov/compiler/tests/single_kernel/kernel.rs b/rsov/compiler/tests/single_kernel/kernel.rs
deleted file mode 100644
index 2e38a13..0000000
--- a/rsov/compiler/tests/single_kernel/kernel.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma version(1)
-#pragma rs java_package_name(rs2spirv)
-#pragma rs_fp_relaxed
-
-void __attribute__((kernel)) foo() {
-}
diff --git a/rsov/compiler/tests/single_kernel/mixed.ll b/rsov/compiler/tests/single_kernel/mixed.ll
deleted file mode 100644
index c968ccc..0000000
--- a/rsov/compiler/tests/single_kernel/mixed.ll
+++ /dev/null
@@ -1,66 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-; CHECK: OpEntryPoint GLCompute %{{[a-zA-Z_0-9]*}} "entry_inc" %gl_GlobalInvocationID
-; CHECK-NOT: an_invokable
-
-target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
-target triple = "armv7-none-linux-gnueabi"
-
-@.str = private unnamed_addr constant [24 x i8] c"test_root_output FAILED\00", align 1
-
-; Function Attrs: nounwind
-define void @an_invokable(float %i) local_unnamed_addr #0 {
-entry:
-  %call = tail call fastcc float @sum(float %i, float 2.000000e+00)
-  %conv = fptosi float %call to i32
-  tail call void @_Z7rsDebugPKci(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i32 0, i32 0), i32 %conv) #4
-  ret void
-}
-
-declare void @_Z7rsDebugPKci(i8*, i32) local_unnamed_addr #1
-
-; Function Attrs: norecurse nounwind readnone
-define internal fastcc float @sum(float %i, float %j) unnamed_addr #2 {
-entry:
-  %add = fadd float %i, %j
-  ret float %add
-}
-
-; Function Attrs: norecurse nounwind readnone
-define float @inc(float %i) local_unnamed_addr #2 {
-entry:
-  %call = tail call fastcc float @sum(float %i, float 1.000000e+00)
-  ret float %call
-}
-
-; Function Attrs: noinline nounwind
-define void @.helper_an_invokable({ float }* nocapture) local_unnamed_addr #3 {
-entry:
-  %1 = getelementptr inbounds { float }, { float }* %0, i32 0, i32 0
-  %2 = load float, float* %1, align 4
-  tail call void @an_invokable(float %2)
-  ret void
-}
-
-attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #3 = { noinline nounwind }
-attributes #4 = { nounwind }
-
-!llvm.module.flags = !{!0, !1}
-!llvm.ident = !{!2}
-!\23pragma = !{!3, !4}
-!\23rs_export_func = !{!5}
-!\23rs_export_foreach_name = !{!6, !7}
-!\23rs_export_foreach = !{!8, !9}
-
-!0 = !{i32 1, !"wchar_size", i32 4}
-!1 = !{i32 1, !"min_enum_size", i32 4}
-!2 = !{!"Android clang version 3.8.275480  (based on LLVM 3.8.275480)"}
-!3 = !{!"version", !"1"}
-!4 = !{!"java_package_name", !"rs2spirv"}
-!5 = !{!".helper_an_invokable"}
-!6 = !{!"root"}
-!7 = !{!"inc"}
-!8 = !{!"0"}
-!9 = !{!"35"}
diff --git a/rsov/compiler/tests/single_kernel/newroot.ll b/rsov/compiler/tests/single_kernel/newroot.ll
deleted file mode 100644
index c1055b3..0000000
--- a/rsov/compiler/tests/single_kernel/newroot.ll
+++ /dev/null
@@ -1,30 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
-target triple = "aarch64-none-linux-gnueabi"
-
-; CHECK: OpEntryPoint GLCompute [[WrapperId:%[a-zA-Z_0-9]*]] "entry_root"
-; CHECK: [[KernelId:%[a-zA-Z_0-9]+]] = OpFunction {{.*}}
-
-; Function Attrs: norecurse nounwind readnone
-define i32 @root(i32 %a) #0 {
-  ret i32 %a
-}
-; CHECK: [[WrapperId]] = OpFunction {{.*}}
-; CHECK-NEXT: OpLabel
-; CHECK: %{{[0-9]+}} = OpFunctionCall %{{.*}} [[KernelId]]
-; CHECK: OpReturn
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.ident = !{!0}
-!\23pragma = !{!1, !2, !3}
-!\23rs_export_foreach_name = !{!4}
-!\23rs_export_foreach = !{!5}
-
-!0 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!1 = !{!"version", !"1"}
-!2 = !{!"java_package_name", !"rs2srpiv"}
-!3 = !{!"rs_fp_relaxed", !""}
-!4 = !{!"root"}
-!5 = !{!"35"}
diff --git a/rsov/compiler/tests/single_kernel/oldroot.ll b/rsov/compiler/tests/single_kernel/oldroot.ll
deleted file mode 100644
index 1f3da89..0000000
--- a/rsov/compiler/tests/single_kernel/oldroot.ll
+++ /dev/null
@@ -1,23 +0,0 @@
-; RUN: not rs2spirv_lit_driver.sh %s
-
-target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
-target triple = "aarch64-none-linux-gnueabi"
-
-; Function Attrs: norecurse nounwind readnone
-define void @root(i8 *%in, i8 *%out, i32 %x, i32 %y) #0 {
-  ret void
-}
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.ident = !{!0}
-!\23pragma = !{!1, !2, !3}
-!\23rs_export_foreach_name = !{!4}
-!\23rs_export_foreach = !{!5}
-
-!0 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!1 = !{!"version", !"1"}
-!2 = !{!"java_package_name", !"rs2srpiv"}
-!3 = !{!"rs_fp_relaxed", !""}
-!4 = !{!"root"}
-!5 = !{!"27"}
diff --git a/rsov/compiler/tests/single_kernel/times.ll b/rsov/compiler/tests/single_kernel/times.ll
deleted file mode 100644
index e63bfee..0000000
--- a/rsov/compiler/tests/single_kernel/times.ll
+++ /dev/null
@@ -1,35 +0,0 @@
-; RUN: rs2spirv_lit_driver.sh %s | FileCheck %s
-
-target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
-target triple = "aarch64-none-linux-gnueabi"
-
-; CHECK: OpEntryPoint GLCompute %[[WrapperId:[a-zA-Z_0-9]*]] "entry_times"
-; CHECK: [[KernelId:%[a-zA-Z_0-9]+]] = OpFunction {{.*}}
-
-; Function Attrs: norecurse nounwind readnone
-define i32 @times(i32 %x) #0 {
-entry:
-  %mul = shl i32 %x, 1
-  ret i32 %mul
-}
-
-; CHECK: %[[WrapperId]] = OpFunction {{.*}}
-; CHECK-NEXT: OpLabel
-; CHECK: %{{[0-9]+}} = OpFunctionCall %{{.*}} [[KernelId]]
-; CHECK: OpReturn
-
-attributes #0 = { norecurse nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="0" "stackrealign" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!llvm.ident = !{!0}
-!\23pragma = !{!1, !2, !3}
-!\23rs_export_foreach_name = !{!4, !5}
-!\23rs_export_foreach = !{!6, !7}
-
-!0 = !{!"Android clang version 3.8.256229  (based on LLVM 3.8.256229)"}
-!1 = !{!"version", !"1"}
-!2 = !{!"java_package_name", !"rs2spirv"}
-!3 = !{!"rs_fp_relaxed", !""}
-!4 = !{!"root"}
-!5 = !{!"times"}
-!6 = !{!"0"}
-!7 = !{!"42"}
diff --git a/rsov/compiler/unit_tests/TestRunner.h b/rsov/compiler/unit_tests/TestRunner.h
deleted file mode 100644
index 4e8f57a..0000000
--- a/rsov/compiler/unit_tests/TestRunner.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2016, The Android Open Source Project
- *
- * 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 RS2SPIRV_TEST_RUNNER
-#define RS2SPIRV_TEST_RUNNER
-
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include <cassert>
-#include <vector>
-
-namespace rs2spirv {
-
-struct TestCase {
-  void (*testPtr)(void);
-  const char *const description;
-};
-
-class TestRunnerContext {
-public:
-  static TestRunnerContext &getInstance() {
-    static TestRunnerContext ctx;
-    return ctx;
-  }
-
-  static void addTest(TestCase TC) { getInstance().tests.push_back(TC); }
-  static size_t &getCheckSuccessNum() { return getInstance().checkSuccessNum; }
-  static size_t &getTotalCheckNum() { return getInstance().totalCheckNum; }
-
-  static int runTests() {
-    bool Failed = false;
-    for (auto &TC : getInstance().tests) {
-      getCheckSuccessNum() = getTotalCheckNum() = 0;
-      llvm::outs() << "Test(" << TC.description << ") {\n";
-      TC.testPtr();
-      llvm::outs() << "\n} (" << TC.description << ") [" << getCheckSuccessNum()
-                   << "/" << getTotalCheckNum() << "]\n\n";
-      Failed |= getCheckSuccessNum() != getTotalCheckNum();
-    }
-
-    return static_cast<int>(Failed);
-  }
-
-private:
-  TestRunnerContext() = default;
-  std::vector<TestCase> tests;
-  size_t checkSuccessNum;
-  size_t totalCheckNum;
-};
-
-struct TestAdder {
-  TestAdder(TestCase TC) { TestRunnerContext::addTest(TC); }
-};
-
-#define RS2SPIRV_CONCAT_IMPL(S1, S2) S1##S2
-#define RS2SPIRV_CONCAT(S1, S2) RS2SPIRV_CONCAT_IMPL(S1, S2)
-#define RS2SPIRV_ANONYMOUS(X) RS2SPIRV_CONCAT(X, __COUNTER__)
-
-#if RS2SPIRV_DEBUG
-#define RS2SPIRV_TEST_CASE_ADD_IMPL(FNAME, VNAME, DESCRIPTION)                 \
-  static void FNAME();                                                         \
-  static rs2spirv::TestAdder VNAME({FNAME, DESCRIPTION});                      \
-  inline void FNAME()
-#elif defined(__GNUC__) || defined(__clang__)
-#define RS2SPIRV_TEST_CASE_ADD_IMPL(FNAME, VNAME, DESCRIPTION)                 \
-  static inline void __attribute__((unused)) FNAME()
-#else
-#define RS2SPIRV_TEST_CASE_ADD_IMPL(FNAME, VNAME, DESCRIPTION)                 \
-  static inline void FNAME()
-#endif
-
-#define RS2SPIRV_TEST_CASE_ADD(NAME, DESCRIPTION)                              \
-  RS2SPIRV_TEST_CASE_ADD_IMPL(RS2SPIRV_ANONYMOUS(NAME),                        \
-                              RS2SPIRV_ANONYMOUS(NAME), DESCRIPTION)
-
-#define TEST_CASE(DESCRIPTION) RS2SPIRV_TEST_CASE_ADD(TC, DESCRIPTION)
-
-#define CHECK(CONDITION)                                                       \
-  ++rs2spirv::TestRunnerContext::getTotalCheckNum();                           \
-  if (!(CONDITION))                                                            \
-    llvm::errs() << "\nCHECK <(  " #CONDITION "  )> failed!\n";                \
-  else                                                                         \
-    ++rs2spirv::TestRunnerContext::getCheckSuccessNum();                       \
-  (void)0
-
-} // namespace rs2spirv
-
-#endif
diff --git a/rsov/driver/.clang-format b/rsov/driver/.clang-format
deleted file mode 100644
index e8b6a2d..0000000
--- a/rsov/driver/.clang-format
+++ /dev/null
@@ -1,95 +0,0 @@
----
-Language:        Cpp
-# BasedOnStyle:  Google
-AccessModifierOffset: -1
-AlignAfterOpenBracket: Align
-AlignConsecutiveAssignments: false
-AlignConsecutiveDeclarations: false
-AlignEscapedNewlinesLeft: true
-AlignOperands:   true
-AlignTrailingComments: true
-AllowAllParametersOfDeclarationOnNextLine: true
-AllowShortBlocksOnASingleLine: false
-AllowShortCaseLabelsOnASingleLine: false
-AllowShortFunctionsOnASingleLine: All
-AllowShortIfStatementsOnASingleLine: true
-AllowShortLoopsOnASingleLine: true
-AlwaysBreakAfterDefinitionReturnType: None
-AlwaysBreakAfterReturnType: None
-AlwaysBreakBeforeMultilineStrings: true
-AlwaysBreakTemplateDeclarations: true
-BinPackArguments: true
-BinPackParameters: true
-BraceWrapping:
-  AfterClass:      false
-  AfterControlStatement: false
-  AfterEnum:       false
-  AfterFunction:   false
-  AfterNamespace:  false
-  AfterObjCDeclaration: false
-  AfterStruct:     false
-  AfterUnion:      false
-  BeforeCatch:     false
-  BeforeElse:      false
-  IndentBraces:    false
-BreakBeforeBinaryOperators: None
-BreakBeforeBraces: Attach
-BreakBeforeTernaryOperators: true
-BreakConstructorInitializersBeforeComma: false
-BreakAfterJavaFieldAnnotations: false
-BreakStringLiterals: true
-ColumnLimit:     80
-CommentPragmas:  '^ IWYU pragma:'
-ConstructorInitializerAllOnOneLineOrOnePerLine: true
-ConstructorInitializerIndentWidth: 4
-ContinuationIndentWidth: 4
-Cpp11BracedListStyle: true
-DerivePointerAlignment: true
-DisableFormat:   false
-ExperimentalAutoDetectBinPacking: false
-ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
-IncludeCategories:
-  - Regex:           '^<.*\.h>'
-    Priority:        1
-  - Regex:           '^<.*'
-    Priority:        2
-  - Regex:           '.*'
-    Priority:        3
-IncludeIsMainRegex: '([-_](test|unittest))?$'
-IndentCaseLabels: true
-IndentWidth:     2
-IndentWrappedFunctionNames: false
-JavaScriptQuotes: Leave
-JavaScriptWrapImports: true
-KeepEmptyLinesAtTheStartOfBlocks: false
-MacroBlockBegin: ''
-MacroBlockEnd:   ''
-MaxEmptyLinesToKeep: 1
-NamespaceIndentation: None
-ObjCBlockIndentWidth: 2
-ObjCSpaceAfterProperty: false
-ObjCSpaceBeforeProtocolList: false
-PenaltyBreakBeforeFirstCallParameter: 1
-PenaltyBreakComment: 300
-PenaltyBreakFirstLessLess: 120
-PenaltyBreakString: 1000
-PenaltyExcessCharacter: 1000000
-PenaltyReturnTypeOnItsOwnLine: 200
-PointerAlignment: Left
-ReflowComments:  true
-SortIncludes:    true
-SpaceAfterCStyleCast: false
-SpaceBeforeAssignmentOperators: true
-SpaceBeforeParens: ControlStatements
-SpaceInEmptyParentheses: false
-SpacesBeforeTrailingComments: 2
-SpacesInAngles:  false
-SpacesInContainerLiterals: true
-SpacesInCStyleCastParentheses: false
-SpacesInParentheses: false
-SpacesInSquareBrackets: false
-Standard:        Auto
-TabWidth:        8
-UseTab:          Never
-...
-
diff --git a/rsov/driver/Android.mk b/rsov/driver/Android.mk
deleted file mode 100644
index 8154c9e..0000000
--- a/rsov/driver/Android.mk
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright (C) 2016 The Android Open Source Project
-#
-# 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.
-#
-
-LOCAL_PATH :=$(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libRSDriver_RSoV
-
-LOCAL_SRC_FILES := \
-    rsovAllocation.cpp \
-    rsovContext.cpp \
-    rsovCore.cpp \
-    rsovElement.cpp \
-    rsovRuntimeStubs.cpp \
-    rsovSampler.cpp \
-    rsovScript.cpp \
-    rsovScriptGroup.cpp \
-    rsovType.cpp \
-
-LOCAL_SHARED_LIBRARIES := \
-    libRS_internal \
-    libRSCpuRef \
-    libbcinfo \
-    libc++ \
-    liblog \
-    libspirit \
-    libvulkan \
-    libgui
-
-LOCAL_C_INCLUDES := \
-    frameworks/compile/libbcc/include \
-    frameworks/native/vulkan/include \
-    frameworks/rs \
-    frameworks/rs/cpu_ref \
-    frameworks/rs/rsov/compiler \
-
-LOCAL_C_INCLUDES += \
-
-LOCAL_CFLAGS := -Werror -Wall -Wextra
-# TODO: remove warnings on unused variables and parameters
-LOCAL_CFLAGS += -Wno-unused-variable -Wno-unused-parameter
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/rsov/driver/rsovAllocation.cpp b/rsov/driver/rsovAllocation.cpp
deleted file mode 100644
index b9d3c98..0000000
--- a/rsov/driver/rsovAllocation.cpp
+++ /dev/null
@@ -1,698 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#include "rsovAllocation.h"
-
-#include "rsAllocation.h"
-#include "rsContext.h"
-#include "rsCppUtils.h"
-#include "rsElement.h"
-#include "rsType.h"
-#include "rsovContext.h"
-#include "rsovCore.h"
-
-namespace android {
-namespace renderscript {
-namespace rsov {
-
-namespace {
-
-size_t DeriveYUVLayout(int yuv, Allocation::Hal::DrvState *state) {
-  // For the flexible YCbCr format, layout is initialized during call to
-  // Allocation::ioReceive.  Return early and avoid clobberring any
-  // pre-existing layout.
-  if (yuv == HAL_PIXEL_FORMAT_YCbCr_420_888) {
-    return 0;
-  }
-
-  // YUV only supports basic 2d
-  // so we can stash the plane pointers in the mipmap levels.
-  size_t uvSize = 0;
-  state->lod[1].dimX = state->lod[0].dimX / 2;
-  state->lod[1].dimY = state->lod[0].dimY / 2;
-  state->lod[2].dimX = state->lod[0].dimX / 2;
-  state->lod[2].dimY = state->lod[0].dimY / 2;
-  state->yuv.shift = 1;
-  state->yuv.step = 1;
-  state->lodCount = 3;
-
-  switch (yuv) {
-    case HAL_PIXEL_FORMAT_YV12:
-      state->lod[2].stride = rsRound(state->lod[0].stride >> 1, 16);
-      state->lod[2].mallocPtr = ((uint8_t *)state->lod[0].mallocPtr) +
-                                (state->lod[0].stride * state->lod[0].dimY);
-      uvSize += state->lod[2].stride * state->lod[2].dimY;
-
-      state->lod[1].stride = state->lod[2].stride;
-      state->lod[1].mallocPtr = ((uint8_t *)state->lod[2].mallocPtr) +
-                                (state->lod[2].stride * state->lod[2].dimY);
-      uvSize += state->lod[1].stride * state->lod[2].dimY;
-      break;
-    case HAL_PIXEL_FORMAT_YCrCb_420_SP:  // NV21
-      // state->lod[1].dimX = state->lod[0].dimX;
-      state->lod[1].stride = state->lod[0].stride;
-      state->lod[2].stride = state->lod[0].stride;
-      state->lod[2].mallocPtr = ((uint8_t *)state->lod[0].mallocPtr) +
-                                (state->lod[0].stride * state->lod[0].dimY);
-      state->lod[1].mallocPtr = ((uint8_t *)state->lod[2].mallocPtr) + 1;
-      uvSize += state->lod[1].stride * state->lod[1].dimY;
-      state->yuv.step = 2;
-      break;
-    default:
-      rsAssert(0);
-  }
-
-  return uvSize;
-}
-
-// TODO: Dedup this with the same code under frameworks/rs/driver
-size_t AllocationBuildPointerTable(const Context *rsc, const Allocation *alloc,
-                                   const Type *type, uint8_t *ptr,
-                                   size_t requiredAlignment) {
-  alloc->mHal.drvState.lod[0].dimX = type->getDimX();
-  alloc->mHal.drvState.lod[0].dimY = type->getDimY();
-  alloc->mHal.drvState.lod[0].dimZ = type->getDimZ();
-  alloc->mHal.drvState.lod[0].mallocPtr = 0;
-  // Stride needs to be aligned to a boundary defined by requiredAlignment!
-  size_t stride =
-      alloc->mHal.drvState.lod[0].dimX * type->getElementSizeBytes();
-  alloc->mHal.drvState.lod[0].stride = rsRound(stride, requiredAlignment);
-  alloc->mHal.drvState.lodCount = type->getLODCount();
-  alloc->mHal.drvState.faceCount = type->getDimFaces();
-
-  size_t offsets[Allocation::MAX_LOD];
-  memset(offsets, 0, sizeof(offsets));
-
-  size_t o = alloc->mHal.drvState.lod[0].stride *
-             rsMax(alloc->mHal.drvState.lod[0].dimY, 1u) *
-             rsMax(alloc->mHal.drvState.lod[0].dimZ, 1u);
-  if (alloc->mHal.state.yuv) {
-    o += DeriveYUVLayout(alloc->mHal.state.yuv, &alloc->mHal.drvState);
-
-    for (uint32_t ct = 1; ct < alloc->mHal.drvState.lodCount; ct++) {
-      offsets[ct] = (size_t)alloc->mHal.drvState.lod[ct].mallocPtr;
-    }
-  } else if (alloc->mHal.drvState.lodCount > 1) {
-    uint32_t tx = alloc->mHal.drvState.lod[0].dimX;
-    uint32_t ty = alloc->mHal.drvState.lod[0].dimY;
-    uint32_t tz = alloc->mHal.drvState.lod[0].dimZ;
-    for (uint32_t lod = 1; lod < alloc->mHal.drvState.lodCount; lod++) {
-      alloc->mHal.drvState.lod[lod].dimX = tx;
-      alloc->mHal.drvState.lod[lod].dimY = ty;
-      alloc->mHal.drvState.lod[lod].dimZ = tz;
-      alloc->mHal.drvState.lod[lod].stride =
-          rsRound(tx * type->getElementSizeBytes(), requiredAlignment);
-      offsets[lod] = o;
-      o += alloc->mHal.drvState.lod[lod].stride * rsMax(ty, 1u) * rsMax(tz, 1u);
-      if (tx > 1) tx >>= 1;
-      if (ty > 1) ty >>= 1;
-      if (tz > 1) tz >>= 1;
-    }
-  }
-
-  alloc->mHal.drvState.faceOffset = o;
-
-  alloc->mHal.drvState.lod[0].mallocPtr = ptr;
-  for (uint32_t lod = 1; lod < alloc->mHal.drvState.lodCount; lod++) {
-    alloc->mHal.drvState.lod[lod].mallocPtr = ptr + offsets[lod];
-  }
-
-  size_t allocSize = alloc->mHal.drvState.faceOffset;
-  if (alloc->mHal.drvState.faceCount) {
-    allocSize *= 6;
-  }
-
-  return allocSize;
-}
-
-size_t AllocationBuildPointerTable(const Context *rsc, const Allocation *alloc,
-                                   const Type *type, uint8_t *ptr) {
-  return AllocationBuildPointerTable(rsc, alloc, type, ptr,
-                                     Allocation::kMinimumRSAlignment);
-}
-
-uint8_t *GetOffsetPtr(const Allocation *alloc, uint32_t xoff, uint32_t yoff,
-                      uint32_t zoff, uint32_t lod,
-                      RsAllocationCubemapFace face) {
-  uint8_t *ptr = (uint8_t *)alloc->mHal.drvState.lod[lod].mallocPtr;
-  ptr += face * alloc->mHal.drvState.faceOffset;
-  ptr += zoff * alloc->mHal.drvState.lod[lod].dimY *
-         alloc->mHal.drvState.lod[lod].stride;
-  ptr += yoff * alloc->mHal.drvState.lod[lod].stride;
-  ptr += xoff * alloc->mHal.state.elementSizeBytes;
-  return ptr;
-}
-
-void mip565(const Allocation *alloc, int lod, RsAllocationCubemapFace face) {
-  uint32_t w = alloc->mHal.drvState.lod[lod + 1].dimX;
-  uint32_t h = alloc->mHal.drvState.lod[lod + 1].dimY;
-
-  for (uint32_t y = 0; y < h; y++) {
-    uint16_t *oPtr = (uint16_t *)GetOffsetPtr(alloc, 0, y, 0, lod + 1, face);
-    const uint16_t *i1 =
-        (uint16_t *)GetOffsetPtr(alloc, 0, 0, y * 2, lod, face);
-    const uint16_t *i2 =
-        (uint16_t *)GetOffsetPtr(alloc, 0, 0, y * 2 + 1, lod, face);
-
-    for (uint32_t x = 0; x < w; x++) {
-      *oPtr = rsBoxFilter565(i1[0], i1[1], i2[0], i2[1]);
-      oPtr++;
-      i1 += 2;
-      i2 += 2;
-    }
-  }
-}
-
-void mip8888(const Allocation *alloc, int lod, RsAllocationCubemapFace face) {
-  uint32_t w = alloc->mHal.drvState.lod[lod + 1].dimX;
-  uint32_t h = alloc->mHal.drvState.lod[lod + 1].dimY;
-
-  for (uint32_t y = 0; y < h; y++) {
-    uint32_t *oPtr = (uint32_t *)GetOffsetPtr(alloc, 0, y, 0, lod + 1, face);
-    const uint32_t *i1 =
-        (uint32_t *)GetOffsetPtr(alloc, 0, y * 2, 0, lod, face);
-    const uint32_t *i2 =
-        (uint32_t *)GetOffsetPtr(alloc, 0, y * 2 + 1, 0, lod, face);
-
-    for (uint32_t x = 0; x < w; x++) {
-      *oPtr = rsBoxFilter8888(i1[0], i1[1], i2[0], i2[1]);
-      oPtr++;
-      i1 += 2;
-      i2 += 2;
-    }
-  }
-}
-
-void mip8(const Allocation *alloc, int lod, RsAllocationCubemapFace face) {
-  uint32_t w = alloc->mHal.drvState.lod[lod + 1].dimX;
-  uint32_t h = alloc->mHal.drvState.lod[lod + 1].dimY;
-
-  for (uint32_t y = 0; y < h; y++) {
-    uint8_t *oPtr = GetOffsetPtr(alloc, 0, y, 0, lod + 1, face);
-    const uint8_t *i1 = GetOffsetPtr(alloc, 0, y * 2, 0, lod, face);
-    const uint8_t *i2 = GetOffsetPtr(alloc, 0, y * 2 + 1, 0, lod, face);
-
-    for (uint32_t x = 0; x < w; x++) {
-      *oPtr = (uint8_t)(((uint32_t)i1[0] + i1[1] + i2[0] + i2[1]) * 0.25f);
-      oPtr++;
-      i1 += 2;
-      i2 += 2;
-    }
-  }
-}
-
-}  // anonymous namespace
-
-RSoVAllocation::RSoVAllocation(RSoVContext *context, const Type *type,
-                               size_t bufferSize)
-    : mBuffer(new RSoVBuffer(context, bufferSize)),
-      mType(type),
-      mWidth(type->getDimX()),
-      mHeight(type->getDimY()),
-      mDepth(type->getDimZ()) {}
-
-RSoVBuffer::RSoVBuffer(RSoVContext *context, size_t size)
-    : mRSoV(context), mDevice(context->getDevice()) {
-  InitBuffer(size);
-}
-
-RSoVBuffer::~RSoVBuffer() {
-  vkUnmapMemory(mDevice, mMem);
-  vkDestroyBuffer(mDevice, mBuf, nullptr);
-  vkFreeMemory(mDevice, mMem, nullptr);
-}
-
-void RSoVBuffer::InitBuffer(size_t bufferSize) {
-  VkResult res;
-
-  VkBufferCreateInfo buf_info = {
-      .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
-      .pNext = nullptr,
-      .usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
-      .size = bufferSize,
-      .queueFamilyIndexCount = 0,
-      .pQueueFamilyIndices = nullptr,
-      .sharingMode = VK_SHARING_MODE_EXCLUSIVE,
-      .flags = 0,
-  };
-  res = vkCreateBuffer(mDevice, &buf_info, nullptr, &mBuf);
-  rsAssert(res == VK_SUCCESS);
-
-  VkMemoryRequirements mem_reqs;
-  vkGetBufferMemoryRequirements(mDevice, mBuf, &mem_reqs);
-
-  VkMemoryAllocateInfo allocateInfo = {
-      .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
-      .pNext = nullptr,
-      .memoryTypeIndex = 0,
-      .allocationSize = mem_reqs.size,
-  };
-
-  bool pass;
-  pass =
-      mRSoV->MemoryTypeFromProperties(mem_reqs.memoryTypeBits,
-                                      VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
-                                          VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
-                                      &allocateInfo.memoryTypeIndex);
-  rsAssert(pass);
-
-  // TODO: Make this aligned
-  res = vkAllocateMemory(mDevice, &allocateInfo, nullptr, &mMem);
-  rsAssert(res == VK_SUCCESS);
-
-  res = vkBindBufferMemory(mDevice, mBuf, mMem, 0);
-  rsAssert(res == VK_SUCCESS);
-
-  mBufferInfo.buffer = mBuf;
-  mBufferInfo.offset = 0;
-  mBufferInfo.range = bufferSize;
-
-  res = vkMapMemory(mDevice, mMem, 0, mem_reqs.size, 0, (void **)&mPtr);
-  rsAssert(res == VK_SUCCESS);
-}
-
-}  // namespace rsov
-}  // namespace renderscript
-}  // namespace android
-
-using android::renderscript::Allocation;
-using android::renderscript::Context;
-using android::renderscript::Element;
-using android::renderscript::Type;
-using android::renderscript::rs_allocation;
-using android::renderscript::rsMax;
-using namespace android::renderscript::rsov;
-
-bool rsovAllocationInit(const Context *rsc, Allocation *alloc, bool forceZero) {
-  RSoVHal *hal = static_cast<RSoVHal *>(rsc->mHal.drv);
-  RSoVContext *rsov = hal->mRSoV;
-  const Type *type = alloc->getType();
-
-  // Calculate the object size.
-  size_t allocSize = AllocationBuildPointerTable(rsc, alloc, type, nullptr);
-  RSoVAllocation *rsovAlloc = new RSoVAllocation(rsov, type, allocSize);
-  alloc->mHal.drv = rsovAlloc;
-  AllocationBuildPointerTable(rsc, alloc, type,
-                              (uint8_t *)rsovAlloc->getHostPtr());
-  return true;
-}
-
-void rsovAllocationDestroy(const Context *rsc, Allocation *alloc) {
-  RSoVAllocation *rsovAlloc = static_cast<RSoVAllocation *>(alloc->mHal.drv);
-  delete rsovAlloc;
-  alloc->mHal.drv = nullptr;
-}
-
-void rsovAllocationData1D(const Context *rsc, const Allocation *alloc,
-                          uint32_t xoff, uint32_t lod, size_t count,
-                          const void *data, size_t sizeBytes) {
-  const size_t eSize = alloc->mHal.state.type->getElementSizeBytes();
-  uint8_t *ptr =
-      GetOffsetPtr(alloc, xoff, 0, 0, 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X);
-  size_t size = count * eSize;
-  if (ptr != data) {
-    // Skip the copy if we are the same allocation. This can arise from
-    // our Bitmap optimization, where we share the same storage.
-    if (alloc->mHal.state.hasReferences) {
-      alloc->incRefs(data, count);
-      alloc->decRefs(ptr, count);
-    }
-    memcpy(ptr, data, size);
-  }
-}
-
-void rsovAllocationData2D(const Context *rsc, const Allocation *alloc,
-                          uint32_t xoff, uint32_t yoff, uint32_t lod,
-                          RsAllocationCubemapFace face, uint32_t w, uint32_t h,
-                          const void *data, size_t sizeBytes, size_t stride) {
-  size_t eSize = alloc->mHal.state.elementSizeBytes;
-  size_t lineSize = eSize * w;
-  if (!stride) {
-    stride = lineSize;
-  }
-
-  if (alloc->mHal.drvState.lod[0].mallocPtr) {
-    const uint8_t *src = static_cast<const uint8_t *>(data);
-    uint8_t *dst = GetOffsetPtr(alloc, xoff, yoff, 0, lod, face);
-
-    for (uint32_t line = yoff; line < (yoff + h); line++) {
-      if (alloc->mHal.state.hasReferences) {
-        alloc->incRefs(src, w);
-        alloc->decRefs(dst, w);
-      }
-      memcpy(dst, src, lineSize);
-      src += stride;
-      dst += alloc->mHal.drvState.lod[lod].stride;
-    }
-    // TODO: handle YUV Allocations
-    if (alloc->mHal.state.yuv) {
-      size_t clineSize = lineSize;
-      int lod = 1;
-      int maxLod = 2;
-      if (alloc->mHal.state.yuv == HAL_PIXEL_FORMAT_YV12) {
-        maxLod = 3;
-        clineSize >>= 1;
-      } else if (alloc->mHal.state.yuv == HAL_PIXEL_FORMAT_YCrCb_420_SP) {
-        lod = 2;
-        maxLod = 3;
-      }
-
-      while (lod < maxLod) {
-        uint8_t *dst = GetOffsetPtr(alloc, xoff, yoff, 0, lod, face);
-
-        for (uint32_t line = (yoff >> 1); line < ((yoff + h) >> 1); line++) {
-          memcpy(dst, src, clineSize);
-          // When copying from an array to an Allocation, the src pointer
-          // to the array should just move by the number of bytes copied.
-          src += clineSize;
-          dst += alloc->mHal.drvState.lod[lod].stride;
-        }
-        lod++;
-      }
-    }
-  }
-}
-
-void rsovAllocationData3D(const Context *rsc, const Allocation *alloc,
-                          uint32_t xoff, uint32_t yoff, uint32_t zoff,
-                          uint32_t lod, uint32_t w, uint32_t h, uint32_t d,
-                          const void *data, size_t sizeBytes, size_t stride) {
-  uint32_t eSize = alloc->mHal.state.elementSizeBytes;
-  uint32_t lineSize = eSize * w;
-  if (!stride) {
-    stride = lineSize;
-  }
-
-  if (alloc->mHal.drvState.lod[0].mallocPtr) {
-    const uint8_t *src = static_cast<const uint8_t *>(data);
-    for (uint32_t z = zoff; z < (d + zoff); z++) {
-      uint8_t *dst = GetOffsetPtr(alloc, xoff, yoff, z, lod,
-                                  RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X);
-      for (uint32_t line = yoff; line < (yoff + h); line++) {
-        if (alloc->mHal.state.hasReferences) {
-          alloc->incRefs(src, w);
-          alloc->decRefs(dst, w);
-        }
-        memcpy(dst, src, lineSize);
-        src += stride;
-        dst += alloc->mHal.drvState.lod[lod].stride;
-      }
-    }
-  }
-}
-
-void rsovAllocationRead1D(const Context *rsc, const Allocation *alloc,
-                          uint32_t xoff, uint32_t lod, size_t count, void *data,
-                          size_t sizeBytes) {
-  const size_t eSize = alloc->mHal.state.type->getElementSizeBytes();
-  const uint8_t *ptr =
-      GetOffsetPtr(alloc, xoff, 0, 0, 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X);
-  if (data != ptr) {
-    // Skip the copy if we are the same allocation. This can arise from
-    // our Bitmap optimization, where we share the same storage.
-    memcpy(data, ptr, count * eSize);
-  }
-}
-
-void rsovAllocationRead2D(const Context *rsc, const Allocation *alloc,
-                          uint32_t xoff, uint32_t yoff, uint32_t lod,
-                          RsAllocationCubemapFace face, uint32_t w, uint32_t h,
-                          void *data, size_t sizeBytes, size_t stride) {
-  size_t eSize = alloc->mHal.state.elementSizeBytes;
-  size_t lineSize = eSize * w;
-  if (!stride) {
-    stride = lineSize;
-  }
-
-  if (alloc->mHal.drvState.lod[0].mallocPtr) {
-    uint8_t *dst = static_cast<uint8_t *>(data);
-    const uint8_t *src = GetOffsetPtr(alloc, xoff, yoff, 0, lod, face);
-    if (dst == src) {
-      // Skip the copy if we are the same allocation. This can arise from
-      // our Bitmap optimization, where we share the same storage.
-      return;
-    }
-
-    for (uint32_t line = yoff; line < (yoff + h); line++) {
-      memcpy(dst, src, lineSize);
-      dst += stride;
-      src += alloc->mHal.drvState.lod[lod].stride;
-    }
-  } else {
-    ALOGE("Add code to readback from non-script memory");
-  }
-}
-
-void rsovAllocationRead3D(const Context *rsc, const Allocation *alloc,
-                          uint32_t xoff, uint32_t yoff, uint32_t zoff,
-                          uint32_t lod, uint32_t w, uint32_t h, uint32_t d,
-                          void *data, size_t sizeBytes, size_t stride) {
-  uint32_t eSize = alloc->mHal.state.elementSizeBytes;
-  uint32_t lineSize = eSize * w;
-  if (!stride) {
-    stride = lineSize;
-  }
-
-  if (alloc->mHal.drvState.lod[0].mallocPtr) {
-    uint8_t *dst = static_cast<uint8_t *>(data);
-    for (uint32_t z = zoff; z < (d + zoff); z++) {
-      const uint8_t *src = GetOffsetPtr(alloc, xoff, yoff, z, lod,
-                                        RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X);
-      if (dst == src) {
-        // Skip the copy if we are the same allocation. This can arise from
-        // our Bitmap optimization, where we share the same storage.
-        return;
-      }
-
-      for (uint32_t line = yoff; line < (yoff + h); line++) {
-        memcpy(dst, src, lineSize);
-        dst += stride;
-        src += alloc->mHal.drvState.lod[lod].stride;
-      }
-    }
-  }
-}
-
-void *rsovAllocationLock1D(const Context *rsc, const Allocation *alloc) {
-  return alloc->mHal.drvState.lod[0].mallocPtr;
-}
-
-void rsovAllocationUnlock1D(const Context *rsc, const Allocation *alloc) {}
-
-void rsovAllocationData1D_alloc(const Context *rsc, const Allocation *dstAlloc,
-                                uint32_t dstXoff, uint32_t dstLod, size_t count,
-                                const Allocation *srcAlloc, uint32_t srcXoff,
-                                uint32_t srcLod) {}
-
-void rsovAllocationData2D_alloc_script(
-    const Context *rsc, const Allocation *dstAlloc, uint32_t dstXoff,
-    uint32_t dstYoff, uint32_t dstLod, RsAllocationCubemapFace dstFace,
-    uint32_t w, uint32_t h, const Allocation *srcAlloc, uint32_t srcXoff,
-    uint32_t srcYoff, uint32_t srcLod, RsAllocationCubemapFace srcFace) {
-  size_t elementSize = dstAlloc->getType()->getElementSizeBytes();
-  for (uint32_t i = 0; i < h; i++) {
-    uint8_t *dstPtr =
-        GetOffsetPtr(dstAlloc, dstXoff, dstYoff + i, 0, dstLod, dstFace);
-    uint8_t *srcPtr =
-        GetOffsetPtr(srcAlloc, srcXoff, srcYoff + i, 0, srcLod, srcFace);
-    memcpy(dstPtr, srcPtr, w * elementSize);
-  }
-}
-
-void rsovAllocationData3D_alloc_script(
-    const Context *rsc, const Allocation *dstAlloc, uint32_t dstXoff,
-    uint32_t dstYoff, uint32_t dstZoff, uint32_t dstLod, uint32_t w, uint32_t h,
-    uint32_t d, const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcYoff,
-    uint32_t srcZoff, uint32_t srcLod) {
-  uint32_t elementSize = dstAlloc->getType()->getElementSizeBytes();
-  for (uint32_t j = 0; j < d; j++) {
-    for (uint32_t i = 0; i < h; i++) {
-      uint8_t *dstPtr =
-          GetOffsetPtr(dstAlloc, dstXoff, dstYoff + i, dstZoff + j, dstLod,
-                       RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X);
-      uint8_t *srcPtr =
-          GetOffsetPtr(srcAlloc, srcXoff, srcYoff + i, srcZoff + j, srcLod,
-                       RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X);
-      memcpy(dstPtr, srcPtr, w * elementSize);
-    }
-  }
-}
-
-void rsovAllocationData2D_alloc(
-    const Context *rsc, const Allocation *dstAlloc, uint32_t dstXoff,
-    uint32_t dstYoff, uint32_t dstLod, RsAllocationCubemapFace dstFace,
-    uint32_t w, uint32_t h, const Allocation *srcAlloc, uint32_t srcXoff,
-    uint32_t srcYoff, uint32_t srcLod, RsAllocationCubemapFace srcFace) {
-  if (!dstAlloc->getIsScript() && !srcAlloc->getIsScript()) {
-    rsc->setError(RS_ERROR_FATAL_DRIVER,
-                  "Non-script allocation copies not "
-                  "yet implemented.");
-    return;
-  }
-  rsovAllocationData2D_alloc_script(rsc, dstAlloc, dstXoff, dstYoff, dstLod,
-                                    dstFace, w, h, srcAlloc, srcXoff, srcYoff,
-                                    srcLod, srcFace);
-}
-
-void rsovAllocationData3D_alloc(const Context *rsc, const Allocation *dstAlloc,
-                                uint32_t dstXoff, uint32_t dstYoff,
-                                uint32_t dstZoff, uint32_t dstLod, uint32_t w,
-                                uint32_t h, uint32_t d,
-                                const Allocation *srcAlloc, uint32_t srcXoff,
-                                uint32_t srcYoff, uint32_t srcZoff,
-                                uint32_t srcLod) {
-  if (!dstAlloc->getIsScript() && !srcAlloc->getIsScript()) {
-    rsc->setError(RS_ERROR_FATAL_DRIVER,
-                  "Non-script allocation copies not "
-                  "yet implemented.");
-    return;
-  }
-  rsovAllocationData3D_alloc_script(rsc, dstAlloc, dstXoff, dstYoff, dstZoff,
-                                    dstLod, w, h, d, srcAlloc, srcXoff, srcYoff,
-                                    srcZoff, srcLod);
-}
-
-void rsovAllocationAdapterOffset(const Context *rsc, const Allocation *alloc) {
-  // Get a base pointer to the new LOD
-  const Allocation *base = alloc->mHal.state.baseAlloc;
-  const Type *type = alloc->mHal.state.type;
-  if (base == nullptr) {
-    return;
-  }
-
-  const int lodBias = alloc->mHal.state.originLOD;
-  uint32_t lodCount = rsMax(alloc->mHal.drvState.lodCount, (uint32_t)1);
-  for (uint32_t lod = 0; lod < lodCount; lod++) {
-    alloc->mHal.drvState.lod[lod] = base->mHal.drvState.lod[lod + lodBias];
-    alloc->mHal.drvState.lod[lod].mallocPtr = GetOffsetPtr(
-        alloc, alloc->mHal.state.originX, alloc->mHal.state.originY,
-        alloc->mHal.state.originZ, lodBias,
-        (RsAllocationCubemapFace)alloc->mHal.state.originFace);
-  }
-}
-
-bool rsovAllocationAdapterInit(const Context *rsc, Allocation *alloc) {
-// TODO: may need a RSoV Allocation here
-#if 0
-    DrvAllocation *drv = (DrvAllocation *)calloc(1, sizeof(DrvAllocation));
-    if (!drv) {
-        return false;
-    }
-    alloc->mHal.drv = drv;
-#endif
-  // We need to build an allocation that looks like a subset of the parent
-  // allocation
-  rsovAllocationAdapterOffset(rsc, alloc);
-
-  return true;
-}
-
-void rsovAllocationSyncAll(const Context *rsc, const Allocation *alloc,
-                           RsAllocationUsageType src) {
-  // TODO: anything to do here?
-}
-
-void rsovAllocationMarkDirty(const Context *rsc, const Allocation *alloc) {
-  // TODO: anything to do here?
-}
-
-void rsovAllocationResize(const Context *rsc, const Allocation *alloc,
-                          const Type *newType, bool zeroNew) {
-  // TODO: implement this
-  // can this be done without copying, if the new size is greater than the
-  // original?
-}
-
-void rsovAllocationGenerateMipmaps(const Context *rsc,
-                                   const Allocation *alloc) {
-  if (!alloc->mHal.drvState.lod[0].mallocPtr) {
-    return;
-  }
-  uint32_t numFaces = alloc->getType()->getDimFaces() ? 6 : 1;
-  for (uint32_t face = 0; face < numFaces; face++) {
-    for (uint32_t lod = 0; lod < (alloc->getType()->getLODCount() - 1); lod++) {
-      switch (alloc->getType()->getElement()->getSizeBits()) {
-        case 32:
-          mip8888(alloc, lod, (RsAllocationCubemapFace)face);
-          break;
-        case 16:
-          mip565(alloc, lod, (RsAllocationCubemapFace)face);
-          break;
-        case 8:
-          mip8(alloc, lod, (RsAllocationCubemapFace)face);
-          break;
-      }
-    }
-  }
-}
-
-uint32_t rsovAllocationGrallocBits(const Context *rsc, Allocation *alloc) {
-  return 0;
-}
-
-void rsovAllocationUpdateCachedObject(const Context *rsc,
-                                      const Allocation *alloc,
-                                      rs_allocation *obj) {
-  obj->p = alloc;
-#ifdef __LP64__
-  obj->unused1 = nullptr;
-  obj->unused2 = nullptr;
-  obj->unused3 = nullptr;
-#endif
-}
-
-void rsovAllocationSetSurface(const Context *rsc, Allocation *alloc,
-                              ANativeWindow *nw) {
-  // TODO: implement this
-}
-
-void rsovAllocationIoSend(const Context *rsc, Allocation *alloc) {
-  // TODO: implement this
-}
-
-void rsovAllocationIoReceive(const Context *rsc, Allocation *alloc) {
-  // TODO: implement this
-}
-
-void rsovAllocationElementData(const Context *rsc, const Allocation *alloc,
-                               uint32_t x, uint32_t y, uint32_t z,
-                               const void *data, uint32_t cIdx,
-                               size_t sizeBytes) {
-  uint8_t *ptr =
-      GetOffsetPtr(alloc, x, y, z, 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X);
-
-  const Element *e = alloc->mHal.state.type->getElement()->getField(cIdx);
-  ptr += alloc->mHal.state.type->getElement()->getFieldOffsetBytes(cIdx);
-
-  if (alloc->mHal.state.hasReferences) {
-    e->incRefs(data);
-    e->decRefs(ptr);
-  }
-
-  memcpy(ptr, data, sizeBytes);
-}
-
-void rsovAllocationElementRead(const Context *rsc, const Allocation *alloc,
-                               uint32_t x, uint32_t y, uint32_t z, void *data,
-                               uint32_t cIdx, size_t sizeBytes) {
-  uint8_t *ptr =
-      GetOffsetPtr(alloc, x, y, z, 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X);
-
-  const Element *e = alloc->mHal.state.type->getElement()->getField(cIdx);
-  ptr += alloc->mHal.state.type->getElement()->getFieldOffsetBytes(cIdx);
-
-  memcpy(data, ptr, sizeBytes);
-}
diff --git a/rsov/driver/rsovAllocation.h b/rsov/driver/rsovAllocation.h
deleted file mode 100644
index edbf7ff..0000000
--- a/rsov/driver/rsovAllocation.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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 RSOV_ALLOCATION_H
-#define RSOV_ALLOCATION_H
-
-#include <vulkan/vulkan.h>
-
-#include "rsDefines.h"
-#include "rs_hal.h"
-#include "system/window.h"
-
-namespace android {
-namespace renderscript {
-
-class Allocation;
-class Context;
-class Type;
-
-namespace rsov {
-
-class RSoVContext;
-// Abstraction for a Vulkan Buffer
-class RSoVBuffer {
- public:
-  RSoVBuffer(RSoVContext *context, size_t bufferSize);
-  ~RSoVBuffer();
-
-  const VkDescriptorBufferInfo *getBufferInfo() const { return &mBufferInfo; }
-  char *getHostPtr() const { return mPtr; }
-
- private:
-  void InitBuffer(size_t);
-
-  char *mPtr;  // Host pointer to mmapped device memory for the Buffer
-  RSoVContext *mRSoV;
-  VkDevice mDevice;
-
-  VkDeviceMemory mMem;
-  VkBuffer mBuf;
-  VkDescriptorBufferInfo mBufferInfo;
-};
-
-class RSoVAllocation {
- public:
-  RSoVAllocation(RSoVContext *context, const Type *type, size_t bufferSize);
-  ~RSoVAllocation() { delete mBuffer; }
-
-  const Type *getType() const { return mType; }
-  uint32_t getWidth() const { return mWidth; }
-  uint32_t getHeight() const { return mHeight; }
-  uint32_t getDepth() const { return mDepth; }
-  RSoVBuffer *getBuffer() const { return mBuffer; }
-  char *getHostPtr() const { return mBuffer->getHostPtr(); }
-
- private:
-  RSoVBuffer *mBuffer;
-  const Type *mType;
-  const uint32_t mWidth;
-  const uint32_t mHeight;
-  const uint32_t mDepth;
-};
-
-}  // namespace rsov
-}  // namespace renderscript
-}  // namespace android
-
-extern bool rsovAllocationInit(const android::renderscript::Context *rsc,
-                               android::renderscript::Allocation *alloc,
-                               bool forceZero);
-
-extern void rsovAllocationDestroy(const android::renderscript::Context *rsc,
-                                  android::renderscript::Allocation *alloc);
-
-extern void rsovAllocationData1D(const android::renderscript::Context *rsc,
-                                 const android::renderscript::Allocation *alloc,
-                                 uint32_t xoff, uint32_t lod, size_t count,
-                                 const void *data, size_t sizeBytes);
-
-extern void rsovAllocationData2D(const android::renderscript::Context *rsc,
-                                 const android::renderscript::Allocation *alloc,
-                                 uint32_t xoff, uint32_t yoff, uint32_t lod,
-                                 RsAllocationCubemapFace face, uint32_t w,
-                                 uint32_t h, const void *data, size_t sizeBytes,
-                                 size_t stride);
-
-extern void rsovAllocationData3D(const android::renderscript::Context *rsc,
-                                 const android::renderscript::Allocation *alloc,
-                                 uint32_t xoff, uint32_t yoff, uint32_t zoff,
-                                 uint32_t lod, uint32_t w, uint32_t h,
-                                 uint32_t d, const void *data, size_t sizeBytes,
-                                 size_t stride);
-
-extern void rsovAllocationRead1D(const android::renderscript::Context *rsc,
-                                 const android::renderscript::Allocation *alloc,
-                                 uint32_t xoff, uint32_t lod, size_t count,
-                                 void *data, size_t sizeBytes);
-
-extern void rsovAllocationRead2D(const android::renderscript::Context *rsc,
-                                 const android::renderscript::Allocation *alloc,
-                                 uint32_t xoff, uint32_t yoff, uint32_t lod,
-                                 RsAllocationCubemapFace face, uint32_t w,
-                                 uint32_t h, void *data, size_t sizeBytes,
-                                 size_t stride);
-
-extern void rsovAllocationRead3D(const android::renderscript::Context *rsc,
-                                 const android::renderscript::Allocation *alloc,
-                                 uint32_t xoff, uint32_t yoff, uint32_t zoff,
-                                 uint32_t lod, uint32_t w, uint32_t h,
-                                 uint32_t d, void *data, size_t sizeBytes,
-                                 size_t stride);
-
-extern void *rsovAllocationLock1D(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *alloc);
-
-extern void rsovAllocationUnlock1D(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *alloc);
-
-extern void rsovAllocationData1D_alloc(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff,
-    uint32_t dstLod, size_t count,
-    const android::renderscript::Allocation *srcAlloc, uint32_t srcXoff,
-    uint32_t srcLod);
-
-extern void rsovAllocationData2D_alloc_script(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff,
-    uint32_t dstYoff, uint32_t dstLod, RsAllocationCubemapFace dstFace,
-    uint32_t w, uint32_t h, const android::renderscript::Allocation *srcAlloc,
-    uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod,
-    RsAllocationCubemapFace srcFace);
-
-extern void rsovAllocationData2D_alloc(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff,
-    uint32_t dstYoff, uint32_t dstLod, RsAllocationCubemapFace dstFace,
-    uint32_t w, uint32_t h, const android::renderscript::Allocation *srcAlloc,
-    uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod,
-    RsAllocationCubemapFace srcFace);
-
-extern void rsovAllocationData3D_alloc_script(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff,
-    uint32_t dstYoff, uint32_t dstZoff, uint32_t dstLod, uint32_t w, uint32_t h,
-    uint32_t d, const android::renderscript::Allocation *srcAlloc,
-    uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, uint32_t srcLod);
-
-extern void rsovAllocationData3D_alloc(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *dstAlloc, uint32_t dstXoff,
-    uint32_t dstYoff, uint32_t dstZoff, uint32_t dstLod, uint32_t w, uint32_t h,
-    uint32_t d, const android::renderscript::Allocation *srcAlloc,
-    uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, uint32_t srcLod);
-
-extern void rsovAllocationAdapterOffset(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *alloc);
-
-extern bool rsovAllocationAdapterInit(const android::renderscript::Context *rsc,
-                                      android::renderscript::Allocation *alloc);
-
-extern void rsovAllocationSyncAll(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *alloc, RsAllocationUsageType src);
-
-extern void rsovAllocationMarkDirty(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *alloc);
-
-extern void rsovAllocationResize(const android::renderscript::Context *rsc,
-                                 const android::renderscript::Allocation *alloc,
-                                 const android::renderscript::Type *newType,
-                                 bool zeroNew);
-
-extern void rsovAllocationGenerateMipmaps(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *alloc);
-
-extern uint32_t rsovAllocationGrallocBits(
-    const android::renderscript::Context *rsc,
-    android::renderscript::Allocation *alloc);
-
-extern void rsovAllocationUpdateCachedObject(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *alloc,
-    android::renderscript::rs_allocation *obj);
-
-extern void rsovAllocationSetSurface(const android::renderscript::Context *rsc,
-                                     android::renderscript::Allocation *alloc,
-                                     ANativeWindow *nw);
-
-extern void rsovAllocationIoSend(const android::renderscript::Context *rsc,
-                                 android::renderscript::Allocation *alloc);
-
-extern void rsovAllocationIoReceive(const android::renderscript::Context *rsc,
-                                    android::renderscript::Allocation *alloc);
-
-extern void rsovAllocationElementData(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *alloc, uint32_t x, uint32_t y,
-    uint32_t z, const void *data, uint32_t cIdx, size_t sizeBytes);
-
-extern void rsovAllocationElementRead(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Allocation *alloc, uint32_t x, uint32_t y,
-    uint32_t z, void *data, uint32_t cIdx, size_t sizeBytes);
-
-#endif  // RSOV_ALLOCATION_H
diff --git a/rsov/driver/rsovContext.cpp b/rsov/driver/rsovContext.cpp
deleted file mode 100644
index 4aba017..0000000
--- a/rsov/driver/rsovContext.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#include "rsovContext.h"
-
-#include <vector>
-
-#include "rsUtils.h"
-
-namespace android {
-namespace renderscript {
-namespace rsov {
-
-RSoVContext* RSoVContext::mContext = nullptr;
-std::once_flag RSoVContext::mInitFlag;
-
-bool RSoVContext::Initialize(char const* const name) {
-  // Initialize instance
-  VkApplicationInfo appInfo = {
-      .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
-      .pNext = nullptr,
-      .pApplicationName = name,  // TODO: set to app name
-      .applicationVersion = 1,
-      .pEngineName = name,
-      .engineVersion = 1,
-      .apiVersion = VK_API_VERSION_1_0};
-
-  VkInstanceCreateInfo instInfo = {
-      .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
-      .pNext = nullptr,
-      .flags = 0,
-      .pApplicationInfo = &appInfo,
-  };
-
-  VkResult res;
-  res = vkCreateInstance(&instInfo, nullptr, &mInstance);
-  if (res != VK_SUCCESS) {
-    return false;
-  }
-
-  // Enumerate devices
-  uint32_t gpu_count;
-
-  res = vkEnumeratePhysicalDevices(mInstance, &gpu_count, nullptr);
-  if (gpu_count == 0) {
-    return false;
-  }
-
-  std::vector<VkPhysicalDevice> GPUs(gpu_count);
-
-  res = vkEnumeratePhysicalDevices(mInstance, &gpu_count, GPUs.data());
-  if (!(res == VK_SUCCESS && gpu_count > 0)) {
-    return false;
-  }
-
-  mGPU = GPUs[0];
-
-  // Get device memory properties
-  vkGetPhysicalDeviceMemoryProperties(mGPU, &mMemoryProperties);
-
-  // Initialize device
-
-  float queuePriorities[] = {0.0};
-
-  VkDeviceQueueCreateInfo queueInfo = {
-      .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
-      .pNext = nullptr,
-      .queueCount = 1,
-      .pQueuePriorities = queuePriorities,
-  };
-
-  VkDeviceCreateInfo deviceInfo = {
-      .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
-      .pNext = nullptr,
-      .queueCreateInfoCount = 1,
-      .pQueueCreateInfos = &queueInfo,
-      .pEnabledFeatures = nullptr,
-  };
-
-  res = vkCreateDevice(mGPU, &deviceInfo, nullptr, &mDevice);
-  if (res != VK_SUCCESS) {
-    return false;
-  }
-
-  // Initialize queue family index
-  uint32_t queueCount;
-
-  vkGetPhysicalDeviceQueueFamilyProperties(mGPU, &queueCount, nullptr);
-  if (queueCount == 0) {
-    return false;
-  }
-
-  std::vector<VkQueueFamilyProperties> queueProps(queueCount);
-
-  vkGetPhysicalDeviceQueueFamilyProperties(mGPU, &queueCount,
-                                           queueProps.data());
-  if (queueCount == 0) {
-    return false;
-  }
-
-  uint32_t queueFamilyIndex = UINT_MAX;
-  bool found = false;
-  for (unsigned int i = 0; i < queueCount; i++) {
-    if (queueProps[i].queueFlags & VK_QUEUE_COMPUTE_BIT) {
-      queueFamilyIndex = i;
-      found = true;
-      break;
-    }
-  }
-
-  if (!found) {
-    return false;
-  }
-
-  // Create a device queue
-
-  vkGetDeviceQueue(mDevice, queueFamilyIndex, 0, &mQueue);
-
-  // Create command pool
-
-  VkCommandPoolCreateInfo cmd_pool_info = {
-      .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
-      .pNext = nullptr,
-      .queueFamilyIndex = queueFamilyIndex,
-      .flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,
-  };
-
-  res = vkCreateCommandPool(mDevice, &cmd_pool_info, nullptr, &mCmdPool);
-  if (res != VK_SUCCESS) {
-    return false;
-  }
-
-  return true;
-}
-
-bool RSoVContext::MemoryTypeFromProperties(uint32_t typeBits,
-                                           VkFlags requirements_mask,
-                                           uint32_t* typeIndex) {
-  for (uint32_t i = 0; i < 32; i++) {
-    if ((typeBits & 1) == 1) {
-      const uint32_t prop = mMemoryProperties.memoryTypes[i].propertyFlags;
-      if ((prop & requirements_mask) == requirements_mask) {
-        *typeIndex = i;
-        return true;
-      }
-    }
-    typeBits >>= 1;
-  }
-
-  return false;
-}
-
-RSoVContext::RSoVContext() {}
-
-RSoVContext::~RSoVContext() {}
-
-RSoVContext* RSoVContext::create() {
-  std::call_once(mInitFlag, []() {
-    std::unique_ptr<RSoVContext> context(new RSoVContext());
-    char engineName[] = "RSoV";
-
-    if (context && context->Initialize(engineName)) {
-      mContext = context.release();
-    }
-  });
-  return mContext;
-}
-
-}  // namespace rsov
-}  // namespace renderscript
-}  // namespace android
diff --git a/rsov/driver/rsovContext.h b/rsov/driver/rsovContext.h
deleted file mode 100644
index 8c933cf..0000000
--- a/rsov/driver/rsovContext.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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 RSOV_CONTEXT_H
-#define RSOV_CONTEXT_H
-
-#include <vulkan/vulkan.h>
-#include <mutex>
-
-namespace android {
-namespace renderscript {
-
-namespace rsov {
-
-class RSoVContext {
- public:
-  static RSoVContext* create();
-  ~RSoVContext();
-
-  VkDevice getDevice() const { return mDevice; }
-  VkQueue getQueue() const { return mQueue; }
-  VkCommandPool getCmdPool() const { return mCmdPool; }
-
-  bool MemoryTypeFromProperties(uint32_t typeBits, VkFlags requirements_mask,
-                                uint32_t* typeIndex);
-
- private:
-  RSoVContext();
-
-  bool Initialize(char const* const name);
-
-  static RSoVContext* mContext;
-  static std::once_flag mInitFlag;
-
-  VkInstance mInstance;
-  VkPhysicalDevice mGPU;
-  VkDevice mDevice;
-  VkPhysicalDeviceMemoryProperties mMemoryProperties;
-  VkQueue mQueue;
-  VkCommandPool mCmdPool;
-};
-
-}  // namespace rsov
-}  // namespace renderscript
-}  // namespace android
-
-#endif  // RSOV_CONTEXT_H
diff --git a/rsov/driver/rsovCore.cpp b/rsov/driver/rsovCore.cpp
deleted file mode 100644
index 123930e..0000000
--- a/rsov/driver/rsovCore.cpp
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#include "rsovCore.h"
-
-#include <malloc.h>
-#include <sched.h>
-#include <string.h>
-#include <sys/resource.h>
-#include <sys/syscall.h>
-#include <sys/types.h>
-
-#include "cpu_ref/rsd_cpu.h"
-#include "rsContext.h"
-#include "rsovAllocation.h"
-#include "rsovContext.h"
-#include "rsovElement.h"
-#include "rsovSampler.h"
-#include "rsovScript.h"
-#include "rsovScriptGroup.h"
-#include "rsovType.h"
-
-namespace android {
-namespace renderscript {
-
-namespace {
-
-void SetPriority(const Context *rsc, int32_t priority) {
-  RSoVHal *dc = (RSoVHal *)rsc->mHal.drv;
-
-  dc->mCpuRef->setPriority(priority);
-}
-
-void Shutdown(Context *rsc) {
-  RSoVHal *dc = (RSoVHal *)rsc->mHal.drv;
-  delete dc->mCpuRef;
-  free(dc);
-  rsc->mHal.drv = nullptr;
-}
-
-void *AllocRuntimeMem(size_t size, uint32_t flags) {
-    void* buffer = calloc(size, sizeof(char));
-    return buffer;
-}
-
-void FreeRuntimeMem(void* ptr) {
-    free(ptr);
-}
-
-const RsdCpuReference::CpuSymbol *lookupRuntimeStubs(
-    Context *pContext, char const *name) {
-  return nullptr;
-}
-
-}  // anonymous namespace
-
-namespace rsov {
-
-namespace {
-
-RsdCpuReference::CpuScript *lookupCpuScript(Context *rsc, const Script *s) {
-  if (RSoVScript::isScriptCpuBacked(s)) {
-    return reinterpret_cast<RsdCpuReference::CpuScript *>(s->mHal.drv);
-  }
-
-  RSoVScript *rsovScript = reinterpret_cast<RSoVScript *>(s->mHal.drv);
-  return rsovScript->getCpuScript();
-}
-
-}  // anonymous namespace
-
-}  // namespace rsov
-
-
-extern "C" bool rsdHalQueryHal(RsHalInitEnums entry, void **fnPtr) {
-  switch (entry) {
-    case RS_HAL_ALLOCATION_INIT:
-      fnPtr[0] = (void *)rsovAllocationInit;
-      break;
-    case RS_HAL_ALLOCATION_INIT_OEM:
-      fnPtr[0] = (void *)nullptr;
-      break;
-    case RS_HAL_ALLOCATION_INIT_ADAPTER:
-      fnPtr[0] = (void *)rsovAllocationAdapterInit;
-      break;
-    case RS_HAL_ALLOCATION_DESTROY:
-      fnPtr[0] = (void *)rsovAllocationDestroy;
-      break;
-    case RS_HAL_ALLOCATION_GET_GRALLOC_BITS:
-      fnPtr[0] = (void *)rsovAllocationGrallocBits;
-      break;
-    case RS_HAL_ALLOCATION_DATA_1D:
-      fnPtr[0] = (void *)rsovAllocationData1D;
-      break;
-    case RS_HAL_ALLOCATION_DATA_2D:
-      fnPtr[0] = (void *)rsovAllocationData2D;
-      break;
-    case RS_HAL_ALLOCATION_DATA_3D:
-      fnPtr[0] = (void *)rsovAllocationData3D;
-      break;
-    case RS_HAL_ALLOCATION_READ_1D:
-      fnPtr[0] = (void *)rsovAllocationRead1D;
-      break;
-    case RS_HAL_ALLOCATION_READ_2D:
-      fnPtr[0] = (void *)rsovAllocationRead2D;
-      break;
-    case RS_HAL_ALLOCATION_READ_3D:
-      fnPtr[0] = (void *)rsovAllocationRead3D;
-      break;
-    case RS_HAL_ALLOCATION_LOCK_1D:
-      fnPtr[0] = (void *)rsovAllocationLock1D;
-      break;
-    case RS_HAL_ALLOCATION_UNLOCK_1D:
-      fnPtr[0] = (void *)rsovAllocationUnlock1D;
-      break;
-    case RS_HAL_ALLOCATION_COPY_1D:
-      fnPtr[0] = (void *)rsovAllocationData1D_alloc;
-      break;
-    case RS_HAL_ALLOCATION_COPY_2D:
-      fnPtr[0] = (void *)rsovAllocationData2D_alloc;
-      break;
-    case RS_HAL_ALLOCATION_COPY_3D:
-      fnPtr[0] = (void *)rsovAllocationData3D_alloc;
-      break;
-    case RS_HAL_ALLOCATION_ADAPTER_OFFSET:
-      fnPtr[0] = (void *)rsovAllocationAdapterOffset;
-      break;
-    case RS_HAL_ALLOCATION_RESIZE:
-      fnPtr[0] = (void *)rsovAllocationResize;
-      break;
-    case RS_HAL_ALLOCATION_SYNC_ALL:
-      fnPtr[0] = (void *)rsovAllocationSyncAll;
-      break;
-    case RS_HAL_ALLOCATION_MARK_DIRTY:
-      fnPtr[0] = (void *)rsovAllocationMarkDirty;
-      break;
-    case RS_HAL_ALLOCATION_GENERATE_MIPMAPS:
-      fnPtr[0] = (void *)rsovAllocationGenerateMipmaps;
-      break;
-    case RS_HAL_ALLOCATION_UPDATE_CACHED_OBJECT:
-      fnPtr[0] = (void *)rsovAllocationUpdateCachedObject;
-      break;
-    case RS_HAL_ALLOCATION_GET_POINTER:
-      fnPtr[0] = (void *)nullptr;
-      break;
-    case RS_HAL_ALLOCATION_SET_SURFACE:
-      fnPtr[0] = (void *)rsovAllocationSetSurface;
-      break;
-    case RS_HAL_ALLOCATION_IO_SEND:
-      fnPtr[0] = (void *)rsovAllocationIoSend;
-      break;
-    case RS_HAL_ALLOCATION_IO_RECEIVE:
-      fnPtr[0] = (void *)rsovAllocationIoReceive;
-      break;
-    case RS_HAL_ALLOCATION_ELEMENT_DATA:
-      fnPtr[0] = (void *)rsovAllocationElementData;
-      break;
-    case RS_HAL_ALLOCATION_ELEMENT_READ:
-      fnPtr[0] = (void *)rsovAllocationElementRead;
-      break;
-
-    case RS_HAL_CORE_SHUTDOWN:
-      fnPtr[0] = (void *)Shutdown;
-      break;
-    case RS_HAL_CORE_SET_PRIORITY:
-      fnPtr[0] = (void *)SetPriority;
-      break;
-    case RS_HAL_CORE_ALLOC_RUNTIME_MEM:
-      fnPtr[0] = (void *)AllocRuntimeMem;
-      break;
-    case RS_HAL_CORE_FREE_RUNTIME_MEM:
-      fnPtr[0] = (void *)FreeRuntimeMem;
-      break;
-    case RS_HAL_CORE_FINISH:
-      fnPtr[0] = (void *)nullptr;
-      break;
-
-    case RS_HAL_SCRIPT_INIT:
-      fnPtr[0] = (void *)rsovScriptInit;
-      break;
-    case RS_HAL_SCRIPT_INIT_INTRINSIC:
-      fnPtr[0] = (void *)rsovInitIntrinsic;
-      break;
-    case RS_HAL_SCRIPT_INVOKE_FUNCTION:
-      fnPtr[0] = (void *)rsovScriptInvokeFunction;
-      break;
-    case RS_HAL_SCRIPT_INVOKE_ROOT:
-      fnPtr[0] = (void *)rsovScriptInvokeRoot;
-      break;
-    case RS_HAL_SCRIPT_INVOKE_FOR_EACH:
-      fnPtr[0] = (void *)rsovScriptInvokeForEach;
-      break;
-    case RS_HAL_SCRIPT_INVOKE_INIT:
-      fnPtr[0] = (void *)rsovScriptInvokeInit;
-      break;
-    case RS_HAL_SCRIPT_INVOKE_FREE_CHILDREN:
-      fnPtr[0] = (void *)rsovScriptInvokeFreeChildren;
-      break;
-    case RS_HAL_SCRIPT_DESTROY:
-      fnPtr[0] = (void *)rsovScriptDestroy;
-      break;
-    case RS_HAL_SCRIPT_SET_GLOBAL_VAR:
-      fnPtr[0] = (void *)rsovScriptSetGlobalVar;
-      break;
-    case RS_HAL_SCRIPT_GET_GLOBAL_VAR:
-      fnPtr[0] = (void *)rsovScriptGetGlobalVar;
-      break;
-    case RS_HAL_SCRIPT_SET_GLOBAL_VAR_WITH_ELEMENT_DIM:
-      fnPtr[0] = (void *)rsovScriptSetGlobalVarWithElemDims;
-      break;
-    case RS_HAL_SCRIPT_SET_GLOBAL_BIND:
-      fnPtr[0] = (void *)rsovScriptSetGlobalBind;
-      break;
-    case RS_HAL_SCRIPT_SET_GLOBAL_OBJECT:
-      fnPtr[0] = (void *)rsovScriptSetGlobalObj;
-      break;
-    case RS_HAL_SCRIPT_INVOKE_FOR_EACH_MULTI:
-      fnPtr[0] = (void *)rsovScriptInvokeForEachMulti;
-      break;
-    case RS_HAL_SCRIPT_UPDATE_CACHED_OBJECT:
-      fnPtr[0] = (void *)rsovScriptUpdateCachedObject;
-      break;
-    case RS_HAL_SCRIPT_INVOKE_REDUCE:
-      fnPtr[0] = (void *)rsovScriptInvokeReduce;
-      break;
-
-    case RS_HAL_SAMPLER_INIT:
-      fnPtr[0] = (void *)rsovSamplerInit;
-      break;
-    case RS_HAL_SAMPLER_DESTROY:
-      fnPtr[0] = (void *)rsovSamplerDestroy;
-      break;
-    case RS_HAL_SAMPLER_UPDATE_CACHED_OBJECT:
-      fnPtr[0] = (void *)rsovSamplerUpdateCachedObject;
-      break;
-
-    case RS_HAL_TYPE_INIT:
-      fnPtr[0] = (void *)rsovTypeInit;
-      break;
-    case RS_HAL_TYPE_DESTROY:
-      fnPtr[0] = (void *)rsovTypeDestroy;
-      break;
-    case RS_HAL_TYPE_UPDATE_CACHED_OBJECT:
-      fnPtr[0] = (void *)rsovTypeUpdateCachedObject;
-      break;
-
-    case RS_HAL_ELEMENT_INIT:
-      fnPtr[0] = (void *)rsovElementInit;
-      break;
-    case RS_HAL_ELEMENT_DESTROY:
-      fnPtr[0] = (void *)rsovElementDestroy;
-      break;
-    case RS_HAL_ELEMENT_UPDATE_CACHED_OBJECT:
-      fnPtr[0] = (void *)rsovElementUpdateCachedObject;
-      break;
-
-    case RS_HAL_SCRIPT_GROUP_INIT:
-      fnPtr[0] = (void *)rsovScriptGroupInit;
-      break;
-    case RS_HAL_SCRIPT_GROUP_DESTROY:
-      fnPtr[0] = (void *)rsovScriptGroupDestroy;
-      break;
-    case RS_HAL_SCRIPT_GROUP_UPDATE_CACHED_OBJECT:
-      fnPtr[0] = (void *)nullptr;
-      break;
-    case RS_HAL_SCRIPT_GROUP_SET_INPUT:
-      fnPtr[0] = (void *)rsovScriptGroupSetInput;
-      break;
-    case RS_HAL_SCRIPT_GROUP_SET_OUTPUT:
-      fnPtr[0] = (void *)rsovScriptGroupSetOutput;
-      break;
-    case RS_HAL_SCRIPT_GROUP_EXECUTE:
-      fnPtr[0] = (void *)rsovScriptGroupExecute;
-      break;
-
-    // Ignore entries for the legacy graphics api,
-
-    default:
-      ALOGE("ERROR: unknown RenderScript HAL API query, %i", entry);
-      return false;
-  }
-
-  return true;
-}
-
-extern "C" void rsdHalAbort(RsContext) {}
-
-extern "C" bool rsdHalQueryVersion(uint32_t *major, uint32_t *minor) {
-  *major = RS_HAL_VERSION;
-  *minor = 0;
-  return true;
-}
-
-extern "C" bool rsdHalInit(RsContext c, uint32_t version_major,
-                           uint32_t version_minor) {
-  Context *rsc = (Context *)c;
-
-  std::unique_ptr<RSoVHal> hal(new RSoVHal());
-  if (!hal) {
-    ALOGE("Failed creating RSoV driver hal.");
-    return false;
-  }
-
-  std::unique_ptr<rsov::RSoVContext> rsov(rsov::RSoVContext::create());
-  if (!rsov) {
-    ALOGE("RSoVContext::create for driver hal failed.");
-    return false;
-  }
-
-  std::unique_ptr<RsdCpuReference> cpuref(RsdCpuReference::create(rsc, version_major, version_minor,
-                                                                  &lookupRuntimeStubs,
-                                                                  &rsov::lookupCpuScript));
-  if (!cpuref) {
-    ALOGE("RsdCpuReference::create for driver hal failed.");
-    return false;
-  }
-
-  hal->mRSoV = rsov.release();
-  hal->mCpuRef = cpuref.release();
-  rsc->mHal.drv = hal.release();
-
-  return true;
-}
-
-}  // namespace renderscript
-}  // namespace android
diff --git a/rsov/driver/rsovCore.h b/rsov/driver/rsovCore.h
deleted file mode 100644
index d0c160d..0000000
--- a/rsov/driver/rsovCore.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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 RSOV_CORE_H
-#define RSOV_CORE_H
-
-namespace android {
-namespace renderscript {
-
-class RsdCpuReference;
-
-namespace rsov {
-
-class RSoVContext;
-
-}  // namespace rsov
-}  // namespace renderscript
-}  // namespace android
-
-struct RSoVHal {
-  android::renderscript::rsov::RSoVContext* mRSoV;
-  android::renderscript::RsdCpuReference *mCpuRef;
-};
-
-#define NELEM(x) (sizeof(x) / sizeof((x)[0]))
-
-#endif
diff --git a/rsov/driver/rsovElement.cpp b/rsov/driver/rsovElement.cpp
deleted file mode 100644
index 114e4e3..0000000
--- a/rsov/driver/rsovElement.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#include "rsContext.h"
-#include "rsElement.h"
-
-using android::renderscript::Context;
-using android::renderscript::Element;
-using android::renderscript::rs_element;
-
-bool rsovElementInit(const Context *rsc, const Element *e) { return true; }
-
-void rsovElementDestroy(const Context *rsc, const Element *e) {}
-
-void rsovElementUpdateCachedObject(const Context *rsc, const Element *element,
-                                   rs_element *obj) {
-  obj->p = element;
-#ifdef __LP64__
-  obj->unused1 = nullptr;
-  obj->unused2 = nullptr;
-  obj->unused3 = nullptr;
-#endif
-}
diff --git a/rsov/driver/rsovElement.h b/rsov/driver/rsovElement.h
deleted file mode 100644
index e3d46bc..0000000
--- a/rsov/driver/rsovElement.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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 RSOV_ELEMENT_H
-#define RSOV_ELEMENT_H
-
-#include "rs_hal.h"
-
-extern bool rsovElementInit(const android::renderscript::Context *rsc,
-                            const android::renderscript::Element *);
-
-extern void rsovElementDestroy(const android::renderscript::Context *rsc,
-                               const android::renderscript::Element *);
-
-extern void rsovElementUpdateCachedObject(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Element *,
-    android::renderscript::rs_element *obj);
-
-#endif  // RSOV_ELEMENT_H
diff --git a/rsov/driver/rsovRuntimeStubs.cpp b/rsov/driver/rsovRuntimeStubs.cpp
deleted file mode 100644
index 2aa7798..0000000
--- a/rsov/driver/rsovRuntimeStubs.cpp
+++ /dev/null
@@ -1,1148 +0,0 @@
-/*
- * Copyright (C) 2011-2012 The Android Open Source Project
- *
- * 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.
- */
-
-#include <time.h>
-
-#include "rsContext.h"
-#include "rsElement.h"
-#include "rsMatrix2x2.h"
-#include "rsMatrix3x3.h"
-#include "rsMatrix4x4.h"
-#include "rsRuntime.h"
-#include "rsScriptC.h"
-#include "rsType.h"
-#include "rsovAllocation.h"
-#include "rsovCore.h"
-#include "rsovScript.h"
-
-using namespace android;
-using namespace android::renderscript;
-
-typedef __fp16 half;
-typedef half half2 __attribute__((ext_vector_type(2)));
-typedef half half3 __attribute__((ext_vector_type(3)));
-typedef half half4 __attribute__((ext_vector_type(4)));
-
-typedef float float2 __attribute__((ext_vector_type(2)));
-typedef float float3 __attribute__((ext_vector_type(3)));
-typedef float float4 __attribute__((ext_vector_type(4)));
-typedef double double2 __attribute__((ext_vector_type(2)));
-typedef double double3 __attribute__((ext_vector_type(3)));
-typedef double double4 __attribute__((ext_vector_type(4)));
-typedef char char2 __attribute__((ext_vector_type(2)));
-typedef char char3 __attribute__((ext_vector_type(3)));
-typedef char char4 __attribute__((ext_vector_type(4)));
-typedef unsigned char uchar2 __attribute__((ext_vector_type(2)));
-typedef unsigned char uchar3 __attribute__((ext_vector_type(3)));
-typedef unsigned char uchar4 __attribute__((ext_vector_type(4)));
-typedef int16_t short2 __attribute__((ext_vector_type(2)));
-typedef int16_t short3 __attribute__((ext_vector_type(3)));
-typedef int16_t short4 __attribute__((ext_vector_type(4)));
-typedef uint16_t ushort2 __attribute__((ext_vector_type(2)));
-typedef uint16_t ushort3 __attribute__((ext_vector_type(3)));
-typedef uint16_t ushort4 __attribute__((ext_vector_type(4)));
-typedef int32_t int2 __attribute__((ext_vector_type(2)));
-typedef int32_t int3 __attribute__((ext_vector_type(3)));
-typedef int32_t int4 __attribute__((ext_vector_type(4)));
-typedef uint32_t uint2 __attribute__((ext_vector_type(2)));
-typedef uint32_t uint3 __attribute__((ext_vector_type(3)));
-typedef uint32_t uint4 __attribute__((ext_vector_type(4)));
-typedef int64_t long2 __attribute__((ext_vector_type(2)));
-typedef int64_t long3 __attribute__((ext_vector_type(3)));
-typedef int64_t long4 __attribute__((ext_vector_type(4)));
-typedef uint64_t ulong2 __attribute__((ext_vector_type(2)));
-typedef uint64_t ulong3 __attribute__((ext_vector_type(3)));
-typedef uint64_t ulong4 __attribute__((ext_vector_type(4)));
-
-typedef uint8_t uchar;
-typedef uint16_t ushort;
-typedef uint32_t uint;
-typedef uint64_t ulong;
-
-// Add NOLINT to suppress wrong warnings from clang-tidy.
-#ifndef __LP64__
-#define OPAQUETYPE(t)   \
-  typedef struct {      \
-    const int *const p; \
-  } __attribute__((packed, aligned(4))) t; /*NOLINT*/
-#else
-#define OPAQUETYPE(t)     \
-  typedef struct {        \
-    const void *p;        \
-    const void *unused1;  \
-    const void *unused2;  \
-    const void *unused3;  \
-  } t; /*NOLINT*/
-#endif
-
-OPAQUETYPE(rs_element)
-OPAQUETYPE(rs_type)
-OPAQUETYPE(rs_allocation)
-OPAQUETYPE(rs_sampler)
-OPAQUETYPE(rs_script)
-OPAQUETYPE(rs_script_call)
-
-OPAQUETYPE(rs_program_fragment);
-OPAQUETYPE(rs_program_store);
-OPAQUETYPE(rs_program_vertex);
-OPAQUETYPE(rs_program_raster);
-OPAQUETYPE(rs_mesh);
-OPAQUETYPE(rs_font);
-
-#undef OPAQUETYPE
-
-typedef enum {
-  // Empty to avoid conflicting definitions with RsAllocationCubemapFace
-} rs_allocation_cubemap_face;
-
-typedef enum {
-  // Empty to avoid conflicting definitions with RsYuvFormat
-} rs_yuv_format;
-
-typedef enum {
-  // Empty to avoid conflicting definitions with RsAllocationMipmapControl
-} rs_allocation_mipmap_control;
-
-typedef struct { unsigned int val; } rs_allocation_usage_type;
-
-typedef struct {
-  int tm_sec;    ///< seconds
-  int tm_min;    ///< minutes
-  int tm_hour;   ///< hours
-  int tm_mday;   ///< day of the month
-  int tm_mon;    ///< month
-  int tm_year;   ///< year
-  int tm_wday;   ///< day of the week
-  int tm_yday;   ///< day of the year
-  int tm_isdst;  ///< daylight savings time
-} rs_tm;
-
-// Some RS functions are not threadsafe but can be called from an invoke
-// function.  Instead of summarily marking scripts that call these functions as
-// not-threadable we detect calls to them in the driver and sends a fatal error
-// message.
-static bool failIfInKernel(Context *rsc, const char *funcName) {
-  RSoVHal *dc = (RSoVHal *)rsc->mHal.drv;
-  RsdCpuReference *impl = (RsdCpuReference *)dc->mCpuRef;
-
-  if (impl->getInKernel()) {
-    char buf[256];
-    snprintf(buf, sizeof(buf),
-             "Error: Call to unsupported function %s "
-             "in kernel",
-             funcName);
-    rsc->setError(RS_ERROR_FATAL_DRIVER, buf);
-    return true;
-  }
-  return false;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// Allocation routines
-//////////////////////////////////////////////////////////////////////////////
-#if defined(__i386__) || (defined(__mips__) && __mips == 32)
-// i386 and MIPS32 have different struct return passing to ARM; emulate with a
-// pointer
-const Allocation *rsGetAllocation(const void *ptr) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  const Script *sc = RsdCpuReference::getTlsScript();
-  Allocation *alloc = rsovScriptGetAllocationForPointer(rsc, sc, ptr);
-  android::renderscript::rs_allocation obj = {0};
-  alloc->callUpdateCacheObject(rsc, &obj);
-  return (Allocation *)obj.p;
-}
-#else
-const android::renderscript::rs_allocation rsGetAllocation(const void *ptr) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  const Script *sc = RsdCpuReference::getTlsScript();
-  Allocation *alloc = rsovScriptGetAllocationForPointer(rsc, sc, ptr);
-
-#ifndef __LP64__  // ARMv7
-  android::renderscript::rs_allocation obj = {0};
-#else             // AArch64/x86_64/MIPS64
-  android::renderscript::rs_allocation obj = {0, 0, 0, 0};
-#endif
-  alloc->callUpdateCacheObject(rsc, &obj);
-  return obj;
-}
-#endif
-
-void __attribute__((overloadable)) rsAllocationIoSend(::rs_allocation a) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  if (failIfInKernel(rsc, "rsAllocationIoSend")) return;
-  rsrAllocationIoSend(rsc, (Allocation *)a.p);
-}
-
-void __attribute__((overloadable)) rsAllocationIoReceive(::rs_allocation a) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  if (failIfInKernel(rsc, "rsAllocationIoReceive")) return;
-  rsrAllocationIoReceive(rsc, (Allocation *)a.p);
-}
-
-void __attribute__((overloadable))
-rsAllocationCopy1DRange(::rs_allocation dstAlloc, uint32_t dstOff,
-                        uint32_t dstMip, uint32_t count,
-                        ::rs_allocation srcAlloc, uint32_t srcOff,
-                        uint32_t srcMip) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  if (failIfInKernel(rsc, "rsAllocationCopy1DRange")) return;
-  rsrAllocationCopy1DRange(rsc, (Allocation *)dstAlloc.p, dstOff, dstMip, count,
-                           (Allocation *)srcAlloc.p, srcOff, srcMip);
-}
-
-void __attribute__((overloadable))
-rsAllocationCopy2DRange(::rs_allocation dstAlloc, uint32_t dstXoff,
-                        uint32_t dstYoff, uint32_t dstMip,
-                        rs_allocation_cubemap_face dstFace, uint32_t width,
-                        uint32_t height, ::rs_allocation srcAlloc,
-                        uint32_t srcXoff, uint32_t srcYoff, uint32_t srcMip,
-                        rs_allocation_cubemap_face srcFace) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  if (failIfInKernel(rsc, "rsAllocationCopy2DRange")) return;
-  rsrAllocationCopy2DRange(
-      rsc, (Allocation *)dstAlloc.p, dstXoff, dstYoff, dstMip, dstFace, width,
-      height, (Allocation *)srcAlloc.p, srcXoff, srcYoff, srcMip, srcFace);
-}
-
-static android::renderscript::rs_element CreateElement(RsDataType dt,
-                                                       RsDataKind dk,
-                                                       bool isNormalized,
-                                                       uint32_t vecSize) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-
-  // No need for validation here.  The rsCreateElement overload below is not
-  // exposed to the Script.  The Element-creation APIs call this function in a
-  // consistent manner and rsComponent.cpp asserts on any inconsistency.
-  Element *element =
-      (Element *)rsrElementCreate(rsc, dt, dk, isNormalized, vecSize);
-  android::renderscript::rs_element obj = {};
-  if (element == nullptr) return obj;
-  element->callUpdateCacheObject(rsc, &obj);
-
-  // Any new rsObject created from inside a script should have the usrRefCount
-  // initialized to 0 and the sysRefCount initialized to 1.
-  element->incSysRef();
-  element->decUserRef();
-
-  return obj;
-}
-
-static android::renderscript::rs_type CreateType(RsElement element,
-                                                 uint32_t dimX, uint32_t dimY,
-                                                 uint32_t dimZ, bool mipmaps,
-                                                 bool faces,
-                                                 uint32_t yuv_format) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  android::renderscript::rs_type obj = {};
-
-  if (element == nullptr) {
-    ALOGE("rs_type creation error: Invalid element");
-    return obj;
-  }
-
-  // validate yuv_format
-  RsYuvFormat yuv = (RsYuvFormat)yuv_format;
-  if (yuv != RS_YUV_NONE && yuv != RS_YUV_YV12 && yuv != RS_YUV_NV21 &&
-      yuv != RS_YUV_420_888) {
-    ALOGE("rs_type creation error: Invalid yuv_format %d\n", yuv_format);
-    return obj;
-  }
-
-  // validate consistency of shape parameters
-  if (dimZ > 0) {
-    if (dimX < 1 || dimY < 1) {
-      ALOGE(
-          "rs_type creation error: Both X and Y dimension required "
-          "when Z is present.");
-      return obj;
-    }
-    if (mipmaps) {
-      ALOGE("rs_type creation error: mipmap control requires 2D types");
-      return obj;
-    }
-    if (faces) {
-      ALOGE("rs_type creation error: Cube maps require 2D types");
-      return obj;
-    }
-  }
-  if (dimY > 0 && dimX < 1) {
-    ALOGE(
-        "rs_type creation error: X dimension required when Y is "
-        "present.");
-    return obj;
-  }
-  if (mipmaps && dimY < 1) {
-    ALOGE("rs_type creation error: mipmap control require 2D Types.");
-    return obj;
-  }
-  if (faces && dimY < 1) {
-    ALOGE("rs_type creation error: Cube maps require 2D Types.");
-    return obj;
-  }
-  if (yuv_format != RS_YUV_NONE) {
-    if (dimZ != 0 || dimY == 0 || faces || mipmaps) {
-      ALOGE("rs_type creation error: YUV only supports basic 2D.");
-      return obj;
-    }
-  }
-
-  Type *type = (Type *)rsrTypeCreate(rsc, element, dimX, dimY, dimZ, mipmaps,
-                                     faces, yuv_format);
-  if (type == nullptr) return obj;
-  type->callUpdateCacheObject(rsc, &obj);
-
-  // Any new rsObject created from inside a script should have the usrRefCount
-  // initialized to 0 and the sysRefCount initialized to 1.
-  type->incSysRef();
-  type->decUserRef();
-
-  return obj;
-}
-
-static android::renderscript::rs_allocation CreateAllocation(
-    RsType type, RsAllocationMipmapControl mipmaps, uint32_t usages,
-    void *ptr) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  android::renderscript::rs_allocation obj = {};
-
-  if (type == nullptr) {
-    ALOGE("rs_allocation creation error: Invalid type");
-    return obj;
-  }
-
-  uint32_t validUsages =
-      RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE;
-  if (usages & ~validUsages) {
-    ALOGE("rs_allocation creation error: Invalid usage flag");
-    return obj;
-  }
-
-  Allocation *alloc = (Allocation *)rsrAllocationCreateTyped(
-      rsc, type, mipmaps, usages, (uintptr_t)ptr);
-  if (alloc == nullptr) return obj;
-  alloc->callUpdateCacheObject(rsc, &obj);
-
-  // Any new rsObject created from inside a script should have the usrRefCount
-  // initialized to 0 and the sysRefCount initialized to 1.
-  alloc->incSysRef();
-  alloc->decUserRef();
-
-  return obj;
-}
-
-// Define rsCreateElement, rsCreateType and rsCreateAllocation entry points
-// differently for 32-bit x86 and Mips.  The definitions for ARM32 and all
-// 64-bit architectures is further below.
-#if defined(__i386__) || (defined(__mips__) && __mips == 32)
-
-// The calling convention for the driver on 32-bit x86 and Mips returns
-// rs_element etc. as a stack-return parameter.  The Script uses ARM32 calling
-// conventions that return the structs in a register.  To match this convention,
-// emulate the return value using a pointer.
-Element *rsCreateElement(int32_t dt, int32_t dk, bool isNormalized,
-                         uint32_t vecSize) {
-  android::renderscript::rs_element obj =
-      CreateElement((RsDataType)dt, (RsDataKind)dk, isNormalized, vecSize);
-  return (Element *)obj.p;
-}
-
-Type *rsCreateType(::rs_element element, uint32_t dimX, uint32_t dimY,
-                   uint32_t dimZ, bool mipmaps, bool faces,
-                   rs_yuv_format yuv_format) {
-  android::renderscript::rs_type obj =
-      CreateType((RsElement)element.p, dimX, dimY, dimZ, mipmaps, faces,
-                 (RsYuvFormat)yuv_format);
-  return (Type *)obj.p;
-}
-
-Allocation *rsCreateAllocation(::rs_type type,
-                               rs_allocation_mipmap_control mipmaps,
-                               uint32_t usages, void *ptr) {
-  android::renderscript::rs_allocation obj;
-  obj = CreateAllocation((RsType)type.p, (RsAllocationMipmapControl)mipmaps,
-                         usages, ptr);
-  return (Allocation *)obj.p;
-}
-
-#else
-android::renderscript::rs_element rsCreateElement(int32_t dt, int32_t dk,
-                                                  bool isNormalized,
-                                                  uint32_t vecSize) {
-  return CreateElement((RsDataType)dt, (RsDataKind)dk, isNormalized, vecSize);
-}
-
-android::renderscript::rs_type rsCreateType(::rs_element element, uint32_t dimX,
-                                            uint32_t dimY, uint32_t dimZ,
-                                            bool mipmaps, bool faces,
-                                            rs_yuv_format yuv_format) {
-  return CreateType((RsElement)element.p, dimX, dimY, dimZ, mipmaps, faces,
-                    yuv_format);
-}
-
-android::renderscript::rs_allocation rsCreateAllocation(
-    ::rs_type type, rs_allocation_mipmap_control mipmaps, uint32_t usages,
-    void *ptr) {
-  return CreateAllocation((RsType)type.p, (RsAllocationMipmapControl)mipmaps,
-                          usages, ptr);
-}
-#endif
-
-//////////////////////////////////////////////////////////////////////////////
-// Object routines
-//////////////////////////////////////////////////////////////////////////////
-// Add NOLINT to suppress wrong warnings from clang-tidy.
-#define IS_CLEAR_SET_OBJ(t)                                                  \
-  bool rsIsObject(t src) { return src.p != nullptr; }                        \
-  void __attribute__((overloadable)) rsClearObject(t *dst) { /*NOLINT*/      \
-    rsrClearObject(reinterpret_cast<rs_object_base *>(dst));                 \
-  }                                                                          \
-  void __attribute__((overloadable)) rsSetObject(t *dst, t src) { /*NOLINT*/ \
-    Context *rsc = RsdCpuReference::getTlsContext();                         \
-    rsrSetObject(rsc, reinterpret_cast<rs_object_base *>(dst),               \
-                 (ObjectBase *)src.p);                                       \
-  }
-
-IS_CLEAR_SET_OBJ(::rs_element)
-IS_CLEAR_SET_OBJ(::rs_type)
-IS_CLEAR_SET_OBJ(::rs_allocation)
-IS_CLEAR_SET_OBJ(::rs_sampler)
-IS_CLEAR_SET_OBJ(::rs_script)
-
-IS_CLEAR_SET_OBJ(::rs_mesh)
-IS_CLEAR_SET_OBJ(::rs_program_fragment)
-IS_CLEAR_SET_OBJ(::rs_program_vertex)
-IS_CLEAR_SET_OBJ(::rs_program_raster)
-IS_CLEAR_SET_OBJ(::rs_program_store)
-IS_CLEAR_SET_OBJ(::rs_font)
-
-#undef IS_CLEAR_SET_OBJ
-
-//////////////////////////////////////////////////////////////////////////////
-// Element routines
-//////////////////////////////////////////////////////////////////////////////
-static void *ElementAt(Allocation *a, RsDataType dt, uint32_t vecSize,
-                       uint32_t x, uint32_t y, uint32_t z) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  const Type *t = a->getType();
-  const Element *e = t->getElement();
-
-  char buf[256];
-  if (x && (x >= t->getLODDimX(0))) {
-    snprintf(buf, sizeof(buf), "Out range ElementAt X %i of %i", x,
-             t->getLODDimX(0));
-    rsc->setError(RS_ERROR_FATAL_DEBUG, buf);
-    return nullptr;
-  }
-
-  if (y && (y >= t->getLODDimY(0))) {
-    snprintf(buf, sizeof(buf), "Out range ElementAt Y %i of %i", y,
-             t->getLODDimY(0));
-    rsc->setError(RS_ERROR_FATAL_DEBUG, buf);
-    return nullptr;
-  }
-
-  if (z && (z >= t->getLODDimZ(0))) {
-    snprintf(buf, sizeof(buf), "Out range ElementAt Z %i of %i", z,
-             t->getLODDimZ(0));
-    rsc->setError(RS_ERROR_FATAL_DEBUG, buf);
-    return nullptr;
-  }
-
-  if (vecSize > 0) {
-    if (vecSize != e->getVectorSize()) {
-      snprintf(buf, sizeof(buf), "Vector size mismatch for ElementAt %i of %i",
-               vecSize, e->getVectorSize());
-      rsc->setError(RS_ERROR_FATAL_DEBUG, buf);
-      return nullptr;
-    }
-
-    if (dt != e->getType()) {
-      snprintf(buf, sizeof(buf), "Data type mismatch for ElementAt %i of %i",
-               dt, e->getType());
-      rsc->setError(RS_ERROR_FATAL_DEBUG, buf);
-      return nullptr;
-    }
-  }
-
-  uint8_t *p = (uint8_t *)a->mHal.drvState.lod[0].mallocPtr;
-  const uint32_t eSize = e->getSizeBytes();
-  const uint32_t stride = a->mHal.drvState.lod[0].stride;
-  const uint32_t dimY = a->mHal.drvState.lod[0].dimY;
-  return &p[(x * eSize) + (y * stride) + (z * stride * dimY)];
-}
-
-void rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x, uint32_t y,
-                    uint32_t z) {
-  const Type *t = const_cast<Allocation *>((Allocation *)a.p)->getType();
-  const Element *e = t->getElement();
-  void *tmp = ElementAt((Allocation *)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z);
-  if (tmp != nullptr) memcpy(tmp, ptr, e->getSizeBytes());
-}
-
-void rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x,
-                    uint32_t y) {
-  rsSetElementAt(a, ptr, x, y, 0);
-}
-
-void rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x) {
-  rsSetElementAt(a, ptr, x, 0, 0);
-}
-
-const void *rsGetElementAt(::rs_allocation a, uint32_t x, uint32_t y,
-                           uint32_t z) {
-  return ElementAt((Allocation *)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z);
-}
-
-const void *rsGetElementAt(::rs_allocation a, uint32_t x, uint32_t y) {
-  return rsGetElementAt(a, x, y, 0);
-}
-
-const void *rsGetElementAt(::rs_allocation a, uint32_t x) {
-  return rsGetElementAt(a, x, 0, 0);
-}
-
-// Add NOLINT to suppress wrong warnings from clang-tidy.
-#define ELEMENT_AT(T, DT, VS)                                                 \
-  void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x,        \
-                          uint32_t y, uint32_t z) {                           \
-    void *r = ElementAt((Allocation *)a.p, DT, VS, x, y, z);                  \
-    if (r != nullptr)                                                         \
-      ((T *)r)[0] = *val;                                                     \
-    else                                                                      \
-      ALOGE("Error from %s", __PRETTY_FUNCTION__);                            \
-  }                                                                           \
-  void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x,        \
-                          uint32_t y) {                                       \
-    rsSetElementAt_##T(a, val, x, y, 0);                                      \
-  }                                                                           \
-  void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x) {      \
-    rsSetElementAt_##T(a, val, x, 0, 0);                                      \
-  }                                                                           \
-  void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x, uint32_t y,  \
-                          uint32_t z) { /*NOLINT*/                            \
-    void *r = ElementAt((Allocation *)a.p, DT, VS, x, y, z);                  \
-    if (r != nullptr)                                                         \
-      *val = ((T *)r)[0];                                                     \
-    else                                                                      \
-      ALOGE("Error from %s", __PRETTY_FUNCTION__);                            \
-  }                                                                           \
-  void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x,              \
-                          uint32_t y) { /*NOLINT*/                            \
-    rsGetElementAt_##T(a, val, x, y, 0);                                      \
-  }                                                                           \
-  void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x) { /*NOLINT*/ \
-    rsGetElementAt_##T(a, val, x, 0, 0);                                      \
-  }
-
-ELEMENT_AT(char, RS_TYPE_SIGNED_8, 1)
-ELEMENT_AT(char2, RS_TYPE_SIGNED_8, 2)
-ELEMENT_AT(char3, RS_TYPE_SIGNED_8, 3)
-ELEMENT_AT(char4, RS_TYPE_SIGNED_8, 4)
-ELEMENT_AT(uchar, RS_TYPE_UNSIGNED_8, 1)
-ELEMENT_AT(uchar2, RS_TYPE_UNSIGNED_8, 2)
-ELEMENT_AT(uchar3, RS_TYPE_UNSIGNED_8, 3)
-ELEMENT_AT(uchar4, RS_TYPE_UNSIGNED_8, 4)
-ELEMENT_AT(short, RS_TYPE_SIGNED_16, 1)
-ELEMENT_AT(short2, RS_TYPE_SIGNED_16, 2)
-ELEMENT_AT(short3, RS_TYPE_SIGNED_16, 3)
-ELEMENT_AT(short4, RS_TYPE_SIGNED_16, 4)
-ELEMENT_AT(ushort, RS_TYPE_UNSIGNED_16, 1)
-ELEMENT_AT(ushort2, RS_TYPE_UNSIGNED_16, 2)
-ELEMENT_AT(ushort3, RS_TYPE_UNSIGNED_16, 3)
-ELEMENT_AT(ushort4, RS_TYPE_UNSIGNED_16, 4)
-ELEMENT_AT(int, RS_TYPE_SIGNED_32, 1)
-ELEMENT_AT(int2, RS_TYPE_SIGNED_32, 2)
-ELEMENT_AT(int3, RS_TYPE_SIGNED_32, 3)
-ELEMENT_AT(int4, RS_TYPE_SIGNED_32, 4)
-ELEMENT_AT(uint, RS_TYPE_UNSIGNED_32, 1)
-ELEMENT_AT(uint2, RS_TYPE_UNSIGNED_32, 2)
-ELEMENT_AT(uint3, RS_TYPE_UNSIGNED_32, 3)
-ELEMENT_AT(uint4, RS_TYPE_UNSIGNED_32, 4)
-ELEMENT_AT(long, RS_TYPE_SIGNED_64, 1)
-ELEMENT_AT(long2, RS_TYPE_SIGNED_64, 2)
-ELEMENT_AT(long3, RS_TYPE_SIGNED_64, 3)
-ELEMENT_AT(long4, RS_TYPE_SIGNED_64, 4)
-ELEMENT_AT(ulong, RS_TYPE_UNSIGNED_64, 1)
-ELEMENT_AT(ulong2, RS_TYPE_UNSIGNED_64, 2)
-ELEMENT_AT(ulong3, RS_TYPE_UNSIGNED_64, 3)
-ELEMENT_AT(ulong4, RS_TYPE_UNSIGNED_64, 4)
-ELEMENT_AT(half, RS_TYPE_FLOAT_16, 1)
-ELEMENT_AT(half2, RS_TYPE_FLOAT_16, 2)
-ELEMENT_AT(half3, RS_TYPE_FLOAT_16, 3)
-ELEMENT_AT(half4, RS_TYPE_FLOAT_16, 4)
-ELEMENT_AT(float, RS_TYPE_FLOAT_32, 1)
-ELEMENT_AT(float2, RS_TYPE_FLOAT_32, 2)
-ELEMENT_AT(float3, RS_TYPE_FLOAT_32, 3)
-ELEMENT_AT(float4, RS_TYPE_FLOAT_32, 4)
-ELEMENT_AT(double, RS_TYPE_FLOAT_64, 1)
-ELEMENT_AT(double2, RS_TYPE_FLOAT_64, 2)
-ELEMENT_AT(double3, RS_TYPE_FLOAT_64, 3)
-ELEMENT_AT(double4, RS_TYPE_FLOAT_64, 4)
-
-#undef ELEMENT_AT
-
-#ifndef __LP64__
-/*
- * We miss some symbols for rs{Get,Set}Element_long,ulong variants because 64
- * bit integer values are 'long' in RS-land but might be 'long long' in the
- * driver.  Define native_long* and native_ulong* types to be vectors of
- * 'long' as seen by the driver and define overloaded versions of
- * rsSetElementAt_* and rsGetElementAt_*.  This should get us the correct
- * mangled names in the driver.
- */
-
-typedef long native_long2 __attribute__((ext_vector_type(2)));
-typedef long native_long3 __attribute__((ext_vector_type(3)));
-typedef long native_long4 __attribute__((ext_vector_type(4)));
-typedef unsigned long native_ulong2 __attribute__((ext_vector_type(2)));
-typedef unsigned long native_ulong3 __attribute__((ext_vector_type(3)));
-typedef unsigned long native_ulong4 __attribute__((ext_vector_type(4)));
-
-// Add NOLINT to suppress wrong warnings from clang-tidy.
-#define ELEMENT_AT_OVERLOADS(T, U)                                            \
-  void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x,        \
-                          uint32_t y, uint32_t z) {                           \
-    rsSetElementAt_##T(a, (T *)val, x, y, z);                                 \
-  }                                                                           \
-  void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x,        \
-                          uint32_t y) {                                       \
-    rsSetElementAt_##T(a, (T *)val, x, y, 0);                                 \
-  }                                                                           \
-  void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x) {      \
-    rsSetElementAt_##T(a, (T *)val, x, 0, 0);                                 \
-  }                                                                           \
-  void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x, uint32_t y,  \
-                          uint32_t z) { /*NOLINT*/                            \
-    rsGetElementAt_##T(a, (T *)val, x, y, z);                                 \
-  }                                                                           \
-  void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x,              \
-                          uint32_t y) { /*NOLINT*/                            \
-    rsGetElementAt_##T(a, (T *)val, x, y, 0);                                 \
-  }                                                                           \
-  void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x) { /*NOLINT*/ \
-    rsGetElementAt_##T(a, (T *)val, x, 0, 0);                                 \
-  }
-
-ELEMENT_AT_OVERLOADS(long2, native_long2)
-ELEMENT_AT_OVERLOADS(long3, native_long3)
-ELEMENT_AT_OVERLOADS(long4, native_long4)
-ELEMENT_AT_OVERLOADS(ulong, unsigned long)
-ELEMENT_AT_OVERLOADS(ulong2, native_ulong2)
-ELEMENT_AT_OVERLOADS(ulong3, native_ulong3)
-ELEMENT_AT_OVERLOADS(ulong4, native_ulong4)
-
-// We also need variants of rs{Get,Set}ElementAt_long that take 'long long *' as
-// we might have this overloaded variant in old APKs.
-ELEMENT_AT_OVERLOADS(long, long long)
-
-#undef ELEMENT_AT_OVERLOADS
-#endif
-
-//////////////////////////////////////////////////////////////////////////////
-// ForEach routines
-//////////////////////////////////////////////////////////////////////////////
-void rsForEachInternal(int slot, rs_script_call *options, int hasOutput,
-                       int numInputs, ::rs_allocation *allocs) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  Script *s = const_cast<Script *>(RsdCpuReference::getTlsScript());
-  if (numInputs > RS_KERNEL_MAX_ARGUMENTS) {
-    rsc->setError(RS_ERROR_BAD_SCRIPT,
-                  "rsForEachInternal: too many inputs to a kernel.");
-    return;
-  }
-  Allocation *inputs[RS_KERNEL_MAX_ARGUMENTS];
-  for (int i = 0; i < numInputs; i++) {
-    inputs[i] = (Allocation *)allocs[i].p;
-  }
-  Allocation *out = hasOutput ? (Allocation *)allocs[numInputs].p : nullptr;
-  rsrForEach(rsc, s, slot, numInputs, numInputs > 0 ? inputs : nullptr, out,
-             nullptr, 0, (RsScriptCall *)options);
-}
-
-void __attribute__((overloadable))
-rsForEach(::rs_script script, ::rs_allocation in, ::rs_allocation out,
-          const void *usr, const rs_script_call *call) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p,
-             (Allocation *)out.p, usr, 0, (RsScriptCall *)call);
-}
-
-void __attribute__((overloadable))
-rsForEach(::rs_script script, ::rs_allocation in, ::rs_allocation out,
-          const void *usr) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p,
-             (Allocation *)out.p, usr, 0, nullptr);
-}
-
-void __attribute__((overloadable))
-rsForEach(::rs_script script, ::rs_allocation in, ::rs_allocation out) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p,
-             (Allocation *)out.p, nullptr, 0, nullptr);
-}
-
-// These functions are only supported in 32-bit.
-#ifndef __LP64__
-void __attribute__((overloadable))
-rsForEach(::rs_script script, ::rs_allocation in, ::rs_allocation out,
-          const void *usr, uint32_t usrLen) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p,
-             (Allocation *)out.p, usr, usrLen, nullptr);
-}
-
-void __attribute__((overloadable))
-rsForEach(::rs_script script, ::rs_allocation in, ::rs_allocation out,
-          const void *usr, uint32_t usrLen, const rs_script_call *call) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p,
-             (Allocation *)out.p, usr, usrLen, (RsScriptCall *)call);
-}
-#endif
-
-//////////////////////////////////////////////////////////////////////////////
-// Message routines
-//////////////////////////////////////////////////////////////////////////////
-uint32_t rsSendToClient(int cmdID) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  return rsrToClient(rsc, cmdID, (const void *)nullptr, 0);
-}
-
-uint32_t rsSendToClient(int cmdID, const void *data, uint32_t len) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  return rsrToClient(rsc, cmdID, data, len);
-}
-
-uint32_t rsSendToClientBlocking(int cmdID) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  return rsrToClientBlocking(rsc, cmdID, (const void *)nullptr, 0);
-}
-
-uint32_t rsSendToClientBlocking(int cmdID, const void *data, uint32_t len) {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  return rsrToClientBlocking(rsc, cmdID, data, len);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// Time routines
-//////////////////////////////////////////////////////////////////////////////
-
-// time_t is int in 32-bit RenderScript.  time_t is long in bionic.  rsTime and
-// rsLocaltime are set to explicitly take 'const int *' so we generate the
-// correct mangled names.
-#ifndef __LP64__
-int rsTime(int *timer) {
-#else
-time_t rsTime(time_t *timer) {
-#endif
-  Context *rsc = RsdCpuReference::getTlsContext();
-  return rsrTime(rsc, (time_t *)timer);
-}
-
-#ifndef __LP64__
-rs_tm *rsLocaltime(rs_tm *local, const int *timer) {
-#else
-rs_tm *rsLocaltime(rs_tm *local, const time_t *timer) {
-#endif
-  Context *rsc = RsdCpuReference::getTlsContext();
-  return (rs_tm *)rsrLocalTime(rsc, (tm *)local, (time_t *)timer);
-}
-
-int64_t rsUptimeMillis() {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  return rsrUptimeMillis(rsc);
-}
-
-int64_t rsUptimeNanos() {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  return rsrUptimeNanos(rsc);
-}
-
-float rsGetDt() {
-  Context *rsc = RsdCpuReference::getTlsContext();
-  const Script *sc = RsdCpuReference::getTlsScript();
-  return rsrGetDt(rsc, sc);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// Debug routines
-//////////////////////////////////////////////////////////////////////////////
-void rsDebug(const char *s, float f) {
-  ALOGD("%s %f, 0x%08x", s, f, *((int *)(&f)));
-}
-
-void rsDebug(const char *s, float f1, float f2) {
-  ALOGD("%s {%f, %f}", s, f1, f2);
-}
-
-void rsDebug(const char *s, float f1, float f2, float f3) {
-  ALOGD("%s {%f, %f, %f}", s, f1, f2, f3);
-}
-
-void rsDebug(const char *s, float f1, float f2, float f3, float f4) {
-  ALOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4);
-}
-
-void rsDebug(const char *s, const float2 *f2) {
-  float2 f = *f2;
-  ALOGD("%s {%f, %f}", s, f.x, f.y);
-}
-
-void rsDebug(const char *s, const float3 *f3) {
-  float3 f = *f3;
-  ALOGD("%s {%f, %f, %f}", s, f.x, f.y, f.z);
-}
-
-void rsDebug(const char *s, const float4 *f4) {
-  float4 f = *f4;
-  ALOGD("%s {%f, %f, %f, %f}", s, f.x, f.y, f.z, f.w);
-}
-
-// Accept a half value converted to float.  This eliminates the need in the
-// driver to properly support the half datatype (either by adding compiler flags
-// for half or link against compiler_rt).
-void rsDebug(const char *s, float f, ushort us) {
-  ALOGD("%s {%f} {0x%hx}", s, f, us);
-}
-
-void rsDebug(const char *s, const float2 *f2, const ushort2 *us2) {
-  float2 f = *f2;
-  ushort2 us = *us2;
-  ALOGD("%s {%f %f} {0x%hx 0x%hx}", s, f.x, f.y, us.x, us.y);
-}
-
-void rsDebug(const char *s, const float3 *f3, const ushort3 *us3) {
-  float3 f = *f3;
-  ushort3 us = *us3;
-  ALOGD("%s {%f %f %f} {0x%hx 0x%hx 0x%hx}", s, f.x, f.y, f.z, us.x, us.y,
-        us.z);
-}
-
-void rsDebug(const char *s, const float4 *f4, const ushort4 *us4) {
-  float4 f = *f4;
-  ushort4 us = *us4;
-  ALOGD("%s {%f %f %f %f} {0x%hx 0x%hx 0x%hx 0x%hx}", s, f.x, f.y, f.z, f.w,
-        us.x, us.y, us.z, us.w);
-}
-
-void rsDebug(const char *s, double d) {
-  ALOGD("%s %f, 0x%08llx", s, d, *((long long *)(&d)));
-}
-
-void rsDebug(const char *s, const double2 *d2) {
-  double2 d = *d2;
-  ALOGD("%s {%f, %f}", s, d.x, d.y);
-}
-
-void rsDebug(const char *s, const double3 *d3) {
-  double3 d = *d3;
-  ALOGD("%s {%f, %f, %f}", s, d.x, d.y, d.z);
-}
-
-void rsDebug(const char *s, const double4 *d4) {
-  double4 d = *d4;
-  ALOGD("%s {%f, %f, %f, %f}", s, d.x, d.y, d.z, d.w);
-}
-
-void rsDebug(const char *s, const rs_matrix4x4 *m) {
-  float *f = (float *)m;
-  ALOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]);
-  ALOGD("%s  %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]);
-  ALOGD("%s  %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]);
-  ALOGD("%s  %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]);
-}
-
-void rsDebug(const char *s, const rs_matrix3x3 *m) {
-  float *f = (float *)m;
-  ALOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]);
-  ALOGD("%s  %f, %f, %f", s, f[1], f[4], f[7]);
-  ALOGD("%s  %f, %f, %f}", s, f[2], f[5], f[8]);
-}
-
-void rsDebug(const char *s, const rs_matrix2x2 *m) {
-  float *f = (float *)m;
-  ALOGD("%s {%f, %f", s, f[0], f[2]);
-  ALOGD("%s  %f, %f}", s, f[1], f[3]);
-}
-
-void rsDebug(const char *s, char c) {
-  ALOGD("%s %hhd  0x%hhx", s, c, (unsigned char)c);
-}
-
-void rsDebug(const char *s, const char2 *c2) {
-  char2 c = *c2;
-  ALOGD("%s {%hhd, %hhd}  0x%hhx 0x%hhx", s, c.x, c.y, (unsigned char)c.x,
-        (unsigned char)c.y);
-}
-
-void rsDebug(const char *s, const char3 *c3) {
-  char3 c = *c3;
-  ALOGD("%s {%hhd, %hhd, %hhd}  0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z,
-        (unsigned char)c.x, (unsigned char)c.y, (unsigned char)c.z);
-}
-
-void rsDebug(const char *s, const char4 *c4) {
-  char4 c = *c4;
-  ALOGD("%s {%hhd, %hhd, %hhd, %hhd}  0x%hhx 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y,
-        c.z, c.w, (unsigned char)c.x, (unsigned char)c.y, (unsigned char)c.z,
-        (unsigned char)c.w);
-}
-
-void rsDebug(const char *s, unsigned char c) {
-  ALOGD("%s %hhu  0x%hhx", s, c, c);
-}
-
-void rsDebug(const char *s, const uchar2 *c2) {
-  uchar2 c = *c2;
-  ALOGD("%s {%hhu, %hhu}  0x%hhx 0x%hhx", s, c.x, c.y, c.x, c.y);
-}
-
-void rsDebug(const char *s, const uchar3 *c3) {
-  uchar3 c = *c3;
-  ALOGD("%s {%hhu, %hhu, %hhu}  0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.x,
-        c.y, c.z);
-}
-
-void rsDebug(const char *s, const uchar4 *c4) {
-  uchar4 c = *c4;
-  ALOGD("%s {%hhu, %hhu, %hhu, %hhu}  0x%hhx 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y,
-        c.z, c.w, c.x, c.y, c.z, c.w);
-}
-
-void rsDebug(const char *s, short c) { ALOGD("%s %hd  0x%hx", s, c, c); }
-
-void rsDebug(const char *s, const short2 *c2) {
-  short2 c = *c2;
-  ALOGD("%s {%hd, %hd}  0x%hx 0x%hx", s, c.x, c.y, c.x, c.y);
-}
-
-void rsDebug(const char *s, const short3 *c3) {
-  short3 c = *c3;
-  ALOGD("%s {%hd, %hd, %hd}  0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y,
-        c.z);
-}
-
-void rsDebug(const char *s, const short4 *c4) {
-  short4 c = *c4;
-  ALOGD("%s {%hd, %hd, %hd, %hd}  0x%hx 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z,
-        c.w, c.x, c.y, c.z, c.w);
-}
-
-void rsDebug(const char *s, unsigned short c) {
-  ALOGD("%s %hu  0x%hx", s, c, c);
-}
-
-void rsDebug(const char *s, const ushort2 *c2) {
-  ushort2 c = *c2;
-  ALOGD("%s {%hu, %hu}  0x%hx 0x%hx", s, c.x, c.y, c.x, c.y);
-}
-
-void rsDebug(const char *s, const ushort3 *c3) {
-  ushort3 c = *c3;
-  ALOGD("%s {%hu, %hu, %hu}  0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y,
-        c.z);
-}
-
-void rsDebug(const char *s, const ushort4 *c4) {
-  ushort4 c = *c4;
-  ALOGD("%s {%hu, %hu, %hu, %hu}  0x%hx 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z,
-        c.w, c.x, c.y, c.z, c.w);
-}
-
-void rsDebug(const char *s, int i) { ALOGD("%s %d  0x%x", s, i, i); }
-
-void rsDebug(const char *s, const int2 *i2) {
-  int2 i = *i2;
-  ALOGD("%s {%d, %d}  0x%x 0x%x", s, i.x, i.y, i.x, i.y);
-}
-
-void rsDebug(const char *s, const int3 *i3) {
-  int3 i = *i3;
-  ALOGD("%s {%d, %d, %d}  0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z);
-}
-
-void rsDebug(const char *s, const int4 *i4) {
-  int4 i = *i4;
-  ALOGD("%s {%d, %d, %d, %d}  0x%x 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.w, i.x,
-        i.y, i.z, i.w);
-}
-
-void rsDebug(const char *s, unsigned int i) { ALOGD("%s %u  0x%x", s, i, i); }
-
-void rsDebug(const char *s, const uint2 *i2) {
-  uint2 i = *i2;
-  ALOGD("%s {%u, %u}  0x%x 0x%x", s, i.x, i.y, i.x, i.y);
-}
-
-void rsDebug(const char *s, const uint3 *i3) {
-  uint3 i = *i3;
-  ALOGD("%s {%u, %u, %u}  0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z);
-}
-
-void rsDebug(const char *s, const uint4 *i4) {
-  uint4 i = *i4;
-  ALOGD("%s {%u, %u, %u, %u}  0x%x 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.w, i.x,
-        i.y, i.z, i.w);
-}
-
-template <typename T>
-static inline long long LL(const T &x) {
-  return static_cast<long long>(x);
-}
-
-template <typename T>
-static inline unsigned long long LLu(const T &x) {
-  return static_cast<unsigned long long>(x);
-}
-
-void rsDebug(const char *s, long l) {
-  ALOGD("%s %lld  0x%llx", s, LL(l), LL(l));
-}
-
-void rsDebug(const char *s, long long ll) {
-  ALOGD("%s %lld  0x%llx", s, LL(ll), LL(ll));
-}
-
-void rsDebug(const char *s, const long2 *c) {
-  long2 ll = *c;
-  ALOGD("%s {%lld, %lld}  0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x),
-        LL(ll.y));
-}
-
-void rsDebug(const char *s, const long3 *c) {
-  long3 ll = *c;
-  ALOGD("%s {%lld, %lld, %lld}  0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y),
-        LL(ll.z), LL(ll.x), LL(ll.y), LL(ll.z));
-}
-
-void rsDebug(const char *s, const long4 *c) {
-  long4 ll = *c;
-  ALOGD("%s {%lld, %lld, %lld, %lld}  0x%llx 0x%llx 0x%llx 0x%llx", s, LL(ll.x),
-        LL(ll.y), LL(ll.z), LL(ll.w), LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w));
-}
-
-void rsDebug(const char *s, unsigned long l) {
-  unsigned long long ll = l;
-  ALOGD("%s %llu  0x%llx", s, ll, ll);
-}
-
-void rsDebug(const char *s, unsigned long long ll) {
-  ALOGD("%s %llu  0x%llx", s, ll, ll);
-}
-
-void rsDebug(const char *s, const ulong2 *c) {
-  ulong2 ll = *c;
-  ALOGD("%s {%llu, %llu}  0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x),
-        LLu(ll.y));
-}
-
-void rsDebug(const char *s, const ulong3 *c) {
-  ulong3 ll = *c;
-  ALOGD("%s {%llu, %llu, %llu}  0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y),
-        LLu(ll.z), LLu(ll.x), LLu(ll.y), LLu(ll.z));
-}
-
-void rsDebug(const char *s, const ulong4 *c) {
-  ulong4 ll = *c;
-  ALOGD("%s {%llu, %llu, %llu, %llu}  0x%llx 0x%llx 0x%llx 0x%llx", s,
-        LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w), LLu(ll.x), LLu(ll.y),
-        LLu(ll.z), LLu(ll.w));
-}
-
-// FIXME: We need to export these function signatures for the compatibility
-// library. The C++ name mangling that LLVM uses for ext_vector_type requires
-// different versions for "long" vs. "long long". Note that the called
-// functions are still using the appropriate 64-bit sizes.
-
-#ifndef __LP64__
-typedef long l2 __attribute__((ext_vector_type(2)));
-typedef long l3 __attribute__((ext_vector_type(3)));
-typedef long l4 __attribute__((ext_vector_type(4)));
-typedef unsigned long ul2 __attribute__((ext_vector_type(2)));
-typedef unsigned long ul3 __attribute__((ext_vector_type(3)));
-typedef unsigned long ul4 __attribute__((ext_vector_type(4)));
-
-void rsDebug(const char *s, const l2 *c) {
-  long2 ll = *(const long2 *)c;
-  ALOGD("%s {%lld, %lld}  0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x),
-        LL(ll.y));
-}
-
-void rsDebug(const char *s, const l3 *c) {
-  long3 ll = *(const long3 *)c;
-  ALOGD("%s {%lld, %lld, %lld}  0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y),
-        LL(ll.z), LL(ll.x), LL(ll.y), LL(ll.z));
-}
-
-void rsDebug(const char *s, const l4 *c) {
-  long4 ll = *(const long4 *)c;
-  ALOGD("%s {%lld, %lld, %lld, %lld}  0x%llx 0x%llx 0x%llx 0x%llx", s, LL(ll.x),
-        LL(ll.y), LL(ll.z), LL(ll.w), LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w));
-}
-
-void rsDebug(const char *s, const ul2 *c) {
-  ulong2 ll = *(const ulong2 *)c;
-  ALOGD("%s {%llu, %llu}  0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x),
-        LLu(ll.y));
-}
-
-void rsDebug(const char *s, const ul3 *c) {
-  ulong3 ll = *(const ulong3 *)c;
-  ALOGD("%s {%llu, %llu, %llu}  0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y),
-        LLu(ll.z), LLu(ll.x), LLu(ll.y), LLu(ll.z));
-}
-
-void rsDebug(const char *s, const ul4 *c) {
-  ulong4 ll = *(const ulong4 *)c;
-  ALOGD("%s {%llu, %llu, %llu, %llu}  0x%llx 0x%llx 0x%llx 0x%llx", s,
-        LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w), LLu(ll.x), LLu(ll.y),
-        LLu(ll.z), LLu(ll.w));
-}
-#endif
-
-void rsDebug(const char *s, const long2 ll) {
-  ALOGD("%s {%lld, %lld}  0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x),
-        LL(ll.y));
-}
-
-void rsDebug(const char *s, const long3 ll) {
-  ALOGD("%s {%lld, %lld, %lld}  0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y),
-        LL(ll.z), LL(ll.x), LL(ll.y), LL(ll.z));
-}
-
-void rsDebug(const char *s, const long4 ll) {
-  ALOGD("%s {%lld, %lld, %lld, %lld}  0x%llx 0x%llx 0x%llx 0x%llx", s, LL(ll.x),
-        LL(ll.y), LL(ll.z), LL(ll.w), LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w));
-}
-
-void rsDebug(const char *s, const ulong2 ll) {
-  ALOGD("%s {%llu, %llu}  0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x),
-        LLu(ll.y));
-}
-
-void rsDebug(const char *s, const ulong3 ll) {
-  ALOGD("%s {%llu, %llu, %llu}  0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y),
-        LLu(ll.z), LLu(ll.x), LLu(ll.y), LLu(ll.z));
-}
-
-void rsDebug(const char *s, const ulong4 ll) {
-  ALOGD("%s {%llu, %llu, %llu, %llu}  0x%llx 0x%llx 0x%llx 0x%llx", s,
-        LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w), LLu(ll.x), LLu(ll.y),
-        LLu(ll.z), LLu(ll.w));
-}
-
-void rsDebug(const char *s, const void *p) { ALOGD("%s %p", s, p); }
diff --git a/rsov/driver/rsovSampler.cpp b/rsov/driver/rsovSampler.cpp
deleted file mode 100644
index f8d946c..0000000
--- a/rsov/driver/rsovSampler.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#include "rsovSampler.h"
-
-#include "rsContext.h"
-
-using android::renderscript::Context;
-using android::renderscript::Sampler;
-using android::renderscript::rs_sampler;
-
-bool rsovSamplerInit(const Context *rsc, const Sampler *s) { return true; }
-
-void rsovSamplerDestroy(const Context *rsc, const Sampler *s) {}
-
-void rsovSamplerUpdateCachedObject(const Context *rsc, const Sampler *alloc,
-                                   rs_sampler *obj) {
-  obj->p = alloc;
-#ifdef __LP64__
-  obj->unused1 = nullptr;
-  obj->unused2 = nullptr;
-  obj->unused3 = nullptr;
-#endif
-}
diff --git a/rsov/driver/rsovSampler.h b/rsov/driver/rsovSampler.h
deleted file mode 100644
index 9b8112c..0000000
--- a/rsov/driver/rsovSampler.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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 RSOV_SAMPLER_H
-#define RSOV_SAMPLER_H
-
-#include "rs_hal.h"
-
-extern bool rsovSamplerInit(const android::renderscript::Context *rsc,
-                            const android::renderscript::Sampler *);
-
-extern void rsovSamplerDestroy(const android::renderscript::Context *rsc,
-                               const android::renderscript::Sampler *);
-
-extern void rsovSamplerUpdateCachedObject(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Sampler *,
-    android::renderscript::rs_sampler *obj);
-
-#endif  // RSD_SAMPLER_H
diff --git a/rsov/driver/rsovScript.cpp b/rsov/driver/rsovScript.cpp
deleted file mode 100644
index d1a6298..0000000
--- a/rsov/driver/rsovScript.cpp
+++ /dev/null
@@ -1,934 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#include "rsovScript.h"
-
-#include "bcinfo/MetadataExtractor.h"
-#include "module.h"
-#include "rsContext.h"
-#include "rsDefines.h"
-#include "rsType.h"
-#include "rsUtils.h"
-#include "rsovAllocation.h"
-#include "rsovContext.h"
-#include "rsovCore.h"
-#include "spirit/file_utils.h"
-#include "spirit/instructions.h"
-#include "spirit/module.h"
-
-#include <fstream>
-#include <functional>
-#include <iostream>
-#include <sstream>
-#include <string>
-
-extern "C" {
-char*  __GPUBlock = nullptr;
-}
-
-namespace android {
-namespace renderscript {
-namespace rsov {
-
-namespace {
-// Layout of this struct has to be the same as the struct in generated SPIR-V
-// TODO: generate this file from some spec that is shared with the compiler
-struct rsovTypeInfo {
-  uint32_t element_size;  // TODO: not implemented
-  uint32_t x_size;
-  uint32_t y_size;
-  uint32_t z_size;
-};
-
-const char *COMPILER_EXE_PATH = "/system/bin/rs2spirv";
-
-std::vector<const char *> setCompilerArgs(const char *bcFileName,
-                                          const char *cacheDir) {
-  rsAssert(bcFileName && cacheDir);
-
-  std::vector<const char *> args;
-
-  args.push_back(COMPILER_EXE_PATH);
-  args.push_back(bcFileName);
-
-  args.push_back(nullptr);
-  return args;
-}
-
-void writeBytes(const char *filename, const char *bytes, size_t size) {
-  std::ofstream ofs(filename, std::ios::binary);
-  ofs.write(bytes, size);
-  ofs.close();
-}
-
-std::vector<uint32_t> readWords(const char *filename) {
-  std::ifstream ifs(filename, std::ios::binary);
-
-  ifs.seekg(0, ifs.end);
-  int length = ifs.tellg();
-  ifs.seekg(0, ifs.beg);
-
-  rsAssert(((length & 3) == 0) && "File size expected to be multiples of 4");
-
-  std::vector<uint32_t> spvWords(length / sizeof(uint32_t));
-
-  ifs.read((char *)(spvWords.data()), length);
-
-  ifs.close();
-
-  return spvWords;
-}
-
-std::vector<uint32_t> compileBitcode(const char *resName, const char *cacheDir,
-                                     const char *bitcode, size_t bitcodeSize,
-                                     std::vector<uint8_t> &modifiedBitcode) {
-  rsAssert(bitcode && bitcodeSize);
-
-  // TODO: Cache the generated code
-
-  std::string bcFileName(cacheDir);
-  bcFileName.append("/");
-  bcFileName.append(resName);
-  bcFileName.append(".bc");
-
-  writeBytes(bcFileName.c_str(), bitcode, bitcodeSize);
-
-  auto args = setCompilerArgs(bcFileName.c_str(), cacheDir);
-
-  if (!rsuExecuteCommand(COMPILER_EXE_PATH, args.size() - 1, args.data())) {
-    ALOGE("compiler command line failed");
-    return std::vector<uint32_t>();
-  }
-
-  ALOGV("compiler command line succeeded");
-
-  std::string spvFileName(cacheDir);
-  spvFileName.append("/");
-  spvFileName.append(resName);
-  spvFileName.append(".spv");
-
-  std::string modifiedBCFileName(cacheDir);
-  modifiedBCFileName.append("/").append(resName).append("_modified.bc");
-
-  args.pop_back();
-  args.push_back("-bc");
-  args.push_back(modifiedBCFileName.c_str());
-  args.push_back(nullptr);
-
-  if (!rsuExecuteCommand(COMPILER_EXE_PATH, args.size() - 1, args.data())) {
-    ALOGE("compiler command line to create modified bitcode failed");
-    return std::vector<uint32_t>();
-  }
-
-  modifiedBitcode = android::spirit::readFile<uint8_t>(modifiedBCFileName);
-
-  return readWords(spvFileName.c_str());
-}
-
-void splitOffsets(const std::string &str, char delimiter,
-                  std::vector<uint32_t> *offsets) {
-  std::stringstream ss(str);
-  std::string tok;
-
-  while (std::getline(ss, tok, delimiter)) {
-    const uint32_t offset = static_cast<uint32_t>(std::stoi(tok));
-    offsets->push_back(offset);
-  }
-}
-
-}  // anonymous namespace
-
-bool RSoVScript::isScriptCpuBacked(const Script *s) {
-  return s->mHal.info.mVersionMinor == CPU_SCRIPT_MAGIC_NUMBER;
-}
-
-void RSoVScript::initScriptOnCpu(Script *s, RsdCpuReference::CpuScript *cs) {
-  s->mHal.drv = cs;
-  s->mHal.info.mVersionMajor = 0;  // Unused. Don't care.
-  s->mHal.info.mVersionMinor = CPU_SCRIPT_MAGIC_NUMBER;
-}
-
-void RSoVScript::initScriptOnRSoV(Script *s, RSoVScript *rsovScript) {
-  s->mHal.drv = rsovScript;
-  s->mHal.info.mVersionMajor = 0;  // Unused. Don't care.
-  s->mHal.info.mVersionMinor = 0;
-}
-
-using android::spirit::Module;
-using android::spirit::Deserialize;
-
-RSoVScript::RSoVScript(RSoVContext *context, std::vector<uint32_t> &&spvWords,
-                       bcinfo::MetadataExtractor *ME,
-                       std::map<std::string, int> *GA2ID)
-    : mRSoV(context),
-      mDevice(context->getDevice()),
-      mSPIRVWords(std::move(spvWords)),
-      mME(ME),
-      mGlobalAllocationMetadata(nullptr),
-      mGAMapping(GA2ID) {
-  std::unique_ptr<Module> module(Deserialize<Module>(mSPIRVWords));
-
-  const std::string &strGlobalSize =
-      module->findStringOfPrefix(".rsov.GlobalSize:");
-  if (strGlobalSize.empty()) {
-    mGlobals.reset(new RSoVBuffer(context, 4));
-    return;
-  }
-  const size_t colonPosSize = strGlobalSize.find(':');
-  const std::string &strVal = strGlobalSize.substr(colonPosSize + 1);
-  const uint64_t globalSize = static_cast<uint64_t>(std::stol(strVal));
-  if (globalSize > 0) {
-    mGlobals.reset(new RSoVBuffer(context, globalSize));
-    __GPUBlock = mGlobals->getHostPtr();
-    const std::string &offsetStr =
-      module->findStringOfPrefix(".rsov.ExportedVars:");
-    const size_t colonPos = offsetStr.find(':');
-    splitOffsets(offsetStr.substr(colonPos + 1), ';', &mExportedVarOffsets);
-  }
-}
-
-RSoVScript::~RSoVScript() {
-  delete mCpuScript;
-  delete mME;
-}
-
-void RSoVScript::populateScript(Script *) {
-}
-
-void RSoVScript::invokeFunction(uint32_t slot, const void *params,
-                                size_t paramLength) {
-  getCpuScript()->invokeFunction(slot, params, paramLength);
-}
-
-int RSoVScript::invokeRoot() { return getCpuScript()->invokeRoot(); }
-
-void RSoVScript::invokeForEach(uint32_t slot, const Allocation **ains,
-                               uint32_t inLen, Allocation *aout,
-                               const void *usr, uint32_t usrLen,
-                               const RsScriptCall *sc) {
-  // TODO: Handle kernel without input Allocation
-  rsAssert(ains);
-  std::vector<RSoVAllocation *> inputAllocations(inLen);
-  for (uint32_t i = 0; i < inLen; ++i) {
-    inputAllocations[i] = static_cast<RSoVAllocation *>(ains[i]->mHal.drv);
-  }
-  RSoVAllocation *outputAllocation =
-      static_cast<RSoVAllocation *>(aout->mHal.drv);
-  runForEach(slot, inLen, inputAllocations, outputAllocation);
-}
-
-void RSoVScript::invokeReduce(uint32_t slot, const Allocation **ains,
-                              uint32_t inLen, Allocation *aout,
-                              const RsScriptCall *sc) {
-  getCpuScript()->invokeReduce(slot, ains, inLen, aout, sc);
-}
-
-void RSoVScript::invokeInit() {
-  getCpuScript()->invokeInit();
-}
-
-void RSoVScript::invokeFreeChildren() {
-  // TODO: implement this
-}
-
-void RSoVScript::setGlobalVar(uint32_t slot, const void *data,
-                              size_t dataLength) {
-  char *basePtr = mGlobals->getHostPtr();
-  rsAssert(basePtr != nullptr);
-  const uint32_t offset = GetExportedVarOffset(slot);
-  memcpy(basePtr + offset, data, dataLength);
-}
-
-void RSoVScript::getGlobalVar(uint32_t slot, void *data, size_t dataLength) {
-  const char *basePtr = mGlobals->getHostPtr();
-  rsAssert(basePtr != nullptr);
-  const uint32_t offset = GetExportedVarOffset(slot);
-  memcpy(data, basePtr + offset, dataLength);
-}
-
-void RSoVScript::setGlobalVarWithElemDims(uint32_t slot, const void *data,
-                                          size_t dataLength, const Element *elem,
-                                          const uint32_t *dims,
-                                          size_t dimLength) {
-  char *basePtr = mGlobals->getHostPtr();
-  rsAssert(basePtr != nullptr);
-  const uint32_t offset = GetExportedVarOffset(slot);
-  char *destPtr = basePtr + offset;
-
-  // We want to look at dimension in terms of integer components,
-  // but dimLength is given in terms of bytes.
-  dimLength /= sizeof(int);
-
-  // Only a single dimension is currently supported.
-  rsAssert(dimLength == 1);
-  if (dimLength != 1) {
-    return;
-  }
-
-  // First do the increment loop.
-  size_t stride = elem->getSizeBytes();
-  const char *cVal = reinterpret_cast<const char *>(data);
-  for (uint32_t i = 0; i < dims[0]; i++) {
-    elem->incRefs(cVal);
-    cVal += stride;
-  }
-
-  // Decrement loop comes after (to prevent race conditions).
-  char *oldVal = destPtr;
-  for (uint32_t i = 0; i < dims[0]; i++) {
-    elem->decRefs(oldVal);
-    oldVal += stride;
-  }
-
-  memcpy(destPtr, data, dataLength);
-}
-
-void RSoVScript::setGlobalBind(uint32_t slot, Allocation *data) {
-  ALOGV("%s succeeded.", __FUNCTION__);
-  // TODO: implement this
-}
-
-void RSoVScript::setGlobalObj(uint32_t slot, ObjectBase *obj) {
-  mCpuScript->setGlobalObj(slot, obj);
-  ALOGV("%s succeeded.", __FUNCTION__);
-}
-
-Allocation *RSoVScript::getAllocationForPointer(const void *ptr) const {
-  // TODO: implement this
-  return nullptr;
-}
-
-int RSoVScript::getGlobalEntries() const {
-  // TODO: implement this
-  return 0;
-}
-
-const char *RSoVScript::getGlobalName(int i) const {
-  // TODO: implement this
-  return nullptr;
-}
-
-const void *RSoVScript::getGlobalAddress(int i) const {
-  // TODO: implement this
-  return nullptr;
-}
-
-size_t RSoVScript::getGlobalSize(int i) const {
-  // TODO: implement this
-  return 0;
-}
-
-uint32_t RSoVScript::getGlobalProperties(int i) const {
-  // TODO: implement this
-  return 0;
-}
-
-void RSoVScript::InitDescriptorAndPipelineLayouts(uint32_t inLen) {
-  // TODO: kernels with zero output allocations
-  std::vector<VkDescriptorSetLayoutBinding> bindings(
-      inLen + 3, {
-                     .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-                     .descriptorCount = 1,
-                     .stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
-                 });
-  for (uint32_t i = 0; i < inLen + 3; i++) {
-    bindings[i].binding = i;
-  }
-
-  VkDescriptorSetLayoutCreateInfo descriptor_layout = {
-      .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
-      .pNext = nullptr,
-      .flags = 0,
-      .bindingCount = inLen + 3,
-      .pBindings = bindings.data(),
-  };
-
-  VkResult res;
-
-  mDescLayout.resize(NUM_DESCRIPTOR_SETS);
-  res = vkCreateDescriptorSetLayout(mDevice, &descriptor_layout, NULL,
-                                    mDescLayout.data());
-  rsAssert(res == VK_SUCCESS);
-
-  /* Now use the descriptor layout to create a pipeline layout */
-  VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo = {
-      .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
-      .pNext = nullptr,
-      .pushConstantRangeCount = 0,
-      .pPushConstantRanges = nullptr,
-      .setLayoutCount = NUM_DESCRIPTOR_SETS,
-      .pSetLayouts = mDescLayout.data(),
-  };
-
-  res = vkCreatePipelineLayout(mDevice, &pPipelineLayoutCreateInfo, NULL,
-                               &mPipelineLayout);
-  rsAssert(res == VK_SUCCESS);
-}
-
-void RSoVScript::InitShader(uint32_t slot) {
-  VkResult res;
-
-  mShaderStage.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
-  mShaderStage.pNext = nullptr;
-  mShaderStage.pSpecializationInfo = nullptr;
-  mShaderStage.flags = 0;
-  mShaderStage.stage = VK_SHADER_STAGE_COMPUTE_BIT;
-
-  const char **RSKernelNames = mME->getExportForEachNameList();
-  size_t RSKernelNum = mME->getExportForEachSignatureCount();
-  rsAssert(slot < RSKernelNum);
-  rsAssert(RSKernelNames);
-  rsAssert(RSKernelNames[slot]);
-  // ALOGV("slot = %d kernel name = %s", slot, RSKernelNames[slot]);
-  std::string entryName("entry_");
-  entryName.append(RSKernelNames[slot]);
-
-  mShaderStage.pName = strndup(entryName.c_str(), entryName.size());
-
-  VkShaderModuleCreateInfo moduleCreateInfo = {
-      .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
-      .pNext = nullptr,
-      .flags = 0,
-      .codeSize = mSPIRVWords.size() * sizeof(unsigned int),
-      .pCode = mSPIRVWords.data(),
-  };
-  res = vkCreateShaderModule(mDevice, &moduleCreateInfo, NULL,
-                             &mShaderStage.module);
-  rsAssert(res == VK_SUCCESS);
-}
-
-void RSoVScript::InitDescriptorPool(uint32_t inLen) {
-  VkResult res;
-  // 1 global buffer, 1 global allocation metadata buffer, 1 output allocation,
-  // and inLen input allocations
-  VkDescriptorPoolSize type_count[] = {{
-      .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, .descriptorCount = inLen + 3,
-  }};
-
-  VkDescriptorPoolCreateInfo descriptor_pool = {
-      .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
-      .pNext = nullptr,
-      .maxSets = 1,
-      .poolSizeCount = NELEM(type_count),
-      .pPoolSizes = type_count,
-  };
-
-  res = vkCreateDescriptorPool(mDevice, &descriptor_pool, NULL, &mDescPool);
-  rsAssert(res == VK_SUCCESS);
-}
-
-// Iterate through a list of global allocations that are used inside the module
-// and marshal their type information to a dedicated Vulkan Buffer
-void RSoVScript::MarshalTypeInfo(void) {
-  // Marshal global allocation metadata to the device
-  auto *cs = getCpuScript();
-  int nr_globals = mGAMapping->size();
-  if (mGlobalAllocationMetadata == nullptr) {
-    mGlobalAllocationMetadata.reset(
-        new RSoVBuffer(mRSoV, sizeof(struct rsovTypeInfo) * nr_globals));
-  }
-  struct rsovTypeInfo *mappedMetadata =
-      (struct rsovTypeInfo *)mGlobalAllocationMetadata->getHostPtr();
-  for (int i = 0; i < nr_globals; ++i) {
-    if (getGlobalRsType(cs->getGlobalProperties(i)) ==
-        RsDataType::RS_TYPE_ALLOCATION) {
-      ALOGV("global variable %d is an allocation!", i);
-      const void *host_buf;
-      cs->getGlobalVar(i, (void *)&host_buf, sizeof(host_buf));
-      if (!host_buf) continue;
-      const android::renderscript::Allocation *GA =
-          static_cast<const android::renderscript::Allocation *>(host_buf);
-      const android::renderscript::Type *T = GA->getType();
-      rsAssert(T);
-
-      auto global_it = mGAMapping->find(cs->getGlobalName(i));
-      rsAssert(global_it != (*mGAMapping).end());
-      int id = global_it->second;
-      ALOGV("global allocation %s is mapped to ID %d", cs->getGlobalName(i),
-            id);
-      // TODO: marshal other properties
-      mappedMetadata[id].x_size = T->getDimX();
-      mappedMetadata[id].y_size = T->getDimY();
-      mappedMetadata[id].z_size = T->getDimZ();
-    }
-  }
-}
-
-void RSoVScript::InitDescriptorSet(
-    const std::vector<RSoVAllocation *> &inputAllocations,
-    RSoVAllocation *outputAllocation) {
-  VkResult res;
-
-  VkDescriptorSetAllocateInfo alloc_info = {
-      .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
-      .pNext = NULL,
-      .descriptorPool = mDescPool,
-      .descriptorSetCount = NUM_DESCRIPTOR_SETS,
-      .pSetLayouts = mDescLayout.data(),
-  };
-
-  mDescSet.resize(NUM_DESCRIPTOR_SETS);
-  res = vkAllocateDescriptorSets(mDevice, &alloc_info, mDescSet.data());
-  rsAssert(res == VK_SUCCESS);
-
-  std::vector<VkWriteDescriptorSet> writes{
-      // Global variables
-      {
-          .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-          .dstSet = mDescSet[0],
-          .dstBinding = 0,
-          .dstArrayElement = 0,
-          .descriptorCount = 1,
-          .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-          .pBufferInfo = mGlobals->getBufferInfo(),
-      },
-      // Metadata for global Allocations
-      {
-          .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-          .dstSet = mDescSet[0],
-          .dstBinding = 1,
-          .dstArrayElement = 0,
-          .descriptorCount = 1,
-          .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-          .pBufferInfo = mGlobalAllocationMetadata->getBufferInfo(),
-      },
-      // Output Allocation
-      {
-          .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-          .dstSet = mDescSet[0],
-          .dstBinding = 2,
-          .dstArrayElement = 0,
-          .descriptorCount = 1,
-          .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-          .pBufferInfo = outputAllocation->getBuffer()->getBufferInfo(),
-      },
-  };
-
-  // Input Allocations
-  for (uint32_t i = 0; i < inputAllocations.size(); ++i) {
-    writes.push_back({
-        .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-        .dstSet = mDescSet[0],
-        .dstBinding = 3 + i,  // input allocations start from binding #3
-        .dstArrayElement = 0,
-        .descriptorCount = 1,
-        .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
-        .pBufferInfo = inputAllocations[i]->getBuffer()->getBufferInfo(),
-    });
-  }
-
-  vkUpdateDescriptorSets(mDevice, writes.size(), writes.data(), 0, NULL);
-}
-
-void RSoVScript::InitPipeline() {
-  // DEPENDS on mShaderStage, i.e., InitShader()
-
-  VkResult res;
-
-  VkComputePipelineCreateInfo pipeline_info = {
-      .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
-      .pNext = nullptr,
-      .layout = mPipelineLayout,
-      .basePipelineHandle = VK_NULL_HANDLE,
-      .basePipelineIndex = 0,
-      .flags = 0,
-      .stage = mShaderStage,
-  };
-  res = vkCreateComputePipelines(mDevice, VK_NULL_HANDLE, 1, &pipeline_info,
-                                 NULL, &mComputePipeline);
-  rsAssert(res == VK_SUCCESS);
-}
-
-void RSoVScript::runForEach(
-    uint32_t slot, uint32_t inLen,
-    const std::vector<RSoVAllocation *> &inputAllocations,
-    RSoVAllocation *outputAllocation) {
-  VkResult res;
-
-  InitShader(slot);
-  InitDescriptorPool(inLen);
-  InitDescriptorAndPipelineLayouts(inLen);
-  MarshalTypeInfo();
-  InitDescriptorSet(inputAllocations, outputAllocation);
-  // InitPipelineCache();
-  InitPipeline();
-
-  VkCommandBuffer cmd;
-
-  VkCommandBufferAllocateInfo cmd_info = {
-      .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
-      .pNext = nullptr,
-      .commandPool = mRSoV->getCmdPool(),
-      .level = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
-      .commandBufferCount = 1,
-  };
-
-  res = vkAllocateCommandBuffers(mDevice, &cmd_info, &cmd);
-  rsAssert(res == VK_SUCCESS);
-
-  VkCommandBufferBeginInfo cmd_buf_info = {
-      .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
-      .pNext = nullptr,
-      .flags = 0,
-      .pInheritanceInfo = nullptr,
-  };
-
-  res = vkBeginCommandBuffer(cmd, &cmd_buf_info);
-  rsAssert(res == VK_SUCCESS);
-
-  vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, mComputePipeline);
-
-  vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, mPipelineLayout,
-                          0, mDescSet.size(), mDescSet.data(), 0, nullptr);
-  // Assuming all input allocations are of the same dimensionality
-  const uint32_t width = inputAllocations[0]->getWidth();
-  const uint32_t height = rsMax(inputAllocations[0]->getHeight(), 1U);
-  const uint32_t depth = rsMax(inputAllocations[0]->getDepth(), 1U);
-  vkCmdDispatch(cmd, width, height, depth);
-
-  res = vkEndCommandBuffer(cmd);
-  assert(res == VK_SUCCESS);
-
-  VkSubmitInfo submit_info = {
-      .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
-      .commandBufferCount = 1,
-      .pCommandBuffers = &cmd,
-  };
-
-  VkFence fence;
-
-  VkFenceCreateInfo fenceInfo = {
-      .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
-      .pNext = nullptr,
-      .flags = 0,
-  };
-
-  vkCreateFence(mDevice, &fenceInfo, NULL, &fence);
-
-  vkQueueSubmit(mRSoV->getQueue(), 1, &submit_info, fence);
-
-  // Make sure command buffer is finished
-  do {
-    res = vkWaitForFences(mDevice, 1, &fence, VK_TRUE, 100000);
-  } while (res == VK_TIMEOUT);
-
-  rsAssert(res == VK_SUCCESS);
-
-  vkDestroyFence(mDevice, fence, NULL);
-
-  // TODO: shall we reuse command buffers?
-  VkCommandBuffer cmd_bufs[] = {cmd};
-  vkFreeCommandBuffers(mDevice, mRSoV->getCmdPool(), 1, cmd_bufs);
-
-  vkDestroyPipeline(mDevice, mComputePipeline, nullptr);
-  for (int i = 0; i < NUM_DESCRIPTOR_SETS; i++)
-    vkDestroyDescriptorSetLayout(mDevice, mDescLayout[i], nullptr);
-  vkDestroyPipelineLayout(mDevice, mPipelineLayout, nullptr);
-  vkFreeDescriptorSets(mDevice, mDescPool, NUM_DESCRIPTOR_SETS,
-                       mDescSet.data());
-  vkDestroyDescriptorPool(mDevice, mDescPool, nullptr);
-  free((void *)mShaderStage.pName);
-  vkDestroyShaderModule(mDevice, mShaderStage.module, nullptr);
-}
-
-}  // namespace rsov
-}  // namespace renderscript
-}  // namespace android
-
-using android::renderscript::Allocation;
-using android::renderscript::Context;
-using android::renderscript::Element;
-using android::renderscript::ObjectBase;
-using android::renderscript::RsdCpuReference;
-using android::renderscript::Script;
-using android::renderscript::ScriptC;
-using android::renderscript::rs_script;
-using android::renderscript::rsov::RSoVContext;
-using android::renderscript::rsov::RSoVScript;
-using android::renderscript::rsov::compileBitcode;
-
-namespace {
-// A class to parse global allocation metadata; essentially a subset of JSON
-// it would look like {"__RSoV_GA": {"g":42}}
-// The result is stored in a refence to a map<string, int>
-class ParseMD {
- public:
-  ParseMD(std::string s, std::map<std::string, int> &map)
-      : mString(s), mMapping(map) {}
-
-  bool parse(void) {
-    // remove outermose two pairs of braces
-    mString = removeBraces(mString);
-    if (mString.empty()) {
-      return false;
-    }
-
-    mString = removeBraces(mString);
-    if (mString.empty()) {
-      return false;
-    }
-
-    // Now we are supposed to have a comma-separated list that looks like:
-    // "foo":42, "bar":56
-    split<','>(mString, [&](auto s) {
-      split<':'>(s, nullptr, [&](auto pair) {
-        rsAssert(pair.size() == 2);
-        std::string ga_name = removeQuotes(pair[0]);
-        int id = atoi(pair[1].c_str());
-        ALOGV("ParseMD: global allocation %s has ID %d", ga_name.c_str(), id);
-        mMapping[ga_name] = id;
-      });
-    });
-    return true;
-  }
-
- private:
-  template <char L, char R>
-  static std::string removeMatching(const std::string &s) {
-    auto leftCBrace = s.find(L);
-    if (leftCBrace == std::string::npos) {
-      return "";
-    }
-    leftCBrace++;
-    return s.substr(leftCBrace, s.rfind(R) - leftCBrace);
-  }
-
-  static std::string removeBraces(const std::string &s) {
-    return removeMatching<'{', '}'>(s);
-  }
-
-  static std::string removeQuotes(const std::string &s) {
-    return removeMatching<'"', '"'>(s);
-  }
-
-  // Splitting a string, and call "each" and/or "all" with individal elements
-  // and a vector of all tokenized elements
-  template <char D>
-  static void split(const std::string &s,
-                    std::function<void(const std::string &)> each,
-                    std::function<void(const std::vector<const std::string> &)>
-                        all = nullptr) {
-    std::vector<const std::string> result;
-    for (std::string::size_type pos = 0; pos < s.size(); pos++) {
-      std::string::size_type begin = pos;
-
-      while (pos <= s.size() && s[pos] != D) pos++;
-      std::string found = s.substr(begin, pos - begin);
-      if (each) each(found);
-      if (all) result.push_back(found);
-    }
-    if (all) all(result);
-  }
-
-  std::string mString;
-  std::map<std::string, int> &mMapping;
-};
-
-}  // namespace
-
-class ExtractRSoVMD : public android::spirit::DoNothingVisitor {
- public:
-  ExtractRSoVMD() : mGAMapping(new std::map<std::string, int>) {}
-
-  void visit(android::spirit::StringInst *s) {
-    ALOGV("ExtractRSoVMD: string = %s", s->mOperand1.c_str());
-    std::map<std::string, int> mapping;
-    ParseMD p(s->mOperand1, mapping);
-    if (p.parse()) {
-      *mGAMapping = std::move(mapping);
-    }
-  }
-
-  std::map<std::string, int> *takeMapping(void) { return mGAMapping.release(); }
-
- private:
-  std::unique_ptr<std::map<std::string, int> > mGAMapping;
-};
-
-bool rsovScriptInit(const Context *rsc, ScriptC *script, char const *resName,
-                    char const *cacheDir, uint8_t const *bitcode,
-                    size_t bitcodeSize, uint32_t flags) {
-  RSoVHal *hal = static_cast<RSoVHal *>(rsc->mHal.drv);
-
-  std::unique_ptr<bcinfo::MetadataExtractor> bitcodeMetadata(
-      new bcinfo::MetadataExtractor((const char *)bitcode, bitcodeSize));
-  if (!bitcodeMetadata || !bitcodeMetadata->extract()) {
-    ALOGE("Could not extract metadata from bitcode from %s", resName);
-    return false;
-  }
-
-  std::vector<uint8_t> modifiedBitcode;
-  auto spvWords =
-    compileBitcode(resName, cacheDir, (const char *)bitcode, bitcodeSize, modifiedBitcode);
-  if (!spvWords.empty() && !modifiedBitcode.empty()) {
-    // Extract compiler metadata on allocation->binding mapping
-    android::spirit::Module *module =
-        android::spirit::Deserialize<android::spirit::Module>(spvWords);
-    rsAssert(module);
-    ExtractRSoVMD ga_md;
-    module->accept(&ga_md);
-
-    RSoVScript *rsovScript =
-        new RSoVScript(hal->mRSoV, std::move(spvWords),
-                       bitcodeMetadata.release(), ga_md.takeMapping());
-    if (rsovScript) {
-      std::string modifiedResName(resName);
-      modifiedResName.append("_modified");
-      RsdCpuReference::CpuScript *cs = hal->mCpuRef->createScript(
-          script, modifiedResName.c_str(), cacheDir, modifiedBitcode.data(),
-          modifiedBitcode.size(), flags);
-      if (cs != nullptr) {
-        cs->populateScript(script);
-        rsovScript->setCpuScript(cs);
-        RSoVScript::initScriptOnRSoV(script, rsovScript);
-        return true;
-      }
-    }
-  }
-
-  ALOGD("Failed creating an RSoV script for %s", resName);
-  // Fall back to CPU driver instead
-
-  std::unique_ptr<RsdCpuReference::CpuScript> cs(hal->mCpuRef->createScript(
-      script, resName, cacheDir, bitcode, bitcodeSize, flags));
-  if (cs == nullptr) {
-    ALOGE("Failed creating a CPU script %p for %s (%p)", cs.get(), resName,
-          script);
-    return false;
-  }
-  cs->populateScript(script);
-
-  RSoVScript::initScriptOnCpu(script, cs.release());
-
-  return true;
-}
-
-bool rsovInitIntrinsic(const Context *rsc, Script *s, RsScriptIntrinsicID iid,
-                       Element *e) {
-  RSoVHal *dc = (RSoVHal *)rsc->mHal.drv;
-  RsdCpuReference::CpuScript *cs = dc->mCpuRef->createIntrinsic(s, iid, e);
-  if (cs == nullptr) {
-    return false;
-  }
-  s->mHal.drv = cs;
-  cs->populateScript(s);
-  return true;
-}
-
-void rsovScriptInvokeForEach(const Context *rsc, Script *s, uint32_t slot,
-                             const Allocation *ain, Allocation *aout,
-                             const void *usr, size_t usrLen,
-                             const RsScriptCall *sc) {
-  if (ain == nullptr) {
-    rsovScriptInvokeForEachMulti(rsc, s, slot, nullptr, 0, aout, usr, usrLen,
-                                 sc);
-  } else {
-    const Allocation *ains[1] = {ain};
-
-    rsovScriptInvokeForEachMulti(rsc, s, slot, ains, 1, aout, usr, usrLen, sc);
-  }
-}
-
-void rsovScriptInvokeForEachMulti(const Context *rsc, Script *s, uint32_t slot,
-                                  const Allocation **ains, size_t inLen,
-                                  Allocation *aout, const void *usr,
-                                  size_t usrLen, const RsScriptCall *sc) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  cs->invokeForEach(slot, ains, inLen, aout, usr, usrLen, sc);
-}
-
-int rsovScriptInvokeRoot(const Context *dc, Script *s) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  return cs->invokeRoot();
-}
-
-void rsovScriptInvokeInit(const Context *dc, Script *s) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  cs->invokeInit();
-}
-
-void rsovScriptInvokeFreeChildren(const Context *dc, Script *s) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  cs->invokeFreeChildren();
-}
-
-void rsovScriptInvokeFunction(const Context *dc, Script *s, uint32_t slot,
-                              const void *params, size_t paramLength) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  cs->invokeFunction(slot, params, paramLength);
-}
-
-void rsovScriptInvokeReduce(const Context *dc, Script *s, uint32_t slot,
-                            const Allocation **ains, size_t inLen,
-                            Allocation *aout, const RsScriptCall *sc) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  cs->invokeReduce(slot, ains, inLen, aout, sc);
-}
-
-void rsovScriptSetGlobalVar(const Context *dc, const Script *s, uint32_t slot,
-                            void *data, size_t dataLength) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  cs->setGlobalVar(slot, data, dataLength);
-}
-
-void rsovScriptGetGlobalVar(const Context *dc, const Script *s, uint32_t slot,
-                            void *data, size_t dataLength) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  cs->getGlobalVar(slot, data, dataLength);
-}
-
-void rsovScriptSetGlobalVarWithElemDims(
-    const Context *dc, const Script *s, uint32_t slot, void *data,
-    size_t dataLength, const android::renderscript::Element *elem,
-    const uint32_t *dims, size_t dimLength) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  cs->setGlobalVarWithElemDims(slot, data, dataLength, elem, dims, dimLength);
-}
-
-void rsovScriptSetGlobalBind(const Context *dc, const Script *s, uint32_t slot,
-                             Allocation *data) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  cs->setGlobalBind(slot, data);
-}
-
-void rsovScriptSetGlobalObj(const Context *dc, const Script *s, uint32_t slot,
-                            ObjectBase *data) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  cs->setGlobalObj(slot, data);
-}
-
-void rsovScriptDestroy(const Context *dc, Script *s) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
-  delete cs;
-  s->mHal.drv = nullptr;
-}
-
-Allocation *rsovScriptGetAllocationForPointer(
-    const android::renderscript::Context *dc,
-    const android::renderscript::Script *sc, const void *ptr) {
-  RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)sc->mHal.drv;
-  return cs->getAllocationForPointer(ptr);
-}
-
-void rsovScriptUpdateCachedObject(const Context *rsc, const Script *script,
-                                  rs_script *obj) {
-  obj->p = script;
-#ifdef __LP64__
-  obj->unused1 = nullptr;
-  obj->unused2 = nullptr;
-  obj->unused3 = nullptr;
-#endif
-}
diff --git a/rsov/driver/rsovScript.h b/rsov/driver/rsovScript.h
deleted file mode 100644
index 1300621..0000000
--- a/rsov/driver/rsovScript.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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 RSOV_SCRIPT_H
-#define RSOV_SCRIPT_H
-
-#include <vulkan/vulkan.h>
-
-#include <map>
-#include <vector>
-
-#include "bcinfo/MetadataExtractor.h"
-#include "rsDefines.h"
-#include "rs_hal.h"
-#include "rsd_cpu.h"
-
-namespace android {
-namespace renderscript {
-
-class Allocation;
-class Context;
-class Element;
-class Script;
-class ScriptC;
-
-namespace rsov {
-
-class RSoVAllocation;
-class RSoVBuffer;
-class RSoVContext;
-
-// TODO: CpuScript is a bad name for the base class. Fix with a refactoring.
-class RSoVScript : RsdCpuReference::CpuScript {
- public:
-  RSoVScript(RSoVContext *context, std::vector<uint32_t> &&spvWords,
-             bcinfo::MetadataExtractor *ME,
-             std::map<std::string, int> *GAMapping);
-  RSoVScript(RSoVContext *context, const std::vector<uint32_t> &spvWords,
-             bcinfo::MetadataExtractor *ME,
-             std::map<std::string, int> *GAMapping) = delete;
-
-  virtual ~RSoVScript();
-
-  static bool isScriptCpuBacked(const Script *s);
-  static void initScriptOnCpu(Script *s, RsdCpuReference::CpuScript *cs);
-  static void initScriptOnRSoV(Script *s, RSoVScript *rsovScript);
-
-  void populateScript(Script *) override;
-  void invokeFunction(uint32_t slot, const void *params,
-                      size_t paramLength) override;
-  int invokeRoot() override;
-
-  void invokeForEach(uint32_t slot, const Allocation **ains, uint32_t inLen,
-                     Allocation *aout, const void *usr, uint32_t usrLen,
-                     const RsScriptCall *sc) override;
-
-  void invokeReduce(uint32_t slot, const Allocation **ains, uint32_t inLen,
-                    Allocation *aout, const RsScriptCall *sc) override;
-
-  void invokeInit() override;
-  void invokeFreeChildren() override;
-
-  void setGlobalVar(uint32_t slot, const void *data,
-                    size_t dataLength) override;
-  void getGlobalVar(uint32_t slot, void *data, size_t dataLength) override;
-  void setGlobalVarWithElemDims(uint32_t slot, const void *data,
-                                size_t dataLength, const Element *e,
-                                const uint32_t *dims,
-                                size_t dimLength) override;
-
-  void setGlobalBind(uint32_t slot, Allocation *data) override;
-  void setGlobalObj(uint32_t slot, ObjectBase *obj) override;
-
-  Allocation *getAllocationForPointer(const void *ptr) const override;
-
-  // Returns number of global variables in this Script (may be 0 if
-  // compiler is not configured to emit this information).
-  int getGlobalEntries() const override;
-  // Returns the name of the global variable at index i.
-  const char *getGlobalName(int i) const override;
-  // Returns the CPU address of the global variable at index i.
-  const void *getGlobalAddress(int i) const override;
-  // Returns the size (in bytes) of the global variable at index i.
-  size_t getGlobalSize(int i) const override;
-  // Returns the properties of the global variable at index i.
-  uint32_t getGlobalProperties(int i) const override;
-
-  void setCpuScript(RsdCpuReference::CpuScript *cs) { mCpuScript = cs; }
-
-  RsdCpuReference::CpuScript *getCpuScript() const { return mCpuScript; }
-
- private:
-  void InitDescriptorAndPipelineLayouts(uint32_t inLen);
-  void InitShader(uint32_t slot);
-  void InitDescriptorPool(uint32_t inLen);
-  void InitDescriptorSet(const std::vector<RSoVAllocation *> &inputAllocations,
-                         RSoVAllocation *outputAllocation);
-  void InitPipelineCache();
-  void InitPipeline();
-  void MarshalTypeInfo();
-  void runForEach(uint32_t slot, uint32_t inLen,
-                  const std::vector<RSoVAllocation *> &input,
-                  RSoVAllocation *output);
-
-  // Gets the offset for the global variable with the given slot number in
-  // the global buffer
-  uint32_t GetExportedVarOffset(uint32_t slot) const {
-    // High-level Java or C++ API has verified that slot is in range
-    return mExportedVarOffsets[slot];
-  }
-
-  static constexpr int CPU_SCRIPT_MAGIC_NUMBER = 0x60000;
-
-  RSoVContext *mRSoV;
-  VkDevice mDevice;
-  std::vector<uint32_t> mSPIRVWords;
-  RsdCpuReference::CpuScript *mCpuScript;
-
-  static constexpr int NUM_DESCRIPTOR_SETS = 1;
-  std::vector<VkDescriptorSetLayout> mDescLayout;
-  VkPipelineLayout mPipelineLayout;
-  VkPipeline mComputePipeline;
-  // TODO: Multiple stages for multiple kernels
-  VkPipelineShaderStageCreateInfo mShaderStage;
-  VkDescriptorPool mDescPool;
-  std::vector<VkDescriptorSet> mDescSet;
-  // For kernel names
-  const bcinfo::MetadataExtractor *mME;
-  std::unique_ptr<RSoVBuffer> mGlobals;
-  std::vector<uint32_t> mExportedVarOffsets;
-  // Metadata of global allocations
-  std::unique_ptr<RSoVBuffer> mGlobalAllocationMetadata;
-  // Mapping of global allocation to rsov-assigned ID
-  std::unique_ptr<std::map<std::string, int> > mGAMapping;
-};
-
-}  // namespace rsov
-}  // namespace renderscript
-}  // namespace android
-
-extern bool rsovScriptInit(const android::renderscript::Context *rsc,
-                           android::renderscript::ScriptC *script,
-                           char const *resName, char const *cacheDir,
-                           uint8_t const *bitcode, size_t bitcodeSize,
-                           uint32_t flags);
-
-extern bool rsovInitIntrinsic(const android::renderscript::Context *rsc,
-                              android::renderscript::Script *s,
-                              RsScriptIntrinsicID iid,
-                              android::renderscript::Element *e);
-
-extern void rsovScriptInvokeFunction(const android::renderscript::Context *dc,
-                                     android::renderscript::Script *script,
-                                     uint32_t slot, const void *params,
-                                     size_t paramLength);
-
-extern void rsovScriptInvokeForEach(
-    const android::renderscript::Context *rsc, android::renderscript::Script *s,
-    uint32_t slot, const android::renderscript::Allocation *ain,
-    android::renderscript::Allocation *aout, const void *usr, size_t usrLen,
-    const RsScriptCall *sc);
-
-extern void rsovScriptInvokeReduce(
-    const android::renderscript::Context *rsc, android::renderscript::Script *s,
-    uint32_t slot, const android::renderscript::Allocation **ains, size_t inLen,
-    android::renderscript::Allocation *aout, const RsScriptCall *sc);
-
-extern void rsovScriptInvokeForEachMulti(
-    const android::renderscript::Context *rsc, android::renderscript::Script *s,
-    uint32_t slot, const android::renderscript::Allocation **ains, size_t inLen,
-    android::renderscript::Allocation *aout, const void *usr, size_t usrLen,
-    const RsScriptCall *sc);
-
-extern int rsovScriptInvokeRoot(const android::renderscript::Context *dc,
-                                android::renderscript::Script *script);
-
-extern void rsovScriptInvokeInit(const android::renderscript::Context *dc,
-                                 android::renderscript::Script *script);
-
-extern void rsovScriptInvokeFreeChildren(
-    const android::renderscript::Context *dc,
-    android::renderscript::Script *script);
-
-extern void rsovScriptSetGlobalVar(const android::renderscript::Context *,
-                                   const android::renderscript::Script *,
-                                   uint32_t slot, void *data, size_t dataLen);
-
-extern void rsovScriptGetGlobalVar(const android::renderscript::Context *,
-                                   const android::renderscript::Script *,
-                                   uint32_t slot, void *data, size_t dataLen);
-
-extern void rsovScriptSetGlobalVarWithElemDims(
-    const android::renderscript::Context *,
-    const android::renderscript::Script *, uint32_t slot, void *data,
-    size_t dataLength, const android::renderscript::Element *,
-    const uint32_t *dims, size_t dimLength);
-extern void rsovScriptSetGlobalBind(const android::renderscript::Context *,
-                                    const android::renderscript::Script *,
-                                    uint32_t slot,
-                                    android::renderscript::Allocation *data);
-
-extern void rsovScriptSetGlobalObj(const android::renderscript::Context *,
-                                   const android::renderscript::Script *,
-                                   uint32_t slot,
-                                   android::renderscript::ObjectBase *data);
-
-extern void rsovScriptSetGlobal(const android::renderscript::Context *dc,
-                                const android::renderscript::Script *script,
-                                uint32_t slot, void *data, size_t dataLength);
-extern void rsovScriptGetGlobal(const android::renderscript::Context *dc,
-                                const android::renderscript::Script *script,
-                                uint32_t slot, void *data, size_t dataLength);
-extern void rsovScriptDestroy(const android::renderscript::Context *dc,
-                              android::renderscript::Script *script);
-
-extern android::renderscript::Allocation *rsovScriptGetAllocationForPointer(
-    const android::renderscript::Context *dc,
-    const android::renderscript::Script *script, const void *);
-
-extern void rsovScriptUpdateCachedObject(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Script *script,
-    android::renderscript::rs_script *obj);
-
-#endif  // RSOV_SCRIPT_H
diff --git a/rsov/driver/rsovScriptGroup.cpp b/rsov/driver/rsovScriptGroup.cpp
deleted file mode 100644
index 3603c04..0000000
--- a/rsov/driver/rsovScriptGroup.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#include "rsovCore.h"
-
-#include "rsAllocation.h"
-#include "rsContext.h"
-#include "rsScript.h"
-#include "rsScriptGroup.h"
-#include "rsd_cpu.h"
-
-using android::renderscript::Allocation;
-using android::renderscript::Context;
-using android::renderscript::RsdCpuReference;
-using android::renderscript::ScriptGroup;
-using android::renderscript::ScriptGroupBase;
-using android::renderscript::ScriptKernelID;
-using android::renderscript::rs_script_group;
-
-bool rsovScriptGroupInit(const Context *rsc, ScriptGroupBase *sg) {
-  // Always falls back to CPU implmentation of ScriptGroup
-  RSoVHal *dc = (RSoVHal *)rsc->mHal.drv;
-
-  sg->mHal.drv = dc->mCpuRef->createScriptGroup(sg);
-  return sg->mHal.drv != nullptr;
-}
-
-void rsovScriptGroupSetInput(const Context *rsc, const ScriptGroup *sg,
-                             const ScriptKernelID *kid, Allocation *) {}
-
-void rsovScriptGroupSetOutput(const Context *rsc, const ScriptGroup *sg,
-                              const ScriptKernelID *kid, Allocation *) {}
-
-void rsovScriptGroupExecute(const Context *rsc, const ScriptGroupBase *sg) {
-  RsdCpuReference::CpuScriptGroupBase *sgi =
-      (RsdCpuReference::CpuScriptGroupBase *)sg->mHal.drv;
-  sgi->execute();
-}
-
-void rsovScriptGroupDestroy(const Context *rsc, const ScriptGroupBase *sg) {
-  RsdCpuReference::CpuScriptGroupBase *sgi =
-      (RsdCpuReference::CpuScriptGroupBase *)sg->mHal.drv;
-  delete sgi;
-}
diff --git a/rsov/driver/rsovScriptGroup.h b/rsov/driver/rsovScriptGroup.h
deleted file mode 100644
index 1a16136..0000000
--- a/rsov/driver/rsovScriptGroup.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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 RSOV_SCRIPT_GROUP_H
-#define RSOV_SCRIPT_GROUP_H
-
-#include "rs_hal.h"
-
-bool rsovScriptGroupInit(const android::renderscript::Context *rsc,
-                         android::renderscript::ScriptGroupBase *sg);
-void rsovScriptGroupSetInput(const android::renderscript::Context *rsc,
-                             const android::renderscript::ScriptGroup *sg,
-                             const android::renderscript::ScriptKernelID *kid,
-                             android::renderscript::Allocation *);
-void rsovScriptGroupSetOutput(const android::renderscript::Context *rsc,
-                              const android::renderscript::ScriptGroup *sg,
-                              const android::renderscript::ScriptKernelID *kid,
-                              android::renderscript::Allocation *);
-void rsovScriptGroupExecute(const android::renderscript::Context *rsc,
-                            const android::renderscript::ScriptGroupBase *sg);
-void rsovScriptGroupDestroy(const android::renderscript::Context *rsc,
-                            const android::renderscript::ScriptGroupBase *sg);
-
-#endif  // RSOV_SCRIPT_GROUP_H
diff --git a/rsov/driver/rsovType.cpp b/rsov/driver/rsovType.cpp
deleted file mode 100644
index 9930bb8..0000000
--- a/rsov/driver/rsovType.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#include "rsContext.h"
-#include "rsType.h"
-
-using android::renderscript::Context;
-using android::renderscript::Type;
-using android::renderscript::rs_type;
-
-bool rsovTypeInit(const Context *, const Type *t) { return true; }
-
-void rsovTypeDestroy(const Context *rsc, const Type *t) {}
-
-void rsovTypeUpdateCachedObject(const Context *rsc, const Type *t,
-                                rs_type *obj) {
-  obj->p = t;
-#ifdef __LP64__
-  obj->unused1 = nullptr;
-  obj->unused2 = nullptr;
-  obj->unused3 = nullptr;
-#endif
-}
diff --git a/rsov/driver/rsovType.h b/rsov/driver/rsovType.h
deleted file mode 100644
index 39f31dc..0000000
--- a/rsov/driver/rsovType.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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 RSOV_TYPE_H
-#define RSOV_TYPE_H
-
-#include "rs_hal.h"
-
-extern bool rsovTypeInit(const android::renderscript::Context *rsc,
-                         const android::renderscript::Type *);
-
-extern void rsovTypeDestroy(const android::renderscript::Context *rsc,
-                            const android::renderscript::Type *);
-
-extern void rsovTypeUpdateCachedObject(
-    const android::renderscript::Context *rsc,
-    const android::renderscript::Type *, android::renderscript::rs_type *obj);
-
-#endif  // RSD_TYPE_H
diff --git a/rsov/tests/Android.mk b/rsov/tests/Android.mk
deleted file mode 100644
index 06657c2..0000000
--- a/rsov/tests/Android.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-#=====================================================================
-# Include Subdirectories
-#=====================================================================
-
-# Not building RSoV tests in PDK builds.
-ifneq ($(TARGET_BUILD_PDK), true)
-
-LOCAL_PATH:=$(call my-dir)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
-
-endif # TARGET_BUILD_PDK
diff --git a/rsov/tests/RSoVTest/Android.mk b/rsov/tests/RSoVTest/Android.mk
deleted file mode 100644
index c89902f..0000000
--- a/rsov/tests/RSoVTest/Android.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright (C) 2016 The Android Open Source Project
-#
-# 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-LOCAL_STATIC_JAVA_LIBRARIES := androidx.test.rules
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
-
-LOCAL_RENDERSCRIPT_FLAGS := -target-api 0
-
-LOCAL_PACKAGE_NAME := RSoVTest
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_PACKAGE)
diff --git a/rsov/tests/RSoVTest/AndroidManifest.xml b/rsov/tests/RSoVTest/AndroidManifest.xml
deleted file mode 100644
index 936dd9f..0000000
--- a/rsov/tests/RSoVTest/AndroidManifest.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.rs.rsov.test">
-    <application
-        android:largeHeap="true"
-        android:label="_RSoV_Test"
-        android:icon="@drawable/test_pattern">
-        <uses-library android:name="android.test.runner" />
-        <activity android:name="RSoVTest"
-                  android:screenOrientation="portrait">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    </application>
-
-    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
-        android:targetPackage="com.android.rs.rsov.test"/>
-</manifest>
diff --git a/rsov/tests/RSoVTest/res/drawable-nodpi/test_pattern.png b/rsov/tests/RSoVTest/res/drawable-nodpi/test_pattern.png
deleted file mode 100644
index 7b34438..0000000
--- a/rsov/tests/RSoVTest/res/drawable-nodpi/test_pattern.png
+++ /dev/null
Binary files differ
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/RSoVTest.java b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/RSoVTest.java
deleted file mode 100644
index f9035d2..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/RSoVTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-package com.android.rs.rsov.test;
-
-import android.app.ListActivity;
-import android.os.Bundle;
-import android.renderscript.RenderScript;
-import android.util.Log;
-
-public class RSoVTest extends ListActivity {
-
-    private static final String LOG_TAG = "RSTest";
-    private static final boolean DEBUG = false;
-    private static final boolean LOG_ENABLED = false;
-
-    private RenderScript mRS;
-    private RSoVTestCore RSTC;
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        mRS = RenderScript.create(this);
-
-        RSTC = new RSoVTestCore(this);
-        RSTC.init(mRS);
-    }
-
-    static void log(String message) {
-        if (LOG_ENABLED) {
-            Log.v(LOG_TAG, message);
-        }
-    }
-
-
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/RSoVTestCore.java b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/RSoVTestCore.java
deleted file mode 100644
index 634c1ad..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/RSoVTestCore.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-package com.android.rs.rsov.test;
-
-import android.app.ListActivity;
-import android.renderscript.Allocation;
-import android.renderscript.RenderScript;
-import android.widget.ArrayAdapter;
-
-import java.util.ArrayList;
-import java.util.ListIterator;
-import java.util.Timer;
-import java.util.TimerTask;
-
-public class RSoVTestCore {
-    ListActivity mCtx;
-
-    public RSoVTestCore(ListActivity ctx) {
-        mCtx = ctx;
-    }
-
-    private RenderScript mRS;
-
-    private ArrayList<UnitTest> unitTests;
-    private ListIterator<UnitTest> test_iter;
-    private UnitTest activeTest;
-    private boolean stopTesting;
-
-    private ScriptField_ListAllocs_s mListAllocs;
-
-    private ArrayAdapter<UnitTest> testAdapter;
-
-    /* Periodic timer for ensuring future tests get scheduled */
-    private Timer mTimer;
-    public static final int RS_TIMER_PERIOD = 100;
-
-    public void init(RenderScript rs) {
-        mRS = rs;
-        stopTesting = false;
-
-        unitTests = new ArrayList<UnitTest>();
-
-        unitTests.add(new UT_invert(this, mCtx));
-        unitTests.add(new UT_modulo(this, mCtx));
-        unitTests.add(new UT_multi_kernel(this, mCtx));
-        unitTests.add(new UT_multi_input(this, mCtx));
-        unitTests.add(new UT_global_query(this, mCtx));
-        unitTests.add(new UT_global(this, mCtx));
-
-        UnitTest[] uta = new UnitTest[unitTests.size()];
-        uta = unitTests.toArray(uta);
-
-        /*
-        mListAllocs = new ScriptField_ListAllocs_s(mRS, uta.length);
-        for (int i = 0; i < uta.length; i++) {
-            ScriptField_ListAllocs_s.Item listElem = new ScriptField_ListAllocs_s.Item();
-            listElem.text = Allocation.createFromString(mRS, uta[i].name, Allocation.USAGE_SCRIPT);
-            listElem.result = uta[i].getResult();
-            mListAllocs.set(listElem, i, false);
-            uta[i].setItem(listElem);
-        }
-
-        mListAllocs.copyAll();
-        */
-        testAdapter = new ArrayAdapter<UnitTest>(mCtx, android.R.layout.simple_list_item_1, unitTests);
-        mCtx.setListAdapter(testAdapter);
-
-        test_iter = unitTests.listIterator();
-        refreshTestResults(); /* Kick off the first test */
-
-        TimerTask pTask = new TimerTask() {
-            public void run() {
-                refreshTestResults();
-            }
-        };
-
-        mTimer = new Timer();
-        mTimer.schedule(pTask, RS_TIMER_PERIOD, RS_TIMER_PERIOD);
-    }
-
-    public void checkAndRunNextTest() {
-        mCtx.runOnUiThread(new Runnable() {
-            public void run() {
-                if (testAdapter != null)
-                    testAdapter.notifyDataSetChanged();
-            }
-        });
-
-        if (activeTest != null) {
-            if (!activeTest.isAlive()) {
-                /* Properly clean up on our last test */
-                try {
-                    activeTest.join();
-                } catch (InterruptedException e) {
-                }
-                activeTest = null;
-            }
-        }
-
-        if (!stopTesting && activeTest == null) {
-            if (test_iter.hasNext()) {
-                activeTest = test_iter.next();
-                activeTest.start();
-                /* This routine will only get called once when a new test
-                 * should start running. The message handler in UnitTest.java
-                 * ensures this. */
-            } else {
-                if (mTimer != null) {
-                    mTimer.cancel();
-                    mTimer.purge();
-                    mTimer = null;
-                }
-            }
-        }
-    }
-
-    public void refreshTestResults() {
-        checkAndRunNextTest();
-    }
-
-    public void cleanup() {
-        stopTesting = true;
-        UnitTest t = activeTest;
-
-        /* Stop periodic refresh of testing */
-        if (mTimer != null) {
-            mTimer.cancel();
-            mTimer.purge();
-            mTimer = null;
-        }
-
-        /* Wait to exit until we finish the current test */
-        if (t != null) {
-            try {
-                t.join();
-            } catch (InterruptedException e) {
-            }
-            t = null;
-        }
-
-    }
-
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_global.java b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_global.java
deleted file mode 100644
index fe8dacd..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_global.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-package com.android.rs.rsov.test;
-
-import android.content.Context;
-import android.renderscript.*;
-import android.util.Log;
-
-public class UT_global extends UnitTest {
-    private static final String TAG = "global";
-
-    protected UT_global(RSoVTestCore rstc, Context ctx) {
-        super(rstc, "global", ctx);
-    }
-
-    private RenderScript RS;
-    private Allocation A;
-
-    private void test(Element elem, java.lang.Runnable action) {
-        A = Allocation.createSized(RS, elem, 128);
-        action.run();
-        waitForMessage();
-        A.destroy();
-    }
-
-    private void testIntTypes() {
-        ScriptC_global_int s = new ScriptC_global_int(RS);
-
-        test(Element.I32(RS), () -> {
-                int expected = 65536;
-                s.invoke_int_test_init(A);
-                s.set_g_int(expected);
-                s.invoke_int_test(A, expected);
-            });
-
-        test(Element.I32_2(RS), () -> {
-                Int2 expected = new Int2(65536, 65537);;
-                s.invoke_int2_test_init(A);
-                s.set_g_int2(expected);
-                s.invoke_int2_test(A, expected);
-            });
-
-        test(Element.I32_4(RS), () -> {
-                Int4 expected = new Int4(65536, 65537, 65538, 65539);
-                s.invoke_int4_test_init(A);
-                s.set_g_int4(expected);
-                s.invoke_int4_test(A, expected);
-            });
-
-        s.destroy();
-    }
-
-    private void testFloatTypes() {
-        ScriptC_global_float s = new ScriptC_global_float(RS);
-
-        test(Element.F32(RS), () -> {
-                float expected = 3.141593f;
-                s.invoke_float_test_init(A);
-                s.set_g_float(expected);
-                s.invoke_float_test(A, expected);
-            });
-
-        test(Element.F32_2(RS), () -> {
-                Float2 expected = new Float2(3.141593f, 3.141593f / 2);
-                s.invoke_float2_test_init(A);
-                s.set_g_float2(expected);
-                s.invoke_float2_test(A, expected);
-            });
-
-        test(Element.F32_4(RS), () -> {
-                Float4 expected = new Float4(3.141593f, 3.141593f / 2,
-                                             3.141593f / 3, 3.141593f / 4);
-                s.invoke_float4_test_init(A);
-                s.set_g_float4(expected);
-                s.invoke_float4_test(A, expected);
-            });
-
-        s.destroy();
-    }
-
-    public void run() {
-        RS = RenderScript.create(mCtx);
-        RS.setMessageHandler(mRsMessage);
-        RS.finish();
-
-        testIntTypes();
-        testFloatTypes();
-
-        RS.destroy();
-    }
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_global_query.java b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_global_query.java
deleted file mode 100644
index 821f9d2..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_global_query.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-package com.android.rs.rsov.test;
-
-import android.content.Context;
-import android.renderscript.Allocation;
-import android.renderscript.Element;
-import android.renderscript.RenderScript;
-import android.renderscript.Type;
-import android.util.Log;
-
-public class UT_global_query extends UnitTest {
-    protected UT_global_query(RSoVTestCore rstc, Context ctx) {
-        super(rstc, "global_query", ctx);
-    }
-
-    private boolean Test(int width, int height, int depth) {
-        RenderScript pRS = RenderScript.create(mCtx);
-        ScriptC_global_query s = new ScriptC_global_query(pRS);
-
-        Type.Builder typeBuilder = new Type.Builder(pRS, Element.I32(pRS));
-        typeBuilder.setX(width);
-        if (height > 0) {
-            typeBuilder.setY(height);
-            if (depth > 0) {
-                typeBuilder.setZ(depth);
-            }
-        }
-
-        if (depth < 1) {
-            depth = 1;
-        }
-
-        if (height < 1) {
-            height = 1;
-        }
-
-        Allocation G = Allocation.createTyped(pRS, typeBuilder.create());
-        Allocation dummy = Allocation.createTyped(pRS, typeBuilder.create());
-        Allocation R = Allocation.createTyped(pRS, typeBuilder.create());
-
-        int g[] = new int[width * height * depth];
-        int d[] = new int[width * height * depth];
-        int r[] = new int[width * height * depth];
-
-        java.util.Random rand = new java.util.Random();
-
-        for (int i = 0; i < width * height * depth; i++) {
-            g[i] = rand.nextInt(123456);
-            d[i] = rand.nextInt(123456);
-        }
-
-        G.copyFrom(g);
-        dummy.copyFrom(d);
-
-        s.set_g(G);
-
-        s.forEach_getDim(dummy, R);
-
-        R.copyTo(r);
-
-        R.destroy();
-        dummy.destroy();
-        G.destroy();
-
-        pRS.finish();
-        pRS.destroy();
-
-        boolean failed = false;
-        for (int i = 0; i < width * height * depth; i++) {
-            if (r[i] != width) {
-                Log.e(name, "expects " + width + " for element " + i +
-                      ". got " + r[i]);
-                failed = true;
-                break;
-            }
-        }
-
-        return !failed;
-    }
-
-    public void run() {
-        final int X = 96;
-
-        if (Test(X, 0, 0)) {
-            passTest();
-            return;
-        }
-
-        failTest();
-    }
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_invert.java b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_invert.java
deleted file mode 100644
index 017aa06..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_invert.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-package com.android.rs.rsov.test;
-
-import android.content.Context;
-import android.renderscript.Allocation;
-import android.renderscript.Element;
-import android.renderscript.RenderScript;
-import android.renderscript.Type;
-import android.util.Log;
-
-public class UT_invert extends UnitTest {
-    protected UT_invert(RSoVTestCore rstc, Context ctx) {
-        super(rstc, "invert", ctx);
-    }
-
-    private boolean Test(int width, int height, int depth) {
-        RenderScript pRS = RenderScript.create(mCtx);
-        ScriptC_invert s = new ScriptC_invert(pRS);
-
-        Type.Builder typeBuilder = new Type.Builder(pRS, Element.F32_4(pRS));
-        typeBuilder.setX(width);
-        if (height > 0) {
-            typeBuilder.setY(height);
-            if (depth > 0) {
-                typeBuilder.setZ(depth);
-            }
-        }
-
-        if (depth < 1) {
-            depth = 1;
-        }
-
-        if (height < 1) {
-            height = 1;
-        }
-
-        Allocation A = Allocation.createTyped(pRS, typeBuilder.create());
-        Allocation B = Allocation.createTyped(pRS, typeBuilder.create());
-
-        float a[] = new float[width * height * depth * 4];
-        float b[] = new float[width * height * depth * 4];
-
-        java.util.Random rand = new java.util.Random();
-
-        for (int i = 0; i < width * height * depth * 4; i++) {
-            a[i] = rand.nextFloat();
-        }
-
-        A.copyFrom(a);
-
-        s.forEach_invert(A, B);
-
-        B.copyTo(b);
-
-        B.destroy();
-        A.destroy();
-
-        pRS.finish();
-        pRS.destroy();
-
-        boolean failed = false;
-        for (int i = 0; i < width * height * depth * 4; i++) {
-            if (b[i] != 1.0f - a[i]) {
-                Log.e(name, "expects " + (1.0f - a[i]) + " for element " + i + 
-                      ". got " + b[i]);
-                failed = true;
-                break;
-            }
-        }
-
-        return !failed;
-    }
-
-    public void run() {
-        final int X = 96;
-        final int Y = 64;
-        final int Z = 32;
-
-        if (Test(X, 0, 0) && Test(X, Y, 0)) {
-            passTest();
-            return;
-        }
-
-        failTest();
-    }
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_modulo.java b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_modulo.java
deleted file mode 100644
index bb55612..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_modulo.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-package com.android.rs.rsov.test;
-
-import android.content.Context;
-import android.renderscript.Allocation;
-import android.renderscript.Element;
-import android.renderscript.RenderScript;
-import android.renderscript.Type;
-import android.util.Log;
-
-public class UT_modulo extends UnitTest {
-    private Allocation A;
-    private Allocation B;
-    private final int X = 96;
-    private final int Y = 64;
-
-    protected UT_modulo(RSoVTestCore rstc, Context ctx) {
-        super(rstc, "modulo", ctx);
-    }
-
-    private void initializeGlobals(RenderScript RS, ScriptC_modulo s) {
-        Type.Builder typeBuilder = new Type.Builder(RS, Element.I32(RS));
-        typeBuilder.setX(X);
-        typeBuilder.setY(Y);
-
-        A = Allocation.createTyped(RS, typeBuilder.create());
-        B = Allocation.createTyped(RS, typeBuilder.create());
-        return;
-    }
-
-    public void run() {
-        RenderScript pRS = RenderScript.create(mCtx);
-        ScriptC_modulo s = new ScriptC_modulo(pRS);
-
-        initializeGlobals(pRS, s);
-
-        int a[] = new int[X*Y];
-        int b[] = new int[X*Y];
-
-        java.util.Random rand = new java.util.Random();
-
-        for (int i = 0; i < X * Y; i++) {
-            a[i] = rand.nextInt(65536);
-        }
-
-        A.copyFrom(a);
-
-        s.forEach_modulo(A, B);
-
-        B.copyTo(b);
-
-        pRS.finish();
-        pRS.destroy();
-
-        boolean failed = false;
-        for (int i = 0; i < X * Y; i++) {
-            int expected = a[i] % 256;
-            if (b[i] != expected) {
-                Log.e(name, "expects " + expected + " got " + b[i]);
-                failed = true;
-                break;
-            }
-        }
-
-        if (failed) {
-            failTest();
-        } else {
-            passTest();
-        }
-    }
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_multi_input.java b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_multi_input.java
deleted file mode 100644
index ebb3853..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_multi_input.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-package com.android.rs.rsov.test;
-
-import android.content.Context;
-import android.renderscript.Allocation;
-import android.renderscript.Element;
-import android.renderscript.RenderScript;
-import android.renderscript.Type;
-import android.util.Log;
-
-public class UT_multi_input extends UnitTest {
-    private Allocation Ain0;
-    private Allocation Ain1;
-
-    private Allocation Out0;
-
-    private final int Xdim = 100;
-    private final float tolerance = 1e-6f;
-
-    protected UT_multi_input(RSoVTestCore rstc, Context ctx) {
-        super(rstc, "Foreach Multi-input", ctx);
-    }
-
-    private void initializeGlobals(RenderScript RS, ScriptC_multi_input s) {
-        Type.Builder floatBuilder = new Type.Builder(RS, Element.F32(RS));
-
-        floatBuilder.setX(Xdim);
-
-        Ain0 = Allocation.createTyped(RS, floatBuilder.create());
-        Ain1 = Allocation.createTyped(RS, floatBuilder.create());
-        Out0 = Allocation.createTyped(RS, floatBuilder.create());
-        return;
-    }
-
-    public void run() {
-        RenderScript pRS = RenderScript.create(mCtx);
-        ScriptC_multi_input s = new ScriptC_multi_input(pRS);
-
-        initializeGlobals(pRS, s);
-
-        float a[] = new float[Xdim];
-        float b[] = new float[Xdim];
-
-
-        java.util.Random rand = new java.util.Random();
-
-        for (int i = 0; i < Xdim; i++) {
-            a[i] = rand.nextFloat();
-            b[i] = rand.nextFloat();
-        }
-
-        Ain0.copyFrom(a);
-        Ain1.copyFrom(b);
-
-        s.forEach_sum2(Ain0, Ain1, Out0);
-
-        float out0[] = new float[Xdim];
-        float ain0[] = new float[Xdim];
-        float ain1[] = new float[Xdim];
-        Ain0.copyTo(ain0);
-        Ain1.copyTo(ain1);
-        Out0.copyTo(out0);
-
-        pRS.finish();
-        pRS.destroy();
-
-        boolean failed = false;
-        for (int i = 0; i < Xdim; i++) {
-            if (ain0[i] != a[i]) {
-                Log.e(name, "Ain0 was " + a[i] + " but changed to " + ain0[i]);
-                failed = true;
-                break;
-            }
-            if (ain1[i] != b[i]) {
-                Log.e(name, "Ain1 was " + b[i] + " but changed to " + ain1[i]);
-                failed = true;
-                break;
-            }
-            if ((a[i] + b[i] - out0[i]) > tolerance) {
-                float expected = a[i]+b[i];
-                Log.e(name, "expects " + expected + " got " + out0[i]);
-                failed = true;
-                break;
-            }
-        }
-
-        if (failed) {
-            failTest();
-        } else {
-            passTest();
-        }
-    }
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_multi_kernel.java b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_multi_kernel.java
deleted file mode 100644
index 980e6e5..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UT_multi_kernel.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-package com.android.rs.rsov.test;
-
-import android.content.Context;
-import android.renderscript.Allocation;
-import android.renderscript.Element;
-import android.renderscript.RenderScript;
-import android.renderscript.Type;
-import android.util.Log;
-
-public class UT_multi_kernel extends UnitTest {
-    protected UT_multi_kernel(RSoVTestCore rstc, Context ctx) {
-        super(rstc, "multi_kernel", ctx);
-    }
-
-    private boolean Test(int width, int height, int depth) {
-        RenderScript pRS = RenderScript.create(mCtx);
-        ScriptC_multi_kernel s = new ScriptC_multi_kernel(pRS);
-
-        Type.Builder typeBuilder = new Type.Builder(pRS, Element.F32_4(pRS));
-        typeBuilder.setX(width);
-        if (height > 0) {
-            typeBuilder.setY(height);
-            if (depth > 0) {
-                typeBuilder.setZ(depth);
-            }
-        }
-
-        if (depth < 1) {
-            depth = 1;
-        }
-
-        if (height < 1) {
-            height = 1;
-        }
-
-        Allocation A = Allocation.createTyped(pRS, typeBuilder.create());
-        Allocation B = Allocation.createTyped(pRS, typeBuilder.create());
-
-        float a[] = new float[width * height * depth * 4];
-        float b[] = new float[width * height * depth * 4];
-
-        java.util.Random rand = new java.util.Random(0xcafebabe);
-
-        for (int i = 0; i < width * height * depth * 4; i++) {
-            a[i] = rand.nextFloat();
-        }
-
-        A.copyFrom(a);
-
-        s.forEach_invert(A, B);
-        s.forEach_scalebytwo(B, A);
-        s.forEach_scalebythree(A, B);
-
-        B.copyTo(b);
-
-        B.destroy();
-        A.destroy();
-
-        pRS.finish();
-        pRS.destroy();
-
-        boolean failed = false;
-        for (int i = 0; i < width * height * depth * 4; i++) {
-            if (b[i] != 3.0f * 2.0f * (1.0f - a[i])) {
-                Log.e(name, "expects " + 3.0f * 2.0f * (1.0f - a[i]) + " for element "
-                      + i + ". got " + b[i]);
-                failed = true;
-                break;
-            }
-        }
-
-        return !failed;
-    }
-
-    public void run() {
-        final int X = 96;
-        final int Y = 64;
-        final int Z = 32;
-
-        if (Test(X, 0, 0) && Test(X, Y, 0)) {
-            passTest();
-            return;
-        }
-
-        failTest();
-    }
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UnitTest.java b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UnitTest.java
deleted file mode 100644
index f69a96a..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/UnitTest.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-package com.android.rs.rsov.test;
-
-import android.content.Context;
-import android.renderscript.RenderScript.RSMessageHandler;
-import android.util.Log;
-
-public class UnitTest extends Thread {
-    public String name;
-    private int result;
-    private ScriptField_ListAllocs_s.Item mItem;
-    private RSoVTestCore mRSTC;
-    private boolean msgHandled;
-    protected Context mCtx;
-
-    /* These constants must match those in shared.rsh */
-    public static final int RS_MSG_TEST_PASSED = 100;
-    public static final int RS_MSG_TEST_FAILED = 101;
-    public static final int TEST_PASSED = 1;
-    public static final int TEST_FAILED = -1;
-
-    private static int numTests = 0;
-    public int testID;
-
-    protected UnitTest(RSoVTestCore rstc, String n, int initResult, Context ctx) {
-        super();
-        mRSTC = rstc;
-        name = n;
-        msgHandled = false;
-        mCtx = ctx;
-        result = initResult;
-        testID = numTests++;
-    }
-
-    protected UnitTest(RSoVTestCore rstc, String n, Context ctx) {
-        this(rstc, n, 0, ctx);
-    }
-
-    protected UnitTest(RSoVTestCore rstc, Context ctx) {
-        this(rstc, "<Unknown>", ctx);
-    }
-
-    protected UnitTest(Context ctx) {
-        this(null, ctx);
-    }
-
-    protected void _RS_ASSERT(String message, boolean b) {
-        if (b == false) {
-            Log.e(name, message + " FAILED");
-            failTest();
-        }
-    }
-
-    private void updateUI() {
-        msgHandled = true;
-        if (mItem != null) {
-            mItem.result = result;
-            if (mRSTC != null) {
-                // Add null check for mRSTC, for instrumentation tests.
-                try {
-                    mRSTC.refreshTestResults();
-                } catch (IllegalStateException e) {
-                /* Ignore the case where our message receiver has been
-                   disconnected. This happens when we leave the application
-                   before it finishes running all of the unit tests. */
-                }
-            }
-        }
-    }
-
-    protected RSMessageHandler mRsMessage = new RSMessageHandler() {
-        public void run() {
-            if (result == 0) {
-                switch (mID) {
-                    case RS_MSG_TEST_PASSED:
-                        result = TEST_PASSED;
-                        break;
-                    case RS_MSG_TEST_FAILED:
-                        result = TEST_FAILED;
-                        break;
-                    default:
-                        RSoVTest.log("Unit test got unexpected message");
-                        return;
-                }
-            }
-
-            updateUI();
-        }
-    };
-
-    public void waitForMessage() {
-        while (!msgHandled) {
-            yield();
-        }
-    }
-
-    public int getResult() {
-        return result;
-    }
-
-    public void failTest() {
-        result = TEST_FAILED;
-        updateUI();
-    }
-
-    public void passTest() {
-        if (result != TEST_FAILED) {
-            result = TEST_PASSED;
-        }
-        updateUI();
-    }
-
-    public String toString() {
-        String out = name;
-        if (result == TEST_PASSED) {
-            out += " - PASSED";
-        } else if (result == TEST_FAILED) {
-            out += " - FAILED";
-        }
-        return out;
-    }
-
-    public void setItem(ScriptField_ListAllocs_s.Item item) {
-        mItem = item;
-    }
-
-    public void run() {
-        /* This method needs to be implemented for each subclass */
-        if (mRSTC != null) {
-            mRSTC.refreshTestResults();
-        }
-    }
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global.rsh b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global.rsh
deleted file mode 100644
index 6e799b5..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global.rsh
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include "utils.rsh"
-
-#define DEFINE_TEST(T)                                      \
-  T g_##T=7, notUsed_##T;                                   \
-  /* Test Allocations in between other global variables */  \
-  rs_allocation allocNotUsed_##T;                           \
-  /* Test statics in between other global variables */      \
-  static T static_##T;                                      \
-  /* Test taking addresses of globals */                    \
-  static T *ptr1_##T;                                       \
-  static T *ptr2_##T;                                       \
-  T __attribute__((kernel)) T##_kernel1(T in) {             \
-    return g_##T;                                           \
-  }                                                         \
-  T __attribute__((kernel)) T##_kernel2(T in) {             \
-    return *ptr1_##T + *ptr2_##T;                           \
-  }                                                         \
-  void T##_test_init(rs_allocation a) {                     \
-    /* Test static local variable */                        \
-    rsForEach(T##_kernel1, a, a);                           \
-    T actual = get_##T(a, 19);                              \
-    if (!checkEq((T)(7), actual)) {                         \
-      rsDebug("failed "#T, actual);                         \
-      rsSendToClientBlocking(RS_MSG_TEST_FAILED);           \
-      return;                                               \
-    }                                                       \
-    rsDebug("succeeded "#T, actual);                        \
-    rsSendToClientBlocking(RS_MSG_TEST_PASSED);             \
-  }                                                         \
-  void T##_test(rs_allocation a, T expected) {              \
-    /* Test static local variable */                        \
-    static T localStatic;                                   \
-    localStatic = g_##T;                                    \
-    static_##T = localStatic;                               \
-    ptr1_##T = &g_##T;                                      \
-    ptr2_##T = &static_##T;                                 \
-    rsForEach(T##_kernel2, a, a);                           \
-    T actual = get_##T(a, 19);                              \
-    if (!checkEq(expected * 2, actual)) {                   \
-      rsDebug("failed "#T, actual);                         \
-      rsSendToClientBlocking(RS_MSG_TEST_FAILED);           \
-      return;                                               \
-    }                                                       \
-    rsDebug("succeeded "#T, actual);                        \
-    rsSendToClientBlocking(RS_MSG_TEST_PASSED);             \
-  }
-
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global_float.rs b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global_float.rs
deleted file mode 100644
index 3da31dc..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global_float.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.rsov.test)
-
-#include "global.rsh"
-
-HANDLE_TYPE(float)
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global_int.rs b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global_int.rs
deleted file mode 100644
index ce1ef3e..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global_int.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.rsov.test)
-
-#include "global.rsh"
-
-HANDLE_TYPE(int)
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global_query.rs b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global_query.rs
deleted file mode 100644
index c15a0b9..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/global_query.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.rsov.test)
-
-rs_allocation g;
-
-int32_t RS_KERNEL getDim(int32_t dummy) {
-    return rsAllocationGetDimX(g);
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/invert.rs b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/invert.rs
deleted file mode 100644
index eb89da2..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/invert.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.rsov.test)
-
-float4 RS_KERNEL invert(float4 a) {
-    return 1.0f - a;
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/modulo.rs b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/modulo.rs
deleted file mode 100644
index 410dccf..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/modulo.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.rsov.test)
-
-int RS_KERNEL modulo(int a) {
-    return a % 256;
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/multi_input.rs b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/multi_input.rs
deleted file mode 100644
index a05fa5b..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/multi_input.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.rsov.test)
-
-float RS_KERNEL sum2(float in0, float in1, uint32_t x) {
-    return in0 + in1;
-}
-
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/multi_kernel.rs b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/multi_kernel.rs
deleted file mode 100644
index 93af5a6..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/multi_kernel.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.rsov.test)
-
-float4 RS_KERNEL invert(float4 a) {
-    return 1.0f - a;
-}
-
-float4 RS_KERNEL scalebytwo(float4 a) {
-    return 2.0f * a;
-}
-
-float4 RS_KERNEL scalebythree(float4 a) {
-    return 3.0f * a;
-}
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/rslist.rs b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/rslist.rs
deleted file mode 100644
index 2d5fa59..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/rslist.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// 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.
-
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.rsov.test)
-
-typedef struct ListAllocs_s {
-    rs_allocation text;
-    int result;
-} ListAllocs;
-
-ListAllocs *gList;
-
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/shared.rsh b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/shared.rsh
deleted file mode 100644
index 481e874..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/shared.rsh
+++ /dev/null
@@ -1,116 +0,0 @@
-#pragma version(1)
-
-#pragma rs java_package_name(com.android.rs.rsov.test)
-
-typedef struct TestResult_s {
-    rs_allocation name;
-    bool pass;
-    float score;
-    int64_t time;
-} TestResult;
-//TestResult *g_results;
-
-static int64_t g_time;
-
-static inline void start(void) {
-    g_time = rsUptimeMillis();
-}
-
-static inline float end(uint32_t idx) {
-    int64_t t = rsUptimeMillis() - g_time;
-    //g_results[idx].time = t;
-    //rsDebug("test time", (int)t);
-    return ((float)t) / 1000.f;
-}
-
-#define _RS_ASSERT(b) \
-do { \
-    if (!(b)) { \
-        failed = true; \
-        rsDebug(#b " FAILED", 0); \
-    } \
-\
-} while (0)
-
-#define _RS_ASSERT_EQU(e1, e2) \
-  (((e1) != (e2)) ? (failed = true, rsDebug(#e1 " != " #e2, (e1), (e2)), false) : true)
-
-static const int iposinf = 0x7f800000;
-static const int ineginf = 0xff800000;
-
-static inline const float posinf() {
-    float f = *((float*)&iposinf);
-    return f;
-}
-
-static inline const float neginf() {
-    float f = *((float*)&ineginf);
-    return f;
-}
-
-static inline bool isposinf(float f) {
-    int i = *((int*)(void*)&f);
-    return (i == iposinf);
-}
-
-static inline bool isneginf(float f) {
-    int i = *((int*)(void*)&f);
-    return (i == ineginf);
-}
-
-static inline bool isnan(float f) {
-    int i = *((int*)(void*)&f);
-    return (((i & 0x7f800000) == 0x7f800000) && (i & 0x007fffff));
-}
-
-static inline bool isposzero(float f) {
-    int i = *((int*)(void*)&f);
-    return (i == 0x00000000);
-}
-
-static inline bool isnegzero(float f) {
-    int i = *((int*)(void*)&f);
-    return (i == 0x80000000);
-}
-
-static inline bool iszero(float f) {
-    return isposzero(f) || isnegzero(f);
-}
-
-/* Absolute epsilon used for floats.  Value is similar to float.h. */
-#ifndef FLT_EPSILON
-#define FLT_EPSILON 1.19e7f
-#endif
-/* Max ULPs while still being considered "equal".  Only used when this number
-   of ULPs is of a greater size than FLT_EPSILON. */
-#define FLT_MAX_ULP 1
-
-/* Calculate the difference in ULPs between the two values.  (Return zero on
-   perfect equality.) */
-static inline int float_dist(float f1, float f2) {
-    return *((int *)(&f1)) - *((int *)(&f2));
-}
-
-/* Check if two floats are essentially equal.  Will fail with some values
-   due to design.  (Validate using FLT_EPSILON or similar if necessary.) */
-static inline bool float_almost_equal(float f1, float f2) {
-    int *i1 = (int*)(&f1);
-    int *i2 = (int*)(&f2);
-
-    // Check for sign equality
-    if ( ((*i1 >> 31) == 0) != ((*i2 >> 31) == 0) ) {
-        // Handle signed zeroes
-        if (f1 == f2)
-            return true;
-        return false;
-    }
-
-    // Check with ULP distance
-    if (float_dist(f1, f2) > FLT_MAX_ULP)
-        return false;
-    return true;
-}
-
-/* These constants must match those in UnitTest.java */
-static const int RS_MSG_TEST_PASSED = 100;
-static const int RS_MSG_TEST_FAILED = 101;
diff --git a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/utils.rsh b/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/utils.rsh
deleted file mode 100644
index 08be49c..0000000
--- a/rsov/tests/RSoVTest/src/com/android/rs/rsov/test/utils.rsh
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef UTILS_RSH
-#define UTILS_RSH
-
-#define RS_MSG_TEST_PASSED 100
-#define RS_MSG_TEST_FAILED 101
-
-#define DEFINE_CHECK(T)                                                 \
-  static int __attribute__((overloadable))                              \
-  checkEq(T expected, T actual) {                                       \
-    return (expected == actual);                                        \
-  }
-
-#define DEFINE_CHECK2(T)                                                \
-  static int __attribute__((overloadable))                              \
-  checkEq(T##2 expected, T##2 actual) {                                 \
-    return (expected.x == actual.x && expected.y == actual.y);          \
-  }
-
-#define DEFINE_CHECK4(T)                                                \
-  static int __attribute__((overloadable))                              \
-  checkEq(T##4 expected, T##4 actual) {                                 \
-    return (expected.x == actual.x &&                                   \
-            expected.y == actual.y &&                                   \
-            expected.z == actual.z &&                                   \
-            expected.w == actual.w);                                    \
-  }
-
-#define DEFINE_GET(T)                           \
-  static T __attribute__((overloadable))        \
-  get_##T(rs_allocation a, int x) {             \
-    return rsGetElementAt_##T(a, x);            \
-  }
-
-#define HANDLE_TYPE(T)                                   \
-  DEFINE_GET(T)                                          \
-  DEFINE_CHECK(T)                                        \
-  DEFINE_TEST(T)                                         \
-  DEFINE_GET(T##2)                                       \
-  DEFINE_CHECK2(T)                                       \
-  DEFINE_TEST(T##2)                                      \
-  DEFINE_GET(T##4)                                       \
-  DEFINE_CHECK4(T)                                       \
-  DEFINE_TEST(T##4)                                      \
-
-#endif  // UTILS_RSH