Skip to content

Commit 0faa68b

Browse files
authored
QFMA/QFMS instructions (#2328)
Renames the SIMDBitselect class to SIMDTernary and adds the new {f32x4,f64x2}.qfm{a,s} ternary instructions. Because the SIMDBitselect class is no more, this is a backwards-incompatible change to the C interface. The new instructions are not yet used in the fuzzer because they are not yet implemented in V8. The corresponding LLVM commit is https://reviews.llvm.org/rL370556.
1 parent 445881f commit 0faa68b

33 files changed

Lines changed: 923 additions & 450 deletions

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ Current Trunk
2020
- `i32.wait` / `i64.wait` -> `i32.atomic.wait` / `i64.atomic.wait`
2121
- Binaryen.js: `flags` argument in `setMemory` function is removed.
2222
- `atomic.fence` instruction support is added.
23-
- wasm-emscripten-finalize: Don't realy on name section being present in the
23+
- wasm-emscripten-finalize: Don't rely on name section being present in the
2424
input. Use the exported names for things instead.
2525
- Added `mutable` parameter to BinaryenAddGlobalImport.
26+
- Replace BinaryenSIMDBitselect* with BinaryenSIMDTernary* in the C API and add
27+
qfma/qfms instructions.
2628

2729
v88
2830
---

build-js.sh

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ export_function "_BinaryenAtomicFenceId"
223223
export_function "_BinaryenSIMDExtractId"
224224
export_function "_BinaryenSIMDReplaceId"
225225
export_function "_BinaryenSIMDShuffleId"
226-
export_function "_BinaryenSIMDBitselectId"
226+
export_function "_BinaryenSIMDTernaryId"
227227
export_function "_BinaryenSIMDShiftId"
228228
export_function "_BinaryenMemoryInitId"
229229
export_function "_BinaryenDataDropId"
@@ -522,6 +522,10 @@ export_function "_BinaryenSubVecI64x2"
522522
export_function "_BinaryenAbsVecF32x4"
523523
export_function "_BinaryenNegVecF32x4"
524524
export_function "_BinaryenSqrtVecF32x4"
525+
export_function "_BinaryenQFMAVecF32x4"
526+
export_function "_BinaryenQFMSVecF32x4"
527+
export_function "_BinaryenQFMAVecF32x4"
528+
export_function "_BinaryenQFMSVecF32x4"
525529
export_function "_BinaryenAddVecF32x4"
526530
export_function "_BinaryenSubVecF32x4"
527531
export_function "_BinaryenMulVecF32x4"
@@ -531,6 +535,8 @@ export_function "_BinaryenMaxVecF32x4"
531535
export_function "_BinaryenAbsVecF64x2"
532536
export_function "_BinaryenNegVecF64x2"
533537
export_function "_BinaryenSqrtVecF64x2"
538+
export_function "_BinaryenQFMAVecF64x2"
539+
export_function "_BinaryenQFMSVecF64x2"
534540
export_function "_BinaryenAddVecF64x2"
535541
export_function "_BinaryenSubVecF64x2"
536542
export_function "_BinaryenMulVecF64x2"
@@ -582,7 +588,7 @@ export_function "_BinaryenAtomicFence"
582588
export_function "_BinaryenSIMDExtract"
583589
export_function "_BinaryenSIMDReplace"
584590
export_function "_BinaryenSIMDShuffle"
585-
export_function "_BinaryenSIMDBitselect"
591+
export_function "_BinaryenSIMDTernary"
586592
export_function "_BinaryenSIMDShift"
587593
export_function "_BinaryenMemoryInit"
588594
export_function "_BinaryenDataDrop"
@@ -744,10 +750,11 @@ export_function "_BinaryenSIMDShuffleGetLeft"
744750
export_function "_BinaryenSIMDShuffleGetRight"
745751
export_function "_BinaryenSIMDShuffleGetMask"
746752

747-
# 'SIMDBitselect' expression operations
748-
export_function "_BinaryenSIMDBitselectGetLeft"
749-
export_function "_BinaryenSIMDBitselectGetRight"
750-
export_function "_BinaryenSIMDBitselectGetCond"
753+
# 'SIMDTernary' expression operations
754+
export_function "_BinaryenSIMDTernaryGetOp"
755+
export_function "_BinaryenSIMDTernaryGetA"
756+
export_function "_BinaryenSIMDTernaryGetB"
757+
export_function "_BinaryenSIMDTernaryGetC"
751758

752759
# 'SIMDShift' expression operations
753760
export_function "_BinaryenSIMDShiftGetOp"

scripts/gen-s-parser.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@
355355
("v128.and", "makeBinary(s, BinaryOp::AndVec128)"),
356356
("v128.or", "makeBinary(s, BinaryOp::OrVec128)"),
357357
("v128.xor", "makeBinary(s, BinaryOp::XorVec128)"),
358-
("v128.bitselect", "makeSIMDBitselect(s)"),
358+
("v128.bitselect", "makeSIMDTernary(s, SIMDTernaryOp::Bitselect)"),
359359
("i8x16.neg", "makeUnary(s, UnaryOp::NegVecI8x16)"),
360360
("i8x16.any_true", "makeUnary(s, UnaryOp::AnyTrueVecI8x16)"),
361361
("i8x16.all_true", "makeUnary(s, UnaryOp::AllTrueVecI8x16)"),
@@ -402,6 +402,8 @@
402402
("f32x4.abs", "makeUnary(s, UnaryOp::AbsVecF32x4)"),
403403
("f32x4.neg", "makeUnary(s, UnaryOp::NegVecF32x4)"),
404404
("f32x4.sqrt", "makeUnary(s, UnaryOp::SqrtVecF32x4)"),
405+
("f32x4.qfma", "makeSIMDTernary(s, SIMDTernaryOp::QFMAF32x4)"),
406+
("f32x4.qfms", "makeSIMDTernary(s, SIMDTernaryOp::QFMSF32x4)"),
405407
("f32x4.add", "makeBinary(s, BinaryOp::AddVecF32x4)"),
406408
("f32x4.sub", "makeBinary(s, BinaryOp::SubVecF32x4)"),
407409
("f32x4.mul", "makeBinary(s, BinaryOp::MulVecF32x4)"),
@@ -411,6 +413,8 @@
411413
("f64x2.abs", "makeUnary(s, UnaryOp::AbsVecF64x2)"),
412414
("f64x2.neg", "makeUnary(s, UnaryOp::NegVecF64x2)"),
413415
("f64x2.sqrt", "makeUnary(s, UnaryOp::SqrtVecF64x2)"),
416+
("f64x2.qfma", "makeSIMDTernary(s, SIMDTernaryOp::QFMAF64x2)"),
417+
("f64x2.qfms", "makeSIMDTernary(s, SIMDTernaryOp::QFMSF64x2)"),
414418
("f64x2.add", "makeBinary(s, BinaryOp::AddVecF64x2)"),
415419
("f64x2.sub", "makeBinary(s, BinaryOp::SubVecF64x2)"),
416420
("f64x2.mul", "makeBinary(s, BinaryOp::MulVecF64x2)"),

src/binaryen-c.cpp

Lines changed: 43 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,8 @@ BinaryenExpressionId BinaryenSIMDReplaceId(void) {
343343
BinaryenExpressionId BinaryenSIMDShuffleId(void) {
344344
return Expression::Id::SIMDShuffleId;
345345
}
346-
BinaryenExpressionId BinaryenSIMDBitselectId(void) {
347-
return Expression::Id::SIMDBitselectId;
346+
BinaryenExpressionId BinaryenSIMDTernaryId(void) {
347+
return Expression::Id::SIMDTernaryId;
348348
}
349349
BinaryenExpressionId BinaryenSIMDShiftId(void) {
350350
return Expression::Id::SIMDShiftId;
@@ -790,6 +790,7 @@ BinaryenOp BinaryenNotVec128(void) { return NotVec128; }
790790
BinaryenOp BinaryenAndVec128(void) { return AndVec128; }
791791
BinaryenOp BinaryenOrVec128(void) { return OrVec128; }
792792
BinaryenOp BinaryenXorVec128(void) { return XorVec128; }
793+
BinaryenOp BinaryenBitselectVec128(void) { return Bitselect; }
793794
BinaryenOp BinaryenNegVecI8x16(void) { return NegVecI8x16; }
794795
BinaryenOp BinaryenAnyTrueVecI8x16(void) { return AnyTrueVecI8x16; }
795796
BinaryenOp BinaryenAllTrueVecI8x16(void) { return AllTrueVecI8x16; }
@@ -836,6 +837,8 @@ BinaryenOp BinaryenSubVecI64x2(void) { return SubVecI64x2; }
836837
BinaryenOp BinaryenAbsVecF32x4(void) { return AbsVecF32x4; }
837838
BinaryenOp BinaryenNegVecF32x4(void) { return NegVecF32x4; }
838839
BinaryenOp BinaryenSqrtVecF32x4(void) { return SqrtVecF32x4; }
840+
BinaryenOp BinaryenQFMAVecF32x4(void) { return QFMAF32x4; }
841+
BinaryenOp BinaryenQFMSVecF32x4(void) { return QFMSF32x4; }
839842
BinaryenOp BinaryenAddVecF32x4(void) { return AddVecF32x4; }
840843
BinaryenOp BinaryenSubVecF32x4(void) { return SubVecF32x4; }
841844
BinaryenOp BinaryenMulVecF32x4(void) { return MulVecF32x4; }
@@ -845,6 +848,8 @@ BinaryenOp BinaryenMaxVecF32x4(void) { return MaxVecF32x4; }
845848
BinaryenOp BinaryenAbsVecF64x2(void) { return AbsVecF64x2; }
846849
BinaryenOp BinaryenNegVecF64x2(void) { return NegVecF64x2; }
847850
BinaryenOp BinaryenSqrtVecF64x2(void) { return SqrtVecF64x2; }
851+
BinaryenOp BinaryenQFMAVecF64x2(void) { return QFMAF64x2; }
852+
BinaryenOp BinaryenQFMSVecF64x2(void) { return QFMSF64x2; }
848853
BinaryenOp BinaryenAddVecF64x2(void) { return AddVecF64x2; }
849854
BinaryenOp BinaryenSubVecF64x2(void) { return SubVecF64x2; }
850855
BinaryenOp BinaryenMulVecF64x2(void) { return MulVecF64x2; }
@@ -1532,15 +1537,17 @@ BinaryenExpressionRef BinaryenSIMDShuffle(BinaryenModuleRef module,
15321537
}
15331538
return static_cast<Expression*>(ret);
15341539
}
1535-
BinaryenExpressionRef BinaryenSIMDBitselect(BinaryenModuleRef module,
1536-
BinaryenExpressionRef left,
1537-
BinaryenExpressionRef right,
1538-
BinaryenExpressionRef cond) {
1539-
auto* ret = Builder(*(Module*)module)
1540-
.makeSIMDBitselect(
1541-
(Expression*)left, (Expression*)right, (Expression*)cond);
1540+
BinaryenExpressionRef BinaryenSIMDTernary(BinaryenModuleRef module,
1541+
BinaryenOp op,
1542+
BinaryenExpressionRef a,
1543+
BinaryenExpressionRef b,
1544+
BinaryenExpressionRef c) {
1545+
auto* ret =
1546+
Builder(*(Module*)module)
1547+
.makeSIMDTernary(
1548+
SIMDTernaryOp(op), (Expression*)a, (Expression*)b, (Expression*)c);
15421549
if (tracing) {
1543-
traceExpression(ret, "BinaryenSIMDBitselect", left, right, cond);
1550+
traceExpression(ret, "BinaryenSIMDTernary", op, a, b, c);
15441551
}
15451552
return static_cast<Expression*>(ret);
15461553
}
@@ -2652,37 +2659,46 @@ void BinaryenSIMDShuffleGetMask(BinaryenExpressionRef expr, uint8_t* mask) {
26522659
assert(expression->is<SIMDShuffle>());
26532660
memcpy(mask, static_cast<SIMDShuffle*>(expression)->mask.data(), 16);
26542661
}
2655-
// SIMDBitselect
2656-
BinaryenExpressionRef BinaryenSIMDBitselectGetLeft(BinaryenExpressionRef expr) {
2662+
// SIMDTernary
2663+
BinaryenOp BinaryenSIMDTernaryGetOp(BinaryenExpressionRef expr) {
26572664
if (tracing) {
2658-
std::cout << " BinaryenSIMDBitselectGetLeft(expressions["
2659-
<< expressions[expr] << "]);\n";
2665+
std::cout << " BinaryenSIMDTernaryOp(expressions[" << expressions[expr]
2666+
<< "]);\n";
26602667
}
26612668

26622669
auto* expression = (Expression*)expr;
2663-
assert(expression->is<SIMDBitselect>());
2664-
return static_cast<SIMDBitselect*>(expression)->left;
2670+
assert(expression->is<SIMDTernary>());
2671+
return static_cast<SIMDTernary*>(expression)->op;
26652672
}
2666-
BinaryenExpressionRef
2667-
BinaryenSIMDBitselectGetRight(BinaryenExpressionRef expr) {
2673+
BinaryenExpressionRef BinaryenSIMDTernaryGetA(BinaryenExpressionRef expr) {
26682674
if (tracing) {
2669-
std::cout << " BinaryenSIMDBitselectGetRight(expressions["
2670-
<< expressions[expr] << "]);\n";
2675+
std::cout << " BinaryenSIMDTernaryGetA(expressions[" << expressions[expr]
2676+
<< "]);\n";
26712677
}
26722678

26732679
auto* expression = (Expression*)expr;
2674-
assert(expression->is<SIMDBitselect>());
2675-
return static_cast<SIMDBitselect*>(expression)->right;
2680+
assert(expression->is<SIMDTernary>());
2681+
return static_cast<SIMDTernary*>(expression)->a;
26762682
}
2677-
BinaryenExpressionRef BinaryenSIMDBitselectGetCond(BinaryenExpressionRef expr) {
2683+
BinaryenExpressionRef BinaryenSIMDTernaryGetB(BinaryenExpressionRef expr) {
26782684
if (tracing) {
2679-
std::cout << " BinaryenSIMDBitselectGetCond(expressions["
2680-
<< expressions[expr] << "]);\n";
2685+
std::cout << " BinaryenSIMDTernaryGetB(expressions[" << expressions[expr]
2686+
<< "]);\n";
2687+
}
2688+
2689+
auto* expression = (Expression*)expr;
2690+
assert(expression->is<SIMDTernary>());
2691+
return static_cast<SIMDTernary*>(expression)->b;
2692+
}
2693+
BinaryenExpressionRef BinaryenSIMDTernaryGetC(BinaryenExpressionRef expr) {
2694+
if (tracing) {
2695+
std::cout << " BinaryenSIMDTernaryGetC(expressions[" << expressions[expr]
2696+
<< "]);\n";
26812697
}
26822698

26832699
auto* expression = (Expression*)expr;
2684-
assert(expression->is<SIMDBitselect>());
2685-
return static_cast<SIMDBitselect*>(expression)->cond;
2700+
assert(expression->is<SIMDTernary>());
2701+
return static_cast<SIMDTernary*>(expression)->c;
26862702
}
26872703
// SIMDShift
26882704
BinaryenOp BinaryenSIMDShiftGetOp(BinaryenExpressionRef expr) {

src/binaryen-c.h

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ BinaryenExpressionId BinaryenAtomicFenceId(void);
123123
BinaryenExpressionId BinaryenSIMDExtractId(void);
124124
BinaryenExpressionId BinaryenSIMDReplaceId(void);
125125
BinaryenExpressionId BinaryenSIMDShuffleId(void);
126-
BinaryenExpressionId BinaryenSIMDBitselectId(void);
126+
BinaryenExpressionId BinaryenSIMDTernaryId(void);
127127
BinaryenExpressionId BinaryenSIMDShiftId(void);
128128
BinaryenExpressionId BinaryenMemoryInitId(void);
129129
BinaryenExpressionId BinaryenDataDropId(void);
@@ -486,6 +486,8 @@ BinaryenOp BinaryenSubVecI64x2(void);
486486
BinaryenOp BinaryenAbsVecF32x4(void);
487487
BinaryenOp BinaryenNegVecF32x4(void);
488488
BinaryenOp BinaryenSqrtVecF32x4(void);
489+
BinaryenOp BinaryenQFMAVecF32x4(void);
490+
BinaryenOp BinaryenQFMSVecF32x4(void);
489491
BinaryenOp BinaryenAddVecF32x4(void);
490492
BinaryenOp BinaryenSubVecF32x4(void);
491493
BinaryenOp BinaryenMulVecF32x4(void);
@@ -495,6 +497,8 @@ BinaryenOp BinaryenMaxVecF32x4(void);
495497
BinaryenOp BinaryenAbsVecF64x2(void);
496498
BinaryenOp BinaryenNegVecF64x2(void);
497499
BinaryenOp BinaryenSqrtVecF64x2(void);
500+
BinaryenOp BinaryenQFMAVecF64x2(void);
501+
BinaryenOp BinaryenQFMSVecF64x2(void);
498502
BinaryenOp BinaryenAddVecF64x2(void);
499503
BinaryenOp BinaryenSubVecF64x2(void);
500504
BinaryenOp BinaryenMulVecF64x2(void);
@@ -687,10 +691,11 @@ BinaryenExpressionRef BinaryenSIMDShuffle(BinaryenModuleRef module,
687691
BinaryenExpressionRef left,
688692
BinaryenExpressionRef right,
689693
const uint8_t mask[16]);
690-
BinaryenExpressionRef BinaryenSIMDBitselect(BinaryenModuleRef module,
691-
BinaryenExpressionRef left,
692-
BinaryenExpressionRef right,
693-
BinaryenExpressionRef cond);
694+
BinaryenExpressionRef BinaryenSIMDTernary(BinaryenModuleRef module,
695+
BinaryenOp op,
696+
BinaryenExpressionRef a,
697+
BinaryenExpressionRef b,
698+
BinaryenExpressionRef c);
694699
BinaryenExpressionRef BinaryenSIMDShift(BinaryenModuleRef module,
695700
BinaryenOp op,
696701
BinaryenExpressionRef vec,
@@ -856,9 +861,10 @@ BinaryenExpressionRef BinaryenSIMDShuffleGetLeft(BinaryenExpressionRef expr);
856861
BinaryenExpressionRef BinaryenSIMDShuffleGetRight(BinaryenExpressionRef expr);
857862
void BinaryenSIMDShuffleGetMask(BinaryenExpressionRef expr, uint8_t* mask);
858863

859-
BinaryenExpressionRef BinaryenSIMDBitselectGetLeft(BinaryenExpressionRef expr);
860-
BinaryenExpressionRef BinaryenSIMDBitselectGetRight(BinaryenExpressionRef expr);
861-
BinaryenExpressionRef BinaryenSIMDBitselectGetCond(BinaryenExpressionRef expr);
864+
BinaryenOp BinaryenSIMDTernaryGetOp(BinaryenExpressionRef expr);
865+
BinaryenExpressionRef BinaryenSIMDTernaryGetA(BinaryenExpressionRef expr);
866+
BinaryenExpressionRef BinaryenSIMDTernaryGetB(BinaryenExpressionRef expr);
867+
BinaryenExpressionRef BinaryenSIMDTernaryGetC(BinaryenExpressionRef expr);
862868

863869
BinaryenOp BinaryenSIMDShiftGetOp(BinaryenExpressionRef expr);
864870
BinaryenExpressionRef BinaryenSIMDShiftGetVec(BinaryenExpressionRef expr);

src/gen-s-parser.inc

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,17 @@ switch (op[0]) {
338338
default: goto parse_error;
339339
}
340340
}
341+
case 'q': {
342+
switch (op[9]) {
343+
case 'a':
344+
if (strcmp(op, "f32x4.qfma") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::QFMAF32x4); }
345+
goto parse_error;
346+
case 's':
347+
if (strcmp(op, "f32x4.qfms") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::QFMSF32x4); }
348+
goto parse_error;
349+
default: goto parse_error;
350+
}
351+
}
341352
case 'r':
342353
if (strcmp(op, "f32x4.replace_lane") == 0) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF32x4, 4); }
343354
goto parse_error;
@@ -608,6 +619,17 @@ switch (op[0]) {
608619
default: goto parse_error;
609620
}
610621
}
622+
case 'q': {
623+
switch (op[9]) {
624+
case 'a':
625+
if (strcmp(op, "f64x2.qfma") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::QFMAF64x2); }
626+
goto parse_error;
627+
case 's':
628+
if (strcmp(op, "f64x2.qfms") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::QFMSF64x2); }
629+
goto parse_error;
630+
default: goto parse_error;
631+
}
632+
}
611633
case 'r':
612634
if (strcmp(op, "f64x2.replace_lane") == 0) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF64x2, 2); }
613635
goto parse_error;
@@ -2315,7 +2337,7 @@ switch (op[0]) {
23152337
if (strcmp(op, "v128.and") == 0) { return makeBinary(s, BinaryOp::AndVec128); }
23162338
goto parse_error;
23172339
case 'b':
2318-
if (strcmp(op, "v128.bitselect") == 0) { return makeSIMDBitselect(s); }
2340+
if (strcmp(op, "v128.bitselect") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::Bitselect); }
23192341
goto parse_error;
23202342
case 'c':
23212343
if (strcmp(op, "v128.const") == 0) { return makeConst(s, v128); }

