@@ -214,14 +214,14 @@ bb0(%0 : @owned $Optional<Klass>):
214
214
//
215
215
// Erases the `pointer_to_address` `[align=]` attribute:
216
216
//
217
- // CHECK-LABEL: sil @$s8builtins20testNaturalAlignmentyxBp_xmtlF : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
217
+ // CHECK-LABEL: sil @test_zero_alignment : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
218
218
// CHECK: bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
219
219
// CHECK-NOT: integer_literal
220
220
// CHECK-NOT: builtin "assumeAlignment"
221
221
// CHECK: [[PTR:%.*]] = pointer_to_address %1 : $Builtin.RawPointer to $*T
222
222
// CHECK: copy_addr [[PTR]] to [initialization] %0 : $*T
223
- // CHECK-LABEL: } // end sil function '$s8builtins20testNaturalAlignmentyxBp_xmtlF '
224
- sil @$s8builtins20testNaturalAlignmentyxBp_xmtlF : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
223
+ // CHECK-LABEL: } // end sil function 'test_zero_alignment '
224
+ sil @test_zero_alignment : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
225
225
bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
226
226
debug_value %1 : $Builtin.RawPointer, let, name "rawPointer", argno 1
227
227
debug_value %2 : $@thick T.Type, let, name "_1", argno 2
@@ -234,7 +234,6 @@ bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
234
234
return %10 : $()
235
235
}
236
236
237
- //
238
237
// Case #2. Literal nonzero = forced alignment.
239
238
//
240
239
// %1 = integer_literal $Builtin.Int64, 16
@@ -244,14 +243,14 @@ bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
244
243
//
245
244
// Promotes the `pointer_to_address` `[align=]` attribute to a higher value.
246
245
//
247
- // CHECK-LABEL: sil @$s8builtins18testFixedAlignmentyxBp_xmtlF : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
246
+ // CHECK-LABEL: sil @test_nonzero_alignment : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
248
247
// CHECK: bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
249
248
// CHECK-NOT: integer_literal
250
249
// CHECK-NOT: builtin "assumeAlignment"
251
250
// CHECK: [[PTR:%.*]] = pointer_to_address %1 : $Builtin.RawPointer to [align=8] $*T
252
251
// CHECK: copy_addr [[PTR]] to [initialization] %0 : $*T
253
- // CHECK-LABEL: } // end sil function '$s8builtins18testFixedAlignmentyxBp_xmtlF '
254
- sil @$s8builtins18testFixedAlignmentyxBp_xmtlF : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
252
+ // CHECK-LABEL: } // end sil function 'test_nonzero_alignment '
253
+ sil @test_nonzero_alignment : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
255
254
bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
256
255
debug_value %1 : $Builtin.RawPointer, let, name "rawPointer", argno 1
257
256
debug_value %2 : $@thick T.Type, let, name "_1", argno 2
@@ -273,23 +272,23 @@ bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
273
272
//
274
273
// Erases the `pointer_to_address` `[align=]` attribute.
275
274
//
276
- // CHECK-LABEL: sil @$s8builtins20testDynamicAlignmentyxBp_xmtlF : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
275
+ // CHECK-LABEL: sil @test_dynamic_alignment : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
277
276
// CHECK: bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
278
277
// CHECK-NOT: metatype
279
278
// CHECK-NOT: builtin "alignOf"
280
279
// CHECK-NOT: builtin "assumeAlignment"
281
280
// CHECK: [[PTR:%.*]] = pointer_to_address %1 : $Builtin.RawPointer to $*T
282
281
// CHECK: copy_addr [[PTR]] to [initialization] %0 : $*T
283
- // CHECK-LABEL: } // end sil function '$s8builtins20testDynamicAlignmentyxBp_xmtlF '
284
- sil @$s8builtins20testDynamicAlignmentyxBp_xmtlF : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
282
+ // CHECK-LABEL: } // end sil function 'test_dynamic_alignment '
283
+ sil @test_dynamic_alignment : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
285
284
bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
286
285
debug_value %1 : $Builtin.RawPointer, let, name "rawPointer", argno 1
287
286
debug_value %2 : $@thick T.Type, let, name "_1", argno 2
288
287
%5 = metatype $@thick T.Type
289
288
%6 = builtin "alignof"<T>(%5 : $@thick T.Type) : $Builtin.Word
290
289
%7 = builtin "sextOrBitCast_Word_Int64"(%6 : $Builtin.Word) : $Builtin.Int64
291
- %8 = struct $Int (%7 : $Builtin.Int64)
292
- debug_value %8 : $Int , let, name "align"
290
+ %8 = struct $Int64 (%7 : $Builtin.Int64)
291
+ debug_value %8 : $Int64 , let, name "align"
293
292
%10 = builtin "truncOrBitCast_Int64_Word"(%7 : $Builtin.Int64) : $Builtin.Word
294
293
%11 = builtin "assumeAlignment"(%1 : $Builtin.RawPointer, %10 : $Builtin.Word) : $Builtin.RawPointer
295
294
debug_value %11 : $Builtin.RawPointer, let, name "alignedPointer"
@@ -298,3 +297,38 @@ bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
298
297
%15 = tuple ()
299
298
return %15 : $()
300
299
}
300
+
301
+ // Case #3b. Folded dynamic alignment; 32-bit
302
+ //
303
+ // %1 = builtin "alignof"<T>(%0 : $@thin T.Type) : $Builtin.Word
304
+ // %2 = builtin "assumeAlignment"
305
+ // (%0 : $Builtin.RawPointer, %1 : $Builtin.Int64) : $Builtin.RawPointer
306
+ // %3 = pointer_to_address %2 : $Builtin.RawPointer to [align=1] $*T
307
+ //
308
+ // Erases the `pointer_to_address` `[align=]` attribute.
309
+ //
310
+ // CHECK-LABEL: sil @test_dynamic_alignment32 : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
311
+ // CHECK: bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
312
+ // CHECK-NOT: metatype
313
+ // CHECK-NOT: builtin "alignOf"
314
+ // CHECK-NOT: builtin "assumeAlignment"
315
+ // CHECK: [[PTR:%.*]] = pointer_to_address %1 : $Builtin.RawPointer to $*T
316
+ // CHECK: copy_addr [[PTR]] to [initialization] %0 : $*T
317
+ // CHECK-LABEL: } // end sil function 'test_dynamic_alignment32'
318
+ sil @test_dynamic_alignment32 : $@convention(thin) <T> (Builtin.RawPointer, @thick T.Type) -> @out T {
319
+ bb0(%0 : $*T, %1 : $Builtin.RawPointer, %2 : $@thick T.Type):
320
+ debug_value %1 : $Builtin.RawPointer, let, name "rawPointer", argno 1
321
+ debug_value %2 : $@thick T.Type, let, name "_1", argno 2
322
+ %5 = metatype $@thick T.Type
323
+ %6 = builtin "alignof"<T>(%5 : $@thick T.Type) : $Builtin.Word
324
+ %7 = builtin "truncOrBitCast_Word_Int32"(%6 : $Builtin.Word) : $Builtin.Int32
325
+ %8 = struct $Int32 (%7 : $Builtin.Int32)
326
+ debug_value %8 : $Int32, let, name "align"
327
+ %10 = builtin "sextOrBitCast_Int32_Word"(%7 : $Builtin.Int32) : $Builtin.Word
328
+ %11 = builtin "assumeAlignment"(%1 : $Builtin.RawPointer, %10 : $Builtin.Word) : $Builtin.RawPointer
329
+ debug_value %11 : $Builtin.RawPointer, let, name "alignedPointer"
330
+ %13 = pointer_to_address %11 : $Builtin.RawPointer to [align=1] $*T
331
+ copy_addr %13 to [initialization] %0 : $*T
332
+ %15 = tuple ()
333
+ return %15 : $()
334
+ }
0 commit comments