gonglingqin updated this revision to Diff 484466.
gonglingqin added a comment.
Address @SixWeining's comment.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D139987/new/
https://reviews.llvm.org/D139987
Files:
clang/lib/Headers/larchintrin.h
clang/test/CodeGen/LoongArch/intrinsic-la32-error.c
clang/test/CodeGen/LoongArch/intrinsic-la32.c
clang/test/CodeGen/LoongArch/intrinsic-la64.c
Index: clang/test/CodeGen/LoongArch/intrinsic-la64.c
===================================================================
--- clang/test/CodeGen/LoongArch/intrinsic-la64.c
+++ clang/test/CodeGen/LoongArch/intrinsic-la64.c
@@ -316,3 +316,23 @@
__iocsrwr_d(a, b);
__builtin_loongarch_iocsrwr_d(a, b);
}
+
+// CHECK-LABEL: @rdtime_d(
+// CHECK-NEXT: entry:
+// CHECK-NEXT: [[TMP0:%.*]] = tail call { i64, i64 } asm sideeffect "rdtime.d $0, $1\0A\09", "=&r,=&r"() #[[ATTR1:[0-9]+]], !srcloc !2
+// CHECK-NEXT: ret void
+//
+void rdtime_d() {
+ __rdtime_d();
+}
+
+// CHECK-LABEL: @rdtime(
+// CHECK-NEXT: entry:
+// CHECK-NEXT: [[TMP0:%.*]] = tail call { i32, i32 } asm sideeffect "rdtimeh.w $0, $1\0A\09", "=&r,=&r"() #[[ATTR1]], !srcloc !3
+// CHECK-NEXT: [[TMP1:%.*]] = tail call { i32, i32 } asm sideeffect "rdtimel.w $0, $1\0A\09", "=&r,=&r"() #[[ATTR1]], !srcloc !4
+// CHECK-NEXT: ret void
+//
+void rdtime() {
+ __rdtimeh_w();
+ __rdtimel_w();
+}
Index: clang/test/CodeGen/LoongArch/intrinsic-la32.c
===================================================================
--- clang/test/CodeGen/LoongArch/intrinsic-la32.c
+++ clang/test/CodeGen/LoongArch/intrinsic-la32.c
@@ -154,3 +154,14 @@
__iocsrwr_w(a, b);
__builtin_loongarch_iocsrwr_w(a, b);
}
+
+// LA32-LABEL: @rdtime(
+// LA32-NEXT: entry:
+// LA32-NEXT: [[TMP0:%.*]] = tail call { i32, i32 } asm sideeffect "rdtimeh.w $0, $1\0A\09", "=&r,=&r"() #[[ATTR1:[0-9]+]], !srcloc !2
+// LA32-NEXT: [[TMP1:%.*]] = tail call { i32, i32 } asm sideeffect "rdtimel.w $0, $1\0A\09", "=&r,=&r"() #[[ATTR1]], !srcloc !3
+// LA32-NEXT: ret void
+//
+void rdtime() {
+ __rdtimeh_w();
+ __rdtimel_w();
+}
Index: clang/test/CodeGen/LoongArch/intrinsic-la32-error.c
===================================================================
--- clang/test/CodeGen/LoongArch/intrinsic-la32-error.c
+++ clang/test/CodeGen/LoongArch/intrinsic-la32-error.c
@@ -95,3 +95,7 @@
void iocsrwr_d(unsigned long int a, unsigned int b) {
__builtin_loongarch_iocsrwr_d(a, b); // expected-error {{this builtin requires target: loongarch64}}
}
+
+void rdtime_d() {
+ __rdtime_d(); // expected-error {{call to undeclared function '__rdtime_d'}}
+}
Index: clang/lib/Headers/larchintrin.h
===================================================================
--- clang/lib/Headers/larchintrin.h
+++ clang/lib/Headers/larchintrin.h
@@ -14,6 +14,46 @@
extern "C" {
#endif
+typedef struct rdtime {
+ unsigned int value;
+ unsigned int timeid;
+} __rdtime_t;
+
+#if __loongarch_grlen == 64
+typedef struct drdtime {
+ unsigned long dvalue;
+ unsigned long dtimeid;
+} __drdtime_t;
+
+extern __inline __drdtime_t
+ __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __rdtime_d(void) {
+ __drdtime_t __drdtime;
+ __asm__ volatile(
+ "rdtime.d %[val], %[tid]\n\t"
+ : [val] "=&r"(__drdtime.dvalue), [tid] "=&r"(__drdtime.dtimeid));
+ return __drdtime;
+}
+#endif
+
+extern __inline __rdtime_t
+ __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __rdtimeh_w(void) {
+ __rdtime_t __rdtime;
+ __asm__ volatile("rdtimeh.w %[val], %[tid]\n\t"
+ : [val] "=&r"(__rdtime.value), [tid] "=&r"(__rdtime.timeid));
+ return __rdtime;
+}
+
+extern __inline __rdtime_t
+ __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __rdtimel_w(void) {
+ __rdtime_t __rdtime;
+ __asm__ volatile("rdtimel.w %[val], %[tid]\n\t"
+ : [val] "=&r"(__rdtime.value), [tid] "=&r"(__rdtime.timeid));
+ return __rdtime;
+}
+
#if __loongarch_grlen == 64
extern __inline int
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits