Mercurial > projects > ldc
comparison gen/toir.cpp @ 1395:6063ddfcf27d
Try to cut down reallocations when building string literals.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail com> |
---|---|
date | Mon, 18 May 2009 16:01:22 +0200 |
parents | 5575e0c07e1a |
children | e2cf1f67ca33 |
comparison
equal
deleted
inserted
replaced
1394:193ab3969920 | 1395:6063ddfcf27d |
---|---|
405 _init = llvm::ConstantArray::get(cont,true); | 405 _init = llvm::ConstantArray::get(cont,true); |
406 } | 406 } |
407 else if (cty->size() == 2) { | 407 else if (cty->size() == 2) { |
408 uint16_t* str = (uint16_t*)string; | 408 uint16_t* str = (uint16_t*)string; |
409 std::vector<LLConstant*> vals; | 409 std::vector<LLConstant*> vals; |
410 vals.reserve(len+1); | |
410 for(size_t i=0; i<len; ++i) { | 411 for(size_t i=0; i<len; ++i) { |
411 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; | 412 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; |
412 } | 413 } |
413 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); | 414 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); |
414 _init = llvm::ConstantArray::get(at,vals); | 415 _init = llvm::ConstantArray::get(at,vals); |
415 } | 416 } |
416 else if (cty->size() == 4) { | 417 else if (cty->size() == 4) { |
417 uint32_t* str = (uint32_t*)string; | 418 uint32_t* str = (uint32_t*)string; |
418 std::vector<LLConstant*> vals; | 419 std::vector<LLConstant*> vals; |
420 vals.reserve(len+1); | |
419 for(size_t i=0; i<len; ++i) { | 421 for(size_t i=0; i<len; ++i) { |
420 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; | 422 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; |
421 } | 423 } |
422 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); | 424 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); |
423 _init = llvm::ConstantArray::get(at,vals); | 425 _init = llvm::ConstantArray::get(at,vals); |
474 _init = llvm::ConstantArray::get(cont, nullterm); | 476 _init = llvm::ConstantArray::get(cont, nullterm); |
475 } | 477 } |
476 else if (cty->size() == 2) { | 478 else if (cty->size() == 2) { |
477 uint16_t* str = (uint16_t*)string; | 479 uint16_t* str = (uint16_t*)string; |
478 std::vector<LLConstant*> vals; | 480 std::vector<LLConstant*> vals; |
481 vals.reserve(len+1); | |
479 for(size_t i=0; i<len; ++i) { | 482 for(size_t i=0; i<len; ++i) { |
480 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; | 483 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; |
481 } | 484 } |
482 if (nullterm) | 485 if (nullterm) |
483 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); | 486 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); |
484 _init = llvm::ConstantArray::get(at,vals); | 487 _init = llvm::ConstantArray::get(at,vals); |
485 } | 488 } |
486 else if (cty->size() == 4) { | 489 else if (cty->size() == 4) { |
487 uint32_t* str = (uint32_t*)string; | 490 uint32_t* str = (uint32_t*)string; |
488 std::vector<LLConstant*> vals; | 491 std::vector<LLConstant*> vals; |
492 vals.reserve(len+1); | |
489 for(size_t i=0; i<len; ++i) { | 493 for(size_t i=0; i<len; ++i) { |
490 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; | 494 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; |
491 } | 495 } |
492 if (nullterm) | 496 if (nullterm) |
493 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); | 497 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); |