Skip to content

Commit 57f7e14

Browse files
committed
[LoongArch] Pre-commit test for _BitInt(N)
1 parent 7354123 commit 57f7e14

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed

clang/test/CodeGen/LoongArch/bitint.c

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
2+
// RUN: %clang_cc1 -triple loongarch32 -fexperimental-max-bitint-width=1024 -emit-llvm %s -o - | FileCheck %s --check-prefix=LA32
3+
// RUN: %clang_cc1 -triple loongarch64 -fexperimental-max-bitint-width=1024 -emit-llvm %s -o - | FileCheck %s --check-prefix=LA64
4+
5+
/// Testing the alignment and size of _BitInt(N) for different values of N.
6+
7+
void pass_BitInt7(_BitInt(7));
8+
void pass_BitInt65(_BitInt(65));
9+
void pass_BitInt129(_BitInt(129));
10+
11+
// LA32-LABEL: define dso_local void @example_BitInt(
12+
// LA32-SAME: ) #[[ATTR0:[0-9]+]] {
13+
// LA32-NEXT: [[ENTRY:.*:]]
14+
// LA32-NEXT: [[L7:%.*]] = alloca i8, align 1
15+
// LA32-NEXT: [[L65:%.*]] = alloca i128, align 8
16+
// LA32-NEXT: [[L129:%.*]] = alloca i192, align 8
17+
// LA32-NEXT: [[BYVAL_TEMP:%.*]] = alloca i128, align 8
18+
// LA32-NEXT: [[BYVAL_TEMP3:%.*]] = alloca i192, align 8
19+
// LA32-NEXT: store i8 0, ptr [[L7]], align 1
20+
// LA32-NEXT: store i128 0, ptr [[L65]], align 8
21+
// LA32-NEXT: store i192 0, ptr [[L129]], align 8
22+
// LA32-NEXT: [[TMP0:%.*]] = load i8, ptr [[L7]], align 1
23+
// LA32-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i7
24+
// LA32-NEXT: call void @pass_BitInt7(i7 noundef signext [[LOADEDV]])
25+
// LA32-NEXT: [[TMP1:%.*]] = load i128, ptr [[L65]], align 8
26+
// LA32-NEXT: [[LOADEDV1:%.*]] = trunc i128 [[TMP1]] to i65
27+
// LA32-NEXT: [[STOREDV:%.*]] = sext i65 [[LOADEDV1]] to i128
28+
// LA32-NEXT: store i128 [[STOREDV]], ptr [[BYVAL_TEMP]], align 8
29+
// LA32-NEXT: call void @pass_BitInt65(ptr noundef [[BYVAL_TEMP]])
30+
// LA32-NEXT: [[TMP2:%.*]] = load i192, ptr [[L129]], align 8
31+
// LA32-NEXT: [[LOADEDV2:%.*]] = trunc i192 [[TMP2]] to i129
32+
// LA32-NEXT: [[STOREDV4:%.*]] = sext i129 [[LOADEDV2]] to i192
33+
// LA32-NEXT: store i192 [[STOREDV4]], ptr [[BYVAL_TEMP3]], align 8
34+
// LA32-NEXT: call void @pass_BitInt129(ptr noundef [[BYVAL_TEMP3]])
35+
// LA32-NEXT: ret void
36+
//
37+
// LA64-LABEL: define dso_local void @example_BitInt(
38+
// LA64-SAME: ) #[[ATTR0:[0-9]+]] {
39+
// LA64-NEXT: [[ENTRY:.*:]]
40+
// LA64-NEXT: [[L7:%.*]] = alloca i8, align 1
41+
// LA64-NEXT: [[L65:%.*]] = alloca i128, align 8
42+
// LA64-NEXT: [[L129:%.*]] = alloca [24 x i8], align 8
43+
// LA64-NEXT: [[BYVAL_TEMP:%.*]] = alloca [24 x i8], align 8
44+
// LA64-NEXT: store i8 0, ptr [[L7]], align 1
45+
// LA64-NEXT: store i128 0, ptr [[L65]], align 8
46+
// LA64-NEXT: store i192 0, ptr [[L129]], align 8
47+
// LA64-NEXT: [[TMP0:%.*]] = load i8, ptr [[L7]], align 1
48+
// LA64-NEXT: [[LOADEDV:%.*]] = trunc i8 [[TMP0]] to i7
49+
// LA64-NEXT: call void @pass_BitInt7(i7 noundef signext [[LOADEDV]])
50+
// LA64-NEXT: [[TMP1:%.*]] = load i128, ptr [[L65]], align 8
51+
// LA64-NEXT: [[LOADEDV1:%.*]] = trunc i128 [[TMP1]] to i65
52+
// LA64-NEXT: call void @pass_BitInt65(i65 noundef [[LOADEDV1]])
53+
// LA64-NEXT: [[TMP2:%.*]] = load i192, ptr [[L129]], align 8
54+
// LA64-NEXT: [[LOADEDV2:%.*]] = trunc i192 [[TMP2]] to i129
55+
// LA64-NEXT: [[STOREDV:%.*]] = sext i129 [[LOADEDV2]] to i192
56+
// LA64-NEXT: store i192 [[STOREDV]], ptr [[BYVAL_TEMP]], align 8
57+
// LA64-NEXT: call void @pass_BitInt129(ptr noundef [[BYVAL_TEMP]])
58+
// LA64-NEXT: ret void
59+
//
60+
void example_BitInt(void) {
61+
_BitInt(7) l7 = {0};
62+
_BitInt(65) l65 = {0};
63+
_BitInt(129) l129 = {0};
64+
pass_BitInt7(l7);
65+
pass_BitInt65(l65);
66+
pass_BitInt129(l129);
67+
}
68+
69+
// LA32-LABEL: define dso_local signext i7 @return_large_BitInt7(
70+
// LA32-SAME: ) #[[ATTR0]] {
71+
// LA32-NEXT: [[ENTRY:.*:]]
72+
// LA32-NEXT: ret i7 0
73+
//
74+
// LA64-LABEL: define dso_local signext i7 @return_large_BitInt7(
75+
// LA64-SAME: ) #[[ATTR0]] {
76+
// LA64-NEXT: [[ENTRY:.*:]]
77+
// LA64-NEXT: ret i7 0
78+
//
79+
_BitInt(7) return_large_BitInt7(void) { return 0; }
80+
// LA32-LABEL: define dso_local void @return_large_BitInt65(
81+
// LA32-SAME: ptr dead_on_unwind noalias writable sret(i128) align 8 [[AGG_RESULT:%.*]]) #[[ATTR0]] {
82+
// LA32-NEXT: [[ENTRY:.*:]]
83+
// LA32-NEXT: [[RESULT_PTR:%.*]] = alloca ptr, align 4
84+
// LA32-NEXT: store ptr [[AGG_RESULT]], ptr [[RESULT_PTR]], align 4
85+
// LA32-NEXT: store i128 0, ptr [[AGG_RESULT]], align 8
86+
// LA32-NEXT: [[TMP0:%.*]] = load i128, ptr [[AGG_RESULT]], align 8
87+
// LA32-NEXT: [[LOADEDV:%.*]] = trunc i128 [[TMP0]] to i65
88+
// LA32-NEXT: [[STOREDV:%.*]] = sext i65 [[LOADEDV]] to i128
89+
// LA32-NEXT: store i128 [[STOREDV]], ptr [[AGG_RESULT]], align 8
90+
// LA32-NEXT: ret void
91+
//
92+
// LA64-LABEL: define dso_local i65 @return_large_BitInt65(
93+
// LA64-SAME: ) #[[ATTR0]] {
94+
// LA64-NEXT: [[ENTRY:.*:]]
95+
// LA64-NEXT: ret i65 0
96+
//
97+
_BitInt(65) return_large_BitInt65(void) { return 0; }
98+
// LA32-LABEL: define dso_local void @return_large_BitInt129(
99+
// LA32-SAME: ptr dead_on_unwind noalias writable sret(i192) align 8 [[AGG_RESULT:%.*]]) #[[ATTR0]] {
100+
// LA32-NEXT: [[ENTRY:.*:]]
101+
// LA32-NEXT: [[RESULT_PTR:%.*]] = alloca ptr, align 4
102+
// LA32-NEXT: store ptr [[AGG_RESULT]], ptr [[RESULT_PTR]], align 4
103+
// LA32-NEXT: store i192 0, ptr [[AGG_RESULT]], align 8
104+
// LA32-NEXT: [[TMP0:%.*]] = load i192, ptr [[AGG_RESULT]], align 8
105+
// LA32-NEXT: [[LOADEDV:%.*]] = trunc i192 [[TMP0]] to i129
106+
// LA32-NEXT: [[STOREDV:%.*]] = sext i129 [[LOADEDV]] to i192
107+
// LA32-NEXT: store i192 [[STOREDV]], ptr [[AGG_RESULT]], align 8
108+
// LA32-NEXT: ret void
109+
//
110+
// LA64-LABEL: define dso_local void @return_large_BitInt129(
111+
// LA64-SAME: ptr dead_on_unwind noalias writable sret([24 x i8]) align 8 [[AGG_RESULT:%.*]]) #[[ATTR0]] {
112+
// LA64-NEXT: [[ENTRY:.*:]]
113+
// LA64-NEXT: [[RESULT_PTR:%.*]] = alloca ptr, align 8
114+
// LA64-NEXT: store ptr [[AGG_RESULT]], ptr [[RESULT_PTR]], align 8
115+
// LA64-NEXT: store i192 0, ptr [[AGG_RESULT]], align 8
116+
// LA64-NEXT: [[TMP0:%.*]] = load i192, ptr [[AGG_RESULT]], align 8
117+
// LA64-NEXT: [[LOADEDV:%.*]] = trunc i192 [[TMP0]] to i129
118+
// LA64-NEXT: [[STOREDV:%.*]] = sext i129 [[LOADEDV]] to i192
119+
// LA64-NEXT: store i192 [[STOREDV]], ptr [[AGG_RESULT]], align 8
120+
// LA64-NEXT: ret void
121+
//
122+
_BitInt(129) return_large_BitInt129(void) { return 0; }

0 commit comments

Comments
 (0)