Skip to content

Commit 31fab44

Browse files
neildharfacebook-github-bot
authored andcommitted
Allow CodeMotion to sink instructions with multiple users
Summary: CodeMotion currently only sinks instructions if they have a single user. Add the ability to sink an instruction that has multiple users, by finding the common dominator of all the users and moving the instruction there. Reviewed By: avp Differential Revision: D61550418 fbshipit-source-id: 3d0d0c9c5f037ed6565d9e7fb8e0c72a27262e54
1 parent 6ca946b commit 31fab44

File tree

4 files changed

+137
-82
lines changed

4 files changed

+137
-82
lines changed

lib/Optimizer/Scalar/CodeMotion.cpp

+55
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,61 @@ static bool sinkInstructionsInBlock(
216216
++NumCM;
217217
++NumSunk;
218218
}
219+
220+
// If the instruction has multiple users, we will sink it to the first
221+
// common dominator of all of them, tracked by this variable.
222+
BasicBlock *newBlock = nullptr;
223+
224+
/// Update newBlock to account for a user in \p useBB.
225+
auto merge = [&newBlock, &dominance](BasicBlock *useBB) {
226+
newBlock = newBlock
227+
? dominance.findNearestCommonDominator(newBlock, useBB)
228+
: useBB;
229+
};
230+
for (auto *U : I->getUsers()) {
231+
if (auto *phi = llvh::dyn_cast<PhiInst>(U)) {
232+
// For Phi, ensure that the new block dominates the blocks from which
233+
// this instruction is the incoming value.
234+
for (unsigned i = 0, e = phi->getNumEntries(); i < e; ++i) {
235+
auto [val, pred] = phi->getEntry(i);
236+
if (val == I)
237+
merge(pred);
238+
}
239+
continue;
240+
}
241+
242+
// If the user is some other FirstInBlock instruction, give up.
243+
if (U->getSideEffect().getFirstInBlock()) {
244+
newBlock = nullptr;
245+
break;
246+
}
247+
248+
// Ensure that the new block dominates this user.
249+
merge(U->getParent());
250+
}
251+
252+
// If no new block was determined, move on.
253+
if (!newBlock || newBlock == BB)
254+
continue;
255+
256+
// If we cannot prove that the new location is in the same loop as the
257+
// current location, bail.
258+
if (loops.isBlockInLoop(newBlock)) {
259+
auto *nbHeader = loops.getLoopHeader(newBlock);
260+
if (!nbHeader || nbHeader != header)
261+
continue;
262+
}
263+
264+
// Move the instruction to the first available location in the new block.
265+
for (auto &newLoc : *newBlock) {
266+
if (!newLoc.getSideEffect().getFirstInBlock()) {
267+
I->moveBefore(&newLoc);
268+
changed = true;
269+
++NumCM;
270+
++NumSunk;
271+
break;
272+
}
273+
}
219274
}
220275
return changed;
221276
}

test/BCGen/HBC/local_var_in_global_function.js

+14-14
Original file line numberDiff line numberDiff line change
@@ -31,30 +31,30 @@ print(e);
3131

