[clang] [llvm] [RISCV][Zicfilp] Enable Zicfilp CFI compiler behaviors by looking at module flags (PR #152121)

Ming-Yi Lai via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 25 01:27:23 PDT 2025


================
@@ -1802,3 +1800,15 @@ def FeatureTaggedGlobals : SubtargetFeature<"tagged-globals",
     "AllowTaggedGlobals",
     "true", "Use an instruction sequence for taking the address of a global "
     "that allows a memory tag in the upper address bits">;
+
+// Zicfilp-based CFI
+def FeatureZicfilpUnlabeled
+    : SubtargetFeature<
+          "zicfilp-unlabeled", "HasZicfilpUnlabeled", "true",
+          "Enforce forward-edge control-flow integrity with ZICFILP-unlabeled">;
+def FeatureZicfilpFuncSig
+    : SubtargetFeature<
+          "zicfilp-func-sig", "HasZicfilpFuncSig", "true",
+          "Enforce forward-edge control-flow integrity with ZICFILP-func-sig">;
----------------
mylai-mtk wrote:

I'm not sure if the "enum" (or in the TableGen backend implementation, "integer") is a proper fit here. It looks like the integer version of `SubtargetFeature` actually models features with "leveled" semantics, e.g. `-target-feature +feature-10` would override `-target-feature +feature-0`. This feels wrong as the leveled semantics does not suit ZicfilpCFI in that different options should err instead of override. The current TableGen usages of this integer-based SubtargetFeature may work, but I don't think it's semantics guarantee future soundness.

>   // Value - Value the XXXSubtarget field to be set to by feature.
>   //
>   // A value of "true" or "false" implies the field is a bool. Otherwise,
>   // it is assumed to be an integer. the integer value may be the name of an
>   // enum constant. If multiple features use the same integer field, the
>   // field will be set to the maximum value of all enabled features that
>   // share the field.
>   //
>   string Value = v;

( https://github.com/llvm/llvm-project/blob/0263c15f874d4fc33308db93023e583b816b920e/llvm/include/llvm/Target/Target.td#L499 )

https://github.com/llvm/llvm-project/pull/152121


More information about the cfe-commits mailing list