Skip to content

Commit 565a33c

Browse files
dulmarodmeta-codesync[bot]
authored andcommitted
[swift] Fix redundant dereferencing of Swift object pointers in conditional merge points
Reviewed By: ngorogiannis Differential Revision: D100999013 fbshipit-source-id: 1f545ec0074377490d12d03ad684f0cc3a84f0bd
1 parent 13f45a9 commit 565a33c

4 files changed

Lines changed: 6 additions & 15 deletions

File tree

infer/src/llvm/Llair2Textual.ml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -210,12 +210,10 @@ let add_deref ~proc_state ?from_call exp loc =
210210
| Textual.Exp.Var id -> (
211211
let id_data = IdentMap.find_opt id proc_state.ProcState.ids_move in
212212
match id_data with
213-
| Some {loaded_var= true} ->
213+
| Some {loaded_var= true} | Some {deref_needed= false} ->
214214
([], exp)
215215
| Some {deref_needed= true} ->
216216
add_load_instr
217-
| Some {typ= Some {typ= Textual.Typ.Ptr _}} ->
218-
add_load_instr
219217
| _ ->
220218
([], exp) )
221219
| _ ->
@@ -235,8 +233,6 @@ let should_add_deref ~proc_state exp =
235233
false
236234
| Some {deref_needed= true} ->
237235
true
238-
| Some {typ= Some {typ= Textual.Typ.Ptr _}} ->
239-
true
240236
| _ ->
241237
false )
242238
| _ ->

infer/tests/codetoanalyze/swift/frontend/base.swift.sil

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1707,8 +1707,7 @@ define .plain_name = "init" $s5Hello5ParamC4size7qualityAcA8TestSizeVSg_AA7Quali
17071707
n151:*__infer_swift_type<TSa> = load &var19 @[67:30]
17081708
n152:*__infer_swift_type<Ts12_ArrayBufferV> = load n151.__infer_swift_type<TSa>.field_0 @[67:30]
17091709
n153:*__infer_swift_type<Ts14_BridgeStorageV> = load n152.__infer_swift_type<Ts12_ArrayBufferV>.field_0 @[67:30]
1710-
n150 = load n146 @[67:30]
1711-
store n153.__infer_swift_type<Ts14_BridgeStorageV>.field_0 <- n150 @[67:30]
1710+
store n153.__infer_swift_type<Ts14_BridgeStorageV>.field_0 <- n146 @[67:30]
17121711
n157 = $sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC("_", 1, 1) @[67:72]
17131712
jmp 113::ret @[67:72]
17141713

infer/tests/codetoanalyze/swift/frontend/rc_delegate.swift.sil

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1570,8 +1570,7 @@ define .plain_name = "delegate.modify" .method_offset = "5" __infer_swift_type<$
15701570
store &getelementptr_offset_1 <- 13 @[0:0]
15711571
n7 = load &getelementptr_offset_1 @[0:0]
15721572
n8 = $builtins.llvm_nondet() @[0:0]
1573-
n10 = load n8 @[0:0]
1574-
n12 = $builtins.llvm_dynamic_call(n7, n10, n5) @[0:0]
1573+
n12 = $builtins.llvm_dynamic_call(n7, n8, n5) @[0:0]
15751574
jmp 12::ret @[0:0]
15761575

15771576
} @?
@@ -1908,8 +1907,7 @@ define .plain_name = "delegate.modify" .method_offset = "5" __infer_swift_type<$
19081907
store &getelementptr_offset_1 <- 13 @[0:0]
19091908
n7 = load &getelementptr_offset_1 @[0:0]
19101909
n8 = $builtins.llvm_nondet() @[0:0]
1911-
n10 = load n8 @[0:0]
1912-
n12 = $builtins.llvm_dynamic_call(n7, n10, n5) @[0:0]
1910+
n12 = $builtins.llvm_dynamic_call(n7, n8, n5) @[0:0]
19131911
jmp 12::ret @[0:0]
19141912

19151913
} @?

infer/tests/codetoanalyze/swift/frontend/segfault.swift.sil

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ define .plain_name = "test_getelementptr_segfault" $s5Hello27test_getelementptr_
7171
jmp 33::ret @[4:9]
7272

7373
#33::ret: @[4:9]
74-
n45:*__infer_tuple_class<*__infer_swift_type<TSS>,*__infer_swift_type<TSS>> = load n40 @[4:9]
75-
n46:*__infer_swift_type<TSS> = load n45.__infer_tuple_class<*__infer_swift_type<TSS>,*__infer_swift_type<TSS>>.__infer_tuple_field_0 @[4:9]
74+
n46:*__infer_swift_type<TSS> = load n40.__infer_tuple_class<*__infer_swift_type<TSS>,*__infer_swift_type<TSS>>.__infer_tuple_field_0 @[4:9]
7675
n47:*__infer_swift_type<Ts11_StringGutsV> = load n46.__infer_swift_type<TSS>.field_0 @[4:9]
7776
n48 = n47.__infer_swift_type<Ts11_StringGutsV>.field_0 @[4:9]
7877
n51:*__infer_swift_type<Ts13_StringObjectV> = load n48 @[4:9]
@@ -92,8 +91,7 @@ define .plain_name = "test_getelementptr_segfault" $s5Hello27test_getelementptr_
9291
jmp 42::ret @[4:14]
9392

9493
#42::ret: @[4:14]
95-
n62:*__infer_tuple_class<*__infer_swift_type<TSS>,*__infer_swift_type<TSS>> = load n40 @[4:14]
96-
n63:*__infer_swift_type<TSS> = load n62.__infer_tuple_class<*__infer_swift_type<TSS>,*__infer_swift_type<TSS>>.__infer_tuple_field_1 @[4:14]
94+
n63:*__infer_swift_type<TSS> = load n40.__infer_tuple_class<*__infer_swift_type<TSS>,*__infer_swift_type<TSS>>.__infer_tuple_field_1 @[4:14]
9795
n64:*__infer_swift_type<Ts11_StringGutsV> = load n63.__infer_swift_type<TSS>.field_0 @[4:14]
9896
n65 = n64.__infer_swift_type<Ts11_StringGutsV>.field_0 @[4:14]
9997
n68:*__infer_swift_type<Ts13_StringObjectV> = load n65 @[4:14]

0 commit comments

Comments
 (0)