@@ -2555,11 +2555,12 @@ LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst);
2555
2555
/**
2556
2556
* Obtain the argument count for a call instruction.
2557
2557
*
2558
- * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
2559
- * llvm::InvokeInst.
2558
+ * This expects an LLVMValueRef that corresponds to a llvm::CallInst,
2559
+ * llvm::InvokeInst, or llvm:FuncletPadInst .
2560
2560
*
2561
2561
* @see llvm::CallInst::getNumArgOperands()
2562
2562
* @see llvm::InvokeInst::getNumArgOperands()
2563
+ * @see llvm::FuncletPadInst::getNumArgOperands()
2563
2564
*/
2564
2565
unsigned LLVMGetNumArgOperands (LLVMValueRef Instr );
2565
2566
@@ -2644,9 +2645,12 @@ LLVMBasicBlockRef LLVMGetNormalDest(LLVMValueRef InvokeInst);
2644
2645
/**
2645
2646
* Return the unwind destination basic block.
2646
2647
*
2647
- * This only works on llvm::InvokeInst instructions.
2648
+ * Works on llvm::InvokeInst, llvm::CleanupReturnInst, and
2649
+ * llvm::CatchSwitchInst instructions.
2648
2650
*
2649
2651
* @see llvm::InvokeInst::getUnwindDest()
2652
+ * @see llvm::CleanupReturnInst::getUnwindDest()
2653
+ * @see llvm::CatchSwitchInst::getUnwindDest()
2650
2654
*/
2651
2655
LLVMBasicBlockRef LLVMGetUnwindDest (LLVMValueRef InvokeInst );
2652
2656
@@ -2662,9 +2666,12 @@ void LLVMSetNormalDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B);
2662
2666
/**
2663
2667
* Set the unwind destination basic block.
2664
2668
*
2665
- * This only works on llvm::InvokeInst instructions.
2669
+ * Works on llvm::InvokeInst, llvm::CleanupReturnInst, and
2670
+ * llvm::CatchSwitchInst instructions.
2666
2671
*
2667
2672
* @see llvm::InvokeInst::setUnwindDest()
2673
+ * @see llvm::CleanupReturnInst::setUnwindDest()
2674
+ * @see llvm::CatchSwitchInst::setUnwindDest()
2668
2675
*/
2669
2676
void LLVMSetUnwindDest (LLVMValueRef InvokeInst , LLVMBasicBlockRef B );
2670
2677
@@ -2893,11 +2900,26 @@ LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
2893
2900
LLVMValueRef * Args , unsigned NumArgs ,
2894
2901
LLVMBasicBlockRef Then , LLVMBasicBlockRef Catch ,
2895
2902
const char * Name );
2903
+ LLVMValueRef LLVMBuildUnreachable (LLVMBuilderRef );
2904
+
2905
+ /* Exception Handling */
2906
+ LLVMValueRef LLVMBuildResume (LLVMBuilderRef B , LLVMValueRef Exn );
2896
2907
LLVMValueRef LLVMBuildLandingPad (LLVMBuilderRef B , LLVMTypeRef Ty ,
2897
2908
LLVMValueRef PersFn , unsigned NumClauses ,
2898
2909
const char * Name );
2899
- LLVMValueRef LLVMBuildResume (LLVMBuilderRef B , LLVMValueRef Exn );
2900
- LLVMValueRef LLVMBuildUnreachable (LLVMBuilderRef );
2910
+ LLVMValueRef LLVMBuildCleanupRet (LLVMBuilderRef B , LLVMValueRef CatchPad ,
2911
+ LLVMBasicBlockRef BB );
2912
+ LLVMValueRef LLVMBuildCatchRet (LLVMBuilderRef B , LLVMValueRef CatchPad ,
2913
+ LLVMBasicBlockRef BB );
2914
+ LLVMValueRef LLVMBuildCatchPad (LLVMBuilderRef B , LLVMValueRef ParentPad ,
2915
+ LLVMValueRef * Args , unsigned NumArgs ,
2916
+ const char * Name );
2917
+ LLVMValueRef LLVMBuildCleanupPad (LLVMBuilderRef B , LLVMValueRef ParentPad ,
2918
+ LLVMValueRef * Args , unsigned NumArgs ,
2919
+ const char * Name );
2920
+ LLVMValueRef LLVMBuildCatchSwitch (LLVMBuilderRef B , LLVMValueRef ParentPad ,
2921
+ LLVMBasicBlockRef UnwindBB ,
2922
+ unsigned NumHandlers , const char * Name );
2901
2923
2902
2924
/* Add a case to the switch instruction */
2903
2925
void LLVMAddCase (LLVMValueRef Switch , LLVMValueRef OnVal ,
@@ -2921,6 +2943,51 @@ LLVMBool LLVMIsCleanup(LLVMValueRef LandingPad);
2921
2943
/* Set the 'cleanup' flag in the landingpad instruction */
2922
2944
void LLVMSetCleanup (LLVMValueRef LandingPad , LLVMBool Val );
2923
2945
2946
+ /* Add a destination to the catchswitch instruction */
2947
+ void LLVMAddHandler (LLVMValueRef CatchSwitch , LLVMBasicBlockRef Dest );
2948
+
2949
+ /* Get the number of handlers on the catchswitch instruction */
2950
+ unsigned LLVMGetNumHandlers (LLVMValueRef CatchSwitch );
2951
+
2952
+ /**
2953
+ * Obtain the basic blocks acting as handlers for a catchswitch instruction.
2954
+ *
2955
+ * The Handlers parameter should point to a pre-allocated array of
2956
+ * LLVMBasicBlockRefs at least LLVMGetNumHandlers() large. On return, the
2957
+ * first LLVMGetNumHandlers() entries in the array will be populated
2958
+ * with LLVMBasicBlockRef instances.
2959
+ *
2960
+ * @param CatchSwitch The catchswitch instruction to operate on.
2961
+ * @param Handlers Memory address of an array to be filled with basic blocks.
2962
+ */
2963
+ void LLVMGetHandlers (LLVMValueRef CatchSwitch , LLVMBasicBlockRef * Handlers );
2964
+
2965
+ /* Funclets */
2966
+
2967
+ /* Get the number of funcletpad arguments. */
2968
+ LLVMValueRef LLVMGetArgOperand (LLVMValueRef Funclet , unsigned i );
2969
+
2970
+ /* Set a funcletpad argument at the given index. */
2971
+ void LLVMSetArgOperand (LLVMValueRef Funclet , unsigned i , LLVMValueRef value );
2972
+
2973
+ /**
2974
+ * Get the parent catchswitch instruction of a catchpad instruction.
2975
+ *
2976
+ * This only works on llvm::CatchPadInst instructions.
2977
+ *
2978
+ * @see llvm::CatchPadInst::getCatchSwitch()
2979
+ */
2980
+ LLVMValueRef LLVMGetParentCatchSwitch (LLVMValueRef CatchPad );
2981
+
2982
+ /**
2983
+ * Set the parent catchswitch instruction of a catchpad instruction.
2984
+ *
2985
+ * This only works on llvm::CatchPadInst instructions.
2986
+ *
2987
+ * @see llvm::CatchPadInst::setCatchSwitch()
2988
+ */
2989
+ void LLVMSetParentCatchSwitch (LLVMValueRef CatchPad , LLVMValueRef CatchSwitch );
2990
+
2924
2991
/* Arithmetic */
2925
2992
LLVMValueRef LLVMBuildAdd (LLVMBuilderRef , LLVMValueRef LHS , LLVMValueRef RHS ,
2926
2993
const char * Name );
0 commit comments