@@ -91,4 +91,94 @@ define void @atomic_store_relaxed_f64(ptr %p, i32 %off32, i64 %off64, double %va
91
91
ret void
92
92
}
93
93
94
+ define half @atomic_load_relaxed_f16 (ptr %p , i32 %off32 , i64 %off64 ) #0 {
95
+ ; CHECK-LABEL: atomic_load_relaxed_f16:
96
+ %ptr_unsigned = getelementptr half , ptr %p , i32 4095
97
+ %val_unsigned = load atomic half , ptr %ptr_unsigned monotonic , align 4
98
+ ; CHECK: ldrh {{w[0-9]+}}, [x0, #8190]
99
+
100
+ %ptr_regoff = getelementptr half , ptr %p , i32 %off32
101
+ %val_regoff = load atomic half , ptr %ptr_regoff unordered , align 4
102
+ %tot1 = fadd half %val_unsigned , %val_regoff
103
+ ; CHECK: ldrh {{w[0-9]+}}, [x0, w1, sxtw #1]
104
+
105
+ %ptr_regoff64 = getelementptr half , ptr %p , i64 %off64
106
+ %val_regoff64 = load atomic half , ptr %ptr_regoff64 monotonic , align 4
107
+ %tot2 = fadd half %tot1 , %val_regoff64
108
+ ; CHECK: ldrh {{w[0-9]+}}, [x0, x2, lsl #1]
109
+
110
+ %ptr_unscaled = getelementptr half , ptr %p , i32 -64
111
+ %val_unscaled = load atomic half , ptr %ptr_unscaled unordered , align 4
112
+ %tot3 = fadd half %tot2 , %val_unscaled
113
+ ; CHECK: ldurh {{w[0-9]+}}, [x0, #-128]
114
+
115
+ ret half %tot3
116
+ }
117
+
118
+ define bfloat @atomic_load_relaxed_bf16 (ptr %p , i32 %off32 , i64 %off64 ) #0 {
119
+ ; CHECK-LABEL: atomic_load_relaxed_bf16:
120
+ %ptr_unsigned = getelementptr bfloat, ptr %p , i32 4095
121
+ %val_unsigned = load atomic bfloat, ptr %ptr_unsigned monotonic , align 4
122
+ ; CHECK: ldrh {{w[0-9]+}}, [x0, #8190]
123
+
124
+ %ptr_regoff = getelementptr bfloat, ptr %p , i32 %off32
125
+ %val_regoff = load atomic bfloat, ptr %ptr_regoff unordered , align 4
126
+ %tot1 = fadd bfloat %val_unsigned , %val_regoff
127
+ ; CHECK: ldrh {{w[0-9]+}}, [x0, w1, sxtw #1]
128
+
129
+ %ptr_regoff64 = getelementptr bfloat, ptr %p , i64 %off64
130
+ %val_regoff64 = load atomic bfloat, ptr %ptr_regoff64 monotonic , align 4
131
+ %tot2 = fadd bfloat %tot1 , %val_regoff64
132
+ ; CHECK: ldrh {{w[0-9]+}}, [x0, x2, lsl #1]
133
+
134
+ %ptr_unscaled = getelementptr bfloat, ptr %p , i32 -64
135
+ %val_unscaled = load atomic bfloat, ptr %ptr_unscaled unordered , align 4
136
+ %tot3 = fadd bfloat %tot2 , %val_unscaled
137
+ ; CHECK: ldurh {{w[0-9]+}}, [x0, #-128]
138
+
139
+ ret bfloat %tot3
140
+ }
141
+
142
+ define void @atomic_store_relaxed_f16 (ptr %p , i32 %off32 , i64 %off64 , half %val ) #0 {
143
+ ; CHECK-LABEL: atomic_store_relaxed_f16:
144
+ %ptr_unsigned = getelementptr half , ptr %p , i32 4095
145
+ store atomic half %val , ptr %ptr_unsigned monotonic , align 4
146
+ ; CHECK: strh {{w[0-9]+}}, [x0, #8190]
147
+
148
+ %ptr_regoff = getelementptr half , ptr %p , i32 %off32
149
+ store atomic half %val , ptr %ptr_regoff unordered , align 4
150
+ ; CHECK: strh {{w[0-9]+}}, [x0, w1, sxtw #1]
151
+
152
+ %ptr_regoff64 = getelementptr half , ptr %p , i64 %off64
153
+ store atomic half %val , ptr %ptr_regoff64 monotonic , align 4
154
+ ; CHECK: strh {{w[0-9]+}}, [x0, x2, lsl #1]
155
+
156
+ %ptr_unscaled = getelementptr half , ptr %p , i32 -64
157
+ store atomic half %val , ptr %ptr_unscaled unordered , align 4
158
+ ; CHECK: sturh {{w[0-9]+}}, [x0, #-128]
159
+
160
+ ret void
161
+ }
162
+
163
+ define void @atomic_store_relaxed_bf16 (ptr %p , i32 %off32 , i64 %off64 , bfloat %val ) #0 {
164
+ ; CHECK-LABEL: atomic_store_relaxed_bf16:
165
+ %ptr_unsigned = getelementptr bfloat, ptr %p , i32 4095
166
+ store atomic bfloat %val , ptr %ptr_unsigned monotonic , align 4
167
+ ; CHECK: strh {{w[0-9]+}}, [x0, #8190]
168
+
169
+ %ptr_regoff = getelementptr bfloat, ptr %p , i32 %off32
170
+ store atomic bfloat %val , ptr %ptr_regoff unordered , align 4
171
+ ; CHECK: strh {{w[0-9]+}}, [x0, w1, sxtw #1]
172
+
173
+ %ptr_regoff64 = getelementptr bfloat, ptr %p , i64 %off64
174
+ store atomic bfloat %val , ptr %ptr_regoff64 monotonic , align 4
175
+ ; CHECK: strh {{w[0-9]+}}, [x0, x2, lsl #1]
176
+
177
+ %ptr_unscaled = getelementptr bfloat, ptr %p , i32 -64
178
+ store atomic bfloat %val , ptr %ptr_unscaled unordered , align 4
179
+ ; CHECK: sturh {{w[0-9]+}}, [x0, #-128]
180
+
181
+ ret void
182
+ }
183
+
94
184
attributes #0 = { nounwind }
0 commit comments