8
8
#![ feature( inline_const) ]
9
9
#![ allow( unreachable_code) ]
10
10
11
- use std:: mem:: MaybeUninit ;
12
11
use std:: intrinsics:: { transmute, transmute_unchecked} ;
12
+ use std:: mem:: MaybeUninit ;
13
13
14
14
// Some of these need custom MIR to not get removed by MIR optimizations.
15
15
use std:: intrinsics:: mir:: * ;
@@ -61,7 +61,7 @@ pub unsafe fn check_bigger_array(x: [u32; 3]) -> [u32; 7] {
61
61
#[ custom_mir( dialect = "runtime" , phase = "optimized" ) ]
62
62
pub unsafe fn check_to_uninhabited ( x : u16 ) -> BigNever {
63
63
// CHECK: call void @llvm.trap
64
- mir ! {
64
+ mir ! {
65
65
{
66
66
RET = CastTransmute ( x) ;
67
67
Return ( )
@@ -74,7 +74,7 @@ pub unsafe fn check_to_uninhabited(x: u16) -> BigNever {
74
74
#[ custom_mir( dialect = "runtime" , phase = "optimized" ) ]
75
75
pub unsafe fn check_from_uninhabited ( x : BigNever ) -> u16 {
76
76
// CHECK: ret i16 poison
77
- mir ! {
77
+ mir ! {
78
78
{
79
79
RET = CastTransmute ( x) ;
80
80
Return ( )
@@ -89,9 +89,7 @@ pub unsafe fn check_intermediate_passthrough(x: u32) -> i32 {
89
89
// CHECK: %[[TMP:.+]] = add i32 1, %x
90
90
// CHECK: %[[RET:.+]] = add i32 %[[TMP]], 1
91
91
// CHECK: ret i32 %[[RET]]
92
- unsafe {
93
- transmute :: < u32 , i32 > ( 1 + x) + 1
94
- }
92
+ unsafe { transmute :: < u32 , i32 > ( 1 + x) + 1 }
95
93
}
96
94
97
95
// CHECK-LABEL: @check_nop_pair(
@@ -101,9 +99,7 @@ pub unsafe fn check_nop_pair(x: (u8, i8)) -> (i8, u8) {
101
99
// CHECK: %0 = insertvalue { i8, i8 } poison, i8 %x.0, 0
102
100
// CHECK: %1 = insertvalue { i8, i8 } %0, i8 %x.1, 1
103
101
// CHECK: ret { i8, i8 } %1
104
- unsafe {
105
- transmute ( x)
106
- }
102
+ unsafe { transmute ( x) }
107
103
}
108
104
109
105
// CHECK-LABEL: @check_to_newtype(
@@ -135,9 +131,9 @@ pub unsafe fn check_aggregate_to_bool(x: Aggregate8) -> bool {
135
131
// CHECK-LABEL: @check_aggregate_from_bool(
136
132
#[ no_mangle]
137
133
pub unsafe fn check_aggregate_from_bool ( x : bool ) -> Aggregate8 {
138
- // CHECK: %0 = alloca %Aggregate8, align 1
134
+ // CHECK: %_0 = alloca %Aggregate8, align 1
139
135
// CHECK: %[[BYTE:.+]] = zext i1 %x to i8
140
- // CHECK: store i8 %[[BYTE]], ptr %0 , align 1
136
+ // CHECK: store i8 %[[BYTE]], ptr %_0 , align 1
141
137
transmute ( x)
142
138
}
143
139
@@ -162,8 +158,8 @@ pub unsafe fn check_byte_from_bool(x: bool) -> u8 {
162
158
// CHECK-LABEL: @check_to_pair(
163
159
#[ no_mangle]
164
160
pub unsafe fn check_to_pair ( x : u64 ) -> Option < i32 > {
165
- // CHECK: %0 = alloca { i32, i32 }, align 4
166
- // CHECK: store i64 %x, ptr %0 , align 4
161
+ // CHECK: %_0 = alloca { i32, i32 }, align 4
162
+ // CHECK: store i64 %x, ptr %_0 , align 4
167
163
transmute ( x)
168
164
}
169
165
@@ -174,37 +170,37 @@ pub unsafe fn check_from_pair(x: Option<i32>) -> u64 {
174
170
// immediates so we can write using the destination alloca's alignment.
175
171
const { assert ! ( std:: mem:: align_of:: <Option <i32 >>( ) == 4 ) } ;
176
172
177
- // CHECK: %0 = alloca i64, align 8
178
- // CHECK: store i32 %x.0, ptr %1 , align 8
179
- // CHECK: store i32 %x.1, ptr %2 , align 4
180
- // CHECK: %3 = load i64, ptr %0 , align 8
181
- // CHECK: ret i64 %3
173
+ // CHECK: %_0 = alloca i64, align 8
174
+ // CHECK: store i32 %x.0, ptr %0 , align 8
175
+ // CHECK: store i32 %x.1, ptr %1 , align 4
176
+ // CHECK: %2 = load i64, ptr %_0 , align 8
177
+ // CHECK: ret i64 %2
182
178
transmute ( x)
183
179
}
184
180
185
181
// CHECK-LABEL: @check_to_float(
186
182
#[ no_mangle]
187
183
pub unsafe fn check_to_float ( x : u32 ) -> f32 {
188
184
// CHECK-NOT: alloca
189
- // CHECK: %0 = bitcast i32 %x to float
190
- // CHECK: ret float %0
185
+ // CHECK: %_0 = bitcast i32 %x to float
186
+ // CHECK: ret float %_0
191
187
transmute ( x)
192
188
}
193
189
194
190
// CHECK-LABEL: @check_from_float(
195
191
#[ no_mangle]
196
192
pub unsafe fn check_from_float ( x : f32 ) -> u32 {
197
193
// CHECK-NOT: alloca
198
- // CHECK: %0 = bitcast float %x to i32
199
- // CHECK: ret i32 %0
194
+ // CHECK: %_0 = bitcast float %x to i32
195
+ // CHECK: ret i32 %_0
200
196
transmute ( x)
201
197
}
202
198
203
199
// CHECK-LABEL: @check_to_bytes(
204
200
#[ no_mangle]
205
201
pub unsafe fn check_to_bytes ( x : u32 ) -> [ u8 ; 4 ] {
206
- // CHECK: %0 = alloca [4 x i8], align 1
207
- // CHECK: store i32 %x, ptr %0 , align 1
202
+ // CHECK: %_0 = alloca [4 x i8], align 1
203
+ // CHECK: store i32 %x, ptr %_0 , align 1
208
204
transmute ( x)
209
205
}
210
206
@@ -220,10 +216,10 @@ pub unsafe fn check_from_bytes(x: [u8; 4]) -> u32 {
220
216
// CHECK-LABEL: @check_to_aggregate(
221
217
#[ no_mangle]
222
218
pub unsafe fn check_to_aggregate ( x : u64 ) -> Aggregate64 {
223
- // CHECK: %0 = alloca %Aggregate64, align 4
224
- // CHECK: store i64 %x, ptr %0 , align 4
225
- // CHECK: %1 = load i64, ptr %0 , align 4
226
- // CHECK: ret i64 %1
219
+ // CHECK: %_0 = alloca %Aggregate64, align 4
220
+ // CHECK: store i64 %x, ptr %_0 , align 4
221
+ // CHECK: %0 = load i64, ptr %_0 , align 4
222
+ // CHECK: ret i64 %0
227
223
transmute ( x)
228
224
}
229
225
@@ -240,7 +236,7 @@ pub unsafe fn check_from_aggregate(x: Aggregate64) -> u64 {
240
236
#[ no_mangle]
241
237
pub unsafe fn check_long_array_less_aligned ( x : [ u64 ; 100 ] ) -> [ u16 ; 400 ] {
242
238
// CHECK-NEXT: start
243
- // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 2 %0 , ptr align 8 %x, i64 800, i1 false)
239
+ // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 2 %_0 , ptr align 8 %x, i64 800, i1 false)
244
240
// CHECK-NEXT: ret void
245
241
transmute ( x)
246
242
}
@@ -249,7 +245,7 @@ pub unsafe fn check_long_array_less_aligned(x: [u64; 100]) -> [u16; 400] {
249
245
#[ no_mangle]
250
246
pub unsafe fn check_long_array_more_aligned ( x : [ u8 ; 100 ] ) -> [ u32 ; 25 ] {
251
247
// CHECK-NEXT: start
252
- // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %0 , ptr align 1 %x, i64 100, i1 false)
248
+ // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %_0 , ptr align 1 %x, i64 100, i1 false)
253
249
// CHECK-NEXT: ret void
254
250
transmute ( x)
255
251
}
@@ -268,8 +264,8 @@ pub unsafe fn check_pair_with_bool(x: (u8, bool)) -> (bool, i8) {
268
264
pub unsafe fn check_float_to_pointer ( x : f64 ) -> * const ( ) {
269
265
// CHECK-NOT: alloca
270
266
// CHECK: %0 = bitcast double %x to i64
271
- // CHECK: %1 = inttoptr i64 %0 to ptr
272
- // CHECK: ret ptr %1
267
+ // CHECK: %_0 = inttoptr i64 %0 to ptr
268
+ // CHECK: ret ptr %_0
273
269
transmute ( x)
274
270
}
275
271
@@ -278,8 +274,8 @@ pub unsafe fn check_float_to_pointer(x: f64) -> *const () {
278
274
pub unsafe fn check_float_from_pointer ( x : * const ( ) ) -> f64 {
279
275
// CHECK-NOT: alloca
280
276
// CHECK: %0 = ptrtoint ptr %x to i64
281
- // CHECK: %1 = bitcast i64 %0 to double
282
- // CHECK: ret double %1
277
+ // CHECK: %_0 = bitcast i64 %0 to double
278
+ // CHECK: ret double %_0
283
279
transmute ( x)
284
280
}
285
281
@@ -343,10 +339,10 @@ pub unsafe fn check_issue_110005(x: (usize, bool)) -> Option<Box<[u8]>> {
343
339
// CHECK-LABEL: @check_pair_to_dst_ref(
344
340
#[ no_mangle]
345
341
pub unsafe fn check_pair_to_dst_ref < ' a > ( x : ( usize , usize ) ) -> & ' a [ u8 ] {
346
- // CHECK: %0 = inttoptr i64 %x.0 to ptr
347
- // CHECK: %1 = insertvalue { ptr, i64 } poison, ptr %0, 0
348
- // CHECK: %2 = insertvalue { ptr, i64 } %1 , i64 %x.1, 1
349
- // CHECK: ret { ptr, i64 } %2
342
+ // CHECK: %_0. 0 = inttoptr i64 %x.0 to ptr
343
+ // CHECK: %0 = insertvalue { ptr, i64 } poison, ptr %_0. 0, 0
344
+ // CHECK: %1 = insertvalue { ptr, i64 } %0 , i64 %x.1, 1
345
+ // CHECK: ret { ptr, i64 } %1
350
346
transmute ( x)
351
347
}
352
348
@@ -358,7 +354,7 @@ pub unsafe fn check_issue_109992(x: ()) -> [(); 1] {
358
354
359
355
// CHECK: start
360
356
// CHECK-NEXT: ret void
361
- mir ! {
357
+ mir ! {
362
358
{
363
359
RET = CastTransmute ( x) ;
364
360
Return ( )
@@ -390,10 +386,10 @@ pub struct HighAlignScalar(u8);
390
386
// CHECK-LABEL: @check_to_overalign(
391
387
#[ no_mangle]
392
388
pub unsafe fn check_to_overalign ( x : u64 ) -> HighAlignScalar {
393
- // CHECK: %0 = alloca %HighAlignScalar, align 8
394
- // CHECK: store i64 %x, ptr %0 , align 8
395
- // CHECK: %1 = load i64, ptr %0 , align 8
396
- // CHECK: ret i64 %1
389
+ // CHECK: %_0 = alloca %HighAlignScalar, align 8
390
+ // CHECK: store i64 %x, ptr %_0 , align 8
391
+ // CHECK: %0 = load i64, ptr %_0 , align 8
392
+ // CHECK: ret i64 %0
397
393
transmute ( x)
398
394
}
399
395
0 commit comments