@@ -8019,7 +8019,7 @@ mod hir_opt_tests {
80198019 v22:BasicObject = LoadField v18, :block@0x1010
80208020 Jump bb6(v22, v22)
80218021 bb6(v16:BasicObject, v17:BasicObject):
8022- v29:BasicObject = Send v14, &block, :map, v16 # SendFallbackReason: Complex argument passing
8022+ v29:BasicObject = Send v14, &block, :map, v16 # SendFallbackReason: Send: block argument is not nil
80238023 CheckInterrupts
80248024 Return v29
80258025 " ) ;
@@ -8057,7 +8057,7 @@ mod hir_opt_tests {
80578057 v22:BasicObject = LoadField v18, :block@0x1002
80588058 Jump bb6(v22, v22)
80598059 bb6(v16:BasicObject, v17:BasicObject):
8060- v29:BasicObject = Send v14, &block, :map, v16 # SendFallbackReason: Complex argument passing
8060+ v29:BasicObject = Send v14, &block, :map, v16 # SendFallbackReason: Send: block argument is not nil
80618061 CheckInterrupts
80628062 Return v29
80638063 " ) ;
@@ -8096,7 +8096,7 @@ mod hir_opt_tests {
80968096 v17:BasicObject = LoadField v13, :block@0x1010
80978097 Jump bb6(v17)
80988098 bb6(v12:BasicObject):
8099- v24:BasicObject = Send v10, &block, :map, v12 # SendFallbackReason: Complex argument passing
8099+ v24:BasicObject = Send v10, &block, :map, v12 # SendFallbackReason: Send: block argument is not nil
81008100 CheckInterrupts
81018101 Return v24
81028102 " ) ;
@@ -8193,6 +8193,7 @@ mod hir_opt_tests {
81938193 " ) ;
81948194 }
81958195
8196+
81968197 #[ test]
81978198 fn test_optimize_send_with_non_nil_block_arg ( ) {
81988199 eval ( r#"
@@ -8218,7 +8219,7 @@ mod hir_opt_tests {
82188219 Jump bb3(v5, v6)
82198220 bb3(v8:BasicObject, v9:NilClass):
82208221 v13:StaticSymbol[:to_s] = Const Value(VALUE(0x1000))
8221- v19:BasicObject = Send v8, &block, :foo, v13 # SendFallbackReason: Complex argument passing
8222+ v19:BasicObject = Send v8, &block, :foo, v13 # SendFallbackReason: Send: block argument is not nil
82228223 CheckInterrupts
82238224 Return v19
82248225 " ) ;
@@ -8249,9 +8250,12 @@ mod hir_opt_tests {
82498250 Jump bb3(v5, v6)
82508251 bb3(v8:BasicObject, v9:NilClass):
82518252 v13:NilClass = Const Value(nil)
8252- v19:BasicObject = Send v8, &block, :foo, v13 # SendFallbackReason: Complex argument passing
8253+ v25:NilClass = GuardBitEquals v13, Value(nil)
8254+ PatchPoint MethodRedefined(NilClass@0x1000, foo@0x1008, cme:0x1010)
8255+ v27:NilClass = GuardType v8, NilClass
8256+ v29:Fixnum[42] = Const Value(42)
82538257 CheckInterrupts
8254- Return v19
8258+ Return v29
82558259 " ) ;
82568260 }
82578261
@@ -11602,7 +11606,7 @@ mod hir_opt_tests {
1160211606 Jump bb3(v4)
1160311607 bb3(v6:BasicObject):
1160411608 v11:StaticSymbol[:the_block] = Const Value(VALUE(0x1000))
11605- v13:BasicObject = Send v6, &block, :callee, v11 # SendFallbackReason: Complex argument passing
11609+ v13:BasicObject = Send v6, &block, :callee, v11 # SendFallbackReason: Send: block argument is not nil
1160611610 CheckInterrupts
1160711611 Return v13
1160811612 " ) ;
@@ -11645,7 +11649,7 @@ mod hir_opt_tests {
1164511649 v22:BasicObject = LoadField v18, :block@0x1010
1164611650 Jump bb6(v22, v22)
1164711651 bb6(v16:BasicObject, v17:BasicObject):
11648- v29:BasicObject = Send v14, &block, :map, v16 # SendFallbackReason: Complex argument passing
11652+ v29:BasicObject = Send v14, &block, :map, v16 # SendFallbackReason: Send: block argument is not nil
1164911653 CheckInterrupts
1165011654 Return v29
1165111655 " ) ;
0 commit comments