[llvm-commits] [llvm] r106838 -	/llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp
    Gabor Greif 
    ggreif at gmail.com
       
    Fri Jun 25 04:25:30 PDT 2010
    
    
  
Author: ggreif
Date: Fri Jun 25 06:25:30 2010
New Revision: 106838
URL: http://llvm.org/viewvc/llvm-project?rev=106838&view=rev
Log:
use ArgOperand accessors
and CallInst for getting hold
of the intrinsic's arguments
simplify along the way (at least for me this is much more legible now)
Bill, Baldrick or Anton, please review\!
Modified:
    llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp
Modified: llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp?rev=106838&r1=106837&r2=106838&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp (original)
+++ llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp Fri Jun 25 06:25:30 2010
@@ -22,6 +22,7 @@
 #include "llvm/Analysis/Dominators.h"
 #include "llvm/CodeGen/Passes.h"
 #include "llvm/MC/MCAsmInfo.h"
+#include "llvm/Support/CallSite.h"
 #include "llvm/Target/TargetLowering.h"
 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
 #include "llvm/Transforms/Utils/PromoteMemToReg.h"
@@ -193,8 +194,8 @@
 bool DwarfEHPrepare::HasCatchAllInSelector(IntrinsicInst *II) {
   if (!EHCatchAllValue) return false;
 
-  unsigned OpIdx = II->getNumOperands() - 1;
-  GlobalVariable *GV = dyn_cast<GlobalVariable>(II->getOperand(OpIdx));
+  unsigned ArgIdx = II->getNumArgOperands() - 1;
+  GlobalVariable *GV = dyn_cast<GlobalVariable>(II->getArgOperand(ArgIdx));
   return GV == EHCatchAllValue;
 }
 
@@ -386,16 +387,20 @@
 
       // Use the exception object pointer and the personality function
       // from the original selector.
-      Args.push_back(II->getArgOperand(0)); // Exception object pointer.
-      Args.push_back(II->getArgOperand(1)); // Personality function.
+      CallSite CS(II);
+      IntrinsicInst::op_iterator I = CS.arg_begin();
+      Args.push_back(*I++); // Exception object pointer.
+      Args.push_back(*I++); // Personality function.
 
-      unsigned I = 3;
-      unsigned E = II->getNumOperands() -
-        (isa<ConstantInt>(II->getOperand(II->getNumOperands() - 1)) ? 1 : 0);
+      IntrinsicInst::op_iterator E = CS.arg_end();
+      IntrinsicInst::op_iterator B = prior(E);
+
+      // Exclude last argument if it is an integer.
+      if (isa<ConstantInt>(B)) E = B;
 
       // Add in any filter IDs.
-      for (; I < E; ++I)
-        Args.push_back(II->getOperand(I));
+      for (; I != E; ++I)
+        Args.push_back(*I);
 
       Args.push_back(EHCatchAllValue->getInitializer()); // Catch-all indicator.
 
    
    
More information about the llvm-commits
mailing list