1#skip amdgcn-amdhsa-none-baseline-whole-llvm-lld-pic
2#skip amdgcn-amdpal-none-baseline-whole-llvm-lld-pic
3#skip amdgcn-mesa3d-none-baseline-whole-llvm-lld-pic
4
5#skip csky-freestanding-eabi-baseline-whole-llvm-lld-pic
6#skip csky-freestanding-eabihf-baseline-whole-llvm-lld-pic
7#skip csky-linux-eabi-baseline-whole-llvm-lld-pic
8#skip csky-linux-eabihf-baseline-whole-llvm-lld-pic
9#skip csky-linux-gnueabi-baseline-whole-llvm-lld-pic
10#skip csky-linux-gnueabihf-baseline-whole-llvm-lld-pic
11
12#skip nvptx-cuda-none-baseline-whole-llvm-lld-pic
13#skip nvptx-nvcl-none-baseline-whole-llvm-lld-pic
14
15#skip nvptx64-cuda-none-baseline-whole-llvm-lld-pic
16#skip nvptx64-nvcl-none-baseline-whole-llvm-lld-pic
17
18#skip spirv32-opencl-none-baseline-whole-llvm-lld-pic
19#skip spirv32-opengl-none-baseline-whole-llvm-lld-pic
20#skip spirv32-vulkan-none-baseline-whole-llvm-lld-pic
21
22#skip spirv64-amdhsa-none-baseline-whole-llvm-lld-pic
23#skip spirv64-opencl-none-baseline-whole-llvm-lld-pic
24#skip spirv64-vulkan-none-baseline-whole-llvm-lld-pic
25
26#skip wasm32-emscripten-none-baseline-whole-llvm-lld-pic
27#skip wasm32-freestanding-none-baseline-whole-llvm-lld-pic
28#skip wasm32-wasi-none-baseline-whole-llvm-lld-pic
29
30#skip wasm64-emscripten-none-baseline-whole-llvm-lld-pic
31#skip wasm64-freestanding-none-baseline-whole-llvm-lld-pic
32#skip wasm64-wasi-none-baseline-whole-llvm-lld-pic
33
34#skip x86_64-linux-gnux32-baseline-whole-llvm-new-pic
35#skip x86_64-linux-muslx32-baseline-whole-llvm-new-pic
36#skip x86_64-linux-x32-baseline-whole-llvm-new-pic
37
38#obj {
39--name test -fno-lld -fno-new-linker -ofmt=llvmir
40-Mroot=test.zig
41#}
42
43#write test.zig {
44export fn entry(ptr: *i16) void {
45 _ = @atomicLoad(i16, ptr, .acquire);
46}
47#}
48#update "atomic acquire"
49#check llvm {
50define #...@test.entry(ptr #...%0) #...{
51#...load atomic i16, ptr %0 acquire#...
52}
53
54#}
55
56#write test.zig {
57export fn entry(ptr: *volatile i16) void {
58 _ = @atomicLoad(i16, ptr, .unordered);
59}
60#}
61#update "atomic volatile unordered"
62#check llvm {
63define #...@test.entry(ptr #...%0) #...{
64#...load atomic volatile i16, ptr %0 unordered#...
65}
66
67#}
68
69#write test.zig {
70export fn entry(ptr: *volatile i16) void {
71 _ = ptr.*;
72}
73#}
74#update "volatile"
75#check llvm {
76define #...@test.entry(ptr #...%0) #...{
77#...load volatile i16, ptr %0#...
78}
79
80#}
81
82#write test.zig {
83export fn entry(ptr: *volatile i16) void {
84 entry2(ptr[0..1]);
85}
86fn entry2(slice: []volatile i16) void {
87 @setRuntimeSafety(false);
88 _ = slice[0];
89}
90#}
91#update "volatile slice"
92#check llvm {
93define #...@test.entry(#...) #...{
94#...
95}
96
97#...
98define #...@test.entry2(#...) #...{
99#...load volatile i16, ptr %#...
100}
101
102#}
103
104#write test.zig {
105const S = packed struct(u16) { a: u2, b: u8, c: u6 };
106export fn entry(ptr: *volatile S) void {
107 _ = ptr.b;
108}
109#}
110#update "volatile packed"
111#check llvm {
112define #...@test.entry(ptr #...%0) #...{
113#...load volatile i16, ptr %#...
114}
115
116#}