@@ -35,20 +35,19 @@ impl<'tcx> MirPass<'tcx> for LowerIntrinsics {
35
35
terminator. kind = TerminatorKind :: Goto { target } ;
36
36
}
37
37
sym:: forget => {
38
- if let Some ( target) = * target {
39
- block. statements . push ( Statement {
40
- source_info : terminator. source_info ,
41
- kind : StatementKind :: Assign ( Box :: new ( (
42
- * destination,
43
- Rvalue :: Use ( Operand :: Constant ( Box :: new ( ConstOperand {
44
- span : terminator. source_info . span ,
45
- user_ty : None ,
46
- const_ : Const :: zero_sized ( tcx. types . unit ) ,
47
- } ) ) ) ,
48
- ) ) ) ,
49
- } ) ;
50
- terminator. kind = TerminatorKind :: Goto { target } ;
51
- }
38
+ let target = target. unwrap ( ) ;
39
+ block. statements . push ( Statement {
40
+ source_info : terminator. source_info ,
41
+ kind : StatementKind :: Assign ( Box :: new ( (
42
+ * destination,
43
+ Rvalue :: Use ( Operand :: Constant ( Box :: new ( ConstOperand {
44
+ span : terminator. source_info . span ,
45
+ user_ty : None ,
46
+ const_ : Const :: zero_sized ( tcx. types . unit ) ,
47
+ } ) ) ) ,
48
+ ) ) ) ,
49
+ } ) ;
50
+ terminator. kind = TerminatorKind :: Goto { target } ;
52
51
}
53
52
sym:: copy_nonoverlapping => {
54
53
let target = target. unwrap ( ) ;
@@ -121,43 +120,41 @@ impl<'tcx> MirPass<'tcx> for LowerIntrinsics {
121
120
terminator. kind = TerminatorKind :: Goto { target } ;
122
121
}
123
122
sym:: add_with_overflow | sym:: sub_with_overflow | sym:: mul_with_overflow => {
124
- if let Some ( target) = * target {
125
- let Ok ( [ lhs, rhs] ) = take_array ( args) else {
126
- bug ! ( "Wrong arguments for {} intrinsic" , intrinsic. name) ;
127
- } ;
128
- let bin_op = match intrinsic. name {
129
- sym:: add_with_overflow => BinOp :: AddWithOverflow ,
130
- sym:: sub_with_overflow => BinOp :: SubWithOverflow ,
131
- sym:: mul_with_overflow => BinOp :: MulWithOverflow ,
132
- _ => bug ! ( "unexpected intrinsic" ) ,
133
- } ;
134
- block. statements . push ( Statement {
135
- source_info : terminator. source_info ,
136
- kind : StatementKind :: Assign ( Box :: new ( (
137
- * destination,
138
- Rvalue :: BinaryOp ( bin_op, Box :: new ( ( lhs. node , rhs. node ) ) ) ,
139
- ) ) ) ,
140
- } ) ;
141
- terminator. kind = TerminatorKind :: Goto { target } ;
142
- }
123
+ let target = target. unwrap ( ) ;
124
+ let Ok ( [ lhs, rhs] ) = take_array ( args) else {
125
+ bug ! ( "Wrong arguments for {} intrinsic" , intrinsic. name) ;
126
+ } ;
127
+ let bin_op = match intrinsic. name {
128
+ sym:: add_with_overflow => BinOp :: AddWithOverflow ,
129
+ sym:: sub_with_overflow => BinOp :: SubWithOverflow ,
130
+ sym:: mul_with_overflow => BinOp :: MulWithOverflow ,
131
+ _ => bug ! ( "unexpected intrinsic" ) ,
132
+ } ;
133
+ block. statements . push ( Statement {
134
+ source_info : terminator. source_info ,
135
+ kind : StatementKind :: Assign ( Box :: new ( (
136
+ * destination,
137
+ Rvalue :: BinaryOp ( bin_op, Box :: new ( ( lhs. node , rhs. node ) ) ) ,
138
+ ) ) ) ,
139
+ } ) ;
140
+ terminator. kind = TerminatorKind :: Goto { target } ;
143
141
}
144
142
sym:: size_of | sym:: min_align_of => {
145
- if let Some ( target) = * target {
146
- let tp_ty = generic_args. type_at ( 0 ) ;
147
- let null_op = match intrinsic. name {
148
- sym:: size_of => NullOp :: SizeOf ,
149
- sym:: min_align_of => NullOp :: AlignOf ,
150
- _ => bug ! ( "unexpected intrinsic" ) ,
151
- } ;
152
- block. statements . push ( Statement {
153
- source_info : terminator. source_info ,
154
- kind : StatementKind :: Assign ( Box :: new ( (
155
- * destination,
156
- Rvalue :: NullaryOp ( null_op, tp_ty) ,
157
- ) ) ) ,
158
- } ) ;
159
- terminator. kind = TerminatorKind :: Goto { target } ;
160
- }
143
+ let target = target. unwrap ( ) ;
144
+ let tp_ty = generic_args. type_at ( 0 ) ;
145
+ let null_op = match intrinsic. name {
146
+ sym:: size_of => NullOp :: SizeOf ,
147
+ sym:: min_align_of => NullOp :: AlignOf ,
148
+ _ => bug ! ( "unexpected intrinsic" ) ,
149
+ } ;
150
+ block. statements . push ( Statement {
151
+ source_info : terminator. source_info ,
152
+ kind : StatementKind :: Assign ( Box :: new ( (
153
+ * destination,
154
+ Rvalue :: NullaryOp ( null_op, tp_ty) ,
155
+ ) ) ) ,
156
+ } ) ;
157
+ terminator. kind = TerminatorKind :: Goto { target } ;
161
158
}
162
159
sym:: read_via_copy => {
163
160
let Ok ( [ arg] ) = take_array ( args) else {
@@ -219,17 +216,23 @@ impl<'tcx> MirPass<'tcx> for LowerIntrinsics {
219
216
terminator. kind = TerminatorKind :: Goto { target } ;
220
217
}
221
218
sym:: discriminant_value => {
222
- if let ( Some ( target) , Some ( arg) ) = ( * target, args[ 0 ] . node . place ( ) ) {
223
- let arg = tcx. mk_place_deref ( arg) ;
224
- block. statements . push ( Statement {
225
- source_info : terminator. source_info ,
226
- kind : StatementKind :: Assign ( Box :: new ( (
227
- * destination,
228
- Rvalue :: Discriminant ( arg) ,
229
- ) ) ) ,
230
- } ) ;
231
- terminator. kind = TerminatorKind :: Goto { target } ;
232
- }
219
+ let target = target. unwrap ( ) ;
220
+ let Ok ( [ arg] ) = take_array ( args) else {
221
+ span_bug ! (
222
+ terminator. source_info. span,
223
+ "Wrong arguments for discriminant_value intrinsic"
224
+ ) ;
225
+ } ;
226
+ let arg = arg. node . place ( ) . unwrap ( ) ;
227
+ let arg = tcx. mk_place_deref ( arg) ;
228
+ block. statements . push ( Statement {
229
+ source_info : terminator. source_info ,
230
+ kind : StatementKind :: Assign ( Box :: new ( (
231
+ * destination,
232
+ Rvalue :: Discriminant ( arg) ,
233
+ ) ) ) ,
234
+ } ) ;
235
+ terminator. kind = TerminatorKind :: Goto { target } ;
233
236
}
234
237
sym:: offset => {
235
238
let target = target. unwrap ( ) ;
@@ -267,7 +270,6 @@ impl<'tcx> MirPass<'tcx> for LowerIntrinsics {
267
270
Rvalue :: Cast ( CastKind :: Transmute , arg. node , dst_ty) ,
268
271
) ) ) ,
269
272
} ) ;
270
-
271
273
if let Some ( target) = * target {
272
274
terminator. kind = TerminatorKind :: Goto { target } ;
273
275
} else {
@@ -299,7 +301,6 @@ impl<'tcx> MirPass<'tcx> for LowerIntrinsics {
299
301
Rvalue :: Aggregate ( Box :: new ( kind) , fields. into ( ) ) ,
300
302
) ) ) ,
301
303
} ) ;
302
-
303
304
terminator. kind = TerminatorKind :: Goto { target } ;
304
305
}
305
306
sym:: ptr_metadata => {
0 commit comments