Skip to content

Commit 7ea5c2b

Browse files
committed
Merge branch 'PHP-8.4'
* PHP-8.4: Update IR
2 parents 0c6b838 + 93740d0 commit 7ea5c2b

File tree

4 files changed

+59
-53
lines changed

4 files changed

+59
-53
lines changed

ext/opcache/jit/ir/ir_builder.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -490,20 +490,20 @@ extern "C" {
490490
#define ir_ADD_OFFSET(_addr, _offset) _ir_ADD_OFFSET(_ir_CTX, (_addr), (_offset))
491491

492492
/* Unfoldable variant of COPY */
493-
#define ir_HARD_COPY(_type, _op1) ir_BINARY_OP(IR_COPY, (_type), (_op1), 1)
494-
#define ir_HARD_COPY_B(_op1) ir_BINARY_OP_B(IR_COPY, (_op1), 1)
495-
#define ir_HARD_COPY_U8(_op1) ir_BINARY_OP_U8(IR_COPY, (_op1), 1)
496-
#define ir_HARD_COPY_U16(_op1) ir_BINARY_OP_U16(IR_COPY, (_op1), 1)
497-
#define ir_HARD_COPY_U32(_op1) ir_BINARY_OP_U32(IR_COPY, (_op1), 1)
498-
#define ir_HARD_COPY_U64(_op1) ir_BINARY_OP_U64(IR_COPY, (_op1), 1)
499-
#define ir_HARD_COPY_A(_op1) ir_BINARY_OP_A(IR_COPY, (_op1), 1)
500-
#define ir_HARD_COPY_C(_op1) ir_BINARY_OP_C(IR_COPY, (_op1), 1)
501-
#define ir_HARD_COPY_I8(_op1) ir_BINARY_OP_I8(IR_COPY, (_op1), 1)
502-
#define ir_HARD_COPY_I16(_op1) ir_BINARY_OP_I16(IR_COPY, (_op1), 1)
503-
#define ir_HARD_COPY_I32(_op1) ir_BINARY_OP_I32(IR_COPY, (_op1), 1)
504-
#define ir_HARD_COPY_I64(_op1) ir_BINARY_OP_I64(IR_COPY, (_op1), 1)
505-
#define ir_HARD_COPY_D(_op1) ir_BINARY_OP_D(IR_COPY, (_op1), 1)
506-
#define ir_HARD_COPY_F(_op1) ir_BINARY_OP_F(IR_COPY, (_op1), 1)
493+
#define ir_HARD_COPY(_type, _op1) ir_emit2(_ir_CTX, IR_OPT(IR_COPY, (_type)), (_op1), 1)
494+
#define ir_HARD_COPY_B(_op1) ir_HARD_COPY(IR_BOOL, _op1)
495+
#define ir_HARD_COPY_U8(_op1) ir_HARD_COPY(IR_U8, _op1)
496+
#define ir_HARD_COPY_U16(_op1) ir_HARD_COPY(IR_U16, _op1)
497+
#define ir_HARD_COPY_U32(_op1) ir_HARD_COPY(IR_U32, _op1)
498+
#define ir_HARD_COPY_U64(_op1) ir_HARD_COPY(IR_U64, _op1)
499+
#define ir_HARD_COPY_A(_op1) ir_HARD_COPY(IR_ADDR, _op1)
500+
#define ir_HARD_COPY_C(_op1) ir_HARD_COPY(IR_CHAR, _op1)
501+
#define ir_HARD_COPY_I8(_op1) ir_HARD_COPY(IR_I8, _op1)
502+
#define ir_HARD_COPY_I16(_op1) ir_HARD_COPY(IR_I16, _op1)
503+
#define ir_HARD_COPY_I32(_op1) ir_HARD_COPY(IR_I32, _op1)
504+
#define ir_HARD_COPY_I64(_op1) ir_HARD_COPY(IR_I64, _op1)
505+
#define ir_HARD_COPY_D(_op1) ir_HARD_COPY(IR_DOUBLE, _op1)
506+
#define ir_HARD_COPY_F(_op1) ir_HARD_COPY(IR_FLOAT, _op1)
507507

508508
#define ir_PARAM(_type, _name, _num) _ir_PARAM(_ir_CTX, (_type), (_name), (_num))
509509
#define ir_VAR(_type, _name) _ir_VAR(_ir_CTX, (_type), (_name))

ext/opcache/jit/ir/ir_fold.h

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,7 @@ IR_FOLD(SHL(C_CHAR, C_CHAR))
924924
IR_FOLD(SHL(C_I8, C_I8))
925925
{
926926
IR_ASSERT(IR_OPT_TYPE(opt) == op1_insn->type);
927-
IR_FOLD_CONST_I(op1_insn->val.i8 << op2_insn->val.i8);
927+
IR_FOLD_CONST_I((int8_t)(op1_insn->val.u8 << op2_insn->val.u8));
928928
}
929929

930930
IR_FOLD(SHL(C_U16, C_U16))
@@ -936,7 +936,7 @@ IR_FOLD(SHL(C_U16, C_U16))
936936
IR_FOLD(SHL(C_I16, C_I16))
937937
{
938938
IR_ASSERT(IR_OPT_TYPE(opt) == op1_insn->type);
939-
IR_FOLD_CONST_I(op1_insn->val.i16 << op2_insn->val.i16);
939+
IR_FOLD_CONST_I((int16_t)(op1_insn->val.u16 << op2_insn->val.u16));
940940
}
941941

942942
IR_FOLD(SHL(C_U32, C_U32))
@@ -948,7 +948,7 @@ IR_FOLD(SHL(C_U32, C_U32))
948948
IR_FOLD(SHL(C_I32, C_I32))
949949
{
950950
IR_ASSERT(IR_OPT_TYPE(opt) == op1_insn->type);
951-
IR_FOLD_CONST_I(op1_insn->val.i32 << op2_insn->val.i32);
951+
IR_FOLD_CONST_I((int32_t)(op1_insn->val.u32 << op2_insn->val.u32));
952952
}
953953

954954
IR_FOLD(SHL(C_U64, C_U64))
@@ -980,7 +980,7 @@ IR_FOLD(SHR(C_U16, C_U16))
980980
IR_FOLD(SHR(C_I16, C_I16))
981981
{
982982
IR_ASSERT(IR_OPT_TYPE(opt) == op1_insn->type);
983-
IR_FOLD_CONST_U((int16_t)(op1_insn->val.u16 >> op2_insn->val.u16));
983+
IR_FOLD_CONST_I((int16_t)(op1_insn->val.u16 >> op2_insn->val.u16));
984984
}
985985

986986
IR_FOLD(SHR(C_U32, C_U32))
@@ -992,7 +992,7 @@ IR_FOLD(SHR(C_U32, C_U32))
992992
IR_FOLD(SHR(C_I32, C_I32))
993993
{
994994
IR_ASSERT(IR_OPT_TYPE(opt) == op1_insn->type);
995-
IR_FOLD_CONST_U((int32_t)(op1_insn->val.u32 >> op2_insn->val.u32));
995+
IR_FOLD_CONST_I((int32_t)(op1_insn->val.u32 >> op2_insn->val.u32));
996996
}
997997

998998
IR_FOLD(SHR(C_U64, C_U64))
@@ -2728,7 +2728,7 @@ IR_FOLD(ADD(ADD, C_ADDR))
27282728
/* (x + c1) + c2 => x + (c1 + c2) */
27292729
val.u64 = ctx->ir_base[op1_insn->op2].val.u64 + op2_insn->val.u64;
27302730
op1 = op1_insn->op1;
2731-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2731+
op2 = ir_const(ctx, val, op2_insn->type);
27322732
IR_FOLD_RESTART;
27332733
}
27342734
IR_FOLD_NEXT;
@@ -2743,7 +2743,7 @@ IR_FOLD(ADD(ADD, C_I64))
27432743
/* (x + c1) + c2 => x + (c1 + c2) */
27442744
val.i64 = ctx->ir_base[op1_insn->op2].val.u64 + op2_insn->val.u64;
27452745
op1 = op1_insn->op1;
2746-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2746+
op2 = ir_const(ctx, val, op2_insn->type);
27472747
IR_FOLD_RESTART;
27482748
}
27492749
IR_FOLD_NEXT;
@@ -2759,14 +2759,14 @@ IR_FOLD(ADD(SUB, C_ADDR))
27592759
/* (x - c1) + c2 => x + (c2 - c1) */
27602760
val.u64 = op2_insn->val.u64 - ctx->ir_base[op1_insn->op2].val.u64;
27612761
op1 = op1_insn->op1;
2762-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2762+
op2 = ir_const(ctx, val, op2_insn->type);
27632763
IR_FOLD_RESTART;
27642764
} else if (IR_IS_CONST_REF(op1_insn->op1) && !IR_IS_SYM_CONST(ctx->ir_base[op1_insn->op1].op)) {
27652765
/* (c1 - x) + c2 => (c1 + c2) - x */
27662766
val.u64 = ctx->ir_base[op1_insn->op1].val.u64 + op2_insn->val.u64;
27672767
opt++; /* ADD -> SUB */
27682768
op2 = op1_insn->op2;
2769-
op1 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2769+
op1 = ir_const(ctx, val, op2_insn->type);
27702770
IR_FOLD_RESTART;
27712771
}
27722772
IR_FOLD_NEXT;
@@ -2785,14 +2785,14 @@ IR_FOLD(ADD(SUB, C_I64))
27852785
opt++; /* ADD -> SUB */
27862786
}
27872787
op1 = op1_insn->op1;
2788-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2788+
op2 = ir_const(ctx, val, op2_insn->type);
27892789
IR_FOLD_RESTART;
27902790
} else if (IR_IS_CONST_REF(op1_insn->op1) && !IR_IS_SYM_CONST(ctx->ir_base[op1_insn->op1].op)) {
27912791
/* (c1 - x) + c2 => (c1 + c2) - x */
27922792
val.i64 = ctx->ir_base[op1_insn->op1].val.u64 + op2_insn->val.u64;
27932793
opt++; /* ADD -> SUB */
27942794
op2 = op1_insn->op2;
2795-
op1 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2795+
op1 = ir_const(ctx, val, op2_insn->type);
27962796
IR_FOLD_RESTART;
27972797
}
27982798
IR_FOLD_NEXT;
@@ -2809,7 +2809,7 @@ IR_FOLD(SUB(ADD, C_ADDR))
28092809
val.u64 = ctx->ir_base[op1_insn->op2].val.u64 - op2_insn->val.u64;
28102810
opt--; /* SUB -> ADD */
28112811
op1 = op1_insn->op1;
2812-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2812+
op2 = ir_const(ctx, val, op2_insn->type);
28132813
IR_FOLD_RESTART;
28142814
}
28152815
IR_FOLD_NEXT;
@@ -2829,7 +2829,7 @@ IR_FOLD(SUB(ADD, C_I64))
28292829
opt--; /* SUB -> ADD */
28302830
}
28312831
op1 = op1_insn->op1;
2832-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2832+
op2 = ir_const(ctx, val, op2_insn->type);
28332833
IR_FOLD_RESTART;
28342834
}
28352835
IR_FOLD_NEXT;
@@ -2845,7 +2845,7 @@ IR_FOLD(SUB(C_ADDR, ADD))
28452845
/* c1 - (x + c2) => (c1 - c2) - x */
28462846
val.u64 = op1_insn->val.u64 - ctx->ir_base[op2_insn->op2].val.u64;
28472847
op2 = op2_insn->op1;
2848-
op1 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2848+
op1 = ir_const(ctx, val, op2_insn->type);
28492849
IR_FOLD_RESTART;
28502850
}
28512851
IR_FOLD_NEXT;
@@ -2860,7 +2860,7 @@ IR_FOLD(SUB(C_I64, ADD))
28602860
/* c1 - (x + c2) => (c1 - c2) - x */
28612861
val.i64 = op1_insn->val.u64 - ctx->ir_base[op2_insn->op2].val.u64;
28622862
op2 = op2_insn->op1;
2863-
op1 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2863+
op1 = ir_const(ctx, val, op2_insn->type);
28642864
IR_FOLD_RESTART;
28652865
}
28662866
IR_FOLD_NEXT;
@@ -2880,13 +2880,13 @@ IR_FOLD(SUB(SUB, C_ADDR))
28802880
opt--; /* SUB -> ADD */
28812881
}
28822882
op1 = op1_insn->op1;
2883-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2883+
op2 = ir_const(ctx, val, op2_insn->type);
28842884
IR_FOLD_RESTART;
28852885
} else if (IR_IS_CONST_REF(op1_insn->op1) && !IR_IS_SYM_CONST(ctx->ir_base[op1_insn->op1].op)) {
28862886
/* (c1 - x) - c2 => (c1 - c2) - x */
28872887
val.u64 = ctx->ir_base[op1_insn->op1].val.u64 - op2_insn->val.u64;
28882888
op2 = op1_insn->op2;
2889-
op1 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2889+
op1 = ir_const(ctx, val, op2_insn->type);
28902890
IR_FOLD_RESTART;
28912891
}
28922892
IR_FOLD_NEXT;
@@ -2905,13 +2905,13 @@ IR_FOLD(SUB(SUB, C_I64))
29052905
opt--; /* SUB -> ADD */
29062906
}
29072907
op1 = op1_insn->op1;
2908-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2908+
op2 = ir_const(ctx, val, op2_insn->type);
29092909
IR_FOLD_RESTART;
29102910
} else if (IR_IS_CONST_REF(op1_insn->op1) && !IR_IS_SYM_CONST(ctx->ir_base[op1_insn->op1].op)) {
29112911
/* (c1 - x) - c2 => (c1 - c2) - x */
29122912
val.i64 = ctx->ir_base[op1_insn->op1].val.u64 - op2_insn->val.u64;
29132913
op2 = op1_insn->op2;
2914-
op1 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2914+
op1 = ir_const(ctx, val, op2_insn->type);
29152915
IR_FOLD_RESTART;
29162916
}
29172917
IR_FOLD_NEXT;
@@ -2927,7 +2927,7 @@ IR_FOLD(SUB(C_ADDR, SUB))
29272927
/* c1 - (x - c2) => (c1 + c2) - x */
29282928
val.u64 = op1_insn->val.u64 + ctx->ir_base[op2_insn->op2].val.u64;
29292929
op2 = op2_insn->op1;
2930-
op1 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2930+
op1 = ir_const(ctx, val, op1_insn->op1);
29312931
IR_FOLD_RESTART;
29322932
} else if (IR_IS_CONST_REF(op2_insn->op1) && !IR_IS_SYM_CONST(ctx->ir_base[op2_insn->op1].op)) {
29332933
/* c1 - (c2 - x) => x + (c1 - c2) */
@@ -2937,7 +2937,7 @@ IR_FOLD(SUB(C_ADDR, SUB))
29372937
opt++; /* ADD -> SUB */
29382938
}
29392939
op1 = op2_insn->op2;
2940-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2940+
op2 = ir_const(ctx, val, op1_insn->type);
29412941
IR_FOLD_RESTART;
29422942
}
29432943
IR_FOLD_NEXT;
@@ -2952,7 +2952,7 @@ IR_FOLD(SUB(C_I64, SUB))
29522952
/* c1 - (x - c2) => (c1 + c2) - x */
29532953
val.i64 = op1_insn->val.u64 + ctx->ir_base[op2_insn->op2].val.u64;
29542954
op2 = op2_insn->op1;
2955-
op1 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2955+
op1 = ir_const(ctx, val, op1_insn->type);
29562956
IR_FOLD_RESTART;
29572957
} else if (IR_IS_CONST_REF(op2_insn->op1) && !IR_IS_SYM_CONST(ctx->ir_base[op2_insn->op1].op)) {
29582958
/* c1 - (c2 - x) => x + (c1 - c2) */
@@ -2962,7 +2962,7 @@ IR_FOLD(SUB(C_I64, SUB))
29622962
opt++; /* ADD -> SUB */
29632963
}
29642964
op1 = op2_insn->op2;
2965-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2965+
op2 = ir_const(ctx, val, op1_insn->type);
29662966
IR_FOLD_RESTART;
29672967
}
29682968
IR_FOLD_NEXT;
@@ -2978,7 +2978,7 @@ IR_FOLD(MUL(MUL, C_ADDR))
29782978
/* (x * c1) * c2 => x * (c1 * c2) */
29792979
val.u64 = ctx->ir_base[op1_insn->op2].val.u64 * op2_insn->val.u64;
29802980
op1 = op1_insn->op1;
2981-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2981+
op2 = ir_const(ctx, val, op2_insn->type);
29822982
IR_FOLD_RESTART;
29832983
}
29842984
IR_FOLD_NEXT;
@@ -2993,7 +2993,7 @@ IR_FOLD(MUL(MUL, C_I64))
29932993
/* (x * c1) * c2 => x * (c1 * c2) */
29942994
val.i64 = ctx->ir_base[op1_insn->op2].val.u64 * op2_insn->val.u64;
29952995
op1 = op1_insn->op1;
2996-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
2996+
op2 = ir_const(ctx, val, op2_insn->type);
29972997
IR_FOLD_RESTART;
29982998
}
29992999
IR_FOLD_NEXT;
@@ -3013,7 +3013,7 @@ IR_FOLD(AND(AND, C_ADDR))
30133013
/* (x & c1) & c2 => x & (c1 & c2) */
30143014
val.u64 = ctx->ir_base[op1_insn->op2].val.u64 & op2_insn->val.u64;
30153015
op1 = op1_insn->op1;
3016-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
3016+
op2 = ir_const(ctx, val, op2_insn->type);
30173017
IR_FOLD_RESTART;
30183018
}
30193019
IR_FOLD_NEXT;
@@ -3033,7 +3033,7 @@ IR_FOLD(OR(OR, C_ADDR))
30333033
/* (x | c1) | c2 => x | (c1 | c2) */
30343034
val.u64 = ctx->ir_base[op1_insn->op2].val.u64 | op2_insn->val.u64;
30353035
op1 = op1_insn->op1;
3036-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
3036+
op2 = ir_const(ctx, val, op2_insn->type);
30373037
IR_FOLD_RESTART;
30383038
}
30393039
IR_FOLD_NEXT;
@@ -3053,7 +3053,7 @@ IR_FOLD(XOR(XOR, C_ADDR))
30533053
/* (x ^ c1) ^ c2 => x ^ (c1 ^ c2) */
30543054
val.u64 = ctx->ir_base[op1_insn->op2].val.u64 ^ op2_insn->val.u64;
30553055
op1 = op1_insn->op1;
3056-
op2 = ir_const(ctx, val, IR_OPT_TYPE(opt));
3056+
op2 = ir_const(ctx, val, op2_insn->type);
30573057
IR_FOLD_RESTART;
30583058
}
30593059
IR_FOLD_NEXT;

