mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
test: Add some basic LLVM IR tests for atomics, volatile, and allowzero.
This commit is contained in:
parent
e63e3f7a7c
commit
74f55175d5
118
test/llvm_ir.zig
118
test/llvm_ir.zig
@ -1,5 +1,121 @@
|
|||||||
pub fn addCases(cases: *tests.LlvmIrContext) void {
|
pub fn addCases(cases: *tests.LlvmIrContext) void {
|
||||||
_ = cases;
|
cases.addMatches("nonnull ptr load",
|
||||||
|
\\export fn entry(ptr: *i16) i16 {
|
||||||
|
\\ return ptr.*;
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"ptr nonnull",
|
||||||
|
"load i16, ptr %0",
|
||||||
|
}, .{});
|
||||||
|
|
||||||
|
cases.addMatches("nonnull ptr store",
|
||||||
|
\\export fn entry(ptr: *i16) void {
|
||||||
|
\\ ptr.* = 42;
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"ptr nonnull",
|
||||||
|
"store i16 42, ptr %0",
|
||||||
|
}, .{});
|
||||||
|
|
||||||
|
cases.addMatches("unused acquire atomic ptr load",
|
||||||
|
\\export fn entry(ptr: *i16) void {
|
||||||
|
\\ _ = @atomicLoad(i16, ptr, .acquire);
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"load atomic i16, ptr %0 acquire",
|
||||||
|
}, .{});
|
||||||
|
|
||||||
|
cases.addMatches("unused unordered atomic volatile ptr load",
|
||||||
|
\\export fn entry(ptr: *volatile i16) void {
|
||||||
|
\\ _ = @atomicLoad(i16, ptr, .unordered);
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"load atomic volatile i16, ptr %0 unordered",
|
||||||
|
}, .{});
|
||||||
|
|
||||||
|
cases.addMatches("unused volatile ptr load",
|
||||||
|
\\export fn entry(ptr: *volatile i16) void {
|
||||||
|
\\ _ = ptr.*;
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"load volatile i16, ptr %0",
|
||||||
|
}, .{});
|
||||||
|
|
||||||
|
cases.addMatches("dead volatile ptr store",
|
||||||
|
\\export fn entry(ptr: *volatile i16) void {
|
||||||
|
\\ ptr.* = 123;
|
||||||
|
\\ ptr.* = 321;
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"store volatile i16 123, ptr %0",
|
||||||
|
"store volatile i16 321, ptr %0",
|
||||||
|
}, .{});
|
||||||
|
|
||||||
|
cases.addMatches("unused volatile slice load",
|
||||||
|
\\export fn entry(ptr: *volatile i16) void {
|
||||||
|
\\ entry2(ptr[0..1]);
|
||||||
|
\\}
|
||||||
|
\\fn entry2(ptr: []volatile i16) void {
|
||||||
|
\\ _ = ptr[0];
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"load volatile i16, ptr",
|
||||||
|
}, .{});
|
||||||
|
|
||||||
|
cases.addMatches("dead volatile slice store",
|
||||||
|
\\export fn entry(ptr: *volatile i16) void {
|
||||||
|
\\ entry2(ptr[0..1]);
|
||||||
|
\\}
|
||||||
|
\\fn entry2(ptr: []volatile i16) void {
|
||||||
|
\\ ptr[0] = 123;
|
||||||
|
\\ ptr[0] = 321;
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"store volatile i16 123, ptr",
|
||||||
|
"store volatile i16 321, ptr",
|
||||||
|
}, .{});
|
||||||
|
|
||||||
|
cases.addMatches("allowzero ptr load",
|
||||||
|
\\export fn entry(ptr: *allowzero i16) i16 {
|
||||||
|
\\ return ptr.*;
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"null_pointer_is_valid",
|
||||||
|
"load i16, ptr %0",
|
||||||
|
}, .{});
|
||||||
|
|
||||||
|
cases.addMatches("allowzero ptr store",
|
||||||
|
\\export fn entry(ptr: *allowzero i16) void {
|
||||||
|
\\ ptr.* = 42;
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"null_pointer_is_valid",
|
||||||
|
"store i16 42, ptr %0",
|
||||||
|
}, .{});
|
||||||
|
|
||||||
|
cases.addMatches("allowzero slice load",
|
||||||
|
\\export fn entry(ptr: *allowzero i16) i16 {
|
||||||
|
\\ return entry2(ptr[0..1]);
|
||||||
|
\\}
|
||||||
|
\\fn entry2(ptr: []allowzero i16) i16 {
|
||||||
|
\\ return ptr[0];
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"null_pointer_is_valid",
|
||||||
|
"load i16, ptr",
|
||||||
|
}, .{});
|
||||||
|
|
||||||
|
cases.addMatches("allowzero slice store",
|
||||||
|
\\export fn entry(ptr: *allowzero i16) void {
|
||||||
|
\\ entry2(ptr[0..1]);
|
||||||
|
\\}
|
||||||
|
\\fn entry2(ptr: []allowzero i16) void {
|
||||||
|
\\ ptr[0] = 42;
|
||||||
|
\\}
|
||||||
|
, &.{
|
||||||
|
"null_pointer_is_valid",
|
||||||
|
"store i16 42, ptr",
|
||||||
|
}, .{});
|
||||||
}
|
}
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user