[llvm] Revert "Revert "[WebAssembly] Mark extract.last.active as having invalid cost."" (PR #181342)

Benjamin Maxwell via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 13 01:50:27 PST 2026


https://github.com/MacDue created https://github.com/llvm/llvm-project/pull/181342

Reverts llvm/llvm-project#180942

Looks like something changed the cost model. Will investigate later.

>From d9e1f822fe4114d45018571c3c404da71048e3c3 Mon Sep 17 00:00:00 2001
From: Benjamin Maxwell <macdue at dueutil.tech>
Date: Fri, 13 Feb 2026 09:49:40 +0000
Subject: [PATCH] =?UTF-8?q?Revert=20"Revert=20"[WebAssembly]=20Mark=20extr?=
 =?UTF-8?q?act.last.active=20as=20having=20invalid=20cost=E2=80=A6"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This reverts commit 0f8325c9a9647e9c97bc81e368767fb21ee25ccf.
---
 .../WebAssemblyTargetTransformInfo.cpp        | 13 ++++++++++
 .../WebAssemblyTargetTransformInfo.h          |  4 +++
 .../WebAssembly/extract-last-active.ll        | 26 -------------------
 3 files changed, 17 insertions(+), 26 deletions(-)
 delete mode 100644 llvm/test/Analysis/CostModel/WebAssembly/extract-last-active.ll

diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetTransformInfo.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetTransformInfo.cpp
index f058d734bcb87..33498805112c0 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetTransformInfo.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetTransformInfo.cpp
@@ -453,6 +453,19 @@ InstructionCost WebAssemblyTTIImpl::getPartialReductionCost(
   return Invalid;
 }
 
+InstructionCost
+WebAssemblyTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
+                                          TTI::TargetCostKind CostKind) const {
+  switch (ICA.getID()) {
+  case Intrinsic::experimental_vector_extract_last_active:
+    // TODO: Remove once the intrinsic can be lowered without crashes.
+    return InstructionCost::getInvalid();
+  default:
+    break;
+  }
+  return BaseT::getIntrinsicInstrCost(ICA, CostKind);
+}
+
 TTI::ReductionShuffle WebAssemblyTTIImpl::getPreferredExpandedReductionShuffle(
     const IntrinsicInst *II) const {
 
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetTransformInfo.h b/llvm/lib/Target/WebAssembly/WebAssemblyTargetTransformInfo.h
index 9b6de65f17c7f..924249e051321 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetTransformInfo.h
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetTransformInfo.h
@@ -98,6 +98,10 @@ class WebAssemblyTTIImpl final : public BasicTTIImplBase<WebAssemblyTTIImpl> {
       TTI::TargetCostKind CostKind,
       std::optional<FastMathFlags> FMF) const override;
 
+  InstructionCost
+  getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
+                        TTI::TargetCostKind CostKind) const override;
+
   TTI::ReductionShuffle
   getPreferredExpandedReductionShuffle(const IntrinsicInst *II) const override;
 
diff --git a/llvm/test/Analysis/CostModel/WebAssembly/extract-last-active.ll b/llvm/test/Analysis/CostModel/WebAssembly/extract-last-active.ll
deleted file mode 100644
index 1feb9bae2de7a..0000000000000
--- a/llvm/test/Analysis/CostModel/WebAssembly/extract-last-active.ll
+++ /dev/null
@@ -1,26 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 6
-; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -S -mtriple=wasm32-unknown-unknown | FileCheck %s
-
-define void @extractions() {
-; CHECK-LABEL: 'extractions'
-; CHECK-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %v16i8 = call i8 @llvm.experimental.vector.extract.last.active.v16i8(<16 x i8> poison, <16 x i1> poison, i8 poison)
-; CHECK-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %v8i16 = call i16 @llvm.experimental.vector.extract.last.active.v8i16(<8 x i16> poison, <8 x i1> poison, i16 poison)
-; CHECK-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %v4i32 = call i32 @llvm.experimental.vector.extract.last.active.v4i32(<4 x i32> poison, <4 x i1> poison, i32 poison)
-; CHECK-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %v2i64 = call i64 @llvm.experimental.vector.extract.last.active.v2i64(<2 x i64> poison, <2 x i1> poison, i64 poison)
-; CHECK-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %v8f16 = call half @llvm.experimental.vector.extract.last.active.v8f16(<8 x half> poison, <8 x i1> poison, half poison)
-; CHECK-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %v8bf16 = call bfloat @llvm.experimental.vector.extract.last.active.v8bf16(<8 x bfloat> poison, <8 x i1> poison, bfloat poison)
-; CHECK-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %v4f32 = call float @llvm.experimental.vector.extract.last.active.v4f32(<4 x float> poison, <4 x i1> poison, float poison)
-; CHECK-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %v2f64 = call double @llvm.experimental.vector.extract.last.active.v2f64(<2 x double> poison, <2 x i1> poison, double poison)
-; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret void
-;
-  %v16i8 = call i8 @llvm.experimental.vector.extract.last.active.v16i8(<16 x i8> poison, <16 x i1> poison, i8 poison)
-  %v8i16 = call i16 @llvm.experimental.vector.extract.last.active.v8i16(<8 x i16> poison, <8 x i1> poison, i16 poison)
-  %v4i32 = call i32 @llvm.experimental.vector.extract.last.active.v4i32(<4 x i32> poison, <4 x i1> poison, i32 poison)
-  %v2i64 = call i64 @llvm.experimental.vector.extract.last.active.v2i64(<2 x i64> poison, <2 x i1> poison, i64 poison)
-  %v8f16 = call half @llvm.experimental.vector.extract.last.active.v8f16(<8 x half> poison, <8 x i1> poison, half poison)
-  %v8bf16 = call bfloat @llvm.experimental.vector.extract.last.active.v8bf16(<8 x bfloat> poison, <8 x i1> poison, bfloat poison)
-  %v4f32 = call float @llvm.experimental.vector.extract.last.active.v4f32(<4 x float> poison, <4 x i1> poison, float poison)
-  %v2f64 = call double @llvm.experimental.vector.extract.last.active.v2f64(<2 x double> poison, <2 x i1> poison, double poison)
-
-  ret void
-}



More information about the llvm-commits mailing list