Pass in argc & argv
authorChris Lattner <sabre@nondot.org>
Tue, 28 Oct 2003 22:42:24 +0000 (22:42 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 28 Oct 2003 22:42:24 +0000 (22:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9563 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Instrumentation/BlockProfiling.cpp

index 5986ed9d1341ff32ad9c6d76d4fe8cf017b30c10..4b80d18dac1c0c474e9ddc15f9b8cd5cb2072df3 100644 (file)
@@ -101,11 +101,30 @@ void FunctionProfiler::insertInitializationCall(Function *MainFn,
   Args[0] = Constant::getNullValue(Type::IntTy);
   Args[1] = Constant::getNullValue(ArgVTy);
 
-  /* FIXME: We should pass in the command line arguments here! */
+  // Skip over any allocas in the entry block.
+  BasicBlock *Entry = MainFn->begin();
+  BasicBlock::iterator InsertPos = Entry->begin();
+  while (isa<AllocaInst>(InsertPos)) ++InsertPos;
+
+  Function::aiterator AI;
   switch (MainFn->asize()) {
   default:
   case 2:
+    AI = MainFn->abegin(); ++AI;
+    if (AI->getType() != ArgVTy) {
+      Args[1] = new CastInst(AI, ArgVTy, "argv.cast", InsertPos);
+    } else {
+      Args[1] = AI;
+    }
+
   case 1:
+    AI = MainFn->abegin();
+    if (AI->getType() != Type::IntTy) {
+      Args[0] = new CastInst(AI, Type::IntTy, "argc.cast", InsertPos);
+    } else {
+      Args[0] = AI;
+    }
+    
   case 0:
     break;
   }
@@ -118,10 +137,5 @@ void FunctionProfiler::insertInitializationCall(Function *MainFn,
     cast<ArrayType>(Array->getType()->getElementType())->getNumElements();
   Args[3] = ConstantUInt::get(Type::UIntTy, NumElements);
   
-  // Skip over any allocas in the entry block.
-  BasicBlock *Entry = MainFn->begin();
-  BasicBlock::iterator InsertPos = Entry->begin();
-  while (isa<AllocaInst>(InsertPos)) ++InsertPos;
-
   new CallInst(InitFn, Args, "", InsertPos);
 }