Don't assert if we can't constant fold extract/insertvalue
[oota-llvm.git] / include / llvm / CodeGen / Passes.h
index 7b0aa8fab7a054a88d754db4a95c6d27456ae2bf..98d1e0ae9e104de450058d21d8187b122961a6dd 100644 (file)
@@ -50,24 +50,26 @@ class PassConfigImpl;
 ///
 /// AnalysisID is sadly char*, so PointerIntPair won't work.
 class IdentifyingPassPtr {
-  void *P;
+  union {
+    AnalysisID ID;
+    Pass *P;
+  };
   bool IsInstance;
 public:
-  IdentifyingPassPtr(): P(0), IsInstance(false) {}
-  IdentifyingPassPtr(AnalysisID IDPtr): P((void*)IDPtr), IsInstance(false) {}
-  IdentifyingPassPtr(Pass *InstancePtr)
-    : P((void*)InstancePtr), IsInstance(true) {}
+  IdentifyingPassPtr() : P(0), IsInstance(false) {}
+  IdentifyingPassPtr(AnalysisID IDPtr) : ID(IDPtr), IsInstance(false) {}
+  IdentifyingPassPtr(Pass *InstancePtr) : P(InstancePtr), IsInstance(true) {}
 
   bool isValid() const { return P; }
   bool isInstance() const { return IsInstance; }
 
   AnalysisID getID() const {
     assert(!IsInstance && "Not a Pass ID");
-    return (AnalysisID)P;
+    return ID;
   }
   Pass *getInstance() const {
     assert(IsInstance && "Not a Pass Instance");
-    return (Pass *)P;
+    return P;
   }
 };
 
@@ -327,7 +329,7 @@ namespace llvm {
   /// This pass implements the target transform info analysis using the target
   /// independent information available to the LLVM code generator.
   ImmutablePass *
-  createBasicTargetTransformInfoPass(const TargetLoweringBase *TLI);
+  createBasicTargetTransformInfoPass(const TargetMachine *TM);
 
   /// createUnreachableBlockEliminationPass - The LLVM code generator does not
   /// work well with unreachable basic blocks (what live ranges make sense for a
@@ -516,7 +518,7 @@ namespace llvm {
 
   /// createStackProtectorPass - This pass adds stack protectors to functions.
   ///
-  FunctionPass *createStackProtectorPass(const TargetLoweringBase *tli);
+  FunctionPass *createStackProtectorPass(const TargetMachine *TM);
 
   /// createMachineVerifierPass - This pass verifies cenerated machine code
   /// instructions for correctness.
@@ -525,12 +527,12 @@ namespace llvm {
 
   /// createDwarfEHPass - This pass mulches exception handling code into a form
   /// adapted to code generation.  Required if using dwarf exception handling.
-  FunctionPass *createDwarfEHPass(const TargetMachine *tm);
+  FunctionPass *createDwarfEHPass(const TargetMachine *TM);
 
   /// createSjLjEHPreparePass - This pass adapts exception handling code to use
   /// the GCC-style builtin setjmp/longjmp (sjlj) to handling EH control flow.
   ///
-  FunctionPass *createSjLjEHPreparePass(const TargetLoweringBase *tli);
+  FunctionPass *createSjLjEHPreparePass(const TargetMachine *TM);
 
   /// LocalStackSlotAllocation - This pass assigns local frame indices to stack
   /// slots relative to one another and allocates base registers to access them