Factor out cycle-finder code and make it generic.
[oota-llvm.git] / include / llvm / Intrinsics.td
index 6d008f3e3bf7dff2317f7db7297e97de8a36082a..6e4ce82c4c001af6afacf8ee87e7849e1913d6bd 100644 (file)
@@ -73,6 +73,12 @@ class LLVMAnyPointerType<LLVMType elty>
   LLVMType ElTy = elty;
 } 
 
+// Match the type of another intrinsic parameter.  Number is an index into the
+// list of overloaded types for the intrinsic, excluding all the fixed types.
+// The Number value must refer to a previously listed type.  For example:
+//   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_anyfloat_ty, LLVMMatchType<0>]>
+// has two overloaded types, the 2nd and 3rd arguments.  LLVMMatchType<0>
+// refers to the first overloaded type, which is the 2nd argument.
 class LLVMMatchType<int num>
   : LLVMType<OtherVT>{
   int Number = num;
@@ -260,7 +266,9 @@ let Properties = [IntrNoMem] in {
 //===------------------------ Debugger Intrinsics -------------------------===//
 //
 
-// None of these intrinsics accesses memory at all.
+// None of these intrinsics accesses memory at all...but that doesn't mean the
+// optimizers can change them aggressively.  Special handling needed in a few
+// places.
 let Properties = [IntrNoMem] in {
   def int_dbg_stoppoint    : Intrinsic<[llvm_void_ty],
                                        [llvm_i32_ty, llvm_i32_ty,