Skip to content

Commit 74f5517

Browse files
committed
test: Add some basic LLVM IR tests for atomics, volatile, and allowzero.
1 parent e63e3f7 commit 74f5517

File tree

1 file changed

+117
-1
lines changed

1 file changed

+117
-1
lines changed

test/llvm_ir.zig

Lines changed: 117 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,121 @@
11
pub fn addCases(cases: *tests.LlvmIrContext) void {
2-
_ = cases;
2+
cases.addMatches("nonnull ptr load",
3+
\\export fn entry(ptr: *i16) i16 {
4+
\\ return ptr.*;
5+
\\}
6+
, &.{
7+
"ptr nonnull",
8+
"load i16, ptr %0",
9+
}, .{});
10+
11+
cases.addMatches("nonnull ptr store",
12+
\\export fn entry(ptr: *i16) void {
13+
\\ ptr.* = 42;
14+
\\}
15+
, &.{
16+
"ptr nonnull",
17+
"store i16 42, ptr %0",
18+
}, .{});
19+
20+
cases.addMatches("unused acquire atomic ptr load",
21+
\\export fn entry(ptr: *i16) void {
22+
\\ _ = @atomicLoad(i16, ptr, .acquire);
23+
\\}
24+
, &.{
25+
"load atomic i16, ptr %0 acquire",
26+
}, .{});
27+
28+
cases.addMatches("unused unordered atomic volatile ptr load",
29+
\\export fn entry(ptr: *volatile i16) void {
30+
\\ _ = @atomicLoad(i16, ptr, .unordered);
31+
\\}
32+
, &.{
33+
"load atomic volatile i16, ptr %0 unordered",
34+
}, .{});
35+
36+
cases.addMatches("unused volatile ptr load",
37+
\\export fn entry(ptr: *volatile i16) void {
38+
\\ _ = ptr.*;
39+
\\}
40+
, &.{
41+
"load volatile i16, ptr %0",
42+
}, .{});
43+
44+
cases.addMatches("dead volatile ptr store",
45+
\\export fn entry(ptr: *volatile i16) void {
46+
\\ ptr.* = 123;
47+
\\ ptr.* = 321;
48+
\\}
49+
, &.{
50+
"store volatile i16 123, ptr %0",
51+
"store volatile i16 321, ptr %0",
52+
}, .{});
53+
54+
cases.addMatches("unused volatile slice load",
55+
\\export fn entry(ptr: *volatile i16) void {
56+
\\ entry2(ptr[0..1]);
57+
\\}
58+
\\fn entry2(ptr: []volatile i16) void {
59+
\\ _ = ptr[0];
60+
\\}
61+
, &.{
62+
"load volatile i16, ptr",
63+
}, .{});
64+
65+
cases.addMatches("dead volatile slice store",
66+
\\export fn entry(ptr: *volatile i16) void {
67+
\\ entry2(ptr[0..1]);
68+
\\}
69+
\\fn entry2(ptr: []volatile i16) void {
70+
\\ ptr[0] = 123;
71+
\\ ptr[0] = 321;
72+
\\}
73+
, &.{
74+
"store volatile i16 123, ptr",
75+
"store volatile i16 321, ptr",
76+
}, .{});
77+
78+
cases.addMatches("allowzero ptr load",
79+
\\export fn entry(ptr: *allowzero i16) i16 {
80+
\\ return ptr.*;
81+
\\}
82+
, &.{
83+
"null_pointer_is_valid",
84+
"load i16, ptr %0",
85+
}, .{});
86+
87+
cases.addMatches("allowzero ptr store",
88+
\\export fn entry(ptr: *allowzero i16) void {
89+
\\ ptr.* = 42;
90+
\\}
91+
, &.{
92+
"null_pointer_is_valid",
93+
"store i16 42, ptr %0",
94+
}, .{});
95+
96+
cases.addMatches("allowzero slice load",
97+
\\export fn entry(ptr: *allowzero i16) i16 {
98+
\\ return entry2(ptr[0..1]);
99+
\\}
100+
\\fn entry2(ptr: []allowzero i16) i16 {
101+
\\ return ptr[0];
102+
\\}
103+
, &.{
104+
"null_pointer_is_valid",
105+
"load i16, ptr",
106+
}, .{});
107+
108+
cases.addMatches("allowzero slice store",
109+
\\export fn entry(ptr: *allowzero i16) void {
110+
\\ entry2(ptr[0..1]);
111+
\\}
112+
\\fn entry2(ptr: []allowzero i16) void {
113+
\\ ptr[0] = 42;
114+
\\}
115+
, &.{
116+
"null_pointer_is_valid",
117+
"store i16 42, ptr",
118+
}, .{});
3119
}
4120

5121
const std = @import("std");

0 commit comments

Comments
 (0)