[clang] [clang] Add per-global code model attribute (PR #72078)

WÁNG Xuěruì via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 12 00:25:06 PST 2023


================
@@ -0,0 +1,37 @@
+// RUN: %clang_cc1 -emit-llvm -triple loongarch64 %s -o - | FileCheck %s
+
+// CHECK: @_ZL2v1 ={{.*}} global i32 0, code_model "small"
+static int v1 __attribute__((model("normal")));
+
+void use1() {
+  v1 = 1;
+}
+
+// CHECK: @v2 ={{.*}} global i32 0, code_model "medium"
+int v2 __attribute__((model("medium")));
+
+// CHECK: @v3 ={{.*}} global float 0.000000e+00, code_model "large"
+float v3 __attribute__((model("extreme")));
+
+// CHECK: @_ZL2v4IiE ={{.*}} global i32 0, code_model "medium"
+template <typename T>
+static T v4 __attribute__((model("medium")));
+
+void use2() {
+  v4<int> = 1;
+}
+
+// CHECK: @v5 ={{.*}} global i32 0, code_model "large"
+thread_local int v5 __attribute__((model("extreme")));
----------------
xen0n wrote:

For the record: it may be useful to support overriding code model for TLS variables too (after all the `model` attribute is supposed to be useful for anyone manipulating their own address space layout), but for now matching GCC behavior is more important. If we want to extend the support to TLS variables later, that work should probably first happen in GCC, and not here.

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


More information about the cfe-commits mailing list