Add support for llvm static branch prediction.

Change-Id: I8025db404d59a7ef17e4f8b878d0ab5c8cf7dab4
diff --git a/src/compiler_llvm/ir_builder.h b/src/compiler_llvm/ir_builder.h
index a700c69..aa261c3 100644
--- a/src/compiler_llvm/ir_builder.h
+++ b/src/compiler_llvm/ir_builder.h
@@ -111,6 +111,24 @@
 
 
   //--------------------------------------------------------------------------
+  // Static Branch Prediction
+  //--------------------------------------------------------------------------
+
+  // Import the orignal conditional branch
+  using LLVMIRBuilder::CreateCondBr;
+  llvm::BranchInst* CreateCondBr(llvm::Value *cond,
+                                 llvm::BasicBlock* true_bb,
+                                 llvm::BasicBlock* false_bb,
+                                 ExpectCond expect) {
+    DCHECK_NE(expect, MAX_EXPECT) << "MAX_EXPECT is not for branch weight";
+
+    llvm::BranchInst* branch_inst = LLVMIRBuilder::CreateCondBr(cond, true_bb, false_bb);
+    branch_inst->setMetadata(llvm::LLVMContext::MD_prof, expect_cond_[expect]);
+    return branch_inst;
+  }
+
+
+  //--------------------------------------------------------------------------
   // Pointer Arithmetic Helper Function
   //--------------------------------------------------------------------------
 
@@ -384,6 +402,7 @@
 
   RuntimeSupportBuilder* runtime_support_;
 
+  llvm::MDNode* expect_cond_[MAX_EXPECT];
 };