| 1302 | constexpr int COLL_VALUE_LEN_IDX = 1; |
| 1303 | |
| 1304 | llvm::Value* CodegenStrOrCollValueGetPtr(LlvmCodeGen* codegen, LlvmBuilder* builder, |
| 1305 | llvm::Value* str_or_coll_value_addr, const string& name = "") { |
| 1306 | if (str_or_coll_value_addr->getType() == |
| 1307 | codegen->GetStructType<StringValue>()->getPointerTo()) { |
| 1308 | llvm::Function* str_ptr_fn = codegen->GetFunction( |
| 1309 | IRFunction::STRING_VALUE_PTR, false); |
| 1310 | return builder->CreateCall(str_ptr_fn, |
| 1311 | llvm::ArrayRef<llvm::Value*>({str_or_coll_value_addr}), name); |
| 1312 | } else { |
| 1313 | DCHECK(str_or_coll_value_addr->getType() == |
| 1314 | codegen->GetStructType<CollectionValue>()->getPointerTo()); |
| 1315 | llvm::Value* ptr_addr = builder->CreateStructGEP(nullptr, str_or_coll_value_addr, |
| 1316 | COLL_VALUE_PTR_IDX, name + "_addr"); |
| 1317 | return builder->CreateLoad(ptr_addr, name); |
| 1318 | } |
| 1319 | } |
| 1320 | |
| 1321 | llvm::Value* CodegenStrOrCollValueGetLen(LlvmCodeGen* codegen, LlvmBuilder* builder, |
| 1322 | llvm::Value* str_or_coll_value_addr, const string& name = "") { |
no test coverage detected