| 1319 | } |
| 1320 | |
| 1321 | llvm::Value* CodegenStrOrCollValueGetLen(LlvmCodeGen* codegen, LlvmBuilder* builder, |
| 1322 | llvm::Value* str_or_coll_value_addr, const string& name = "") { |
| 1323 | if (str_or_coll_value_addr->getType() == |
| 1324 | codegen->GetStructType<StringValue>()->getPointerTo()) { |
| 1325 | llvm::Function* str_len_fn = codegen->GetFunction( |
| 1326 | IRFunction::STRING_VALUE_LEN, false); |
| 1327 | return builder->CreateCall(str_len_fn, |
| 1328 | llvm::ArrayRef<llvm::Value*>({str_or_coll_value_addr}), name); |
| 1329 | } else { |
| 1330 | DCHECK(str_or_coll_value_addr->getType() == |
| 1331 | codegen->GetStructType<CollectionValue>()->getPointerTo()); |
| 1332 | llvm::Value* len_addr = builder->CreateStructGEP(nullptr, str_or_coll_value_addr, |
| 1333 | COLL_VALUE_LEN_IDX, name + "_addr"); |
| 1334 | return builder->CreateLoad(len_addr, name); |
| 1335 | } |
| 1336 | } |
| 1337 | |
| 1338 | llvm::Value* CodegenCollValueSetPtr(LlvmCodeGen* codegen, LlvmBuilder* builder, |
| 1339 | llvm::Value* str_or_coll_value, llvm::Value* ptr, const string& name = "") { |
no test coverage detected