1 /* 2 * Copyright 2012, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "bcc/AndroidBitcode/ABCCompiler.h" 18 19 #include <llvm/IR/Module.h> 20 #include <llvm/PassManager.h> 21 #include <llvm/IR/DataLayout.h> 22 #include <llvm/Target/TargetMachine.h> 23 24 #include "bcc/AndroidBitcode/ABCCompilerDriver.h" 25 #include "bcc/AndroidBitcode/ABCExpandVAArgPass.h" 26 #include "bcc/Script.h" 27 #include "bcc/Source.h" 28 29 30 namespace bcc { 31 beforeAddCodeGenPasses(Script & pScript,llvm::PassManager & pPM)32bool ABCCompiler::beforeAddCodeGenPasses(Script &pScript, 33 llvm::PassManager &pPM) { 34 llvm::PassManager pm; 35 llvm::Module &module = pScript.getSource().getModule(); 36 const llvm::TargetMachine &tm = getTargetMachine(); 37 llvm::DataLayout *data_layout = 38 new (std::nothrow) llvm::DataLayout(*(tm.getDataLayout())); 39 40 if (data_layout == NULL) { 41 return false; 42 } 43 44 pm.add(data_layout); 45 pm.add(mDriver.createExpandVAArgPass()); 46 pm.run(module); 47 48 return true; 49 } 50 51 } // namespace bcc 52