TBAA, separate different types of heap load/store.
Change-Id: I24dc2857db2985239e17d97fdd6463d7f2b54985
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index 193f570..d61c913 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -1866,7 +1866,7 @@
reg_value = EmitLoadDalvikReg(reg_index, kObject, kAccurate);
}
- irb_.CreateStore(reg_value, data_field_addr, kTBAAMemory);
+ irb_.CreateStore(reg_value, data_field_addr, kTBAAHeapArray);
data_field_addr =
irb_.CreatePtrDisp(data_field_addr, elem_size, field_type);
@@ -2283,7 +2283,7 @@
llvm::Value* array_elem_addr =
EmitArrayGEP(array_addr, index_value, elem_type, elem_jty);
- llvm::Value* array_elem_value = irb_.CreateLoad(array_elem_addr, kTBAAMemory);
+ llvm::Value* array_elem_value = irb_.CreateLoad(array_elem_addr, kTBAAHeapArray, elem_jty);
EmitStoreDalvikReg(dec_insn.vA, elem_jty, kArray, array_elem_value);
@@ -2319,7 +2319,7 @@
EmitMarkGCCard(new_value, array_addr);
}
- irb_.CreateStore(new_value, array_elem_addr, kTBAAMemory);
+ irb_.CreateStore(new_value, array_elem_addr, kTBAAHeapArray, elem_jty);
irb_.CreateBr(GetNextBasicBlock(dex_pc));
}
@@ -2380,7 +2380,7 @@
// TODO: Check is_volatile. We need to generate atomic load instruction
// when is_volatile is true.
- field_value = irb_.CreateLoad(field_addr, kTBAAMemory);
+ field_value = irb_.CreateLoad(field_addr, kTBAAHeapInstance, field_jty);
}
EmitStoreDalvikReg(dec_insn.vA, field_jty, kField, field_value);
@@ -2444,7 +2444,7 @@
// TODO: Check is_volatile. We need to generate atomic store instruction
// when is_volatile is true.
- irb_.CreateStore(new_value, field_addr, kTBAAMemory);
+ irb_.CreateStore(new_value, field_addr, kTBAAHeapInstance, field_jty);
if (field_jty == kObject) { // If put an object, mark the GC card table.
EmitMarkGCCard(new_value, object_addr);
@@ -2581,7 +2581,7 @@
// TODO: Check is_volatile. We need to generate atomic load instruction
// when is_volatile is true.
- static_field_value = irb_.CreateLoad(static_field_addr, kTBAAMemory);
+ static_field_value = irb_.CreateLoad(static_field_addr, kTBAAHeapStatic, field_jty);
}
EmitStoreDalvikReg(dec_insn.vA, field_jty, kField, static_field_value);
@@ -2660,7 +2660,7 @@
// TODO: Check is_volatile. We need to generate atomic store instruction
// when is_volatile is true.
- irb_.CreateStore(new_value, static_field_addr, kTBAAMemory);
+ irb_.CreateStore(new_value, static_field_addr, kTBAAHeapStatic, field_jty);
if (field_jty == kObject) { // If put an object, mark the GC card table.
EmitMarkGCCard(new_value, static_storage_addr);