ext/opcache/jit/ir/ir_gcm.c

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1307,14 +1307,17 @@ int ir_schedule(ir_ctx *ctx)
13071307
new_insn->proto = ir_strl(&new_ctx, proto, len);
13081308
}
13091309
} else if (new_insn->op == IR_FUNC) {
1310-
new_insn->val.u64 = ir_str(&new_ctx, ir_get_str(ctx, new_insn->val.name));
1310+
size_t len;
1311+
const char *name = ir_get_strl(ctx, new_insn->val.name, &len);
1312+
new_insn->val.u64 = ir_strl(&new_ctx, name, len);
13111313
if (new_insn->proto) {
1312-
size_t len;
13131314
const char *proto = ir_get_strl(ctx, new_insn->proto, &len);
13141315
new_insn->proto = ir_strl(&new_ctx, proto, len);
13151316
}
13161317
} else if (new_insn->op == IR_SYM || new_insn->op == IR_STR) {
1317-
new_insn->val.u64 = ir_str(&new_ctx, ir_get_str(ctx, new_insn->val.name));
1318+
size_t len;
1319+
const char *str = ir_get_strl(ctx, new_insn->val.name, &len);
1320+
new_insn->val.u64 = ir_strl(&new_ctx, str, len);
13181321
}
13191322
new_insn++;
13201323
ref++;
@@ -1339,16 +1342,19 @@ int ir_schedule(ir_ctx *ctx)
13391342
new_insn->proto = 0;
13401343
}
13411344
} else if (insn->op == IR_FUNC) {
1342-
new_insn->val.u64 = ir_str(&new_ctx, ir_get_str(ctx, insn->val.name));
1345+
size_t len;
1346+
const char *name = ir_get_strl(ctx, insn->val.name, &len);
1347+
new_insn->val.u64 = ir_strl(&new_ctx, name, len);
13431348
if (insn->proto) {
1344-
size_t len;
13451349
const char *proto = ir_get_strl(ctx, insn->proto, &len);
13461350
new_insn->proto = ir_strl(&new_ctx, proto, len);
13471351
} else {
13481352
new_insn->proto = 0;
13491353
}
13501354
} else if (insn->op == IR_SYM || insn->op == IR_STR) {
1351-
new_insn->val.u64 = ir_str(&new_ctx, ir_get_str(ctx, insn->val.name));
1355+
size_t len;
1356+
const char *str = ir_get_strl(ctx, insn->val.name, &len);
1357+
new_insn->val.u64 = ir_strl(&new_ctx, str, len);
13521358
} else {
13531359
new_insn->val.u64 = insn->val.u64;
13541360
}
@@ -1413,12 +1419,10 @@ int ir_schedule(ir_ctx *ctx)
14131419
break;
14141420
case 1:
14151421
new_insn->op1 = _xlat[insn->op1];
1416-
if (new_insn->op == IR_PARAM || insn->op == IR_VAR) {
1417-
new_insn->op2 = ir_str(&new_ctx, ir_get_str(ctx, insn->op2));
1418-
} else if (new_insn->op == IR_PROTO) {
1422+
if (new_insn->op == IR_PARAM || new_insn->op == IR_VAR || new_insn->op == IR_PROTO) {
14191423
size_t len;
1420-
const char *proto = ir_get_strl(ctx, insn->op2, &len);
1421-
new_insn->op2 = ir_strl(&new_ctx, proto, len);
1424+
const char *str = ir_get_strl(ctx, insn->op2, &len);
1425+
new_insn->op2 = ir_strl(&new_ctx, str, len);
14221426
} else {
14231427
new_insn->op2 = insn->op2;
14241428
}

ext/opcache/jit/ir/ir_sccp.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2995,6 +2995,7 @@ static bool ir_try_split_if(ir_ctx *ctx, ir_ref ref, ir_insn *insn, ir_bitqueue
29952995

29962996
end2->optx = IR_OPTX(IR_IF, IR_VOID, 2);
29972997
end2->op2 = cond->op3;
2998+
ir_bitqueue_add(worklist, end2_ref);
29982999

29993000
merge->optx = IR_OPTX(op, IR_VOID, 1);
30003001
merge->op1 = end2_ref;
@@ -3190,6 +3191,7 @@ static bool ir_try_split_if_cmp(ir_ctx *ctx, ir_ref ref, ir_insn *insn, ir_bitqu
31903191

31913192
end2->optx = IR_OPTX(IR_IF, IR_VOID, 2);
31923193
end2->op2 = insn->op2;
3194+
ir_bitqueue_add(worklist, end2_ref);
31933195

31943196
merge->optx = IR_OPTX(op, IR_VOID, 1);
31953197
merge->op1 = end2_ref;

0 commit comments

Comments
 (0)