3232
// RA:function global(): any
3333
// RA-NEXT:%BB0:
34-
// RA-NEXT: {r1} %0 = CreateScopeInst (:environment) %VS0: any, empty: any
3534
// RA-NEXT: DeclareGlobalVarInst "inner": string
3635
// RA-NEXT: DeclareGlobalVarInst "e": string
37-
// RA-NEXT: {r0} %3 = HBCGetGlobalObjectInst (:object)
38-
// RA-NEXT: {r2} %4 = HBCLoadConstInst (:string) "global": string
39-
// RA-NEXT: StorePropertyLooseInst {r2} %4: string, {r0} %3: object, "e": string
36+
// RA-NEXT: {r0} %2 = HBCGetGlobalObjectInst (:object)
37+
// RA-NEXT: {r1} %3 = HBCLoadConstInst (:string) "global": string
38+
// RA-NEXT: StorePropertyLooseInst {r1} %3: string, {r0} %2: object, "e": string
4039
// RA-NEXT: TryStartInst %BB1, %BB2
4140
// RA-NEXT:%BB1:
42-
// RA-NEXT: {r2} %7 = CatchInst (:any)
43-
// RA-NEXT: StoreFrameInst {r1} %0: environment, {r2} %7: any, [%VS0.e]: any
44-
// RA-NEXT: {r1} %9 = CreateFunctionInst (:object) {r1} %0: environment, %VS0: any, %local(): functionCode
45-
// RA-NEXT: StorePropertyLooseInst {r1} %9: object, {r0} %3: object, "local": string
46-
// RA-NEXT: {r3} %11 = TryLoadGlobalPropertyInst (:any) {r0} %3: object, "print": string
47-
// RA-NEXT: {r1} %12 = TryLoadGlobalPropertyInst (:any) {r0} %3: object, "local": string
41+
// RA-NEXT: {r2} %6 = CatchInst (:any)
42+
// RA-NEXT: {r1} %7 = CreateScopeInst (:environment) %VS0: any, empty: any
43+
// RA-NEXT: StoreFrameInst {r1} %7: environment, {r2} %6: any, [%VS0.e]: any
44+
// RA-NEXT: {r1} %9 = CreateFunctionInst (:object) {r1} %7: environment, %VS0: any, %local(): functionCode
45+
// RA-NEXT: StorePropertyLooseInst {r1} %9: object, {r0} %2: object, "local": string
46+
// RA-NEXT: {r3} %11 = TryLoadGlobalPropertyInst (:any) {r0} %2: object, "print": string
47+
// RA-NEXT: {r1} %12 = TryLoadGlobalPropertyInst (:any) {r0} %2: object, "local": string
4848
// RA-NEXT: {r2} %13 = HBCLoadConstInst (:undefined) undefined: undefined
4949
// RA-NEXT: {r1} %14 = HBCCallNInst (:any) {r1} %12: any, empty: any, false: boolean, empty: any, undefined: undefined, {r2} %13: undefined
5050
// RA-NEXT: {r1} %15 = HBCCallNInst (:any) {r3} %11: any, empty: any, false: boolean, empty: any, undefined: undefined, {r2} %13: undefined, {r1} %14: any
51-
// RA-NEXT: {r1} %16 = TryLoadGlobalPropertyInst (:any) {r0} %3: object, "print": string
52-
// RA-NEXT: {r0} %17 = LoadPropertyInst (:any) {r0} %3: object, "e": string
51+
// RA-NEXT: {r1} %16 = TryLoadGlobalPropertyInst (:any) {r0} %2: object, "print": string
52+
// RA-NEXT: {r0} %17 = LoadPropertyInst (:any) {r0} %2: object, "e": string
5353
// RA-NEXT: {r0} %18 = HBCCallNInst (:any) {r1} %16: any, empty: any, false: boolean, empty: any, undefined: undefined, {r2} %13: undefined, {r0} %17: any
5454
// RA-NEXT: ReturnInst {r0} %18: any
5555
// RA-NEXT:%BB2:
56-
// RA-NEXT: {r2} %20 = HBCLoadConstInst (:string) "local": string
57-
// RA-NEXT: ThrowInst {r2} %20: string, %BB1
56+
// RA-NEXT: {r1} %20 = HBCLoadConstInst (:string) "local": string
57+
// RA-NEXT: ThrowInst {r1} %20: string, %BB1
5858
// RA-NEXT:function_end
5959

6060
// RA:scope %VS0 [e: any]

test/BCGen/HBC/switch.js

