Looks good, modulo small comments:<br><br><div class="gmail_quote">On Thu, Oct 27, 2011 at 3:11 AM, Will Dietz <span dir="ltr"><<a href="mailto:wdietz2@illinois.edu">wdietz2@illinois.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Inlined below.<br>
<br>
For now, keeping the "spawn two .inc" files approach since I'm not<br>
sure where else this code would live.<br>
<br>
~Will<br>
<br>
<br>
>From 84314ed791bfd85f1cb5a8d6be2c28dac09c6e7b Mon Sep 17 00:00:00 2001<br>
From: Will Dietz <<a href="mailto:w@wdtz.org">w@wdtz.org</a>><br>
Date: Wed, 26 Oct 2011 19:56:09 -0500<br>
Subject: [PATCH 2/3] Refactor runtime-specific JavaJIT code to separate<br>
files.<br>
<br>
---<br>
lib/J3/Compiler/JavaJIT.cpp | 235 +---------------------------------<br>
lib/J3/Compiler/JavaJITClasspath.inc | 228 +++++++++++++++++++++++++++++++++<br>
lib/J3/Compiler/JavaJITOpenJDK.inc | 4 +<br>
3 files changed, 239 insertions(+), 228 deletions(-)<br>
create mode 100644 lib/J3/Compiler/JavaJITClasspath.inc<br>
create mode 100644 lib/J3/Compiler/JavaJITOpenJDK.inc<br>
<br>
diff --git a/lib/J3/Compiler/JavaJIT.cpp b/lib/J3/Compiler/JavaJIT.cpp<br>
index 6509b96..f693d48 100644<br>
--- a/lib/J3/Compiler/JavaJIT.cpp<br>
+++ b/lib/J3/Compiler/JavaJIT.cpp<br>
@@ -2290,234 +2290,6 @@ void JavaJIT::invokeInterface(uint16 index) {<br>
}<br>
}<br>
<br>
-void JavaJIT::lowerArraycopy(std::vector<Value*>& args) {<br>
- Function* meth = TheCompiler->getMethod(upcalls->VMSystemArraycopy, NULL);<br>
-<br>
- Value* ptr_src = args[0];<br>
- Value* int32_start = args[1];<br>
- Value* ptr_dst = args[2];<br>
- Value* int32_start2 = args[3];<br>
- Value* int32_length = args[4];<br>
-<br>
- JITVerifyNull(ptr_src);<br>
- JITVerifyNull(ptr_dst);<br>
-<br>
- BasicBlock* label_entry = currentBlock;<br>
- BasicBlock* label_bb = createBasicBlock("bb");<br>
- BasicBlock* label_bb2 = createBasicBlock("bb2");<br>
- BasicBlock* label_bb4 = createBasicBlock("bb4");<br>
- BasicBlock* label_bb5 = createBasicBlock("bb5");<br>
- BasicBlock* label_bb12_preheader = createBasicBlock("bb12.preheader");<br>
- BasicBlock* label_bb7 = createBasicBlock("bb7");<br>
- BasicBlock* label_bb11 = createBasicBlock("bb11");<br>
- BasicBlock* label_memmove = createBasicBlock("memmove");<br>
- BasicBlock* label_backward = createBasicBlock("backward");<br>
- BasicBlock* label_return = createBasicBlock("return");<br>
-<br>
- BasicBlock* log_label_entry = createBasicBlock("log_entry");<br>
- BasicBlock* log_label_bb = createBasicBlock("log_bb");<br>
-<br>
- // Block entry (label_entry)<br>
- CallInst* ptr_16 = CallInst::Create(intrinsics->GetVTFunction, ptr_src, "",<br>
- label_entry);<br>
- CallInst* ptr_17 = CallInst::Create(intrinsics->GetVTFunction, ptr_dst, "",<br>
- label_entry);<br>
-<br>
- ICmpInst* int1_18 = new ICmpInst(*label_entry, ICmpInst::ICMP_EQ, ptr_16,<br>
- ptr_17, "");<br>
- BranchInst::Create(label_bb, label_bb2, int1_18, label_entry);<br>
-<br>
- // Block bb (label_bb)<br>
- currentBlock = label_bb;<br>
- CallInst* ptr_20 = CallInst::Create(intrinsics->GetClassFunction,<br>
ptr_src, "",<br>
- label_bb);<br>
- std::vector<Value*> ptr_21_indices;<br>
- ptr_21_indices.push_back(intrinsics->constantZero);<br>
- ptr_21_indices.push_back(intrinsics->OffsetAccessInCommonClassConstant);<br>
- Instruction* ptr_21 =<br>
- GetElementPtrInst::Create(ptr_20, ptr_21_indices, "", label_bb);<br>
- LoadInst* int32_22 = new LoadInst(ptr_21, "", false, label_bb);<br>
- Value* cmp = BinaryOperator::CreateAnd(int32_22,<br>
intrinsics->IsArrayConstant, "",<br>
- label_bb);<br>
- Value* zero = ConstantInt::get(Type::getInt16Ty(*llvmContext), 0);<br>
- ICmpInst* int1_23 = new ICmpInst(*label_bb, ICmpInst::ICMP_NE, cmp,<br>
zero, "");<br>
- BranchInst::Create(label_bb4, label_bb2, int1_23, label_bb);<br>
-<br>
-<br>
- // Block bb2 (label_bb2)<br>
- currentBlock = label_bb2;<br>
- invoke(meth, args, "", label_bb2);<br>
- BranchInst::Create(label_return, currentBlock);<br>
-<br>
-<br>
- // Block bb4 (label_bb4)<br>
- currentBlock = label_bb4;<br>
- BinaryOperator* int32_27 = BinaryOperator::Create(Instruction::Add,<br>
- int32_length, int32_start,<br>
- "", label_bb4);<br>
- Value* int32_28 = arraySize(ptr_src);<br>
-<br>
- ICmpInst* int1_29 = new ICmpInst(*label_bb4, ICmpInst::ICMP_ULE, int32_27,<br>
- int32_28, "");<br>
- BranchInst::Create(label_bb5, label_bb7, int1_29, label_bb4);<br>
-<br>
- // Block bb5 (label_bb5)<br>
- currentBlock = label_bb5;<br>
- BinaryOperator* int32_31 = BinaryOperator::Create(Instruction::Add,<br>
- int32_length, int32_start2,<br>
- "", label_bb5);<br>
- Value* int32_32 = arraySize(ptr_dst);<br>
-<br>
- ICmpInst* int1_33 = new ICmpInst(*label_bb5, ICmpInst::ICMP_ULE, int32_31,<br>
- int32_32, "");<br>
- BranchInst::Create(label_bb12_preheader, label_bb7, int1_33, label_bb5);<br>
-<br>
- // Block bb12.preheader (label_bb12_preheader)<br>
- currentBlock = label_bb12_preheader;<br>
- ICmpInst* int1_35 = new ICmpInst(*label_bb12_preheader, ICmpInst::ICMP_UGT,<br>
- int32_length, intrinsics->constantZero, "");<br>
- BranchInst::Create(log_label_entry, label_return, int1_35,<br>
label_bb12_preheader);<br>
-<br>
- // Block bb7 (label_bb7)<br>
- currentBlock = label_bb7;<br>
- Value* VTArgs[1] = { Constant::getNullValue(intrinsics->VTType) };<br>
- throwRuntimeException(intrinsics->ArrayStoreExceptionFunction, VTArgs, 1);<br>
-<br>
-<br>
-<br>
- // Block entry (label_entry)<br>
- currentBlock = log_label_entry;<br>
- Value* ptr_10_indices[2] = { intrinsics->constantZero,<br>
-<br>
intrinsics->OffsetBaseClassInArrayClassConstant };<br>
- Instruction* temp = new BitCastInst(ptr_20,<br>
intrinsics->JavaClassArrayType, "",<br>
- log_label_entry);<br>
- Instruction* ptr_10 = GetElementPtrInst::Create(temp, ptr_10_indices, "",<br>
- log_label_entry);<br>
-<br>
- LoadInst* ptr_11 = new LoadInst(ptr_10, "", false, log_label_entry);<br>
-<br>
- Value* ptr_12_indices[2] = { intrinsics->constantZero,<br>
- intrinsics->OffsetAccessInCommonClassConstant };<br>
- Instruction* ptr_12 = GetElementPtrInst::Create(ptr_11, ptr_12_indices, "",<br>
- log_label_entry);<br>
- LoadInst* int16_13 = new LoadInst(ptr_12, "", false, log_label_entry);<br>
-<br>
- BinaryOperator* int32_15 = BinaryOperator::Create(Instruction::And, int16_13,<br>
-<br>
intrinsics->IsPrimitiveConstant,<br>
- "", log_label_entry);<br>
- ICmpInst* int1_16 = new ICmpInst(*log_label_entry, ICmpInst::ICMP_EQ,<br>
- int32_15, zero, "");<br>
- BranchInst::Create(label_bb2, log_label_bb, int1_16, log_label_entry);<br>
-<br>
- // Block bb (log_label_bb)<br>
- currentBlock = log_label_bb;<br>
- Value* ptr_11_indices[2] = { intrinsics->constantZero,<br>
-<br>
intrinsics->OffsetLogSizeInPrimitiveClassConstant };<br>
- temp = new BitCastInst(ptr_11, intrinsics->JavaClassPrimitiveType, "",<br>
- log_label_bb);<br>
- GetElementPtrInst* ptr_18 = GetElementPtrInst::Create(temp, ptr_11_indices,<br>
- "", log_label_bb);<br>
- LoadInst* int32_20 = new LoadInst(ptr_18, "", false, log_label_bb);<br>
-<br>
- int32_start = BinaryOperator::CreateShl(int32_start, int32_20, "",<br>
- log_label_bb);<br>
- int32_start2 = BinaryOperator::CreateShl(int32_start2, int32_20, "",<br>
- log_label_bb);<br>
- int32_length = BinaryOperator::CreateShl(int32_length, int32_20, "",<br>
- log_label_bb);<br>
-<br>
- ptr_src = new BitCastInst(ptr_src, intrinsics->JavaArrayUInt8Type, "",<br>
- log_label_bb);<br>
-<br>
- ptr_dst = new BitCastInst(ptr_dst, intrinsics->JavaArrayUInt8Type, "",<br>
- log_label_bb);<br>
-<br>
- Value* indexes[3] = { intrinsics->constantZero,<br>
- intrinsics->JavaArrayElementsOffsetConstant,<br>
- int32_start };<br>
- Instruction* ptr_42 = GetElementPtrInst::Create(ptr_src, indexes,<br>
- "", log_label_bb);<br>
-<br>
- indexes[2] = int32_start2;<br>
- Instruction* ptr_44 = GetElementPtrInst::Create(ptr_dst, indexes,<br>
- "", log_label_bb);<br>
-<br>
- BranchInst::Create(label_memmove, log_label_bb);<br>
-<br>
- // Block memmove<br>
- currentBlock = label_memmove;<br>
- Value* src_int = new PtrToIntInst(ptr_42, intrinsics->pointerSizeType, "",<br>
- currentBlock);<br>
-<br>
- Value* dst_int = new PtrToIntInst(ptr_44, intrinsics->pointerSizeType, "",<br>
- currentBlock);<br>
-<br>
- cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_ULT, dst_int, src_int, "");<br>
-<br>
- Value* increment = SelectInst::Create(cmp, intrinsics->constantOne,<br>
- intrinsics->constantMinusOne, "",<br>
- currentBlock);<br>
- BranchInst::Create(label_bb11, label_backward, cmp, currentBlock);<br>
-<br>
- PHINode* phi_dst_ptr = PHINode::Create(ptr_44->getType(), 3, "", label_bb11);<br>
- PHINode* phi_src_ptr = PHINode::Create(ptr_44->getType(), 3, "", label_bb11);<br>
- phi_dst_ptr->addIncoming(ptr_44, currentBlock);<br>
- phi_src_ptr->addIncoming(ptr_42, currentBlock);<br>
-<br>
- // Block backward<br>
- currentBlock = label_backward;<br>
-<br>
- ptr_42 = GetElementPtrInst::Create(ptr_42, int32_length, "",<br>
- currentBlock);<br>
-<br>
- ptr_44 = GetElementPtrInst::Create(ptr_44, int32_length, "",<br>
- currentBlock);<br>
-<br>
- ptr_42 = GetElementPtrInst::Create(ptr_42, intrinsics->constantMinusOne, "",<br>
- currentBlock);<br>
-<br>
- ptr_44 = GetElementPtrInst::Create(ptr_44, intrinsics->constantMinusOne, "",<br>
- currentBlock);<br>
-<br>
- phi_dst_ptr->addIncoming(ptr_44, currentBlock);<br>
- phi_src_ptr->addIncoming(ptr_42, currentBlock);<br>
-<br>
- BranchInst::Create(label_bb11, currentBlock);<br>
-<br>
- // Block bb11 (label_bb11)<br>
- currentBlock = label_bb11;<br>
- Argument* fwdref_39 = new Argument(Type::getInt32Ty(*llvmContext));<br>
- PHINode* int32_i_016 = PHINode::Create(Type::getInt32Ty(*llvmContext), 2,<br>
- "i.016", label_bb11);<br>
- int32_i_016->addIncoming(fwdref_39, label_bb11);<br>
- int32_i_016->addIncoming(intrinsics->constantZero, log_label_bb);<br>
-<br>
- LoadInst* ptr_43 = new LoadInst(phi_src_ptr, "", false, label_bb11);<br>
- new StoreInst(ptr_43, phi_dst_ptr, false, label_bb11);<br>
-<br>
-<br>
- ptr_42 = GetElementPtrInst::Create(phi_src_ptr, increment, "",<br>
- label_bb11);<br>
-<br>
- ptr_44 = GetElementPtrInst::Create(phi_dst_ptr, increment, "",<br>
- label_bb11);<br>
- phi_dst_ptr->addIncoming(ptr_44, label_bb11);<br>
- phi_src_ptr->addIncoming(ptr_42, label_bb11);<br>
-<br>
- BinaryOperator* int32_indvar_next =<br>
- BinaryOperator::Create(Instruction::Add, int32_i_016,<br>
intrinsics->constantOne,<br>
- "indvar.next", label_bb11);<br>
- ICmpInst* int1_exitcond = new ICmpInst(*label_bb11, ICmpInst::ICMP_EQ,<br>
- int32_indvar_next, int32_length,<br>
- "exitcond");<br>
- BranchInst::Create(label_return, label_bb11, int1_exitcond, label_bb11);<br>
-<br>
- // Resolve Forward References<br>
- fwdref_39->replaceAllUsesWith(int32_indvar_next); delete fwdref_39;<br>
-<br>
- currentBlock = label_return;<br>
-}<br>
-<br>
DebugLoc JavaJIT::CreateLocation() {<br>
DebugLoc DL = DebugLoc::get(currentBytecodeIndex, 0, DbgSubprogram);<br>
return DL;<br>
@@ -2842,3 +2614,10 @@ void JavaJIT::finishExceptions() {<br>
}<br>
}<br>
}<br>
+<br>
+<br>
+#ifdef USE_OPENJDK<br>
+#include "JavaJITOpenJDK.inc"<br>
+#else<br>
+#include "JavaJITClasspath.inc"<br>
+#endif<br>
diff --git a/lib/J3/Compiler/JavaJITClasspath.inc<br>
b/lib/J3/Compiler/JavaJITClasspath.inc<br>
new file mode 100644<br>
index 0000000..1c6211d<br>
--- /dev/null<br>
+++ b/lib/J3/Compiler/JavaJITClasspath.inc<br>
@@ -0,0 +1,228 @@<br>
+<br>
+void JavaJIT::lowerArraycopy(std::vector<Value*>& args) {<br>
+ Function* meth = TheCompiler->getMethod(upcalls->VMSystemArraycopy, NULL);<br>
+<br>
+ Value* ptr_src = args[0];<br>
+ Value* int32_start = args[1];<br>
+ Value* ptr_dst = args[2];<br>
+ Value* int32_start2 = args[3];<br>
+ Value* int32_length = args[4];<br>
+<br>
+ JITVerifyNull(ptr_src);<br>
+ JITVerifyNull(ptr_dst);<br>
+<br>
+ BasicBlock* label_entry = currentBlock;<br>
+ BasicBlock* label_bb = createBasicBlock("bb");<br>
+ BasicBlock* label_bb2 = createBasicBlock("bb2");<br>
+ BasicBlock* label_bb4 = createBasicBlock("bb4");<br>
+ BasicBlock* label_bb5 = createBasicBlock("bb5");<br>
+ BasicBlock* label_bb12_preheader = createBasicBlock("bb12.preheader");<br>
+ BasicBlock* label_bb7 = createBasicBlock("bb7");<br>
+ BasicBlock* label_bb11 = createBasicBlock("bb11");<br>
+ BasicBlock* label_memmove = createBasicBlock("memmove");<br>
+ BasicBlock* label_backward = createBasicBlock("backward");<br>
+ BasicBlock* label_return = createBasicBlock("return");<br>
+<br>
+ BasicBlock* log_label_entry = createBasicBlock("log_entry");<br>
+ BasicBlock* log_label_bb = createBasicBlock("log_bb");<br>
+<br>
+ // Block entry (label_entry)<br>
+ CallInst* ptr_16 = CallInst::Create(intrinsics->GetVTFunction, ptr_src, "",<br>
+ label_entry);<br>
+ CallInst* ptr_17 = CallInst::Create(intrinsics->GetVTFunction, ptr_dst, "",<br>
+ label_entry);<br>
+<br>
+ ICmpInst* int1_18 = new ICmpInst(*label_entry, ICmpInst::ICMP_EQ, ptr_16,<br>
+ ptr_17, "");<br>
+ BranchInst::Create(label_bb, label_bb2, int1_18, label_entry);<br>
+<br>
+ // Block bb (label_bb)<br>
+ currentBlock = label_bb;<br>
+ CallInst* ptr_20 = CallInst::Create(intrinsics->GetClassFunction,<br>
ptr_src, "",<br>
+ label_bb);<br>
+ std::vector<Value*> ptr_21_indices;<br>
+ ptr_21_indices.push_back(intrinsics->constantZero);<br>
+ ptr_21_indices.push_back(intrinsics->OffsetAccessInCommonClassConstant);<br>
+ Instruction* ptr_21 =<br>
+ GetElementPtrInst::Create(ptr_20, ptr_21_indices, "", label_bb);<br>
+ LoadInst* int32_22 = new LoadInst(ptr_21, "", false, label_bb);<br>
+ Value* cmp = BinaryOperator::CreateAnd(int32_22,<br>
intrinsics->IsArrayConstant, "",<br>
+ label_bb);<br>
+ Value* zero = ConstantInt::get(Type::getInt16Ty(*llvmContext), 0);<br>
+ ICmpInst* int1_23 = new ICmpInst(*label_bb, ICmpInst::ICMP_NE, cmp,<br>
zero, "");<br>
+ BranchInst::Create(label_bb4, label_bb2, int1_23, label_bb);<br>
+<br>
+<br>
+ // Block bb2 (label_bb2)<br>
+ currentBlock = label_bb2;<br>
+ invoke(meth, args, "", label_bb2);<br>
+ BranchInst::Create(label_return, currentBlock);<br>
+<br>
+<br>
+ // Block bb4 (label_bb4)<br>
+ currentBlock = label_bb4;<br>
+ BinaryOperator* int32_27 = BinaryOperator::Create(Instruction::Add,<br>
+ int32_length, int32_start,<br>
+ "", label_bb4);<br>
+ Value* int32_28 = arraySize(ptr_src);<br>
+<br>
+ ICmpInst* int1_29 = new ICmpInst(*label_bb4, ICmpInst::ICMP_ULE, int32_27,<br>
+ int32_28, "");<br>
+ BranchInst::Create(label_bb5, label_bb7, int1_29, label_bb4);<br>
+<br>
+ // Block bb5 (label_bb5)<br>
+ currentBlock = label_bb5;<br>
+ BinaryOperator* int32_31 = BinaryOperator::Create(Instruction::Add,<br>
+ int32_length, int32_start2,<br>
+ "", label_bb5);<br>
+ Value* int32_32 = arraySize(ptr_dst);<br>
+<br>
+ ICmpInst* int1_33 = new ICmpInst(*label_bb5, ICmpInst::ICMP_ULE, int32_31,<br>
+ int32_32, "");<br>
+ BranchInst::Create(label_bb12_preheader, label_bb7, int1_33, label_bb5);<br>
+<br>
+ // Block bb12.preheader (label_bb12_preheader)<br>
+ currentBlock = label_bb12_preheader;<br>
+ ICmpInst* int1_35 = new ICmpInst(*label_bb12_preheader, ICmpInst::ICMP_UGT,<br>
+ int32_length, intrinsics->constantZero, "");<br>
+ BranchInst::Create(log_label_entry, label_return, int1_35,<br>
label_bb12_preheader);<br>
+<br>
+ // Block bb7 (label_bb7)<br>
+ currentBlock = label_bb7;<br>
+ Value* VTArgs[1] = { Constant::getNullValue(intrinsics->VTType) };<br>
+ throwRuntimeException(intrinsics->ArrayStoreExceptionFunction, VTArgs, 1);<br>
+<br>
+<br>
+<br>
+ // Block entry (label_entry)<br>
+ currentBlock = log_label_entry;<br>
+ Value* ptr_10_indices[2] = { intrinsics->constantZero,<br>
+<br>
intrinsics->OffsetBaseClassInArrayClassConstant };<br>
+ Instruction* temp = new BitCastInst(ptr_20,<br>
intrinsics->JavaClassArrayType, "",<br>
+ log_label_entry);<br>
+ Instruction* ptr_10 = GetElementPtrInst::Create(temp, ptr_10_indices, "",<br>
+ log_label_entry);<br>
+<br>
+ LoadInst* ptr_11 = new LoadInst(ptr_10, "", false, log_label_entry);<br>
+<br>
+ Value* ptr_12_indices[2] = { intrinsics->constantZero,<br>
+ intrinsics->OffsetAccessInCommonClassConstant };<br>
+ Instruction* ptr_12 = GetElementPtrInst::Create(ptr_11, ptr_12_indices, "",<br>
+ log_label_entry);<br>
+ LoadInst* int16_13 = new LoadInst(ptr_12, "", false, log_label_entry);<br>
+<br>
+ BinaryOperator* int32_15 = BinaryOperator::Create(Instruction::And, int16_13,<br>
+<br>
intrinsics->IsPrimitiveConstant,<br>
+ "", log_label_entry);<br>
+ ICmpInst* int1_16 = new ICmpInst(*log_label_entry, ICmpInst::ICMP_EQ,<br>
+ int32_15, zero, "");<br>
+ BranchInst::Create(label_bb2, log_label_bb, int1_16, log_label_entry);<br>
+<br>
+ // Block bb (log_label_bb)<br>
+ currentBlock = log_label_bb;<br>
+ Value* ptr_11_indices[2] = { intrinsics->constantZero,<br>
+<br>
intrinsics->OffsetLogSizeInPrimitiveClassConstant };<br>
+ temp = new BitCastInst(ptr_11, intrinsics->JavaClassPrimitiveType, "",<br>
+ log_label_bb);<br>
+ GetElementPtrInst* ptr_18 = GetElementPtrInst::Create(temp, ptr_11_indices,<br>
+ "", log_label_bb);<br>
+ LoadInst* int32_20 = new LoadInst(ptr_18, "", false, log_label_bb);<br>
+<br>
+ int32_start = BinaryOperator::CreateShl(int32_start, int32_20, "",<br>
+ log_label_bb);<br>
+ int32_start2 = BinaryOperator::CreateShl(int32_start2, int32_20, "",<br>
+ log_label_bb);<br>
+ int32_length = BinaryOperator::CreateShl(int32_length, int32_20, "",<br>
+ log_label_bb);<br>
+<br>
+ ptr_src = new BitCastInst(ptr_src, intrinsics->JavaArrayUInt8Type, "",<br>
+ log_label_bb);<br>
+<br>
+ ptr_dst = new BitCastInst(ptr_dst, intrinsics->JavaArrayUInt8Type, "",<br>
+ log_label_bb);<br>
+<br>
+ Value* indexes[3] = { intrinsics->constantZero,<br>
+ intrinsics->JavaArrayElementsOffsetConstant,<br>
+ int32_start };<br>
+ Instruction* ptr_42 = GetElementPtrInst::Create(ptr_src, indexes,<br>
+ "", log_label_bb);<br>
+<br>
+ indexes[2] = int32_start2;<br>
+ Instruction* ptr_44 = GetElementPtrInst::Create(ptr_dst, indexes,<br>
+ "", log_label_bb);<br>
+<br>
+ BranchInst::Create(label_memmove, log_label_bb);<br>
+<br>
+ // Block memmove<br>
+ currentBlock = label_memmove;<br>
+ Value* src_int = new PtrToIntInst(ptr_42, intrinsics->pointerSizeType, "",<br>
+ currentBlock);<br>
+<br>
+ Value* dst_int = new PtrToIntInst(ptr_44, intrinsics->pointerSizeType, "",<br>
+ currentBlock);<br>
+<br>
+ cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_ULT, dst_int, src_int, "");<br>
+<br>
+ Value* increment = SelectInst::Create(cmp, intrinsics->constantOne,<br>
+ intrinsics->constantMinusOne, "",<br>
+ currentBlock);<br>
+ BranchInst::Create(label_bb11, label_backward, cmp, currentBlock);<br>
+<br>
+ PHINode* phi_dst_ptr = PHINode::Create(ptr_44->getType(), 3, "", label_bb11);<br>
+ PHINode* phi_src_ptr = PHINode::Create(ptr_44->getType(), 3, "", label_bb11);<br>
+ phi_dst_ptr->addIncoming(ptr_44, currentBlock);<br>
+ phi_src_ptr->addIncoming(ptr_42, currentBlock);<br>
+<br>
+ // Block backward<br>
+ currentBlock = label_backward;<br>
+<br>
+ ptr_42 = GetElementPtrInst::Create(ptr_42, int32_length, "",<br>
+ currentBlock);<br>
+<br>
+ ptr_44 = GetElementPtrInst::Create(ptr_44, int32_length, "",<br>
+ currentBlock);<br>
+<br>
+ ptr_42 = GetElementPtrInst::Create(ptr_42, intrinsics->constantMinusOne, "",<br>
+ currentBlock);<br>
+<br>
+ ptr_44 = GetElementPtrInst::Create(ptr_44, intrinsics->constantMinusOne, "",<br>
+ currentBlock);<br>
+<br>
+ phi_dst_ptr->addIncoming(ptr_44, currentBlock);<br>
+ phi_src_ptr->addIncoming(ptr_42, currentBlock);<br>
+<br>
+ BranchInst::Create(label_bb11, currentBlock);<br>
+<br>
+ // Block bb11 (label_bb11)<br>
+ currentBlock = label_bb11;<br>
+ Argument* fwdref_39 = new Argument(Type::getInt32Ty(*llvmContext));<br>
+ PHINode* int32_i_016 = PHINode::Create(Type::getInt32Ty(*llvmContext), 2,<br>
+ "i.016", label_bb11);<br>
+ int32_i_016->addIncoming(fwdref_39, label_bb11);<br>
+ int32_i_016->addIncoming(intrinsics->constantZero, log_label_bb);<br>
+<br>
+ LoadInst* ptr_43 = new LoadInst(phi_src_ptr, "", false, label_bb11);<br>
+ new StoreInst(ptr_43, phi_dst_ptr, false, label_bb11);<br>
+<br>
+<br>
+ ptr_42 = GetElementPtrInst::Create(phi_src_ptr, increment, "",<br>
+ label_bb11);<br>
+<br>
+ ptr_44 = GetElementPtrInst::Create(phi_dst_ptr, increment, "",<br>
+ label_bb11);<br>
+ phi_dst_ptr->addIncoming(ptr_44, label_bb11);<br>
+ phi_src_ptr->addIncoming(ptr_42, label_bb11);<br>
+<br>
+ BinaryOperator* int32_indvar_next =<br>
+ BinaryOperator::Create(Instruction::Add, int32_i_016,<br>
intrinsics->constantOne,<br>
+ "indvar.next", label_bb11);<br>
+ ICmpInst* int1_exitcond = new ICmpInst(*label_bb11, ICmpInst::ICMP_EQ,<br>
+ int32_indvar_next, int32_length,<br>
+ "exitcond");<br>
+ BranchInst::Create(label_return, label_bb11, int1_exitcond, label_bb11);<br>
+<br>
+ // Resolve Forward References<br>
+ fwdref_39->replaceAllUsesWith(int32_indvar_next); delete fwdref_39;<br>
+<br>
+ currentBlock = label_return;<br>
+}<br>
diff --git a/lib/J3/Compiler/JavaJITOpenJDK.inc<br>
b/lib/J3/Compiler/JavaJITOpenJDK.inc<br>
new file mode 100644<br>
index 0000000..6d80a9a<br>
--- /dev/null<br>
+++ b/lib/J3/Compiler/JavaJITOpenJDK.inc<br>
@@ -0,0 +1,4 @@<br></blockquote><div><br></div><div>Add copyright.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
+void JavaJIT::lowerArraycopy(std::vector<Value*>& args) {<br>
+ assert(0 && "Unable to lower array copy yet!");<br></blockquote><div><br></div><div>Change to UNIMPLEMENTED();</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
+}<br>
+<br>
<font color="#888888">--<br>
1.7.5.1<br>
_______________________________________________<br>
vmkit-commits mailing list<br>
<a href="mailto:vmkit-commits@cs.uiuc.edu">vmkit-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits</a><br>
</font></blockquote></div><br>