Home | History | Annotate | Download | only in service

Lines Matching refs:ir_builder_

227         return ir_builder_->CreateIntCast(
235 ir_builder_),
236 ir_builder_);
239 module_, ir_builder_);
247 ir_builder_->CreateSIToFP(operand_value, to_ir_component_type),
254 ir_builder_->CreateUIToFP(operand_value, to_ir_component_type),
271 return ir_builder_->CreateBitCast(
289 auto cmp = ir_builder_->CreateICmpSGE(operand_value, zero);
290 return ir_builder_->CreateSelect(cmp, operand_value,
291 ir_builder_->CreateNeg(operand_value));
302 auto cmp = ir_builder_->CreateICmpEQ(operand_value, zero);
304 auto ashr = ir_builder_->CreateAShr(operand_value,
306 return ir_builder_->CreateSelect(cmp, zero,
307 ir_builder_->CreateOr(ashr, 1));
309 return ir_builder_->CreateSelect(cmp, zero,
314 return ir_builder_->CreateNeg(operand_value);
321 return ir_builder_->CreateZExt(
322 ir_builder_->CreateNot(ir_builder_->CreateTrunc(
323 operand_value, ir_builder_->getInt1Ty())),
326 return ir_builder_->CreateNot(operand_value);
354 ir_builder_->CreateFPCast(
361 operand_value = EmitBF16ToF32(operand_value, ir_builder_);
368 return EmitF32ToBF16(operand_value, ir_builder_);
371 return ir_builder_->CreateFPCast(
375 return ir_builder_->CreateFPToSI(
379 return ir_builder_->CreateFPToUI(
395 return ir_builder_->CreateBitCast(
417 ir_builder_);
421 ir_builder_);
425 ir_builder_);
429 ir_builder_);
434 auto oeq = ir_builder_->CreateFCmpOEQ(operand_value, zero);
435 auto olt = ir_builder_->CreateFCmpOLT(operand_value, zero);
436 return ir_builder_->CreateSelect(
438 ir_builder_->CreateSelect(olt, llvm::ConstantFP::get(type, -1.0),
445 ir_builder_->CreateFCmpOEQ(operand_value, operand_value);
447 llvm::Intrinsic::fabs, {operand_value}, {type}, ir_builder_);
449 auto not_infinite = ir_builder_->CreateFCmpONE(abs_value, infinity);
450 auto result_i1 = ir_builder_->CreateAnd(equal_self, not_infinite);
451 return ir_builder_->CreateZExt(
455 return ir_builder_->CreateFNeg(operand_value);
475 auto sum_sq = ir_builder_->CreateFAdd(ir_builder_->CreateFMul(a, a),
476 ir_builder_->CreateFMul(b, b));
481 op, ir_builder_->CreateFMul(one_half, log_sum_sq), angle);
497 ir_builder_->CreateFPCast(EmitExtractReal(operand_value),
499 ir_builder_->CreateFPCast(EmitExtractImag(operand_value),
510 return EmitComposeComplex(op, ir_builder_->CreateFMul(exp_a, cos_b),
511 ir_builder_->CreateFMul(exp_a, sin_b));
526 ir_builder_->CreateFMul(llvm::ConstantFP::get(type, 0.5), exp_b);
528 ir_builder_->CreateFDiv(llvm::ConstantFP::get(type, 0.5), exp_b);
533 ir_builder_->CreateFMul(
534 cos_a, ir_builder_->CreateFAdd(half_exp_neg_b, half_exp_b)),
535 ir_builder_->CreateFMul(
536 sin_a, ir_builder_->CreateFSub(half_exp_neg_b, half_exp_b)));
553 ir_builder_->CreateFMul(llvm::ConstantFP::get(type, 0.5), exp_b);
555 ir_builder_->CreateFDiv(llvm::ConstantFP::get(type, 0.5), exp_b);
560 ir_builder_->CreateFMul(
561 sin_a, ir_builder_->CreateFAdd(half_exp_b, half_exp_neg_b)),
562 ir_builder_->CreateFMul(
563 cos_a, ir_builder_->CreateFSub(half_exp_b, half_exp_neg_b)));
591 auto exp_neg_a = ir_builder_->CreateFDiv(
593 auto exp_2a_minus_exp_neg_2a = ir_builder_->CreateFSub(
594 ir_builder_->CreateFMul(exp_a, exp_a),
595 ir_builder_->CreateFMul(exp_neg_a, exp_neg_a));
596 auto cos_b_sq = ir_builder_->CreateFMul(cos_b, cos_b);
597 auto sin_b_sq = ir_builder_->CreateFMul(sin_b, sin_b);
598 auto real_num = ir_builder_->CreateFAdd(
599 ir_builder_->CreateFMul(cos_b_sq, exp_2a_minus_exp_neg_2a),
600 ir_builder_->CreateFMul(sin_b_sq, exp_2a_minus_exp_neg_2a));
601 auto cos_b_sin_b = ir_builder_->CreateFMul(cos_b, sin_b);
602 auto exp_a_plus_exp_neg_a = ir_builder_->CreateFAdd(exp_a, exp_neg_a);
604 ir_builder_->CreateFMul(exp_a_plus_exp_neg_a, exp_a_plus_exp_neg_a);
605 auto exp_a_minus_exp_neg_a = ir_builder_->CreateFSub(exp_a, exp_neg_a);
607 ir_builder_->CreateFMul(exp_a_minus_exp_neg_a, exp_a_minus_exp_neg_a);
608 auto imag_num = ir_builder_->CreateFMul(
609 cos_b_sin_b, ir_builder_->CreateFSub(exp_a_plus_exp_neg_a_sq,
611 auto denom = ir_builder_->CreateFAdd(
612 ir_builder_->CreateFMul(cos_b_sq, exp_a_plus_exp_neg_a_sq),
613 ir_builder_->CreateFMul(sin_b_sq, exp_a_minus_exp_neg_a_sq));
614 return EmitComposeComplex(op, ir_builder_->CreateFDiv(real_num, denom),
615 ir_builder_->CreateFDiv(imag_num, denom));
618 auto sum_sq = ir_builder_->CreateFAdd(
619 ir_builder_->CreateFMul(EmitExtractReal(operand_value),
621 ir_builder_->CreateFMul(EmitExtractImag(operand_value),
624 {sum_sq->getType()}, ir_builder_);
627 auto sum_sq = ir_builder_->CreateFAdd(
628 ir_builder_->CreateFMul(EmitExtractReal(operand_value),
630 ir_builder_->CreateFMul(EmitExtractImag(operand_value),
633 llvm::Intrinsic::sqrt, {sum_sq}, {sum_sq->getType()}, ir_builder_);
636 auto oeq = ir_builder_->CreateFCmpOEQ(cplx_abs, zero);
637 return ir_builder_->CreateSelect(
641 ir_builder_->CreateFDiv(EmitExtractReal(operand_value), cplx_abs),
642 ir_builder_->CreateFDiv(EmitExtractImag(operand_value),
647 op, ir_builder_->CreateFNeg(EmitExtractReal(operand_value)),
648 ir_builder_->CreateFNeg(EmitExtractImag(operand_value)));
682 return ir_builder_->CreateFAdd(lhs_value, rhs_value);
684 return ir_builder_->CreateFSub(lhs_value, rhs_value);
686 return ir_builder_->CreateFMul(lhs_value, rhs_value);
688 return ir_builder_->CreateFDiv(lhs_value, rhs_value);
690 return ir_builder_->CreateFRem(lhs_value, rhs_value);
700 rhs_value, ir_builder_);
703 rhs_value, ir_builder_);
706 rhs_value, ir_builder_);
709 rhs_value, ir_builder_);
712 rhs_value, ir_builder_);
715 rhs_value, ir_builder_);
738 ir_builder_->CreateFAdd(EmitExtractReal(lhs_value),
740 ir_builder_->CreateFAdd(EmitExtractImag(lhs_value),
745 ir_builder_->CreateFSub(EmitExtractReal(lhs_value),
747 ir_builder_->CreateFSub(EmitExtractImag(lhs_value),
752 ir_builder_->CreateFSub(
753 ir_builder_->CreateFMul(EmitExtractReal(lhs_value),
755 ir_builder_->CreateFMul(EmitExtractImag(lhs_value),
757 ir_builder_->CreateFAdd(
758 ir_builder_->CreateFMul(EmitExtractReal(lhs_value),
760 ir_builder_->CreateFMul(EmitExtractImag(lhs_value),
765 auto rhs_sum_sq = ir_builder_->CreateFAdd(
766 ir_builder_->CreateFMul(EmitExtractReal(rhs_value),
768 ir_builder_->CreateFMul(EmitExtractImag(rhs_value),
772 auto oeq = ir_builder_->CreateFCmpOEQ(rhs_sum_sq, zero);
774 ir_builder_->CreateFDiv(EmitExtractReal(lhs_value), zero);
776 ir_builder_->CreateFDiv(EmitExtractImag(lhs_value), zero);
777 return ir_builder_->CreateSelect(
781 ir_builder_->CreateFDiv(
782 ir_builder_->CreateFAdd(
783 ir_builder_->CreateFMul(EmitExtractReal(lhs_value),
785 ir_builder_->CreateFMul(EmitExtractImag(lhs_value),
788 ir_builder_->CreateFDiv(
789 ir_builder_->CreateFSub(
790 ir_builder_->CreateFMul(EmitExtractImag(lhs_value),
792 ir_builder_->CreateFMul(EmitExtractReal(lhs_value),
804 return ir_builder_->CreateAnd(
807 EmitExtractReal(rhs_value), ir_builder_),
810 EmitExtractImag(rhs_value), ir_builder_));
812 return ir_builder_->CreateOr(
815 EmitExtractReal(rhs_value), ir_builder_),
818 EmitExtractImag(rhs_value), ir_builder_));
830 auto aa_p_bb = ir_builder_->CreateFAdd(ir_builder_->CreateFMul(a, a),
831 ir_builder_->CreateFMul(b, b));
833 auto half_c = ir_builder_->CreateFMul(one_half, c);
837 auto neg_d = ir_builder_->CreateFNeg(d);
839 auto neg_d_arg_lhs = ir_builder_->CreateFMul(neg_d, arg_lhs);
843 ir_builder_->CreateFMul(aa_p_bb_to_half_c, e_to_neg_d_arg_lhs);
845 auto half_d = ir_builder_->CreateFMul(one_half, d);
847 ir_builder_->CreateFAdd(ir_builder_->CreateFMul(c, arg_lhs),
848 ir_builder_->CreateFMul(half_d, ln_aa_p_bb));
851 return EmitComposeComplex(op, ir_builder_->CreateFMul(coeff, cos_q),
852 ir_builder_->CreateFMul(coeff, sin_q));
862 return llvm_ir::EmitFloatMax(lhs_value, rhs_value, ir_builder_);
867 return llvm_ir::EmitFloatMin(lhs_value, rhs_value, ir_builder_);
879 return llvm::ConstantFP::get(ir_builder_->getFloatTy(), f);
886 p = ir_builder_->CreateFAdd(ir_builder_->CreateFMul(p, w),
905 module_, llvm::Intrinsic::log, {ir_builder_->getFloatTy()});
907 llvm::Value* w = ir_builder_->CreateFNeg(ir_builder_->CreateCall(
909 {ir_builder_->CreateFMul(ir_builder_->CreateFSub(getFloat(1.0f), x),
910 ir_builder_->CreateFAdd(getFloat(1.0f), x))}));
913 ir_builder_->getFloatTy(), "p.addr", ir_builder_);
916 llvm_ir::EmitIfThenElse(ir_builder_->CreateFCmpOLT(w, getFloat(5.0f)),
917 "w_less_than_five", ir_builder_);
919 SetToFirstInsertPoint(if_data.true_block, ir_builder_);
921 llvm::Value* lw = ir_builder_->CreateFSub(w, getFloat(2.5f));
927 ir_builder_->CreateStore(p, p_addr);
931 SetToFirstInsertPoint(if_data.false_block, ir_builder_);
934 module_, llvm::Intrinsic::sqrt, {ir_builder_->getFloatTy()});
936 llvm::Value* gw = ir_builder_->CreateFSub(
937 ir_builder_->CreateCall(sqrtf_fn, {w}), getFloat(3.0f));
943 ir_builder_->CreateStore(p, p_addr);
946 SetToFirstInsertPoint(if_data.after_block, ir_builder_);
947 llvm::Value* p = ir_builder_->CreateLoad(p_addr);
948 return ir_builder_->CreateFMul(p, x);
956 return EmitErfInv(prim_type, ir_builder_->CreateFSub(one, value));
962 {value->getType()}, ir_builder_);
968 {value->getType()}, ir_builder_);
974 {value->getType()}, ir_builder_);
980 {value->getType()}, ir_builder_);
987 {lhs->getType()}, ir_builder_);
1003 ir_builder_);
1012 return ir_builder_->CreateAdd(lhs_value, rhs_value);
1014 return ir_builder_->CreateSub(lhs_value, rhs_value);
1016 return ir_builder_->CreateMul(lhs_value, rhs_value);
1018 return is_signed ? ir_builder_->CreateSDiv(lhs_value, rhs_value)
1019 : ir_builder_->CreateUDiv(lhs_value, rhs_value);
1021 return is_signed ? ir_builder_->CreateSRem(lhs_value, rhs_value)
1022 : ir_builder_->CreateURem(lhs_value, rhs_value);
1025 rhs_value, ir_builder_);
1028 rhs_value, ir_builder_);
1032 lhs_value, rhs_value, ir_builder_);
1036 lhs_value, rhs_value, ir_builder_);
1040 lhs_value, rhs_value, ir_builder_);
1044 lhs_value, rhs_value, ir_builder_);
1050 return ir_builder_->CreateAnd(lhs_value, rhs_value);
1052 return ir_builder_->CreateOr(lhs_value, rhs_value);
1054 return ir_builder_->CreateShl(lhs_value, rhs_value);
1056 return ir_builder_->CreateAShr(lhs_value, rhs_value);
1058 return ir_builder_->CreateLShr(lhs_value, rhs_value);
1068 return ir_builder_->CreateSelect(
1069 ir_builder_->CreateICmp(
1078 return ir_builder_->CreateSelect(
1079 ir_builder_->CreateICmp(
1112 source_index.push_back(ir_builder_->getInt64(0));
1128 llvm::Value* multiplier = ir_builder_->getInt(
1130 llvm::Value* increment = ir_builder_->getInt(
1152 /*Ty=*/ir_builder_->getInt64Ty(),
1155 /*Initializer=*/ir_builder_->getInt64(random_value()),
1161 /*Ty=*/ir_builder_->getInt64Ty(),
1164 /*Initializer=*/ir_builder_->getInt64(graph_seed),
1170 increment = ir_builder_->CreateAdd(increment,
1171 ir_builder_->CreateShl(EmitThreadId(), 1));
1179 llvm::Value* state0 = ir_builder_->CreateZExtOrTrunc(
1180 ir_builder_->CreateLoad(state_ptr0, "state0"),
1181 ir_builder_->getInt128Ty());
1182 llvm::Value* state1 = ir_builder_->CreateShl(
1183 ir_builder_->CreateZExtOrTrunc(
1184 ir_builder_->CreateLoad(state_ptr1, "state1"),
1185 ir_builder_->getInt128Ty()),
1187 llvm::Value* state = ir_builder_->CreateOr(state0, state1);
1188 llvm::Value* updated = ir_builder_->CreateAdd(
1189 ir_builder_->CreateMul(state, multiplier), increment);
1190 ir_builder_->CreateStore(
1191 ir_builder_->CreateTrunc(updated, ir_builder_->getInt64Ty()),
1193 ir_builder_->CreateStore(
1194 ir_builder_->CreateTrunc(ir_builder_->CreateLShr(updated, 64),
1195 ir_builder_->getInt64Ty()),
1199 ir_builder_->CreateTrunc(
1200 ir_builder_->CreateXor(state, ir_builder_->CreateLShr(state, 64)),
1201 ir_builder_->getInt64Ty()),
1202 ir_builder_->CreateTrunc(ir_builder_->CreateLShr(state, 122),
1203 ir_builder_->getInt64Ty()),
1204 ir_builder_);
1208 return ir_builder_->CreateFDiv(
1209 ir_builder_->CreateUIToFP(get_next_i64(), param_ir_type),
1221 return ir_builder_->CreateFAdd(
1222 ir_builder_->CreateFMul(ir_builder_->CreateFSub(q, p),
1226 auto r = ir_builder_->CreateSub(q, p);
1228 llvm::Intrinsic::ctlz, {r, ir_builder_->getInt1(true)},
1229 {param_ir_type}, ir_builder_);
1230 auto in_block = ir_builder_->GetInsertBlock();
1234 CHECK_EQ(ir_builder_->GetInsertPoint() == in_block->end(),
1240 if (ir_builder_->GetInsertPoint() == in_block->end()) {
1242 nullptr, IrName(hlo, "rng_body"), ir_builder_);
1244 nullptr, IrName(hlo, "rng_out"), ir_builder_);
1248 ir_builder_->GetInsertPoint(), "rng_body");
1250 ir_builder_->GetInsertPoint(), "rng_out");
1254 SetToFirstInsertPoint(body_block, ir_builder_);
1255 auto random = ir_builder_->CreateAnd(
1256 ir_builder_->CreateZExtOrTrunc(get_next_i64(), param_ir_type),
1257 ir_builder_->CreateLShr(llvm::ConstantInt::get(param_ir_type, ~0),
1260 ir_builder_->CreateICmpULT(random, r),
1262 SetToFirstInsertPoint(out_block, ir_builder_);
1263 return ir_builder_->CreateAdd(
1264 p, ir_builder_->CreateSelect(
1265 ir_builder_->CreateICmpEQ(p, q),
1277 ir_builder_->CreateFMul(
1280 return ir_builder_->CreateFAdd(ir_builder_->CreateFMul(r, s), m);
1365 return ir_builder_->CreateSelect(
1366 ir_builder_->CreateTrunc(pred_value, ir_builder_->getInt1Ty()),
1408 llvm::BasicBlock* init_block = ir_builder_->GetInsertBlock();
1412 CHECK_EQ(ir_builder_->GetInsertPoint() == init_block->end(),
1416 if (ir_builder_->GetInsertPoint() == init_block->end()) {
1418 /*insert_before=*/nullptr, IrName(hlo, "merge"), ir_builder_);
1421 ir_builder_->GetInsertPoint(), AsStringRef(IrName(hlo, "merge")));
1425 llvm_ir::SetToFirstInsertPoint(exit_block, ir_builder_);
1427 ir_builder_->CreatePHI(llvm_ir::PrimitiveTypeToIrType(
1430 auto prior_insert_point = ir_builder_->GetInsertPoint();
1432 ir_builder_->SetInsertPoint(init_block);
1439 ir_builder_);
1442 ir_builder_);
1446 ir_builder_->CreateCondBr(
1447 ir_builder_->CreateICmpULT(source_index[concat_dim],
1453 ir_builder_->SetInsertPoint(
1457 output->addIncoming(value, ir_builder_->GetInsertBlock());
1461 ir_builder_->SetInsertPoint(false_block);
1463 ir_builder_->CreateSub(source_index[concat_dim], concat_dim_size);
1466 ir_builder_->CreateUnreachable();
1467 ir_builder_->SetInsertPoint(exit_block, prior_insert_point);
1476 source_index[dim] = ir_builder_->CreateSub(
1501 /*strides=*/hlo->slice_strides(), /*builder=*/ir_builder_);
1512 llvm_ir::IrArray::Index dim_index(1, ir_builder_->getInt64(i));
1528 llvm::Value* start_index = ir_builder_->CreateZExtOrBitCast(
1530 input_index[i] = ir_builder_->CreateURem(
1531 ir_builder_->CreateAdd(start_index, index[i]), dim_size);
1552 llvm::Value* slice_intersection = ir_builder_->getTrue();
1556 llvm_ir::IrArray::Index dim_index(1, ir_builder_->getInt64(i));
1561 slice_start_index[i] = ir_builder_->CreateZExtOrBitCast(
1576 ir_builder_->CreateURem(slice_start_index[i], input_dim_size);
1578 ir_builder_->CreateAdd(slice_start_index[i], update_dim_size);
1582 ir_builder_->CreateICmpULE(slice_limit_index[i], input_dim_size);
1584 llvm_ir::EmitIfThenElse(in_bounds, "in_bounds", ir_builder_);
1587 SetToFirstInsertPoint(if_in_bounds.true_block, ir_builder_);
1590 llvm::Value* slice_intersection_in_bounds = ir_builder_->CreateAnd(
1592 ir_builder_->CreateICmpSGE(index[i], slice_start_index[i]),
1594 slice_intersection_in_bounds = ir_builder_->CreateAnd(
1596 ir_builder_->CreateICmpSLT(index[i], slice_limit_index[i]),
1600 SetToFirstInsertPoint(if_in_bounds.false_block, ir_builder_);
1603 llvm::Value* index_wraps = ir_builder_->CreateICmpSLT(
1605 ir_builder_->CreateURem(slice_limit_index[i], input_dim_size));
1606 llvm::Value* slice_intersection_or = ir_builder_->CreateOr(
1607 ir_builder_->CreateICmpSGE(index[i], slice_start_index[i]),
1610 ir_builder_->CreateAnd(slice_intersection, slice_intersection_or,
1615 llvm_ir::EmitIfThenElse(index_wraps, "adjust_start", ir_builder_);
1617 ir_builder_);
1619 ir_builder_->CreateSub(slice_start_index[i], input_dim_size);
1621 ir_builder_);
1623 ir_builder_->CreatePHI(slice_start_index_adjusted_oob->getType(),
1633 SetToFirstInsertPoint(if_in_bounds.after_block, ir_builder_);
1635 ir_builder_->CreatePHI(slice_intersection->getType(), 2);
1644 ir_builder_->CreatePHI(slice_start_index[i]->getType(), 2);
1657 "ret_value_addr", ir_builder_);
1659 slice_intersection, "slice_intersection", ir_builder_);
1662 SetToFirstInsertPoint(if_data.true_block, ir_builder_);
1669 update_index[i] = ir_builder_->CreateURem(
1670 ir_builder_->CreateSub(index[i], slice_start_index_adjusted[i]),
1675 ir_builder_->CreateStore(true_value, ret_value_addr);
1678 SetToFirstInsertPoint(if_data.false_block, ir_builder_);
1681 ir_builder_->CreateStore(false_value, ret_value_addr);
1683 SetToFirstInsertPoint(if_data.after_block, ir_builder_);
1684 return ir_builder_->CreateLoad(ret_value_addr);
1692 hlo->shape(), operand->shape(), ir_builder_));
1700 ir_builder_));
1708 llvm::Value* in_bounds = ir_builder_->getTrue();
1714 index[i] = ir_builder_->CreateSub(
1716 in_bounds = ir_builder_->CreateAnd(
1718 ir_builder_->CreateICmpSGE(index[i], index_typed_const(0)),
1720 in_bounds = ir_builder_->CreateAnd(
1722 ir_builder_->CreateICmpEQ(
1724 ir_builder_->CreateURem(
1728 index[i] = ir_builder_->CreateSDiv(
1730 in_bounds = ir_builder_->CreateAnd(
1732 ir_builder_->CreateICmpSLT(
1746 "pad_result_addr", ir_builder_);
1748 llvm_ir::EmitIfThenElse(in_bounds, "in_bounds", ir_builder_);
1749 SetToFirstInsertPoint(if_data.true_block, ir_builder_);
1752 ir_builder_->CreateStore(operand_value, ret_value_addr);
1754 SetToFirstInsertPoint(if_data.false_block, ir_builder_);
1757 ir_builder_->CreateStore(padding_value, ret_value_addr);
1759 SetToFirstInsertPoint(if_data.after_block, ir_builder_);
1764 return ir_builder_->CreateLoad(ret_value_addr);
1779 IrName(hlo, "inner"), ir_builder_->getInt64(0),
1780 ir_builder_->getInt64(contracted_dim_size),
1781 ir_builder_->getInt64(1), ir_builder_);
1784 ir_builder_);
1789 primitive_type_llvm, "dot_acc", ir_builder_);
1790 ir_builder_->CreateStore(
1794 SetToFirstInsertPoint(inner_loop->GetBodyBasicBlock(), ir_builder_);
1816 ir_builder_->CreateLoad(accumulator_alloca);
1821 llvm::Value* product_real = ir_builder_->CreateFSub(
1822 ir_builder_->CreateFMul(EmitExtractReal(lhs_value),
1824 ir_builder_->CreateFMul(EmitExtractImag(lhs_value),
1826 llvm::Value* product_imag = ir_builder_->CreateFAdd(
1827 ir_builder_->CreateFMul(EmitExtractReal(lhs_value),
1829 ir_builder_->CreateFMul(EmitExtractImag(lhs_value),
1831 next_accumulator = ir_builder_->CreateInsertValue(
1833 ir_builder_->CreateFAdd(EmitExtractReal(current_accumulator),
1836 next_accumulator = ir_builder_->CreateInsertValue(
1838 ir_builder_->CreateFAdd(EmitExtractImag(current_accumulator),
1842 next_accumulator = ir_builder_->CreateFAdd(
1844 ir_builder_->CreateFMul(lhs_value, rhs_value));
1846 next_accumulator = ir_builder_->CreateAdd(
1848 ir_builder_->CreateMul(lhs_value, rhs_value));
1850 ir_builder_->CreateStore(next_accumulator, accumulator_alloca);
1852 SetToFirstInsertPoint(inner_loop->GetExitBasicBlock(), ir_builder_);
1853 return ir_builder_->CreateLoad(accumulator_alloca);
1864 return ir_builder_->CreateExtractValue(value, {0});
1868 return ir_builder_->CreateExtractValue(value, {1});
1876 auto complex = ir_builder_->CreateInsertValue(
1879 complex = ir_builder_->CreateInsertValue(complex, imag, {1});