zig/test/llvm_ir.zig

122 lines
3.2 KiB
Zig

pub fn addCases(cases: *tests.LlvmIrContext) void {
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 tests = @import("tests.zig");