MCPcopy Create free account
hub / github.com/chigraph/chigraph / codegen

Method codegen

libchigraph/src/LangModule.cpp:270–298  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

268 }
269
270 Result codegen(
271 size_t /*execInputID*/, const llvm::DebugLoc& nodeLocation,
272 const std::vector<llvm::Value*>& io, llvm::BasicBlock* codegenInto,
273 const std::vector<llvm::BasicBlock*>& outputBlocks,
274 std::unordered_map<std::string, std::shared_ptr<void>>& /*compileCache*/) override {
275 assert(io.size() == 1 && codegenInto != nullptr && outputBlocks.size() == 1);
276
277 llvm::IRBuilder<> builder(codegenInto);
278 builder.SetCurrentDebugLocation(nodeLocation);
279
280 auto global = builder.CreateGlobalString(literalString);
281
282 auto const0ID = llvm::ConstantInt::get(context().llvmContext(), llvm::APInt(32, 0, false));
283 auto gep = builder.CreateGEP(global,
284// LLVM 3.6- doesn't have std::initializer_list constructor to llvm::ArrayRef
285#if LLVM_VERSION_LESS_EQUAL(3, 6)
286 std::vector<llvm::Value*> {
287 { const0ID, const0ID }
288 }
289#else
290 { const0ID, const0ID }
291#endif
292 );
293 builder.CreateStore(gep, io[0], false);
294
295 builder.CreateBr(outputBlocks[0]);
296
297 return {};
298 }
299
300 std::unique_ptr<NodeType> clone() const override {
301 return std::make_unique<StringLiteralNodeType>(*this);

Callers

nothing calls this directly

Calls 1

getFunction · 0.85

Tested by

no test coverage detected