Esempio n. 1
0
  IR JIT(IR code)
  {
    SMDiagnostic errors;
    string parser_errors;
    ParseAssemblyString(code.assembly.c_str(),master.Program,errors,Context);
	if(master.debug)
	{
	  cerr << "Code:\n" << code.assembly << endl;
	}
    llvm::Function* entryfn = master.Engine->FindFunctionNamed("entry");
    if(entryfn == NULL)
      nerror("ERROR: Couldn't find program entry point.");
    if(!errors.getMessage().empty())
    {
      entryfn->eraseFromParent();
      nerror("IR Parsed with errors: ",errors.getMessage(),"\nCode: \n",code.assembly);
    }
    if(verifyModule(*master.Program,ReturnStatusAction,&parser_errors))
    {
      entryfn->eraseFromParent();
      nerror("IR Parser Error: ",parser_errors);
    }
    master.Passes.run(*master.Program);
	if(master.debug)
	{
	  cerr << "\nIR:" << endl;
	  master.Program->dump();
	}
    return code;
  }
Esempio n. 2
0
VALUE
llvm_module_read_assembly(VALUE self, VALUE assembly) {
  Check_Type(assembly, T_STRING);

  ParseError e;
  Module *module = ParseAssemblyString(
    StringValuePtr(assembly),
    LLVM_MODULE(self),
    e
  );
  //TODO How do we handle errors?
  return Data_Wrap_Struct(cLLVMModule, NULL, NULL, module);
}
Esempio n. 3
0
void CodeGeneratorTest::ParseAssembly(const char *Assembly) {
  this->assembly = assembly;

  M = new Module("Module", getGlobalContext());

  SMDiagnostic Error;
  bool Parsed = ParseAssemblyString(Assembly, M, Error, M->getContext()) == M;

  std::string errMsg;
  raw_string_ostream os(errMsg);
  Error.print("", os);

  if (!Parsed) {
    // A failure here means that the test itself is buggy.
    report_fatal_error(os.str().c_str());
  }

  F = M->getFunction("test");
  if (F == NULL)
    report_fatal_error("Test must have a function named @test");
}