Commit 74f55175d5
Changed files (1)
test
test/llvm_ir.zig
@@ -1,5 +1,121 @@
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");