Add pointer arithmetic helper function.

Change-Id: I735295c715564093db6d6e6aaaeb05914e0e826e
diff --git a/src/compiler_llvm/ir_builder.h b/src/compiler_llvm/ir_builder.h
index 03ca2d7..2b4095c 100644
--- a/src/compiler_llvm/ir_builder.h
+++ b/src/compiler_llvm/ir_builder.h
@@ -46,6 +46,50 @@
 
 
   //--------------------------------------------------------------------------
+  // Pointer Arithmetic Helper Function
+  //--------------------------------------------------------------------------
+
+  llvm::IntegerType* getPtrEquivIntTy() {
+    return getInt32Ty();
+  }
+
+  size_t getSizeOfPtrEquivInt() {
+    return 4;
+  }
+
+  llvm::ConstantInt* getSizeOfPtrEquivIntValue() {
+    return getPtrEquivInt(getSizeOfPtrEquivInt());
+  }
+
+  llvm::ConstantInt* getPtrEquivInt(uint64_t i) {
+    return llvm::ConstantInt::get(getPtrEquivIntTy(), i);
+  }
+
+  llvm::Value* CreatePtrDisp(llvm::Value* base,
+                             llvm::Value* offset,
+                             llvm::PointerType* ret_ty) {
+
+    llvm::Value* base_int = CreatePtrToInt(base, getPtrEquivIntTy());
+    llvm::Value* result_int = CreateAdd(base_int, offset);
+    llvm::Value* result = CreateIntToPtr(result_int, ret_ty);
+
+    return result;
+  }
+
+  llvm::Value* CreatePtrDisp(llvm::Value* base,
+                             llvm::Value* bs,
+                             llvm::Value* count,
+                             llvm::Value* offset,
+                             llvm::PointerType* ret_ty) {
+
+    llvm::Value* block_offset = CreateMul(bs, count);
+    llvm::Value* total_offset = CreateAdd(block_offset, offset);
+
+    return CreatePtrDisp(base, total_offset, ret_ty);
+  }
+
+
+  //--------------------------------------------------------------------------
   // Type Helper Function
   //--------------------------------------------------------------------------