[llvm] 0fcc6f7 - [AArch64] Implement getIntrinsicInstrCost, handle min/max intrinsics.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 23 03:44:11 PDT 2020
Author: Florian Hahn
Date: 2020-10-23T11:32:42+01:00
New Revision: 0fcc6f7a7607b3bf80e67b9f9a07b608724ee031
URL: https://github.com/llvm/llvm-project/commit/0fcc6f7a7607b3bf80e67b9f9a07b608724ee031
DIFF: https://github.com/llvm/llvm-project/commit/0fcc6f7a7607b3bf80e67b9f9a07b608724ee031.diff
LOG: [AArch64] Implement getIntrinsicInstrCost, handle min/max intrinsics.
This patch adds a specialized implementation of getIntrinsicInstrCost
and add initial cost-modeling for min/max vector intrinsics.
AArch64 NEON support umin/smin/umax/smax for vectors
<8 x i8>, <16 x i8>, <4 x i16>, <8 x i16>, <2 x i32> and <4 x i32>.
Notably, it does not support vectors with i64 elements.
This change by itself should have very little impact on codegen, but in
follow-up patches I plan to teach the vectorizers to consider using
those intrinsics on platforms where it is profitable, e.g. because there
is no general 'select'-like instruction.
The current cost returned should be better for throughput, latency and size.
Reviewed By: dmgreen
Differential Revision: https://reviews.llvm.org/D89953
Added:
Modified:
llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h
llvm/test/Analysis/CostModel/AArch64/min-max.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
index 347f4e86c3a6..1a75f79dee2d 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
@@ -210,6 +210,28 @@ AArch64TTIImpl::getPopcntSupport(unsigned TyWidth) {
return TTI::PSK_Software;
}
+unsigned
+AArch64TTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
+ TTI::TargetCostKind CostKind) {
+ auto *RetTy = ICA.getReturnType();
+ switch (ICA.getID()) {
+ case Intrinsic::smin:
+ case Intrinsic::umin:
+ case Intrinsic::smax:
+ case Intrinsic::umax: {
+ static const auto ValidMinMaxTys = {MVT::v8i8, MVT::v16i8, MVT::v4i16,
+ MVT::v8i16, MVT::v2i32, MVT::v4i32};
+ auto LT = TLI->getTypeLegalizationCost(DL, RetTy);
+ if (any_of(ValidMinMaxTys, [<](MVT M) { return M == LT.second; }))
+ return LT.first;
+ break;
+ }
+ default:
+ break;
+ }
+ return BaseT::getIntrinsicInstrCost(ICA, CostKind);
+}
+
bool AArch64TTIImpl::isWideningInstruction(Type *DstTy, unsigned Opcode,
ArrayRef<const Value *> Args) {
diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h
index c585d13d1135..121d2e813d25 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h
+++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h
@@ -97,6 +97,9 @@ class AArch64TTIImpl : public BasicTTIImplBase<AArch64TTIImpl> {
return 31;
}
+ unsigned getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
+ TTI::TargetCostKind CostKind);
+
unsigned getRegisterBitWidth(bool Vector) const {
if (Vector) {
if (ST->hasSVE())
diff --git a/llvm/test/Analysis/CostModel/AArch64/min-max.ll b/llvm/test/Analysis/CostModel/AArch64/min-max.ll
index 231bcc1a3865..f47fc1c49ef5 100644
--- a/llvm/test/Analysis/CostModel/AArch64/min-max.ll
+++ b/llvm/test/Analysis/CostModel/AArch64/min-max.ll
@@ -2,7 +2,7 @@
; RUN: llc < %s -mtriple=aarch64--linux-gnu | FileCheck %s --check-prefix=CODE
; COST-LABEL: umin.v8i8
-; COST-NEXT: Cost Model: Found an estimated cost of 30 for instruction: %res = call <8 x i8> @llvm.umin.v8i8(<8 x i8> %v0, <8 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <8 x i8> @llvm.umin.v8i8(<8 x i8> %v0, <8 x i8> %v1)
; CODE-LABEL: umin.v8i8
; CODE: bb.0
@@ -16,7 +16,7 @@ define <8 x i8> @umin.v8i8(<8 x i8> %v0, <8 x i8> %v1) {
}
; COST-LABEL: umin.v9i8
-; COST-NEXT: Cost Model: Found an estimated cost of 34 for instruction: %res = call <9 x i8> @llvm.umin.v9i8(<9 x i8> %v0, <9 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <9 x i8> @llvm.umin.v9i8(<9 x i8> %v0, <9 x i8> %v1)
; CODE-LABEL: umin.v9i8
; CODE: bb.0
@@ -30,7 +30,7 @@ define <9 x i8> @umin.v9i8(<9 x i8> %v0, <9 x i8> %v1) {
}
; COST-LABEL: umin.v4i16
-; COST-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %res = call <4 x i16> @llvm.umin.v4i16(<4 x i16> %v0, <4 x i16> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <4 x i16> @llvm.umin.v4i16(<4 x i16> %v0, <4 x i16> %v1)
; CODE-LABEL: umin.v4i16
; CODE: bb.0
@@ -44,7 +44,7 @@ define <4 x i16> @umin.v4i16(<4 x i16> %v0, <4 x i16> %v1) {
}
; COST-LABEL: umin.v16i8
-; COST-NEXT: Cost Model: Found an estimated cost of 62 for instruction: %res = call <16 x i8> @llvm.umin.v16i8(<16 x i8> %v0, <16 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <16 x i8> @llvm.umin.v16i8(<16 x i8> %v0, <16 x i8> %v1)
; CODE-LABEL: umin.v16i8
; CODE: bb.0
@@ -58,7 +58,7 @@ define <16 x i8> @umin.v16i8(<16 x i8> %v0, <16 x i8> %v1) {
}
; COST-LABEL: umin.v8i16
-; COST-NEXT: Cost Model: Found an estimated cost of 30 for instruction: %res = call <8 x i16> @llvm.umin.v8i16(<8 x i16> %v0, <8 x i16> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <8 x i16> @llvm.umin.v8i16(<8 x i16> %v0, <8 x i16> %v1)
; CODE-LABEL: umin.v8i16
; CODE: bb.0
@@ -72,7 +72,7 @@ define <8 x i16> @umin.v8i16(<8 x i16> %v0, <8 x i16> %v1) {
}
; COST-LABEL: umin.v2i32
-; COST-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %res = call <2 x i32> @llvm.umin.v2i32(<2 x i32> %v0, <2 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <2 x i32> @llvm.umin.v2i32(<2 x i32> %v0, <2 x i32> %v1)
; CODE-LABEL: umin.v2i32
; CODE: bb.0
@@ -86,7 +86,7 @@ define <2 x i32> @umin.v2i32(<2 x i32> %v0, <2 x i32> %v1) {
}
; COST-LABEL: umin.v4i32
-; COST-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %res = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %v0, <4 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %v0, <4 x i32> %v1)
; CODE-LABEL: umin.v4i32
; CODE: bb.0
@@ -100,7 +100,7 @@ define <4 x i32> @umin.v4i32(<4 x i32> %v0, <4 x i32> %v1) {
}
; COST-LABEL: umin.v8i32
-; COST-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %res = call <8 x i32> @llvm.umin.v8i32(<8 x i32> %v0, <8 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %res = call <8 x i32> @llvm.umin.v8i32(<8 x i32> %v0, <8 x i32> %v1)
; CODE-LABEL: umin.v8i32
; CODE: bb.0
@@ -129,7 +129,7 @@ define <2 x i64> @umin.v2i64(<2 x i64> %v0, <2 x i64> %v1) {
}
; COST-LABEL: smin.v8i8
-; COST-NEXT: Cost Model: Found an estimated cost of 30 for instruction: %res = call <8 x i8> @llvm.smin.v8i8(<8 x i8> %v0, <8 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <8 x i8> @llvm.smin.v8i8(<8 x i8> %v0, <8 x i8> %v1)
; CODE-LABEL: smin.v8i8
; CODE: bb.0
@@ -143,7 +143,7 @@ define <8 x i8> @smin.v8i8(<8 x i8> %v0, <8 x i8> %v1) {
}
; COST-LABEL: smin.v9i8
-; COST-NEXT: Cost Model: Found an estimated cost of 34 for instruction: %res = call <9 x i8> @llvm.smin.v9i8(<9 x i8> %v0, <9 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <9 x i8> @llvm.smin.v9i8(<9 x i8> %v0, <9 x i8> %v1)
; CODE-LABEL: smin.v9i8
; CODE: bb.0
@@ -157,7 +157,7 @@ define <9 x i8> @smin.v9i8(<9 x i8> %v0, <9 x i8> %v1) {
}
; COST-LABEL: smin.v16i8
-; COST-NEXT: Cost Model: Found an estimated cost of 62 for instruction: %res = call <16 x i8> @llvm.smin.v16i8(<16 x i8> %v0, <16 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <16 x i8> @llvm.smin.v16i8(<16 x i8> %v0, <16 x i8> %v1)
; CODE-LABEL: smin.v16i8
; CODE: bb.0
@@ -171,7 +171,7 @@ define <16 x i8> @smin.v16i8(<16 x i8> %v0, <16 x i8> %v1) {
}
; COST-LABEL: smin.v4i16
-; COST-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %res = call <4 x i16> @llvm.smin.v4i16(<4 x i16> %v0, <4 x i16> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <4 x i16> @llvm.smin.v4i16(<4 x i16> %v0, <4 x i16> %v1)
; CODE-LABEL: smin.v4i16
; CODE: bb.0
@@ -185,7 +185,7 @@ define <4 x i16> @smin.v4i16(<4 x i16> %v0, <4 x i16> %v1) {
}
; COST-LABEL: smin.v8i16
-; COST-NEXT: Cost Model: Found an estimated cost of 30 for instruction: %res = call <8 x i16> @llvm.smin.v8i16(<8 x i16> %v0, <8 x i16> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <8 x i16> @llvm.smin.v8i16(<8 x i16> %v0, <8 x i16> %v1)
; CODE-LABEL: smin.v8i16
; CODE: bb.0
@@ -199,7 +199,7 @@ define <8 x i16> @smin.v8i16(<8 x i16> %v0, <8 x i16> %v1) {
}
; COST-LABEL: smin.v2i32
-; COST-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %res = call <2 x i32> @llvm.smin.v2i32(<2 x i32> %v0, <2 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <2 x i32> @llvm.smin.v2i32(<2 x i32> %v0, <2 x i32> %v1)
; CODE-LABEL: smin.v2i32
; CODE: bb.0
@@ -213,7 +213,7 @@ define <2 x i32> @smin.v2i32(<2 x i32> %v0, <2 x i32> %v1) {
}
; COST-LABEL: smin.v4i32
-; COST-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %res = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %v0, <4 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %v0, <4 x i32> %v1)
; CODE-LABEL: smin.v4i32
; CODE: bb.0
@@ -227,7 +227,7 @@ define <4 x i32> @smin.v4i32(<4 x i32> %v0, <4 x i32> %v1) {
}
; COST-LABEL: smin.v8i32
-; COST-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %res = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %v0, <8 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %res = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %v0, <8 x i32> %v1)
; CODE-LABEL: smin.v8i32
; CODE: bb.0
@@ -256,7 +256,7 @@ define <2 x i64> @smin.v2i64(<2 x i64> %v0, <2 x i64> %v1) {
}
; COST-LABEL: umax.v8i8
-; COST-NEXT: Cost Model: Found an estimated cost of 30 for instruction: %res = call <8 x i8> @llvm.umax.v8i8(<8 x i8> %v0, <8 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <8 x i8> @llvm.umax.v8i8(<8 x i8> %v0, <8 x i8> %v1)
; CODE-LABEL: umax.v8i8
; CODE: bb.0
@@ -270,7 +270,7 @@ define <8 x i8> @umax.v8i8(<8 x i8> %v0, <8 x i8> %v1) {
}
; COST-LABEL: umax.v9i8
-; COST-NEXT: Cost Model: Found an estimated cost of 34 for instruction: %res = call <9 x i8> @llvm.umax.v9i8(<9 x i8> %v0, <9 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <9 x i8> @llvm.umax.v9i8(<9 x i8> %v0, <9 x i8> %v1)
; CODE-LABEL: umax.v9i8
; CODE: bb.0
@@ -283,9 +283,8 @@ define <9 x i8> @umax.v9i8(<9 x i8> %v0, <9 x i8> %v1) {
ret <9 x i8> %res
}
-
; COST-LABEL: umax.v16i8
-; COST-NEXT: Cost Model: Found an estimated cost of 62 for instruction: %res = call <16 x i8> @llvm.umax.v16i8(<16 x i8> %v0, <16 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <16 x i8> @llvm.umax.v16i8(<16 x i8> %v0, <16 x i8> %v1)
; CODE-LABEL: umax.v16i8
; CODE: bb.0
@@ -299,7 +298,7 @@ define <16 x i8> @umax.v16i8(<16 x i8> %v0, <16 x i8> %v1) {
}
; COST-LABEL: umax.v4i16
-; COST-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %res = call <4 x i16> @llvm.umax.v4i16(<4 x i16> %v0, <4 x i16> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <4 x i16> @llvm.umax.v4i16(<4 x i16> %v0, <4 x i16> %v1)
; CODE-LABEL: umax.v4i16
; CODE: bb.0
@@ -313,7 +312,7 @@ define <4 x i16> @umax.v4i16(<4 x i16> %v0, <4 x i16> %v1) {
}
; COST-LABEL: umax.v8i16
-; COST-NEXT: Cost Model: Found an estimated cost of 30 for instruction: %res = call <8 x i16> @llvm.umax.v8i16(<8 x i16> %v0, <8 x i16> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <8 x i16> @llvm.umax.v8i16(<8 x i16> %v0, <8 x i16> %v1)
; CODE-LABEL: umax.v8i16
; CODE: bb.0
@@ -327,7 +326,7 @@ define <8 x i16> @umax.v8i16(<8 x i16> %v0, <8 x i16> %v1) {
}
; COST-LABEL: umax.v2i32
-; COST-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %res = call <2 x i32> @llvm.umax.v2i32(<2 x i32> %v0, <2 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <2 x i32> @llvm.umax.v2i32(<2 x i32> %v0, <2 x i32> %v1)
; CODE-LABEL: umax.v2i32
; CODE: bb.0
@@ -341,7 +340,7 @@ define <2 x i32> @umax.v2i32(<2 x i32> %v0, <2 x i32> %v1) {
}
; COST-LABEL: umax.v4i32
-; COST-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %res = call <4 x i32> @llvm.umax.v4i32(<4 x i32> %v0, <4 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <4 x i32> @llvm.umax.v4i32(<4 x i32> %v0, <4 x i32> %v1)
; CODE-LABEL: umax.v4i32
; CODE: bb.0
@@ -355,7 +354,7 @@ define <4 x i32> @umax.v4i32(<4 x i32> %v0, <4 x i32> %v1) {
}
; COST-LABEL: umax.v8i32
-; COST-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %res = call <8 x i32> @llvm.umax.v8i32(<8 x i32> %v0, <8 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %res = call <8 x i32> @llvm.umax.v8i32(<8 x i32> %v0, <8 x i32> %v1)
; CODE-LABEL: umax.v8i32
; CODE: bb.0
@@ -384,7 +383,7 @@ define <2 x i64> @umax.v2i64(<2 x i64> %v0, <2 x i64> %v1) {
}
; COST-LABEL: smax.v8i8
-; COST-NEXT: Cost Model: Found an estimated cost of 30 for instruction: %res = call <8 x i8> @llvm.smax.v8i8(<8 x i8> %v0, <8 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <8 x i8> @llvm.smax.v8i8(<8 x i8> %v0, <8 x i8> %v1)
; CODE-LABEL: smax.v8i8
; CODE: bb.0
@@ -398,7 +397,7 @@ define <8 x i8> @smax.v8i8(<8 x i8> %v0, <8 x i8> %v1) {
}
; COST-LABEL: smax.v9i8
-; COST-NEXT: Cost Model: Found an estimated cost of 34 for instruction: %res = call <9 x i8> @llvm.smax.v9i8(<9 x i8> %v0, <9 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <9 x i8> @llvm.smax.v9i8(<9 x i8> %v0, <9 x i8> %v1)
; CODE-LABEL: smax.v9i8
; CODE: bb.0
@@ -412,7 +411,7 @@ define <9 x i8> @smax.v9i8(<9 x i8> %v0, <9 x i8> %v1) {
}
; COST-LABEL: smax.v16i8
-; COST-NEXT: Cost Model: Found an estimated cost of 62 for instruction: %res = call <16 x i8> @llvm.smax.v16i8(<16 x i8> %v0, <16 x i8> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <16 x i8> @llvm.smax.v16i8(<16 x i8> %v0, <16 x i8> %v1)
; CODE-LABEL: smax.v16i8
; CODE: bb.0
@@ -426,7 +425,7 @@ define <16 x i8> @smax.v16i8(<16 x i8> %v0, <16 x i8> %v1) {
}
; COST-LABEL: smax.v4i16
-; COST-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %res = call <4 x i16> @llvm.smax.v4i16(<4 x i16> %v0, <4 x i16> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <4 x i16> @llvm.smax.v4i16(<4 x i16> %v0, <4 x i16> %v1)
; CODE-LABEL: smax.v4i16
; CODE: bb.0
@@ -440,7 +439,7 @@ define <4 x i16> @smax.v4i16(<4 x i16> %v0, <4 x i16> %v1) {
}
; COST-LABEL: smax.v8i16
-; COST-NEXT: Cost Model: Found an estimated cost of 30 for instruction: %res = call <8 x i16> @llvm.smax.v8i16(<8 x i16> %v0, <8 x i16> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <8 x i16> @llvm.smax.v8i16(<8 x i16> %v0, <8 x i16> %v1)
; CODE-LABEL: smax.v8i16
; CODE: bb.0
@@ -454,7 +453,7 @@ define <8 x i16> @smax.v8i16(<8 x i16> %v0, <8 x i16> %v1) {
}
; COST-LABEL: smax.v2i32
-; COST-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %res = call <2 x i32> @llvm.smax.v2i32(<2 x i32> %v0, <2 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <2 x i32> @llvm.smax.v2i32(<2 x i32> %v0, <2 x i32> %v1)
; CODE-LABEL: smax.v2i32
; CODE: bb.0
@@ -468,7 +467,7 @@ define <2 x i32> @smax.v2i32(<2 x i32> %v0, <2 x i32> %v1) {
}
; COST-LABEL: smax.v4i32
-; COST-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %res = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %v0, <4 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %res = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %v0, <4 x i32> %v1)
; CODE-LABEL: smax.v4i32
; CODE: bb.0
@@ -482,7 +481,7 @@ define <4 x i32> @smax.v4i32(<4 x i32> %v0, <4 x i32> %v1) {
}
; COST-LABEL: smax.v8i32
-; COST-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %res = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %v0, <8 x i32> %v1)
+; COST-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %res = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %v0, <8 x i32> %v1)
; CODE-LABEL: smax.v8i32
; CODE: bb.0
More information about the llvm-commits
mailing list