+60-60
Original file line numberDiff line numberDiff line change
@@ -142,43 +142,43 @@ function switch_neg(x) {
142142

143143
// CHECK:function f(x: any): string
144144
// CHECK-NEXT:%BB0:
145-
// CHECK-NEXT: {r0} %0 = LoadParamInst (:any) %x: any
146145
// CHECK-NEXT: BranchInst %BB10
147146
// CHECK-NEXT:%BB1:
148-
// CHECK-NEXT: {r0} %2 = HBCLoadConstInst (:string) "regular": string
149-
// CHECK-NEXT: ReturnInst {r0} %2: string
147+
// CHECK-NEXT: {r0} %1 = HBCLoadConstInst (:string) "regular": string
148+
// CHECK-NEXT: ReturnInst {r0} %1: string
150149
// CHECK-NEXT:%BB2:
151-
// CHECK-NEXT: {r0} %4 = HBCLoadConstInst (:string) "multicase": string
152-
// CHECK-NEXT: ReturnInst {r0} %4: string
150+
// CHECK-NEXT: {r0} %3 = HBCLoadConstInst (:string) "multicase": string
151+
// CHECK-NEXT: ReturnInst {r0} %3: string
153152
// CHECK-NEXT:%BB3:
154-
// CHECK-NEXT: {r0} %6 = HBCLoadConstInst (:string) "fall": string
155-
// CHECK-NEXT: {r1} %7 = MovInst (:string) {r0} %6: string
153+
// CHECK-NEXT: {r0} %5 = HBCLoadConstInst (:string) "fall": string
154+
// CHECK-NEXT: {r1} %6 = MovInst (:string) {r0} %5: string
156155
// CHECK-NEXT: BranchInst %BB4
157156
// CHECK-NEXT:%BB4:
158-
// CHECK-NEXT: {r1} %9 = PhiInst (:string) {r1} %7: string, %BB3, {r1} %17: string, %BB6
159-
// CHECK-NEXT: {r0} %10 = HBCLoadConstInst (:string) "through": string
160-
// CHECK-NEXT: {r0} %11 = HBCStringConcatInst (:string) {r1} %9: string, {r0} %10: string
161-
// CHECK-NEXT: ReturnInst {r0} %11: string
157+
// CHECK-NEXT: {r1} %8 = PhiInst (:string) {r1} %6: string, %BB3, {r1} %16: string, %BB6
158+
// CHECK-NEXT: {r0} %9 = HBCLoadConstInst (:string) "through": string
159+
// CHECK-NEXT: {r0} %10 = HBCStringConcatInst (:string) {r1} %8: string, {r0} %9: string
160+
// CHECK-NEXT: ReturnInst {r0} %10: string
162161
// CHECK-NEXT:%BB5:
163-
// CHECK-NEXT: {r0} %13 = HBCLoadConstInst (:string) "default": string
164-
// CHECK-NEXT: ReturnInst {r0} %13: string
162+
// CHECK-NEXT: {r0} %12 = HBCLoadConstInst (:string) "default": string
163+
// CHECK-NEXT: ReturnInst {r0} %12: string
165164
// CHECK-NEXT:%BB6:
166-
// CHECK-NEXT: {r1} %15 = HBCLoadConstInst (:string) "": string
167-
// CHECK-NEXT: {n0} %16 = HBCLoadConstInst (:number) 4: number
168-
// CHECK-NEXT: {r1} %17 = MovInst (:string) {r1} %15: string
169-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %16: number, {r0} %0: any, %BB4, %BB5
165+
// CHECK-NEXT: {r1} %14 = HBCLoadConstInst (:string) "": string
166+
// CHECK-NEXT: {n0} %15 = HBCLoadConstInst (:number) 4: number
167+
// CHECK-NEXT: {r1} %16 = MovInst (:string) {r1} %14: string
168+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %15: number, {r0} %24: any, %BB4, %BB5
170169
// CHECK-NEXT:%BB7:
171-
// CHECK-NEXT: {n0} %19 = HBCLoadConstInst (:number) 3: number
172-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %19: number, {r0} %0: any, %BB3, %BB6
170+
// CHECK-NEXT: {n0} %18 = HBCLoadConstInst (:number) 3: number
171+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %18: number, {r0} %24: any, %BB3, %BB6
173172
// CHECK-NEXT:%BB8:
174-
// CHECK-NEXT: {n0} %21 = HBCLoadConstInst (:number) 2: number
175-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %21: number, {r0} %0: any, %BB2, %BB7
173+
// CHECK-NEXT: {n0} %20 = HBCLoadConstInst (:number) 2: number
174+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %20: number, {r0} %24: any, %BB2, %BB7
176175
// CHECK-NEXT:%BB9:
177-
// CHECK-NEXT: {n0} %23 = HBCLoadConstInst (:number) 1: number
178-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %23: number, {r0} %0: any, %BB2, %BB8
176+
// CHECK-NEXT: {n0} %22 = HBCLoadConstInst (:number) 1: number
177+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %22: number, {r0} %24: any, %BB2, %BB8
179178
// CHECK-NEXT:%BB10:
179+
// CHECK-NEXT: {r0} %24 = LoadParamInst (:any) %x: any
180180
// CHECK-NEXT: {n0} %25 = HBCLoadConstInst (:number) 0: number
181-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %25: number, {r0} %0: any, %BB1, %BB9
181+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %25: number, {r0} %24: any, %BB1, %BB9
182182
// CHECK-NEXT:function_end
183183

184184
// CHECK:function regress1(w: any): any [noReturn]
@@ -247,29 +247,29 @@ function switch_neg(x) {
247247

248248
// CHECK:function string_switch(x: any): undefined|number
249249
// CHECK-NEXT:%BB0:
250-
// CHECK-NEXT: {r1} %0 = LoadParamInst (:any) %x: any
251250
// CHECK-NEXT: BranchInst %BB7
252251
// CHECK-NEXT:%BB1:
253-
// CHECK-NEXT: {np0} %2 = HBCLoadConstInst (:undefined) undefined: undefined
254-
// CHECK-NEXT: ReturnInst {np0} %2: undefined
252+
// CHECK-NEXT: {np0} %1 = HBCLoadConstInst (:undefined) undefined: undefined
253+
// CHECK-NEXT: ReturnInst {np0} %1: undefined
255254
// CHECK-NEXT:%BB2:
256-
// CHECK-NEXT: {n0} %4 = HBCLoadConstInst (:number) 1: number
257-
// CHECK-NEXT: ReturnInst {n0} %4: number
255+
// CHECK-NEXT: {n0} %3 = HBCLoadConstInst (:number) 1: number
256+
// CHECK-NEXT: ReturnInst {n0} %3: number
258257
// CHECK-NEXT:%BB3:
259-
// CHECK-NEXT: {n0} %6 = HBCLoadConstInst (:number) 2: number
260-
// CHECK-NEXT: ReturnInst {n0} %6: number
258+
// CHECK-NEXT: {n0} %5 = HBCLoadConstInst (:number) 2: number
259+
// CHECK-NEXT: ReturnInst {n0} %5: number
261260
// CHECK-NEXT:%BB4:
262-
// CHECK-NEXT: {n0} %8 = HBCLoadConstInst (:number) 3: number
263-
// CHECK-NEXT: ReturnInst {n0} %8: number
261+
// CHECK-NEXT: {n0} %7 = HBCLoadConstInst (:number) 3: number
262+
// CHECK-NEXT: ReturnInst {n0} %7: number
264263
// CHECK-NEXT:%BB5:
265-
// CHECK-NEXT: {r0} %10 = HBCLoadConstInst (:string) "c": string
266-
// CHECK-NEXT: CmpBrStrictlyEqualInst {r0} %10: string, {r1} %0: any, %BB4, %BB1
264+
// CHECK-NEXT: {r0} %9 = HBCLoadConstInst (:string) "c": string
265+
// CHECK-NEXT: CmpBrStrictlyEqualInst {r0} %9: string, {r1} %13: any, %BB4, %BB1
267266
// CHECK-NEXT:%BB6:
268-
// CHECK-NEXT: {r0} %12 = HBCLoadConstInst (:string) "b": string
269-
// CHECK-NEXT: CmpBrStrictlyEqualInst {r0} %12: string, {r1} %0: any, %BB3, %BB5
267+
// CHECK-NEXT: {r0} %11 = HBCLoadConstInst (:string) "b": string
268+
// CHECK-NEXT: CmpBrStrictlyEqualInst {r0} %11: string, {r1} %13: any, %BB3, %BB5
270269
// CHECK-NEXT:%BB7:
270+
// CHECK-NEXT: {r1} %13 = LoadParamInst (:any) %x: any
271271
// CHECK-NEXT: {r0} %14 = HBCLoadConstInst (:string) "a": string
272-
// CHECK-NEXT: CmpBrStrictlyEqualInst {r0} %14: string, {r1} %0: any, %BB2, %BB6
272+
// CHECK-NEXT: CmpBrStrictlyEqualInst {r0} %14: string, {r1} %13: any, %BB2, %BB6
273273
// CHECK-NEXT:function_end
274274

275275
// CHECK:function switch_uint32(x: any): number
@@ -286,39 +286,39 @@ function switch_neg(x) {
286286

287287
// CHECK:function switch_neg(x: any): number
288288
// CHECK-NEXT:%BB0:
289-
// CHECK-NEXT: {r0} %0 = LoadParamInst (:any) %x: any
290289
// CHECK-NEXT: BranchInst %BB11
291290
// CHECK-NEXT:%BB1:
292-
// CHECK-NEXT: {n0} %2 = HBCLoadConstInst (:number) 1: number
293-
// CHECK-NEXT: ReturnInst {n0} %2: number
291+
// CHECK-NEXT: {n0} %1 = HBCLoadConstInst (:number) 1: number
292+
// CHECK-NEXT: ReturnInst {n0} %1: number
294293
// CHECK-NEXT:%BB2:
295-
// CHECK-NEXT: {n0} %4 = HBCLoadConstInst (:number) 0: number
296-
// CHECK-NEXT: ReturnInst {n0} %4: number
294+
// CHECK-NEXT: {n0} %3 = HBCLoadConstInst (:number) 0: number
295+
// CHECK-NEXT: ReturnInst {n0} %3: number
297296
// CHECK-NEXT:%BB3:
298-
// CHECK-NEXT: {n0} %6 = HBCLoadConstInst (:number) -9: number
299-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %6: number, {r0} %0: any, %BB2, %BB1
297+
// CHECK-NEXT: {n0} %5 = HBCLoadConstInst (:number) -9: number
298+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %5: number, {r0} %21: any, %BB2, %BB1
300299
// CHECK-NEXT:%BB4:
301-
// CHECK-NEXT: {n0} %8 = HBCLoadConstInst (:number) -8: number
302-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %8: number, {r0} %0: any, %BB2, %BB3
300+
// CHECK-NEXT: {n0} %7 = HBCLoadConstInst (:number) -8: number
301+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %7: number, {r0} %21: any, %BB2, %BB3
303302
// CHECK-NEXT:%BB5:
304-
// CHECK-NEXT: {n0} %10 = HBCLoadConstInst (:number) -7: number
305-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %10: number, {r0} %0: any, %BB2, %BB4
303+
// CHECK-NEXT: {n0} %9 = HBCLoadConstInst (:number) -7: number
304+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %9: number, {r0} %21: any, %BB2, %BB4
306305
// CHECK-NEXT:%BB6:
307-
// CHECK-NEXT: {n0} %12 = HBCLoadConstInst (:number) -6: number
308-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %12: number, {r0} %0: any, %BB2, %BB5
306+
// CHECK-NEXT: {n0} %11 = HBCLoadConstInst (:number) -6: number
307+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %11: number, {r0} %21: any, %BB2, %BB5
309308
// CHECK-NEXT:%BB7:
310-
// CHECK-NEXT: {n0} %14 = HBCLoadConstInst (:number) -5: number
311-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %14: number, {r0} %0: any, %BB2, %BB6
309+
// CHECK-NEXT: {n0} %13 = HBCLoadConstInst (:number) -5: number
310+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %13: number, {r0} %21: any, %BB2, %BB6
312311
// CHECK-NEXT:%BB8:
313-
// CHECK-NEXT: {n0} %16 = HBCLoadConstInst (:number) -4: number
314-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %16: number, {r0} %0: any, %BB2, %BB7
312+
// CHECK-NEXT: {n0} %15 = HBCLoadConstInst (:number) -4: number
313+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %15: number, {r0} %21: any, %BB2, %BB7
315314
// CHECK-NEXT:%BB9:
316-
// CHECK-NEXT: {n0} %18 = HBCLoadConstInst (:number) -3: number
317-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %18: number, {r0} %0: any, %BB2, %BB8
315+
// CHECK-NEXT: {n0} %17 = HBCLoadConstInst (:number) -3: number
316+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %17: number, {r0} %21: any, %BB2, %BB8
318317
// CHECK-NEXT:%BB10:
319-
// CHECK-NEXT: {n0} %20 = HBCLoadConstInst (:number) -2: number
320-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %20: number, {r0} %0: any, %BB2, %BB9
318+
// CHECK-NEXT: {n0} %19 = HBCLoadConstInst (:number) -2: number
319+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %19: number, {r0} %21: any, %BB2, %BB9
321320
// CHECK-NEXT:%BB11:
321+
// CHECK-NEXT: {r0} %21 = LoadParamInst (:any) %x: any
322322
// CHECK-NEXT: {n0} %22 = HBCLoadConstInst (:number) -1: number
323-
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %22: number, {r0} %0: any, %BB2, %BB10
323+
// CHECK-NEXT: CmpBrStrictlyEqualInst {n0} %22: number, {r0} %21: any, %BB2, %BB10
324324
// CHECK-NEXT:function_end

test/BCGen/SH/switch_default_regress.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,20 @@ function foo(i) {
5757

5858
// CHKLIR:function foo(i: any): any
5959
// CHKLIR-NEXT:%BB0:
60-
// CHKLIR-NEXT: %0 = LoadParamInst (:any) %i: any
6160
// CHKLIR-NEXT: BranchInst %BB4
6261
// CHKLIR-NEXT:%BB1:
63-
// CHKLIR-NEXT: %2 = PhiInst (:any) %4: number, %BB2, %0: any, %BB3
64-
// CHKLIR-NEXT: ReturnInst %2: any
62+
// CHKLIR-NEXT: %1 = PhiInst (:any) %3: number, %BB2, %8: any, %BB3
63+
// CHKLIR-NEXT: ReturnInst %1: any
6564
// CHKLIR-NEXT:%BB2:
66-
// CHKLIR-NEXT: %4 = HBCLoadConstInst (:number) 2: number
65+
// CHKLIR-NEXT: %3 = HBCLoadConstInst (:number) 2: number
6766
// CHKLIR-NEXT: BranchInst %BB1
6867
// CHKLIR-NEXT:%BB3:
69-
// CHKLIR-NEXT: %6 = HBCLoadConstInst (:number) 1: number
70-
// CHKLIR-NEXT: %7 = BinaryStrictlyEqualInst (:boolean) %6: number, %0: any
71-
// CHKLIR-NEXT: CondBranchInst %7: boolean, %BB1, %BB1
68+
// CHKLIR-NEXT: %5 = HBCLoadConstInst (:number) 1: number
69+
// CHKLIR-NEXT: %6 = BinaryStrictlyEqualInst (:boolean) %5: number, %8: any
70+
// CHKLIR-NEXT: CondBranchInst %6: boolean, %BB1, %BB1
7271
// CHKLIR-NEXT:%BB4:
72+
// CHKLIR-NEXT: %8 = LoadParamInst (:any) %i: any
7373
// CHKLIR-NEXT: %9 = HBCLoadConstInst (:number) 0: number
74-
// CHKLIR-NEXT: %10 = BinaryStrictlyEqualInst (:boolean) %9: number, %0: any
74+
// CHKLIR-NEXT: %10 = BinaryStrictlyEqualInst (:boolean) %9: number, %8: any
7575
// CHKLIR-NEXT: CondBranchInst %10: boolean, %BB2, %BB3
7676
// CHKLIR-NEXT:function_end

0 commit comments

Comments
 (0)