https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104052
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- config/aarch64/aarch64-builtins.c: aarch64_fp16_type_node = make_node (REAL_TYPE); config/aarch64/aarch64-builtins.c: aarch64_bf16_type_node = make_node (REAL_TYPE); config/arm/arm-builtins.c: arm_bf16_type_node = make_node (REAL_TYPE); config/arm/arm-builtins.c: arm_fp16_type_node = make_node (REAL_TYPE); config/csky/csky.c: static tree csky_floatHF_type_node = make_node (REAL_TYPE); config/i386/i386-builtins.c: ix86_float16_type_node = make_node (REAL_TYPE); config/i386/i386-builtins.c: float80_type_node = make_node (REAL_TYPE); config/ia64/ia64.c: fpreg_type = make_node (REAL_TYPE); config/ia64/ia64.c: float80_type = make_node (REAL_TYPE); config/rs6000/rs6000-call.c: ibm128_float_type_node = make_node (REAL_TYPE); is all I could find, now the question is what from these types are already in some global_trees. But the upper bound for target specific floating point types will be most likely either 2 or 1.