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));