src/ir/ExpressionAnalyzer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ template<typename T> void visitImmediates(Expression* curr, T& visitor) {
194194
visitor.visitInt(x);
195195
}
196196
}
197-
void visitSIMDBitselect(SIMDBitselect* curr) {}
197+
void visitSIMDTernary(SIMDTernary* curr) { visitor.visitInt(curr->op); }
198198
void visitSIMDShift(SIMDShift* curr) { visitor.visitInt(curr->op); }
199199
void visitMemoryInit(MemoryInit* curr) {
200200
visitor.visitIndex(curr->segment);

src/ir/ExpressionManipulator.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,9 @@ flexibleCopy(Expression* original, Module& wasm, CustomCopier custom) {
171171
return builder.makeSIMDShuffle(
172172
copy(curr->left), copy(curr->right), curr->mask);
173173
}
174-
Expression* visitSIMDBitselect(SIMDBitselect* curr) {
175-
return builder.makeSIMDBitselect(
176-
copy(curr->left), copy(curr->right), copy(curr->cond));
174+
Expression* visitSIMDTernary(SIMDTernary* curr) {
175+
return builder.makeSIMDTernary(
176+
curr->op, copy(curr->a), copy(curr->b), copy(curr->c));
177177
}
178178
Expression* visitSIMDShift(SIMDShift* curr) {
179179
return builder.makeSIMDShift(

src/ir/ReFinalize.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ void ReFinalize::visitAtomicFence(AtomicFence* curr) { curr->finalize(); }
145145
void ReFinalize::visitSIMDExtract(SIMDExtract* curr) { curr->finalize(); }
146146
void ReFinalize::visitSIMDReplace(SIMDReplace* curr) { curr->finalize(); }
147147
void ReFinalize::visitSIMDShuffle(SIMDShuffle* curr) { curr->finalize(); }
148-
void ReFinalize::visitSIMDBitselect(SIMDBitselect* curr) { curr->finalize(); }
148+
void ReFinalize::visitSIMDTernary(SIMDTernary* curr) { curr->finalize(); }
149149
void ReFinalize::visitSIMDShift(SIMDShift* curr) { curr->finalize(); }
150150
void ReFinalize::visitMemoryInit(MemoryInit* curr) { curr->finalize(); }
151151
void ReFinalize::visitDataDrop(DataDrop* curr) { curr->finalize(); }

src/ir/effects.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ struct EffectAnalyzer
305305
void visitSIMDExtract(SIMDExtract* curr) {}
306306
void visitSIMDReplace(SIMDReplace* curr) {}
307307
void visitSIMDShuffle(SIMDShuffle* curr) {}
308-
void visitSIMDBitselect(SIMDBitselect* curr) {}
308+
void visitSIMDTernary(SIMDTernary* curr) {}
309309
void visitSIMDShift(SIMDShift* curr) {}
310310
void visitMemoryInit(MemoryInit* curr) {
311311
writesMemory = true;

0 commit comments

Comments
 (0)